From 93d89c2b5e8497365be152fb53cb6cd4c5764d34 Mon Sep 17 00:00:00 2001
From: xleroy <xleroy@fca1b0fc-160b-0410-b1d3-a4f43f01ea2e>
Date: Wed, 3 Mar 2010 10:25:25 +0000
Subject: [PATCH] Getting rid of CIL

git-svn-id: https://yquem.inria.fr/compcert/svn/compcert/trunk@1270 fca1b0fc-160b-0410-b1d3-a4f43f01ea2e
---
 cfrontend/Cil2Csyntax.ml                      | 1283 ----
 cil/INSTALL                                   |   41 -
 cil/LICENSE                                   |   35 -
 cil/Makefile.gcc                              |   75 -
 cil/Makefile.in                               |  656 --
 cil/Makefile.msvc                             |   42 -
 cil/README                                    |    2 -
 cil/bin/CilConfig.pm.in                       |    6 -
 cil/bin/cilly                                 |  152 -
 cil/bin/cilly.bat.in                          |    1 -
 cil/bin/patcher                               |  605 --
 cil/bin/patcher.bat.in                        |    1 -
 cil/bin/teetwo                                |   36 -
 cil/bin/test-bad                              |  202 -
 cil/cil.spec                                  |   90 -
 cil/cil.spec.in                               |   90 -
 cil/config.guess                              | 1497 ----
 cil/config.h.in                               |   23 -
 cil/config.sub                                | 1469 ----
 cil/configure                                 | 5697 ---------------
 cil/configure.in                              |  600 --
 cil/doc/CIL-API.pdf                           |  Bin 226152 -> 0 bytes
 cil/doc/CIL.pdf                               |  Bin 269328 -> 0 bytes
 cil/doc/api/Alpha.html                        |   79 -
 cil/doc/api/Cfg.html                          |   69 -
 cil/doc/api/Cil.cilPrinter.html               |  118 -
 cil/doc/api/Cil.cilVisitor.html               |  125 -
 cil/doc/api/Cil.defaultCilPrinterClass.html   |   36 -
 cil/doc/api/Cil.html                          | 3337 ---------
 cil/doc/api/Cil.nopCilVisitor.html            |   35 -
 cil/doc/api/Cil.plainCilPrinterClass.html     |   36 -
 cil/doc/api/Cillower.html                     |   40 -
 cil/doc/api/Clist.html                        |  118 -
 cil/doc/api/Dataflow.BackwardsDataFlow.html   |   54 -
 cil/doc/api/Dataflow.BackwardsTransfer.html   |   83 -
 cil/doc/api/Dataflow.ForwardsDataFlow.html    |   53 -
 cil/doc/api/Dataflow.ForwardsTransfer.html    |   88 -
 cil/doc/api/Dataflow.html                     |  114 -
 cil/doc/api/Dominators.html                   |   58 -
 cil/doc/api/Errormsg.html                     |  141 -
 cil/doc/api/Formatcil.html                    |   84 -
 cil/doc/api/Pretty.MakeMapPrinter.html        |   63 -
 cil/doc/api/Pretty.MakeSetPrinter.html        |   63 -
 cil/doc/api/Pretty.html                       |  268 -
 cil/doc/api/Stats.html                        |   69 -
 cil/doc/api/index.html                        |   83 -
 cil/doc/api/index_attributes.html             |   30 -
 cil/doc/api/index_class_types.html            |   41 -
 cil/doc/api/index_classes.html                |   46 -
 cil/doc/api/index_exceptions.html             |   53 -
 cil/doc/api/index_methods.html                |  228 -
 cil/doc/api/index_module_types.html           |   36 -
 cil/doc/api/index_modules.html                |  108 -
 cil/doc/api/index_types.html                  |  271 -
 cil/doc/api/index_values.html                 | 1964 -----
 cil/doc/api/style.css                         |   32 -
 cil/doc/api/type_Alpha.html                   |   43 -
 cil/doc/api/type_Cfg.html                     |   35 -
 cil/doc/api/type_Cil.cilPrinter.html          |   48 -
 cil/doc/api/type_Cil.cilVisitor.html          |   43 -
 .../api/type_Cil.defaultCilPrinterClass.html  |   25 -
 cil/doc/api/type_Cil.html                     |  622 --
 cil/doc/api/type_Cil.nopCilVisitor.html       |   25 -
 .../api/type_Cil.plainCilPrinterClass.html    |   25 -
 cil/doc/api/type_Cillower.html                |   25 -
 cil/doc/api/type_Clist.html                   |   44 -
 .../api/type_Dataflow.BackwardsDataFlow.html  |   26 -
 .../api/type_Dataflow.BackwardsTransfer.html  |   44 -
 .../api/type_Dataflow.ForwardsDataFlow.html   |   25 -
 .../api/type_Dataflow.ForwardsTransfer.html   |   51 -
 cil/doc/api/type_Dataflow.html                |   85 -
 cil/doc/api/type_Dominators.html              |   32 -
 cil/doc/api/type_Errormsg.html                |   64 -
 cil/doc/api/type_Formatcil.html               |   45 -
 cil/doc/api/type_Pretty.MakeMapPrinter.html   |   42 -
 cil/doc/api/type_Pretty.MakeSetPrinter.html   |   40 -
 cil/doc/api/type_Pretty.html                  |  111 -
 cil/doc/api/type_Stats.html                   |   36 -
 cil/doc/changes.html                          |  486 --
 cil/doc/cil.css                               |   10 -
 cil/doc/cil.html                              | 3532 ---------
 cil/doc/cil.version.tex                       |    2 -
 cil/doc/cil001.html                           |  134 -
 cil/doc/cil002.html                           |   98 -
 cil/doc/cil003.html                           |  187 -
 cil/doc/cil004.html                           |  350 -
 cil/doc/cil006.html                           |  627 --
 cil/doc/cil007.html                           |  279 -
 cil/doc/cil009.html                           |   48 -
 cil/doc/cil010.html                           |  100 -
 cil/doc/cil011.html                           |   53 -
 cil/doc/cil012.html                           |  133 -
 cil/doc/cil015.html                           |   60 -
 cil/doc/cil016.html                           |  342 -
 cil/doc/cil017.html                           |   53 -
 cil/doc/cil018.html                           |   71 -
 cil/doc/cil019.html                           |   45 -
 cil/doc/cilly.html                            |  187 -
 cil/doc/cilpp.haux                            |   64 -
 cil/doc/cilpp.htoc                            |   65 -
 cil/doc/ciltoc.html                           |   92 -
 cil/doc/contents_motif.gif                    |  Bin 316 -> 0 bytes
 cil/doc/examples/ex1.txt                      |   16 -
 cil/doc/examples/ex10.txt                     |   10 -
 cil/doc/examples/ex11.txt                     |    5 -
 cil/doc/examples/ex12.txt                     |   32 -
 cil/doc/examples/ex13.txt                     |   21 -
 cil/doc/examples/ex14.txt                     |   22 -
 cil/doc/examples/ex15.txt                     |   14 -
 cil/doc/examples/ex16.txt                     |   22 -
 cil/doc/examples/ex17.txt                     |   81 -
 cil/doc/examples/ex18.txt                     |   20 -
 cil/doc/examples/ex19.txt                     |   42 -
 cil/doc/examples/ex2.txt                      |    9 -
 cil/doc/examples/ex20.txt                     |   26 -
 cil/doc/examples/ex21.txt                     |   25 -
 cil/doc/examples/ex22.txt                     |   16 -
 cil/doc/examples/ex23.txt                     |   56 -
 cil/doc/examples/ex24.txt                     |   59 -
 cil/doc/examples/ex25.txt                     |   40 -
 cil/doc/examples/ex26.txt                     |   29 -
 cil/doc/examples/ex27.txt                     |   51 -
 cil/doc/examples/ex28.txt                     |   24 -
 cil/doc/examples/ex29.txt                     |   53 -
 cil/doc/examples/ex3.txt                      |   20 -
 cil/doc/examples/ex30.txt                     |   12 -
 cil/doc/examples/ex31.txt                     |   12 -
 cil/doc/examples/ex32.txt                     |   16 -
 cil/doc/examples/ex33.txt                     |   24 -
 cil/doc/examples/ex34.txt                     |   15 -
 cil/doc/examples/ex35.txt                     |   32 -
 cil/doc/examples/ex36.txt                     |   20 -
 cil/doc/examples/ex37.txt                     |   14 -
 cil/doc/examples/ex38.txt                     |   12 -
 cil/doc/examples/ex39.txt                     |   25 -
 cil/doc/examples/ex4.txt                      |   16 -
 cil/doc/examples/ex40.txt                     |   20 -
 cil/doc/examples/ex41.txt                     |   69 -
 cil/doc/examples/ex42.txt                     |   22 -
 cil/doc/examples/ex43.txt                     |   46 -
 cil/doc/examples/ex44.txt                     |   31 -
 cil/doc/examples/ex45.txt                     |   11 -
 cil/doc/examples/ex46.txt                     |   23 -
 cil/doc/examples/ex47.txt                     |   28 -
 cil/doc/examples/ex5.txt                      |   27 -
 cil/doc/examples/ex6.txt                      |    7 -
 cil/doc/examples/ex7.txt                      |   22 -
 cil/doc/examples/ex8.txt                      |   13 -
 cil/doc/examples/ex9.txt                      |   16 -
 cil/doc/ext.html                              |  506 --
 cil/doc/header.html                           |   18 -
 cil/doc/index.html                            |   26 -
 cil/doc/merger.html                           |  167 -
 cil/doc/next_motif.gif                        |  Bin 317 -> 0 bytes
 cil/doc/patcher.html                          |  126 -
 cil/doc/previous_motif.gif                    |  Bin 317 -> 0 bytes
 cil/install-sh                                |  251 -
 cil/lib/Cilly.pm                              | 2137 ------
 cil/lib/KeptFile.pm                           |   88 -
 cil/lib/OutputFile.pm                         |  213 -
 cil/lib/TempFile.pm                           |   90 -
 cil/ocamlutil/Makefile.ocaml                  |  395 -
 cil/ocamlutil/Makefile.ocaml.build            |   50 -
 cil/ocamlutil/alpha.ml                        |  156 -
 cil/ocamlutil/alpha.mli                       |   50 -
 cil/ocamlutil/clist.ml                        |  183 -
 cil/ocamlutil/clist.mli                       |   97 -
 cil/ocamlutil/errormsg.ml                     |  337 -
 cil/ocamlutil/errormsg.mli                    |  164 -
 cil/ocamlutil/growArray.ml                    |  191 -
 cil/ocamlutil/growArray.mli                   |  131 -
 cil/ocamlutil/inthash.ml                      |  188 -
 cil/ocamlutil/inthash.mli                     |   27 -
 cil/ocamlutil/intmap.ml                       |  171 -
 cil/ocamlutil/intmap.mli                      |   87 -
 cil/ocamlutil/perfcount.c.in                  |  184 -
 cil/ocamlutil/pretty.ml                       |  859 ---
 cil/ocamlutil/pretty.mli                      |  316 -
 cil/ocamlutil/stats.ml                        |  146 -
 cil/ocamlutil/stats.mli                       |   72 -
 cil/ocamlutil/trace.ml                        |  169 -
 cil/ocamlutil/trace.mli                       |  106 -
 cil/ocamlutil/util.ml                         |  815 ---
 cil/ocamlutil/util.mli                        |  311 -
 cil/src/check.ml                              | 1017 ---
 cil/src/check.mli                             |   45 -
 cil/src/cil.ml                                | 6427 -----------------
 cil/src/cil.mli                               | 2455 -------
 cil/src/cillower.ml                           |   57 -
 cil/src/cillower.mli                          |   42 -
 cil/src/ciloptions.ml                         |  196 -
 cil/src/ciloptions.mli                        |   48 -
 cil/src/cilutil.ml                            |   72 -
 cil/src/escape.ml                             |   93 -
 cil/src/escape.mli                            |   48 -
 cil/src/ext/astslicer.ml                      |  454 --
 cil/src/ext/availexps.ml                      |  359 -
 cil/src/ext/bitmap.ml                         |  224 -
 cil/src/ext/bitmap.mli                        |   50 -
 cil/src/ext/blockinggraph.ml                  |  769 --
 cil/src/ext/blockinggraph.mli                 |   40 -
 cil/src/ext/callgraph.ml                      |  250 -
 cil/src/ext/callgraph.mli                     |  123 -
 cil/src/ext/canonicalize.ml                   |  292 -
 cil/src/ext/canonicalize.mli                  |   48 -
 cil/src/ext/cfg.ml                            |  289 -
 cil/src/ext/cfg.mli                           |   36 -
 cil/src/ext/ciltools.ml                       |  228 -
 cil/src/ext/dataflow.ml                       |  466 --
 cil/src/ext/dataflow.mli                      |  151 -
 cil/src/ext/dataslicing.ml                    |  462 --
 cil/src/ext/dataslicing.mli                   |   41 -
 cil/src/ext/deadcodeelim.ml                   |  173 -
 cil/src/ext/dominators.ml                     |  241 -
 cil/src/ext/dominators.mli                    |   29 -
 cil/src/ext/epicenter.ml                      |  114 -
 cil/src/ext/heap.ml                           |  112 -
 cil/src/ext/heapify.ml                        |  250 -
 cil/src/ext/liveness.ml                       |  190 -
 cil/src/ext/logcalls.ml                       |  268 -
 cil/src/ext/logcalls.mli                      |   41 -
 cil/src/ext/logwrites.ml                      |  139 -
 cil/src/ext/oneret.ml                         |  187 -
 cil/src/ext/oneret.mli                        |   44 -
 cil/src/ext/partial.ml                        |  851 ---
 cil/src/ext/pta/golf.ml                       | 1657 -----
 cil/src/ext/pta/golf.mli                      |   83 -
 cil/src/ext/pta/olf.ml                        | 1108 ---
 cil/src/ext/pta/olf.mli                       |   80 -
 cil/src/ext/pta/ptranal.ml                    |  597 --
 cil/src/ext/pta/ptranal.mli                   |  156 -
 cil/src/ext/pta/setp.ml                       |  342 -
 cil/src/ext/pta/setp.mli                      |  180 -
 cil/src/ext/pta/steensgaard.ml                | 1417 ----
 cil/src/ext/pta/steensgaard.mli               |   71 -
 cil/src/ext/pta/uref.ml                       |   94 -
 cil/src/ext/pta/uref.mli                      |   65 -
 cil/src/ext/reachingdefs.ml                   |  511 --
 cil/src/ext/sfi.ml                            |  337 -
 cil/src/ext/simplemem.ml                      |  132 -
 cil/src/ext/simplify.ml                       |  845 ---
 cil/src/ext/ssa.ml                            |  696 --
 cil/src/ext/ssa.mli                           |   45 -
 cil/src/ext/stackoverflow.ml                  |  246 -
 cil/src/ext/stackoverflow.mli                 |   43 -
 cil/src/ext/usedef.ml                         |  188 -
 cil/src/formatcil.ml                          |  215 -
 cil/src/formatcil.mli                         |  103 -
 cil/src/formatlex.mll                         |  308 -
 cil/src/formatparse.mly                       | 1455 ----
 cil/src/frontc/cabs.ml                        |  396 -
 cil/src/frontc/cabs2cil.ml                    | 6238 ----------------
 cil/src/frontc/cabs2cil.mli                   |   49 -
 cil/src/frontc/cabsvisit.ml                   |  577 --
 cil/src/frontc/cabsvisit.mli                  |  115 -
 cil/src/frontc/clexer.mli                     |   55 -
 cil/src/frontc/clexer.mll                     |  666 --
 cil/src/frontc/cparser.mly                    | 1521 ----
 cil/src/frontc/cprint.ml                      | 1014 ---
 cil/src/frontc/frontc.ml                      |  256 -
 cil/src/frontc/frontc.mli                     |   55 -
 cil/src/frontc/lexerhack.ml                   |   22 -
 cil/src/frontc/patch.ml                       |  837 ---
 cil/src/frontc/patch.mli                      |   42 -
 cil/src/libmaincil.ml                         |  108 -
 cil/src/machdep.c                             |  220 -
 cil/src/main.ml                               |  288 -
 cil/src/mergecil.ml                           | 1770 -----
 cil/src/mergecil.mli                          |   42 -
 cil/src/rmtmps.ml                             |  778 --
 cil/src/rmtmps.mli                            |   82 -
 cil/src/testcil.ml                            |  440 --
 cil/test/small1/func.c                        |   24 -
 cil/test/small1/hello.c                       |    8 -
 cil/test/small1/init.c                        |  177 -
 cil/test/small1/init1.c                       |   17 -
 cil/test/small1/testharness.h                 |   17 -
 cil/test/small1/vararg1.c                     |   47 -
 cil/test/small1/wchar1.c                      |   24 -
 configure                                     |    8 -
 280 files changed, 83521 deletions(-)
 delete mode 100644 cfrontend/Cil2Csyntax.ml
 delete mode 100644 cil/INSTALL
 delete mode 100644 cil/LICENSE
 delete mode 100644 cil/Makefile.gcc
 delete mode 100644 cil/Makefile.in
 delete mode 100644 cil/Makefile.msvc
 delete mode 100644 cil/README
 delete mode 100644 cil/bin/CilConfig.pm.in
 delete mode 100755 cil/bin/cilly
 delete mode 100755 cil/bin/cilly.bat.in
 delete mode 100755 cil/bin/patcher
 delete mode 100755 cil/bin/patcher.bat.in
 delete mode 100755 cil/bin/teetwo
 delete mode 100755 cil/bin/test-bad
 delete mode 100644 cil/cil.spec
 delete mode 100644 cil/cil.spec.in
 delete mode 100755 cil/config.guess
 delete mode 100644 cil/config.h.in
 delete mode 100755 cil/config.sub
 delete mode 100755 cil/configure
 delete mode 100644 cil/configure.in
 delete mode 100644 cil/doc/CIL-API.pdf
 delete mode 100644 cil/doc/CIL.pdf
 delete mode 100644 cil/doc/api/Alpha.html
 delete mode 100644 cil/doc/api/Cfg.html
 delete mode 100644 cil/doc/api/Cil.cilPrinter.html
 delete mode 100644 cil/doc/api/Cil.cilVisitor.html
 delete mode 100644 cil/doc/api/Cil.defaultCilPrinterClass.html
 delete mode 100644 cil/doc/api/Cil.html
 delete mode 100644 cil/doc/api/Cil.nopCilVisitor.html
 delete mode 100644 cil/doc/api/Cil.plainCilPrinterClass.html
 delete mode 100644 cil/doc/api/Cillower.html
 delete mode 100644 cil/doc/api/Clist.html
 delete mode 100644 cil/doc/api/Dataflow.BackwardsDataFlow.html
 delete mode 100644 cil/doc/api/Dataflow.BackwardsTransfer.html
 delete mode 100644 cil/doc/api/Dataflow.ForwardsDataFlow.html
 delete mode 100644 cil/doc/api/Dataflow.ForwardsTransfer.html
 delete mode 100644 cil/doc/api/Dataflow.html
 delete mode 100644 cil/doc/api/Dominators.html
 delete mode 100644 cil/doc/api/Errormsg.html
 delete mode 100644 cil/doc/api/Formatcil.html
 delete mode 100644 cil/doc/api/Pretty.MakeMapPrinter.html
 delete mode 100644 cil/doc/api/Pretty.MakeSetPrinter.html
 delete mode 100644 cil/doc/api/Pretty.html
 delete mode 100644 cil/doc/api/Stats.html
 delete mode 100644 cil/doc/api/index.html
 delete mode 100644 cil/doc/api/index_attributes.html
 delete mode 100644 cil/doc/api/index_class_types.html
 delete mode 100644 cil/doc/api/index_classes.html
 delete mode 100644 cil/doc/api/index_exceptions.html
 delete mode 100644 cil/doc/api/index_methods.html
 delete mode 100644 cil/doc/api/index_module_types.html
 delete mode 100644 cil/doc/api/index_modules.html
 delete mode 100644 cil/doc/api/index_types.html
 delete mode 100644 cil/doc/api/index_values.html
 delete mode 100644 cil/doc/api/style.css
 delete mode 100644 cil/doc/api/type_Alpha.html
 delete mode 100644 cil/doc/api/type_Cfg.html
 delete mode 100644 cil/doc/api/type_Cil.cilPrinter.html
 delete mode 100644 cil/doc/api/type_Cil.cilVisitor.html
 delete mode 100644 cil/doc/api/type_Cil.defaultCilPrinterClass.html
 delete mode 100644 cil/doc/api/type_Cil.html
 delete mode 100644 cil/doc/api/type_Cil.nopCilVisitor.html
 delete mode 100644 cil/doc/api/type_Cil.plainCilPrinterClass.html
 delete mode 100644 cil/doc/api/type_Cillower.html
 delete mode 100644 cil/doc/api/type_Clist.html
 delete mode 100644 cil/doc/api/type_Dataflow.BackwardsDataFlow.html
 delete mode 100644 cil/doc/api/type_Dataflow.BackwardsTransfer.html
 delete mode 100644 cil/doc/api/type_Dataflow.ForwardsDataFlow.html
 delete mode 100644 cil/doc/api/type_Dataflow.ForwardsTransfer.html
 delete mode 100644 cil/doc/api/type_Dataflow.html
 delete mode 100644 cil/doc/api/type_Dominators.html
 delete mode 100644 cil/doc/api/type_Errormsg.html
 delete mode 100644 cil/doc/api/type_Formatcil.html
 delete mode 100644 cil/doc/api/type_Pretty.MakeMapPrinter.html
 delete mode 100644 cil/doc/api/type_Pretty.MakeSetPrinter.html
 delete mode 100644 cil/doc/api/type_Pretty.html
 delete mode 100644 cil/doc/api/type_Stats.html
 delete mode 100644 cil/doc/changes.html
 delete mode 100644 cil/doc/cil.css
 delete mode 100644 cil/doc/cil.html
 delete mode 100644 cil/doc/cil.version.tex
 delete mode 100644 cil/doc/cil001.html
 delete mode 100644 cil/doc/cil002.html
 delete mode 100644 cil/doc/cil003.html
 delete mode 100644 cil/doc/cil004.html
 delete mode 100644 cil/doc/cil006.html
 delete mode 100644 cil/doc/cil007.html
 delete mode 100644 cil/doc/cil009.html
 delete mode 100644 cil/doc/cil010.html
 delete mode 100644 cil/doc/cil011.html
 delete mode 100644 cil/doc/cil012.html
 delete mode 100644 cil/doc/cil015.html
 delete mode 100644 cil/doc/cil016.html
 delete mode 100644 cil/doc/cil017.html
 delete mode 100644 cil/doc/cil018.html
 delete mode 100644 cil/doc/cil019.html
 delete mode 100644 cil/doc/cilly.html
 delete mode 100644 cil/doc/cilpp.haux
 delete mode 100644 cil/doc/cilpp.htoc
 delete mode 100644 cil/doc/ciltoc.html
 delete mode 100644 cil/doc/contents_motif.gif
 delete mode 100644 cil/doc/examples/ex1.txt
 delete mode 100644 cil/doc/examples/ex10.txt
 delete mode 100644 cil/doc/examples/ex11.txt
 delete mode 100644 cil/doc/examples/ex12.txt
 delete mode 100644 cil/doc/examples/ex13.txt
 delete mode 100644 cil/doc/examples/ex14.txt
 delete mode 100644 cil/doc/examples/ex15.txt
 delete mode 100644 cil/doc/examples/ex16.txt
 delete mode 100644 cil/doc/examples/ex17.txt
 delete mode 100644 cil/doc/examples/ex18.txt
 delete mode 100644 cil/doc/examples/ex19.txt
 delete mode 100644 cil/doc/examples/ex2.txt
 delete mode 100644 cil/doc/examples/ex20.txt
 delete mode 100644 cil/doc/examples/ex21.txt
 delete mode 100644 cil/doc/examples/ex22.txt
 delete mode 100644 cil/doc/examples/ex23.txt
 delete mode 100644 cil/doc/examples/ex24.txt
 delete mode 100644 cil/doc/examples/ex25.txt
 delete mode 100644 cil/doc/examples/ex26.txt
 delete mode 100644 cil/doc/examples/ex27.txt
 delete mode 100644 cil/doc/examples/ex28.txt
 delete mode 100644 cil/doc/examples/ex29.txt
 delete mode 100644 cil/doc/examples/ex3.txt
 delete mode 100644 cil/doc/examples/ex30.txt
 delete mode 100644 cil/doc/examples/ex31.txt
 delete mode 100644 cil/doc/examples/ex32.txt
 delete mode 100644 cil/doc/examples/ex33.txt
 delete mode 100644 cil/doc/examples/ex34.txt
 delete mode 100644 cil/doc/examples/ex35.txt
 delete mode 100644 cil/doc/examples/ex36.txt
 delete mode 100644 cil/doc/examples/ex37.txt
 delete mode 100644 cil/doc/examples/ex38.txt
 delete mode 100644 cil/doc/examples/ex39.txt
 delete mode 100644 cil/doc/examples/ex4.txt
 delete mode 100644 cil/doc/examples/ex40.txt
 delete mode 100644 cil/doc/examples/ex41.txt
 delete mode 100644 cil/doc/examples/ex42.txt
 delete mode 100644 cil/doc/examples/ex43.txt
 delete mode 100644 cil/doc/examples/ex44.txt
 delete mode 100644 cil/doc/examples/ex45.txt
 delete mode 100644 cil/doc/examples/ex46.txt
 delete mode 100644 cil/doc/examples/ex47.txt
 delete mode 100644 cil/doc/examples/ex5.txt
 delete mode 100644 cil/doc/examples/ex6.txt
 delete mode 100644 cil/doc/examples/ex7.txt
 delete mode 100644 cil/doc/examples/ex8.txt
 delete mode 100644 cil/doc/examples/ex9.txt
 delete mode 100644 cil/doc/ext.html
 delete mode 100644 cil/doc/header.html
 delete mode 100644 cil/doc/index.html
 delete mode 100644 cil/doc/merger.html
 delete mode 100644 cil/doc/next_motif.gif
 delete mode 100644 cil/doc/patcher.html
 delete mode 100644 cil/doc/previous_motif.gif
 delete mode 100644 cil/install-sh
 delete mode 100644 cil/lib/Cilly.pm
 delete mode 100644 cil/lib/KeptFile.pm
 delete mode 100644 cil/lib/OutputFile.pm
 delete mode 100644 cil/lib/TempFile.pm
 delete mode 100644 cil/ocamlutil/Makefile.ocaml
 delete mode 100644 cil/ocamlutil/Makefile.ocaml.build
 delete mode 100755 cil/ocamlutil/alpha.ml
 delete mode 100755 cil/ocamlutil/alpha.mli
 delete mode 100644 cil/ocamlutil/clist.ml
 delete mode 100644 cil/ocamlutil/clist.mli
 delete mode 100644 cil/ocamlutil/errormsg.ml
 delete mode 100644 cil/ocamlutil/errormsg.mli
 delete mode 100644 cil/ocamlutil/growArray.ml
 delete mode 100644 cil/ocamlutil/growArray.mli
 delete mode 100755 cil/ocamlutil/inthash.ml
 delete mode 100755 cil/ocamlutil/inthash.mli
 delete mode 100755 cil/ocamlutil/intmap.ml
 delete mode 100755 cil/ocamlutil/intmap.mli
 delete mode 100755 cil/ocamlutil/perfcount.c.in
 delete mode 100644 cil/ocamlutil/pretty.ml
 delete mode 100644 cil/ocamlutil/pretty.mli
 delete mode 100644 cil/ocamlutil/stats.ml
 delete mode 100644 cil/ocamlutil/stats.mli
 delete mode 100644 cil/ocamlutil/trace.ml
 delete mode 100644 cil/ocamlutil/trace.mli
 delete mode 100755 cil/ocamlutil/util.ml
 delete mode 100644 cil/ocamlutil/util.mli
 delete mode 100644 cil/src/check.ml
 delete mode 100644 cil/src/check.mli
 delete mode 100644 cil/src/cil.ml
 delete mode 100644 cil/src/cil.mli
 delete mode 100755 cil/src/cillower.ml
 delete mode 100755 cil/src/cillower.mli
 delete mode 100755 cil/src/ciloptions.ml
 delete mode 100755 cil/src/ciloptions.mli
 delete mode 100644 cil/src/cilutil.ml
 delete mode 100644 cil/src/escape.ml
 delete mode 100644 cil/src/escape.mli
 delete mode 100644 cil/src/ext/astslicer.ml
 delete mode 100644 cil/src/ext/availexps.ml
 delete mode 100644 cil/src/ext/bitmap.ml
 delete mode 100644 cil/src/ext/bitmap.mli
 delete mode 100644 cil/src/ext/blockinggraph.ml
 delete mode 100644 cil/src/ext/blockinggraph.mli
 delete mode 100644 cil/src/ext/callgraph.ml
 delete mode 100644 cil/src/ext/callgraph.mli
 delete mode 100644 cil/src/ext/canonicalize.ml
 delete mode 100644 cil/src/ext/canonicalize.mli
 delete mode 100644 cil/src/ext/cfg.ml
 delete mode 100644 cil/src/ext/cfg.mli
 delete mode 100755 cil/src/ext/ciltools.ml
 delete mode 100755 cil/src/ext/dataflow.ml
 delete mode 100755 cil/src/ext/dataflow.mli
 delete mode 100644 cil/src/ext/dataslicing.ml
 delete mode 100644 cil/src/ext/dataslicing.mli
 delete mode 100644 cil/src/ext/deadcodeelim.ml
 delete mode 100755 cil/src/ext/dominators.ml
 delete mode 100755 cil/src/ext/dominators.mli
 delete mode 100644 cil/src/ext/epicenter.ml
 delete mode 100644 cil/src/ext/heap.ml
 delete mode 100644 cil/src/ext/heapify.ml
 delete mode 100644 cil/src/ext/liveness.ml
 delete mode 100644 cil/src/ext/logcalls.ml
 delete mode 100644 cil/src/ext/logcalls.mli
 delete mode 100644 cil/src/ext/logwrites.ml
 delete mode 100644 cil/src/ext/oneret.ml
 delete mode 100644 cil/src/ext/oneret.mli
 delete mode 100644 cil/src/ext/partial.ml
 delete mode 100644 cil/src/ext/pta/golf.ml
 delete mode 100644 cil/src/ext/pta/golf.mli
 delete mode 100644 cil/src/ext/pta/olf.ml
 delete mode 100644 cil/src/ext/pta/olf.mli
 delete mode 100644 cil/src/ext/pta/ptranal.ml
 delete mode 100644 cil/src/ext/pta/ptranal.mli
 delete mode 100644 cil/src/ext/pta/setp.ml
 delete mode 100644 cil/src/ext/pta/setp.mli
 delete mode 100644 cil/src/ext/pta/steensgaard.ml
 delete mode 100644 cil/src/ext/pta/steensgaard.mli
 delete mode 100644 cil/src/ext/pta/uref.ml
 delete mode 100644 cil/src/ext/pta/uref.mli
 delete mode 100644 cil/src/ext/reachingdefs.ml
 delete mode 100755 cil/src/ext/sfi.ml
 delete mode 100644 cil/src/ext/simplemem.ml
 delete mode 100755 cil/src/ext/simplify.ml
 delete mode 100644 cil/src/ext/ssa.ml
 delete mode 100644 cil/src/ext/ssa.mli
 delete mode 100644 cil/src/ext/stackoverflow.ml
 delete mode 100644 cil/src/ext/stackoverflow.mli
 delete mode 100755 cil/src/ext/usedef.ml
 delete mode 100644 cil/src/formatcil.ml
 delete mode 100644 cil/src/formatcil.mli
 delete mode 100644 cil/src/formatlex.mll
 delete mode 100644 cil/src/formatparse.mly
 delete mode 100644 cil/src/frontc/cabs.ml
 delete mode 100644 cil/src/frontc/cabs2cil.ml
 delete mode 100644 cil/src/frontc/cabs2cil.mli
 delete mode 100644 cil/src/frontc/cabsvisit.ml
 delete mode 100644 cil/src/frontc/cabsvisit.mli
 delete mode 100644 cil/src/frontc/clexer.mli
 delete mode 100644 cil/src/frontc/clexer.mll
 delete mode 100644 cil/src/frontc/cparser.mly
 delete mode 100644 cil/src/frontc/cprint.ml
 delete mode 100644 cil/src/frontc/frontc.ml
 delete mode 100644 cil/src/frontc/frontc.mli
 delete mode 100755 cil/src/frontc/lexerhack.ml
 delete mode 100644 cil/src/frontc/patch.ml
 delete mode 100644 cil/src/frontc/patch.mli
 delete mode 100644 cil/src/libmaincil.ml
 delete mode 100644 cil/src/machdep.c
 delete mode 100644 cil/src/main.ml
 delete mode 100644 cil/src/mergecil.ml
 delete mode 100644 cil/src/mergecil.mli
 delete mode 100644 cil/src/rmtmps.ml
 delete mode 100644 cil/src/rmtmps.mli
 delete mode 100644 cil/src/testcil.ml
 delete mode 100644 cil/test/small1/func.c
 delete mode 100644 cil/test/small1/hello.c
 delete mode 100644 cil/test/small1/init.c
 delete mode 100644 cil/test/small1/init1.c
 delete mode 100644 cil/test/small1/testharness.h
 delete mode 100644 cil/test/small1/vararg1.c
 delete mode 100644 cil/test/small1/wchar1.c

diff --git a/cfrontend/Cil2Csyntax.ml b/cfrontend/Cil2Csyntax.ml
deleted file mode 100644
index 822f6cb04..000000000
--- a/cfrontend/Cil2Csyntax.ml
+++ /dev/null
@@ -1,1283 +0,0 @@
-(* *********************************************************************)
-(*                                                                     *)
-(*              The Compcert verified compiler                         *)
-(*                                                                     *)
-(*          Thomas Moniot, INRIA Paris-Rocquencourt                    *)
-(*          Xavier Leroy, INRIA Paris-Rocquencourt                     *)
-(*                                                                     *)
-(*  Copyright Institut National de Recherche en Informatique et en     *)
-(*  Automatique.  All rights reserved.  This file is distributed       *)
-(*  under the terms of the GNU General Public License as published by  *)
-(*  the Free Software Foundation, either version 2 of the License, or  *)
-(*  (at your option) any later version.  This file is also distributed *)
-(*  under the terms of the INRIA Non-Commercial License Agreement.     *)
-(*                                                                     *)
-(* *********************************************************************)
-
-(**************************************************************************
-CIL -> CabsCoq translator
-**************************************************************************)
-
-open Cil
-open Camlcoq
-open AST
-open Csyntax
-
-(* To associate CIL varinfo to the atoms representing global variables *)
-
-let varinfo_atom : (AST.ident, Cil.varinfo) Hashtbl.t =
-  Hashtbl.create 103
-
-(** Functions used to handle locations *)
-
-let currentLocation = ref Cil.locUnknown
-
-(** Update the current location *)
-let updateLoc loc =
-  currentLocation := loc
-
-(** Convert the current location into a string *)
-let currentLoc() =
-  match !currentLocation with { line=l; file=f } ->
-    f ^ ":" ^ (if l = -1 then "?" else string_of_int l) ^ ": "
-
-(** Exception raised when an error in the C source is encountered,
-    e.g. unsupported C feature *)
-
-exception Error of string
-
-let error msg =
-  raise (Error(currentLoc() ^ msg))
-
-let unsupported msg =
-  error ("Unsupported C feature: " ^ msg)
-
-let internal_error msg =
-  error ("Internal error: " ^ msg ^ "\nPlease report it.")
-
-(** Warning messages *)
-let warning msg =
-  prerr_string (currentLoc());
-  prerr_string "Warning: ";
-  prerr_endline msg
-
-(** Evaluate compile-time constant expressions.  This is a more
-    aggressive variant of [Cil.constFold], which does not handle
-    floats. *)
-
-exception NotConst
-
-let mkint64 k v =
-  match Cil.kinteger64 k v with Const cst -> cst | _ -> assert false
-let mkint k v =
-  mkint64 k (Int64.of_int v)
-let mkfloat k v =
-  let v' =
-    match k with
-    | FFloat -> Int32.float_of_bits (Int32.bits_of_float v)
-    | _ -> v in
-  CReal(v', k, None)
-
-let bool_val = function 
-  | CInt64(v, _, _) -> v <> 0L
-  | CReal(v, _, _) -> v <> 0.0
-  | CStr s -> true
-  | CWStr s -> true
-  | _ -> assert false (* CChr, CEnum already expanded *)
-
-let rec eval_expr = function
-  | Const cst ->
-      eval_const cst
-  | SizeOf ty -> 
-      (try mkint IUInt (bitsSizeOf ty / 8)
-       with SizeOfError _ -> raise NotConst)
-  | SizeOfE e ->
-      eval_expr (SizeOf (typeOf e))
-  | SizeOfStr s ->
-      mkint IUInt (1 + String.length s)
-  | AlignOf ty ->
-      (try mkint IUInt (alignOf_int ty)
-       with SizeOfError _ -> raise NotConst)
-  | AlignOfE e ->
-      eval_expr (AlignOf (typeOf e))
-  | UnOp(op, e, ty) ->
-      eval_unop op (eval_expr e) ty
-  | BinOp(op, e1, e2, ty) ->
-      eval_binop op (eval_expr e1) (eval_expr e2) ty
-  | CastE(ty, e) ->
-      eval_cast ty (eval_expr e)
-  | Lval lv -> raise NotConst
-  | AddrOf lv -> raise NotConst
-  | StartOf lv -> raise NotConst
-
-and eval_const = function
-  | CChr c -> charConstToInt c
-  | CEnum(e, _, _) -> eval_expr e
-  | cst -> cst
-
-and eval_unop op v ty =
-  match op, Cil.unrollType ty, v with
-  | Neg, TInt(ik, _), CInt64(v, _, _) -> mkint64 ik (Int64.neg v)
-  | Neg, TFloat(fk, _), CReal(v, _, _) -> mkfloat fk (-. v)
-  | BNot, TInt(ik, _), CInt64(v, _, _) -> mkint64 ik (Int64.logxor v (-1L))
-  | LNot, TInt(ik, _), _ -> mkint ik (if bool_val v then 0 else 1)
-  | _, _, _ -> raise NotConst
-
-and eval_binop op v1 v2 ty =
-  match op, Cil.unrollType ty, v1, v2 with
-  | PlusA, TInt(ik, _), CInt64(v1, _, _), CInt64(v2, _, _) -> 
-      mkint64 ik (Int64.add v1 v2)
-  | PlusA, TFloat(fk, _), CReal(v1, _, _), CReal(v2, _, _) -> 
-      mkfloat fk (v1 +. v2)
-  | MinusA, TInt(ik, _), CInt64(v1, _, _), CInt64(v2, _, _) -> 
-      mkint64 ik (Int64.sub v1 v2)
-  | MinusA, TFloat(fk, _), CReal(v1, _, _), CReal(v2, _, _) -> 
-      mkfloat fk (v1 -. v2)
-  | Mult, TInt(ik, _), CInt64(v1, _, _), CInt64(v2, _, _) -> 
-      mkint64 ik (Int64.mul v1 v2)
-  | Mult, TFloat(fk, _), CReal(v1, _, _), CReal(v2, _, _) -> 
-      mkfloat fk (v1 *. v2)
-  | Div, TInt(ik, _), CInt64(v1, _, _), CInt64(v2, _, _)
-    when ik <> IULongLong && v2 != 0L -> 
-      mkint64 ik (Int64.div v1 v2)
-  | Div, TFloat(fk, _), CReal(v1, _, _), CReal(v2, _, _) -> 
-      mkfloat fk (v1 /. v2)
-  | Mod, TInt(ik, _), CInt64(v1, _, _), CInt64(v2, _, _)
-    when ik <> IULongLong && v2 != 0L -> 
-      mkint64 ik (Int64.rem v1 v2)
-  | Shiftlt, TInt(ik, _), CInt64(v1, _, _), CInt64(v2, _, _)
-    when v2 >= 0L && v2 < 64L ->
-      mkint64 ik (Int64.shift_left v1 (Int64.to_int v2))
-  | Shiftrt, TInt(ik, _), CInt64(v1, _, _), CInt64(v2, _, _)
-    when v2 >= 0L && v2 < 64L ->
-      mkint64 ik (if isSigned ik
-                  then Int64.shift_right v1 (Int64.to_int v2)
-                  else Int64.shift_right_logical v1 (Int64.to_int v2))
-  | Lt, _, _, _ -> eval_comparison (<) v1 v2
-  | Gt, _, _, _ -> eval_comparison (>) v1 v2
-  | Le, _, _, _ -> eval_comparison (<=) v1 v2
-  | Ge, _, _, _ -> eval_comparison (>=) v1 v2
-  | Eq, _, _, _ -> eval_comparison (=) v1 v2
-  | Ne, _, _, _ -> eval_comparison (<>) v1 v2
-  | BAnd, TInt(ik, _), CInt64(v1, _, _), CInt64(v2, _, _) ->
-      mkint64 ik (Int64.logand v1 v2)
-  | BXor, TInt(ik, _), CInt64(v1, _, _), CInt64(v2, _, _) ->
-      mkint64 ik (Int64.logxor v1 v2)
-  | BOr, TInt(ik, _), CInt64(v1, _, _), CInt64(v2, _, _) ->
-      mkint64 ik (Int64.logor v1 v2)
-  | LAnd, TInt(ik, _), _, _ ->
-      mkint ik (if bool_val v1 && bool_val v2 then 1 else 0)
-  | LOr, TInt(ik, _), _, _ ->
-      mkint ik (if bool_val v1 || bool_val v2 then 1 else 0)
-  | _, _, _, _ ->
-      raise NotConst
-
-and eval_comparison op v1 v2 =
-  let cmp =
-    match v1, v2 with
-    | CInt64(v1, ik1, _), CInt64(v2, ik2, _) ->
-        let shift v = Int64.sub v 0x8000_0000_0000_0000L in
-        if ik1 = IULongLong || ik2 = IULongLong
-        then compare (shift v1) (shift v2)
-        else compare v1 v2
-    | CReal(v1, _, _), CReal(v2, _, _) ->
-        compare v1 v2
-    | _, _ ->
-        raise NotConst
-  in mkint IInt (if op cmp 0 then 1 else 0)
-
-and eval_cast ty v =
-  match Cil.unrollType ty, v with
-  | TInt(ik, _), CInt64(v, _, _) -> mkint64 ik v
-  | TInt(ik, _), CReal(v, _, _) -> 
-      if ik = IULongLong then raise NotConst else mkint64 ik (Int64.of_float v)
-  | TEnum _, CInt64(v, _, _) -> mkint64 IInt v
-  | TEnum _, CReal(v, _, _) -> mkint64 IInt (Int64.of_float v)
-  | TFloat(fk, _), CReal(v, _, _) -> mkfloat fk v
-  | TFloat(fk, _), CInt64(v, ik, _) ->
-      if ik = IULongLong then raise NotConst else mkfloat fk (Int64.to_float v)
-  | TPtr(_, _), CInt64(_, _, _) -> v  (* tolerance? *)
-  | TPtr(_, _), CStr s -> v  (* tolerance? *)
-  | TPtr(_, _), CWStr s -> v  (* tolerance? *)
-  | _, _ -> raise NotConst
-
-(** Hooks -- overriden in machine-dependent CPragmas module *)
-
-let process_pragma_hook = ref (fun (a: Cil.attribute) -> false)
-let define_variable_hook = ref (fun (id: ident) (v: Cil.varinfo) -> ())
-let define_function_hook = ref (fun (id: ident) (v: Cil.varinfo) -> ())
-let define_stringlit_hook = ref (fun (id: ident) (v: Cil.varinfo) -> ())
-
-(** The parameter to the translation functor: it specifies the
-    translation for integer and float types. *)
-
-module type TypeSpecifierTranslator =
-  sig
-    val convertIkind: Cil.ikind -> (intsize * signedness) option
-    val convertFkind: Cil.fkind -> floatsize option
-  end
-
-module Make(TS: TypeSpecifierTranslator) = struct
-(*-----------------------------------------------------------------------*)
-
-
-(** Pre-defined constants *)
-let constInt32 = Tint (I32, Signed)
-let constInt32uns = Tint (I32, Unsigned)
-let const0 = Expr (Econst_int (coqint_of_camlint Int32.zero), constInt32)
-
-
-(** Global variables *)
-let stringNum = ref 0   (* number of next global for string literals *)
-let stringTable = Hashtbl.create 47
-
-(** ** Functions related to [struct]s and [union]s *)
-
-(* Unroll recursion in struct or union types:
-   substitute [Tcomp_ptr id] by [Tpointer compty] in [ty]. *)
-
-let unrollType id compty ty =
-  let rec unrType ty =
-    match ty with
-    | Tvoid -> ty
-    | Tint(sz, sg) -> ty
-    | Tfloat sz -> ty
-    | Tpointer ty -> Tpointer (unrType ty)
-    | Tarray(ty, sz) -> Tarray (unrType ty, sz)
-    | Tfunction(args, res) -> Tfunction(unrTypelist args, unrType res)
-    | Tstruct(id', fld) ->
-        if id' = id then ty else Tstruct(id', unrFieldlist fld)
-    | Tunion(id', fld) ->
-        if id' = id then ty else Tunion(id', unrFieldlist fld)
-    | Tcomp_ptr id' ->
-        if id' = id then Tpointer compty else ty
-  and unrTypelist = function
-    | Tnil -> Tnil
-    | Tcons(hd, tl) -> Tcons(unrType hd, unrTypelist tl)
-  and unrFieldlist = function
-    | Fnil -> Fnil
-    | Fcons(id, ty, tl) -> Fcons(id, unrType ty, unrFieldlist tl)
-  in unrType ty
-
-(* Return the type of a [struct] field *)
-let rec getFieldType f = function
-  | Fnil -> raise Not_found
-  | Fcons(idf, t, rem) -> if idf = f then t else getFieldType f rem
-
-(** ** Some functions over lists *)
-
-(** Keep the elements in a list from [elt] (included) to the end
-    (used for the translation of the [switch] statement) *)
-let rec keepFrom elt = function
-  | [] -> []
-  | (x :: l) as l' -> if x == elt then l' else keepFrom elt l
-
-(** Keep the elements in a list before [elt'] (excluded)
-    (used for the translation of the [switch] statement) *)
-let rec keepUntil elt' = function
-  | [] -> []
-  | x :: l -> if x == elt' then [] else x :: (keepUntil elt' l)
-
-(** Keep the elements in a list from [elt] (included) to [elt'] (excluded)
-    (used for the translation of the [switch] statement) *)
-let keepBetween elt elt' l =
-  keepUntil elt' (keepFrom elt l)
-
-(** ** Functions used to handle string literals *)
-
-let name_for_string_literal s =
-  try
-    Hashtbl.find stringTable s
-  with Not_found ->
-    incr stringNum;
-    let name = Printf.sprintf "__stringlit_%d" !stringNum in
-    let id = intern_string name in
-    let v =
-      makeVarinfo true s (typeAddAttributes [Attr("const",[])] charPtrType) in
-    v.vstorage <- Static;
-    v.vreferenced <- true;
-    Hashtbl.add varinfo_atom id v;
-    !define_stringlit_hook id v;
-    Hashtbl.add stringTable s id;
-    id
-
-let typeStringLiteral s =
-  Tarray(Tint(I8, Unsigned), z_of_camlint(Int32.of_int(String.length s + 1)))
-
-let global_for_string s id =
-  let init = ref [] in
-  let add_char c =
-    init :=
-       AST.Init_int8(coqint_of_camlint(Int32.of_int(Char.code c)))
-       :: !init in
-  add_char '\000';
-  for i = String.length s - 1 downto 0 do add_char s.[i] done;
-  Datatypes.Coq_pair(Datatypes.Coq_pair(id, !init), typeStringLiteral s)
-
-let globals_for_strings globs =
-  Hashtbl.fold
-    (fun s id l -> global_for_string s id :: l)
-    stringTable globs
-
-(** ** Handling of stubs for variadic functions *)
-
-let stub_function_table = Hashtbl.create 47
-
-let register_stub_function name tres targs =
-  let rec letters_of_type = function
-    | Tnil -> []
-    | Tcons(Tfloat _, tl) -> "f" :: letters_of_type tl
-    | Tcons(_, tl) -> "i" :: letters_of_type tl in
-  let stub_name =
-    name ^ "$" ^ String.concat "" (letters_of_type targs) in
-  try
-    (stub_name, Hashtbl.find stub_function_table stub_name)
-  with Not_found ->
-    let rec types_of_types = function
-      | Tnil -> Tnil
-      | Tcons(Tfloat _, tl) -> Tcons(Tfloat F64, types_of_types tl)
-      | Tcons(_, tl) -> Tcons(Tpointer Tvoid, types_of_types tl) in
-    let stub_type = Tfunction (types_of_types targs, tres) in
-    Hashtbl.add stub_function_table stub_name stub_type;
-    (stub_name, stub_type)
-
-let declare_stub_function stub_name stub_type =
-  match stub_type with
-  | Tfunction(targs, tres) ->
-      Datatypes.Coq_pair(intern_string stub_name,
-                         External(intern_string stub_name, targs, tres))
-  | _ -> assert false
-
-let declare_stub_functions k =
-  Hashtbl.fold (fun n i k -> declare_stub_function n i :: k)
-               stub_function_table k
-
-(** ** Generation of temporary variable names *)
-
-let current_function = ref (None: Cil.fundec option)
-
-let make_temp typ =
-  match !current_function with
-  | None -> assert false
-  | Some f ->
-      let v = Cil.makeTempVar f typ in 
-      intern_string v.vname
-
-let rec constant_address e =
-  match e with
-  | Expr(Evar v, _) -> true
-  | Expr(Efield(e, id), _) -> constant_address e
-  | _ -> false
-
-let cache_address ty e (f: expr -> statement) =
-  if constant_address e then
-    f e
-  else begin
-    let t = make_temp (TPtr(ty, [])) in
-    let ty = typeof e in
-    let typ = Tpointer ty in
-    Ssequence(Sassign(Expr(Evar t, typ), Expr(Eaddrof e, typ)),
-              f (Expr(Ederef(Expr(Evar t, typ)), ty)))
-  end
-
-let current_function_return_type() =
-  match !current_function with
-  | None -> assert false
-  | Some f ->
-      match f.svar.vtype with
-      | TFun(ty_ret, ty_args, _, _) -> ty_ret
-      | _ -> assert false
-
-(** Detect and report GCC's __builtin_ functions *)
-
-let check_builtin s =
-  let b = "__builtin_" in
-  if String.length s >= String.length b
-  && String.sub s 0 (String.length b) = b
-  then unsupported ("GCC `" ^ s ^ "' built-in function")
-
-(** ** Helpers for struct assignment *)
-
-let eintconst n =
-  Expr(Econst_int n, Tint(I32, Signed))
-let eindex e1 e2 ty =
-  Expr(Ederef(Expr (Ebinop(Oadd, e1, e2), typeof e1)), ty)
-let eaddrof e =
-  Expr(Eaddrof e, Tpointer(typeof e))
-
-let memcpy_ident = intern_string "memcpy"
-let memcpy_arg_type =
-  Tcons(Tpointer Tvoid, Tcons(Tpointer Tvoid, Tcons(Tint(I32, Unsigned), Tnil)))
-let memcpy_res_type = Tpointer Tvoid
-let memcpy_type = Tfunction(memcpy_arg_type, memcpy_res_type)
-let memcpy_used = ref false
-
-exception Use_memcpy
-
-let max_assignment_num = 8
-
-let compile_assignment ty lhs rhs =
-
-  let num_assign = ref 0 in
-
-  let rec comp_assign l r =
-    match typeof l with
-    | Tstruct(id, flds) -> 
-        let rec comp_field = function
-        | Fnil -> Sskip
-        | Fcons(id, ty, rem) ->
-            let ty = unrollType id (Tstruct(id, flds)) ty in
-            Ssequence(comp_assign (Expr (Efield(l, id), ty))
-                                  (Expr (Efield(r, id), ty)),
-                      comp_field rem)
-        in comp_field flds
-    | Tunion(id, flds) -> raise Use_memcpy
-    | Tarray(ty, sz) -> 
-        let sz = camlint_of_coqint sz in
-        let rec comp_element i =
-          if i >= sz then Sskip else begin
-            let idx = eintconst (coqint_of_camlint i) in
-            Ssequence(comp_assign (eindex l idx ty) (eindex r idx ty),
-                      comp_element (Int32.succ i))
-          end
-        in comp_element 0l
-    | _ ->
-        if !num_assign >= max_assignment_num then raise Use_memcpy;
-        incr num_assign;
-        Sassign(l, r)
-  in
-    try 
-      cache_address ty lhs (fun lhs' ->
-        cache_address ty rhs (fun rhs' ->
-          comp_assign lhs' rhs'))
-    with Use_memcpy ->
-      memcpy_used := true;
-      Scall(None, Expr(Evar memcpy_ident, memcpy_type),
-                  [eaddrof lhs; eaddrof rhs; eintconst (sizeof (typeof lhs))])
-
-let declare_memcpy fundecl =
-  if !memcpy_used
-  && not (List.exists (fun (Datatypes.Coq_pair(id, _)) -> id = memcpy_ident)
-                      fundecl)
-  then Datatypes.Coq_pair(memcpy_ident,
-                          External(memcpy_ident, memcpy_arg_type, memcpy_res_type))
-       :: fundecl
-  else fundecl
-
-(** ** Translation functions *)
-
-(** Convert a [Cil.ikind] into a pair [(intsize * signedness)] *)
-let convertIkind ik =
-  match TS.convertIkind ik with
-    | Some p -> p
-    | None -> unsupported "integer type specifier"
-
-
-(** Convert a [Cil.fkind] into a [floatsize] *)
-let convertFkind fk =
-  match TS.convertFkind fk with
-    | Some fs -> fs
-    | None -> unsupported "floating-point type specifier"
-
-
-(** Convert a [Cil.constant] into a [CabsCoq.expr] *)
-let rec convertConstant = function
-  | CInt64 (i64, _, _) ->
-      let i = coqint_of_camlint (Int64.to_int32 i64) in
-      Expr (Econst_int i, constInt32)
-  | CStr s ->
-      let symb = name_for_string_literal s in
-      Expr (Evar symb, typeStringLiteral s)
-  | CWStr _ ->
-      unsupported "wide string literal"
-  | CChr c  ->
-      let i = coqint_of_camlint (Int32.of_int (Char.code c)) in
-      Expr (Econst_int i, constInt32)
-  | CReal (f, _, _) ->
-      Expr (Econst_float f, Tfloat F64)
-  | (CEnum (exp, str, enumInfo)) as enum ->
-      (* do constant folding on an enum constant *)
-      let e = Cil.constFold false (Const enum) in
-      convertExp e
-
-
-(** Convert a [Cil.UnOp] into a [CabsCoq.expr]
-    ([t] is the type of the result of applying [uop] to [e]) *)
-and convertUnop uop e t =
-  let e' = convertExp e in
-  let t' = convertTyp t in
-  let uop' = match uop with
-    | Neg -> Eunop (Oneg, e')
-    | BNot -> Eunop (Onotint, e')
-    | LNot -> Eunop (Onotbool, e')
-  in
-    Expr (uop', t')
-
-
-(** Convert a [Cil.BinOp] into a [CabsCoq.expr]
-    ([t] is the type of the result of applying [bop] to [(e1, e2)], every
-    arithmetic conversion being made explicit by CIL for both arguments] *)
-and convertBinop bop e1 e2 t =
-  let e1' = convertExp e1 in
-  let e2' = convertExp e2 in
-  let t' = convertTyp t in
-  let bop' = match bop with
-    | PlusA   -> Ebinop (Oadd, e1', e2')
-    | PlusPI  -> Ebinop (Oadd, e1', e2')
-    | IndexPI -> Ebinop (Oadd, e1', e2')
-    | MinusA  -> Ebinop (Osub, e1', e2')
-    | MinusPI -> Ebinop (Osub, e1', e2')
-    | MinusPP -> Ebinop (Osub, e1', e2')
-    | Mult    -> Ebinop (Omul, e1', e2')
-    | Div     -> Ebinop (Odiv, e1', e2')
-    | Mod     -> Ebinop (Omod, e1', e2')
-    | Shiftlt -> Ebinop (Oshl, e1', e2')
-    | Shiftrt -> Ebinop (Oshr, e1', e2')
-    | Lt      -> Ebinop (Olt, e1', e2')
-    | Gt      -> Ebinop (Ogt, e1', e2')
-    | Le      -> Ebinop (Ole, e1', e2')
-    | Ge      -> Ebinop (Oge, e1', e2')
-    | Eq      -> Ebinop (Oeq, e1', e2')
-    | Ne      -> Ebinop (One, e1', e2')
-    | BAnd    -> Ebinop (Oand, e1', e2')
-    | BXor    -> Ebinop (Oxor, e1', e2')
-    | BOr     -> Ebinop (Oor, e1', e2')
-    | LAnd    -> Eandbool (e1', e2')
-    | LOr     -> Eorbool (e1', e2')
-  in
-    Expr (bop', t')
-
-
-(** Test if two types are compatible
-    (in order to cast one of the types to the other) *)
-and compatibleTypes t1 t2 = true
-(*
-  let isArithmeticType = function
-    | Tint _ | Tfloat _ -> true
-    | _ -> false
-  in
-  let isPointerType = function
-    | Tpointer _ | Tarray _ -> true
-    | _ -> false
-  in
-       (t1 = t2)
-    || (isArithmeticType t1 && isArithmeticType t2)
-    || match (t1, t2) with
-         | (Tpointer Tvoid, t) | (t, Tpointer Tvoid) -> isPointerType t
-	 | (Tint _, t) | (t, Tint _) -> isPointerType t
-	 | _ -> false
-*)
-
-
-(** Convert a [Cil.CastE] into a [CabsCoq.expr]
-    (fail if the cast is illegal) *)
-and processCast t e =
-  let t' = convertTyp t in
-  let te = convertTyp (Cil.typeOf e) in
-    if compatibleTypes t' te then
-      let e' = convertExp e in
-	Expr (Ecast (t', e'), t')
-    else internal_error "processCast: illegal cast"
-
-
-(** Convert a [Cil.exp list] into an [CamlCoq.exprlist] *)
-and processParamsE = function
-  | [] -> []
-  | e :: l ->
-      let (Expr (_, t)) as e' = convertExp e in
-	match t with
-	  | Tstruct _ | Tunion _ ->
-              unsupported "function parameter of struct or union type"
-	  | _ -> e' :: processParamsE l
-
-
-(** Convert a [Cil.exp] into a [CabsCoq.expr] *)
-and convertExp = function
-  | Const c ->
-      convertConstant c
-  | Lval lv ->
-      convertLval lv
-  | SizeOf t ->
-      Expr (Esizeof (convertTyp t), constInt32uns)
-  | SizeOfE e ->
-      let ty = convertTyp (Cil.typeOf e) in
-      Expr (Esizeof ty, constInt32uns)
-  | SizeOfStr str ->
-      let n = coqint_of_camlint (Int32.of_int(String.length str)) in
-      Expr (Econst_int n, constInt32uns)
-  | AlignOf t ->
-      unsupported "GCC `alignof' construct"
-  | AlignOfE e ->
-      unsupported "GCC `alignof' construct"
-  | UnOp (uop, e, t) ->
-      convertUnop uop e t
-  | BinOp (bop, e1, e2, t) ->
-      convertBinop bop e1 e2 t
-  | CastE (t, e) ->
-      processCast t e
-  | AddrOf lv ->
-      let (Expr (_, t)) as e = convertLval lv in
-      Expr (Eaddrof e, Tpointer t)
-  | StartOf lv ->
-      (* convert an array into a pointer to the beginning of the array *)
-      match Cil.unrollType (Cil.typeOfLval lv) with
-	| TArray (t, _, _) ->
-	    let t' = convertTyp t in
-	    let tPtr = Tpointer t' in
-	    let e = convertLval lv in
-	      (* array A of type T replaced by (T* )A *)
-	      Expr (Ecast (tPtr, e), tPtr)
-	| _ -> internal_error "convertExp: StartOf applied to a \
-                                         lvalue whose type is not an array"
-
-
-(** Convert a [Cil.lval] into a [CabsCoq.expression] *)
-and convertLval lv =
-  (* convert the offset of the lvalue *)
-  let rec processOffset ((Expr (_, t)) as e) = function
-    | NoOffset -> e
-    | Field (f, ofs) ->
-	begin match t with
-	  | Tstruct(id, fList) ->
-	      begin try
-		let idf = intern_string f.fname in
-		let t' = unrollType id t (getFieldType idf fList) in
-                  processOffset (Expr (Efield (e, idf), t')) ofs
-	      with Not_found ->
-		internal_error "processOffset: no such struct field"
-	      end
-	  | Tunion(id, fList) ->
-	      begin try
-		let idf = intern_string f.fname in
-		let t' = unrollType id t (getFieldType idf fList) in
-		  processOffset (Expr (Efield (e, idf), t')) ofs
-	      with Not_found ->
-		internal_error "processOffset: no such union field"
-	      end
-	  | _ ->
-              internal_error "processOffset: Field on a non-struct nor union"
-	end
-    | Index (e', ofs) ->
-	match t with
-	  | Tarray (t', _) -> 
-              let e'' = Ederef(Expr (Ebinop(Oadd, e, convertExp e'), t)) in
-              processOffset (Expr (e'', t')) ofs
-	  | _ -> internal_error "processOffset: Index on a non-array"
-  in
-    (* convert the lvalue *)
-    match lv with
-      | (Var v, ofs) ->
-          check_builtin v.vname;
-	  let id = intern_string v.vname in
-            processOffset (Expr (Evar id, convertTyp v.vtype)) ofs
-      | (Mem e, ofs) ->
-	  match Cil.unrollType (Cil.typeOf e) with
-	    | TPtr (t, _) -> let e' = Ederef (convertExp e) in
-                               processOffset (Expr (e', convertTyp t)) ofs
-	    | _ -> internal_error "convertLval: Mem on a non-pointer"
-	 
-
-(** Convert a [(Cil.string * Cil.typ * Cil.attributes)] list
-    into a [typelist] *)
-and processParamsT convert = function
-  | [] -> Tnil
-  | (_, t, _) :: l ->
-      let t' = convert t in
-	match t' with
-	  | Tstruct _ | Tunion _ ->
-              unsupported "function parameter of struct or union type"
-	  | _ -> Tcons (t', processParamsT convert l)
-
-
-(** Convert a [Cil.typ] into a [coq_type] *)
-and convertTypGen env = function
-  | TVoid _ -> Tvoid
-  | TInt (k, _) -> let (x, y) = convertIkind k in Tint (x, y)
-  | TFloat (k, _) -> Tfloat (convertFkind k)
-  | TPtr (TComp(c, _), _) when List.mem c.ckey env ->
-      Tcomp_ptr (intern_string (Cil.compFullName c))
-  | TPtr (t, _) -> Tpointer (convertTypGen env t)
-  | TArray (t, eOpt, _) ->
-      begin match eOpt with
-	| None ->
-            warning "array type of unspecified size";
-            Tarray (convertTypGen env t, coqint_of_camlint 0l)
-	| Some e ->
-            begin try
-              match eval_expr e with
-              | CInt64 (i64, _, _) ->
-                  Tarray (convertTypGen env t,
-                          coqint_of_camlint (Int64.to_int32 i64))
-              | _ -> unsupported "size of array type not an integer constant"
-            with NotConst ->
-              unsupported "size of array type not constant"
-            end
-      end
-  | TFun (t, argListOpt, vArg, _) ->
-      if vArg then unsupported "variadic function type";
-      let argList =
-        match argListOpt with
-          | None -> unsupported "un-prototyped function type"
-          | Some l -> l
-      in
-      let t' = convertTypGen env t in
-      begin match t' with
-        | Tstruct _ | Tunion _ -> 
-            unsupported "return type is a struct or union"
-        | _ -> Tfunction (processParamsT (convertTypGen env) argList, t')
-      end
-  | TNamed (tinfo, _) -> convertTypGen env tinfo.ttype
-  | TComp (c, _) ->
-      let rec convertFieldList = function
-        | [] -> Fnil
-        | {fname=str; ftype=t} :: rem ->
-            let idf = intern_string str in
-            let t' = convertTypGen (c.ckey :: env) t in
-            Fcons(idf, t', convertFieldList rem) in
-      let fList = convertFieldList c.cfields in
-      let id = intern_string (Cil.compFullName c) in
-      if c.cstruct then Tstruct(id, fList) else Tunion(id, fList)
-  | TEnum _ -> constInt32   (* enum constants are integers *)
-  | TBuiltin_va_list _ -> unsupported "GCC `builtin va_list' type"
-
-and convertTyp ty = convertTypGen [] ty
-
-(** Convert a [Cil.varinfo] into a pair [(ident * coq_type)] *)
-let convertVarinfo v =
-  updateLoc(v.vdecl);
-  let id = intern_string v.vname in
-    Datatypes.Coq_pair (id, convertTyp v.vtype)
-
-
-(** Convert a [Cil.varinfo] into a pair [(ident * coq_type)]
-    (fail if the variable is of type struct or union) *)
-let convertVarinfoParam v =
-  updateLoc(v.vdecl);
-  let id = intern_string v.vname in
-  let t' = convertTyp v.vtype in
-    match t' with
-      | Tstruct _ | Tunion _ ->
-          unsupported "function parameter of struct or union type"
-      | _ -> Datatypes.Coq_pair (id, t')
-
-
-(** Convert a [Cil.exp] which has a function type into a [CabsCoq.expr]
-    (used only to translate function calls) *)
-let convertExpFuncall e eList =
-  match typeOf e with
-  | TFun (res, argListOpt, vArg, _) ->
-      begin match argListOpt, vArg with
-      | Some argList, false ->
-          (* Prototyped, non-variadic function *)
-          if List.length argList <> List.length eList then
-            internal_error "convertExpFuncall: wrong number of arguments";
-          (convertExp e, processParamsE eList)
-      | _, _ ->
-          (* Variadic or unprototyped function: generate a call to
-             a stub function with the appropriate number and types
-             of arguments.  Works only if the function expression e
-             is a global variable. *)
-          let params = processParamsE eList in
-          let fun_name =
-            match e with
-            | Lval(Var v, NoOffset) ->
-                warning "working around a call to a variadic function";
-                v.vname
-            | _ ->
-                unsupported "call to variadic function" in
-          let rec typeOfExprList = function
-            | [] -> Tnil
-            | Expr (_, ty) :: rem -> Tcons (ty, typeOfExprList rem) in
-          let targs = typeOfExprList params in
-          let tres = convertTyp res in
-          let (stub_fun_name, stub_fun_typ) =
-            register_stub_function fun_name tres targs in
-          (Expr(Evar(intern_string stub_fun_name), stub_fun_typ),
-           params)
-      end
-  | _ -> internal_error "convertExpFuncall: not a function"
-
-(** Auxiliaries for function calls *)
-
-let makeFuncall1 tyfun (Expr(_, tlhs) as elhs) efun eargs =
-  match tyfun with
-  | TFun (t, _, _, _) ->
-      let tres = convertTyp t in
-      if tlhs = tres then
-        Scall(Some elhs, efun, eargs)
-      else begin
-        let tmp = make_temp t in
-        let elhs' = Expr(Evar tmp, tres) in
-        Ssequence(Scall(Some elhs', efun, eargs),
-                  Sassign(elhs, Expr(Ecast(tlhs, elhs'), tlhs)))
-      end
-  | _ -> internal_error "wrong type for function in call"
-
-let makeFuncall2 tyfun tylhs elhs efun eargs =
-  match elhs with
-  | Expr(Evar _, _) ->
-      makeFuncall1 tyfun elhs efun eargs
-  | Expr(_, tlhs) ->
-      let tmp = make_temp tylhs in
-      let elhs' = Expr(Evar tmp, tlhs) in
-      Ssequence(makeFuncall1 tyfun elhs' efun eargs,
-                Sassign(elhs, elhs'))
-                
-(** Convert a [Cil.instr] into a [CabsCoq.statement] *)
-let processInstr = function
-  | Set (lv, rv, loc) ->
-      updateLoc(loc);
-      let lv' = convertLval lv in
-      let rv' = convertExp rv in
-      begin match typeof lv' with
-      | Tstruct _ | Tunion _ -> compile_assignment (typeOfLval lv) lv' rv'
-      | t -> Sassign (lv', rv')
-      end
-  | Call (None, e, eList, loc) ->
-      updateLoc(loc);
-      let (efun, params) = convertExpFuncall e eList in
-      Scall(None, efun, params)
-  | Call (Some lv, e, eList, loc) ->
-      updateLoc(loc);
-      let (efun, params) = convertExpFuncall e eList in
-      makeFuncall2 (Cil.typeOf e) (Cil.typeOfLval lv) (convertLval lv) efun params
-  | Asm (_, _, _, _, _, loc) ->
-      updateLoc(loc);
-      unsupported "inline assembly"
-
-(** Convert a [Cil.instr list] into a [CabsCoq.statement] *)
-
-let rec processInstrList = function
-  | [] -> Sskip
-  | [s] -> processInstr s
-  | s :: l -> 
-      let cs = processInstr s in
-      let cl = processInstrList l in
-      Ssequence (cs, cl)
-
-
-(** Convert a [Cil.stmt list] into a [CabsCoq.statement] *)
-let rec processStmtList = function
-  | [] -> Sskip
-  | [s] -> convertStmt s
-  | s :: l ->
-      let cs = convertStmt s in
-      let cl = processStmtList l in
-      Ssequence (cs, cl)
-
-
-(** Return the list of the constant expressions in a label list
-    (return [None] if this is the default case)
-    (fail if the constant expression is not of type integer) *)
-and getCaseList lblList =
-  match lblList with
-    | [] -> Some []
-    | Label (_, loc, _) :: l -> updateLoc(loc);  getCaseList l
-    | Default loc :: _ -> updateLoc(loc);  None
-    | Case (e, loc) :: l ->
-	updateLoc(loc);
-	begin match convertExp e with
-	  | Expr (Econst_int n, _) ->
-	      begin match getCaseList l with
-		| None -> None
-		| Some cl -> Some (n :: cl)
-	      end
-	  | _ -> internal_error "getCaseList: case label does not \
-                                           reduce to an integer constant"
-	end
-
-
-(** Convert a list of integers into a [CabsCoq.lblStatementList] *)
-and processCaseList cl s lrem =
-  match cl with
-    | [] -> internal_error "processCaseList: syntax error in switch statement"
-    | [n] -> LScase (n, s, lrem)
-    | n1 :: l -> LScase (n1, Sskip, processCaseList l s lrem)
-
-      
-(** Convert a [Cil.stmt list] which is the body of a Switch structure
-    into a [CabsCoq.lblStatementList]
-    (Pre-condition: all the Case labels are supposed to be at the same level,
-    ie. no nested structures) *)
-and processLblStmtList switchBody = function
-  | [] -> LSdefault Sskip
-  | [ls] ->
-      let s = processStmtList (keepFrom ls switchBody) in
-      begin match getCaseList ls.labels with
-	| None -> LSdefault s
-	| Some cl -> processCaseList cl s (LSdefault Sskip)
-      end
-  | ls :: ((ls' :: _) as l) ->
-      if ls.labels = ls'.labels then processLblStmtList switchBody l
-      else
-	begin match getCaseList ls.labels with
-	  | None -> unsupported "default case is not at the end of this `switch' statement"
-	  | Some cl ->
-	      let s = processStmtList (keepBetween ls ls' switchBody) in
-	      let lrem = processLblStmtList switchBody l in
-	        processCaseList cl s lrem
-	end
-
-
-(** Convert a [Cil.stmtkind] into a [CabsCoq.statement] *)
-and convertStmtKind = function
-    | Instr iList ->
-        processInstrList iList
-    | Return (eOpt, loc) ->
-        updateLoc(loc);
-        let ty_ret = current_function_return_type() in
-        let eOpt' = match eOpt with
-          | None -> 
-              if isVoidType ty_ret
-              then None
-              else unsupported ("`return' without a value in function with non-void return type")
-          | Some e -> 
-              if isVoidType ty_ret
-              then unsupported ("`return' with a value in function returning void")
-              else Some (convertExp e)
-        in 
-          Sreturn eOpt'
-    | Goto (sref, loc) ->
-        updateLoc(loc);
-        let rec extract_label = function
-        | [] -> internal_error "convertStmtKind: goto without label"
-        | Label(lbl, _, _) :: _ -> lbl
-        | _ :: rem -> extract_label rem
-        in
-          Sgoto (intern_string (extract_label (!sref).labels))
-    | Break loc ->
-        updateLoc(loc);
-        Sbreak
-    | Continue loc ->
-        updateLoc(loc);
-        Scontinue
-    | If (e, b1, b2, loc) ->
-        updateLoc(loc);
-        let e1 = processStmtList b1.bstmts in
-        let e2 = processStmtList b2.bstmts in
-          Sifthenelse (convertExp e, e1, e2)
-    | Switch (e, b, l, loc) ->
-        updateLoc(loc);
-        Sswitch (convertExp e, processLblStmtList b.bstmts l)
-    | While (e, b, loc) ->
-        updateLoc(loc);
-        Swhile (convertExp e, processStmtList b.bstmts)
-    | DoWhile (e, b, loc) ->
-        updateLoc(loc);
-        Sdowhile (convertExp e, processStmtList b.bstmts)
-    | For (bInit, e, bIter, b, loc) ->
-        updateLoc(loc);
-        let sInit = processStmtList bInit.bstmts in
-        let e' = convertExp e in
-        let sIter = processStmtList bIter.bstmts in
-          Sfor (sInit, e', sIter, processStmtList b.bstmts)
-    | Block b -> processStmtList b.bstmts
-    | TryFinally (_, _, loc) ->
-        updateLoc(loc);
-        unsupported "`try'...`finally' statement"
-    | TryExcept (_, _, _, loc) ->
-        updateLoc(loc);
-        unsupported "`try'...`except' statement"
-
-(** Convert a [Cil.stmtkind] into a [CabsCoq.statement] *)
-and convertStmt s =
-  let rec add_labels l s =
-    match l with
-    | [] -> s
-    | Label(lbl, _, _) :: rem -> Slabel(intern_string lbl, add_labels rem s)
-    | _ :: rem -> add_labels rem s (* error? *)
-  in add_labels s.labels (convertStmtKind s.skind)
-
-(** Convert a [Cil.GFun] into a pair [(ident * coq_fundecl)] *)
-let convertGFun fdec =
-  current_function := Some fdec;
-  let v = fdec.svar in
-  let ret = match v.vtype with
-    | TFun (t, _, vArg, _) ->
-	if vArg then unsupported "variadic function";
-        begin match convertTyp t with
-	| Tstruct _ | Tunion _ -> 
-            unsupported "return value of struct or union type"
-	| t' -> t'
-        end
-    | _ -> internal_error "convertGFun: incorrect function type"
-  in
-  let s = processStmtList fdec.sbody.bstmts in   (* function body -- do it first because of generated temps *)
-  let args = List.map convertVarinfoParam fdec.sformals in   (* parameters*)
-  let varList = List.map convertVarinfo fdec.slocals in   (* local vars *)
-  if v.vname = "main" then begin
-    match ret with
-    | Tint(_, _) -> ()
-    | _ -> updateLoc v.vdecl;
-           unsupported "the return type of main() must be an integer type"
-  end;
-  current_function := None;
-  let id = intern_string v.vname in
-  Hashtbl.add varinfo_atom id v;
-  !define_function_hook id v;
-  Datatypes.Coq_pair
-    (id,
-     Internal { fn_return=ret; fn_params=args; fn_vars=varList; fn_body=s })
-
-(** Auxiliary for [convertInit] *)
-
-let rec initDataLen accu = function
-  | [] -> accu
-  | i1 :: il ->
-      let sz = match i1 with
-      | Init_int8 _ -> 1l
-      | Init_int16 _ -> 2l
-      | Init_int32 _ -> 4l
-      | Init_float32 _ -> 4l
-      | Init_float64 _ -> 8l
-      | Init_space n -> camlint_of_z n
-      | Init_addrof(_, _) -> 4l
-      | Init_pointer _ -> 4l in
-      initDataLen (Int32.add sz accu) il
-
-(** Convert a [Cil.init] into a list of [AST.init_data] prepended to
-    the given list [k].  Result is in reverse order. *)
-
-type init_constant =
-  | ICint of int64 * intsize
-  | ICfloat of float * floatsize
-  | ICstring of string
-  | ICaddrof of string
-  | ICnone
-
-let extract_constant e =
-  match e with
-  | AddrOf(Var v, NoOffset) -> ICaddrof v.vname
-  | StartOf(Var v, NoOffset) -> ICaddrof v.vname
-  | _ ->
-    try
-      match eval_expr e with
-      | CInt64(n, ikind, _) -> ICint(n, fst (convertIkind ikind))
-      | CReal(n, fkind, _) -> ICfloat(n, convertFkind fkind)
-      | CStr s -> ICstring s
-      | _ -> ICnone
-    with NotConst -> ICnone
-
-let init_data_of_string s =
-  let id = ref [] in
-  let enter_char c =
-    let n = coqint_of_camlint(Int32.of_int(Char.code c)) in
-    id := Init_int8 n :: !id in
-  enter_char '\000';
-  for i = String.length s - 1 downto 0 do enter_char s.[i] done;
-  !id
-
-let convertInit init =
-  let k = ref []
-  and pos = ref 0 in
-  let emit size datum =
-    k := datum :: !k;
-    pos := !pos + size in
-  let emit_space size =
-    emit size (Init_space (z_of_camlint (Int32.of_int size))) in
-  let check_align size =
-    assert (!pos land (size - 1) = 0) in
-  let align size =
-    let n = !pos land (size - 1) in
-    if n > 0 then emit_space (size - n) in
-
-  let rec cvtInit init =
-    match init with
-    | SingleInit e ->
-        begin match extract_constant(Cil.constFold true e) with
-        | ICint(n, I8) ->
-            let n' = coqint_of_camlint (Int64.to_int32 n) in
-            emit 1 (Init_int8 n')
-        | ICint(n, I16) ->
-            check_align 2;
-            let n' = coqint_of_camlint (Int64.to_int32 n) in
-            emit 2 (Init_int16 n')
-        | ICint(n, I32) ->
-            check_align 4;
-            let n' = coqint_of_camlint (Int64.to_int32 n) in
-            emit 4 (Init_int32 n')
-        | ICfloat(n, F32) ->
-            check_align 4;
-            emit 4 (Init_float32 n)
-        | ICfloat(n, F64) ->
-            check_align 8;
-            emit 8 (Init_float64 n)
-        | ICaddrof id ->
-            check_align 4;
-            emit 4 (Init_addrof(intern_string id, coqint_of_camlint 0l))
-        | ICstring s ->
-            check_align 4;
-            emit 4 (Init_pointer(init_data_of_string s))
-        | ICnone ->
-            unsupported "this kind of expression is not supported in global initializers"
-      end
-  | CompoundInit(ty, data) ->
-      let ty' = convertTyp ty in
-      let sz = Int32.to_int (camlint_of_z (Csyntax.sizeof ty')) in
-      let pos0 = !pos in
-      Cil.foldLeftCompoundAll
-          ~doinit: cvtCompoundInit
-          ~ct: ty
-          ~initl: data
-          ~acc: ();
-      let pos1 = !pos in
-      assert (pos1 <= pos0 + sz);
-      if pos1 < pos0 + sz then emit_space (pos0 + sz - pos1)
-
-  and cvtCompoundInit ofs init ty () =
-    let ty' = convertTyp ty in
-    let al = Int32.to_int (camlint_of_z (Csyntax.alignof ty')) in
-    align al;
-    cvtInit init
-
-  in cvtInit init; List.rev !k
-
-(** Convert a [Cil.initinfo] into a list of [AST.init_data] *)
-
-let convertInitInfo ty info =
-  match info.init with
-  | None -> 
-      [ Init_space(Csyntax.sizeof (convertTyp ty)) ]
-  | Some init ->
-      convertInit init
-
-(** Convert a [Cil.GVar] into a global variable definition *)
-
-let convertGVar v i =
-  updateLoc(v.vdecl);
-  let id = intern_string v.vname in
-  Hashtbl.add varinfo_atom id v;
-  !define_variable_hook id v;
-  Datatypes.Coq_pair (Datatypes.Coq_pair(id, convertInitInfo v.vtype i),
-                      convertTyp v.vtype)
-
-
-(** Convert a [Cil.GVarDecl] into a global variable declaration *)
-
-let convertExtVar v =
-  updateLoc(v.vdecl);
-  let id = intern_string v.vname in
-  Hashtbl.add varinfo_atom id v;
-  Datatypes.Coq_pair (Datatypes.Coq_pair(id, []),
-                      convertTyp v.vtype)
-
-(** Convert a [Cil.GVarDecl] into an external function declaration *)
-
-let convertExtFun v =
-  updateLoc(v.vdecl);
-  match convertTyp v.vtype with
-  | Tfunction(args, res) ->
-      let id = intern_string v.vname in
-      Hashtbl.add varinfo_atom id v;
-      Datatypes.Coq_pair (id, External(id, args, res))
-  | _ ->
-      assert false
-
-(** Convert a [Cil.global list] into a pair whose first component,
-    of type [(ident * coq_function) coqlist], represents the definitions of the
-    functions and the second component, of type [(ident * coq_type) coqlist],
-    the definitions of the global variables of the program *)
-let rec processGlobals = function
-  | [] -> ([], [])
-  | g :: l ->
-	match g with
-	  | GType _ -> processGlobals l (* typedefs are unrolled... *)
-	  | GCompTag _ -> processGlobals l 
-	  | GCompTagDecl _ -> processGlobals l 
-	  | GEnumTag _ -> processGlobals l (* enum constants are folded... *)
-	  | GEnumTagDecl _ -> processGlobals l
-	  | GVarDecl (v, loc) ->
-	      updateLoc(loc);
-              (* Functions become external declarations,
-                 variadic and unprototyped functions are skipped,
-                 variables become uninitialized variables *)
-              begin match Cil.unrollType v.vtype with
-              | TFun (tres, Some targs, false, _) ->
-                  let fn = convertExtFun v in
-                  let (fList, vList) = processGlobals l in
-                  (fn :: fList, vList)
-              | TFun (tres, _, _, _) ->
-                  processGlobals l
-              | _ ->
-                  let var = convertExtVar v in
-                  let (fList, vList) = processGlobals l in
-                  (fList, var :: vList)
-              end
-	  | GVar (v, init, loc) ->
-	      updateLoc(loc);
-              let var = convertGVar v init in
-              let (fList, vList) = processGlobals l in
-              (fList, var :: vList)
-	  | GFun (fdec, loc) ->
-	      updateLoc(loc);
-              let fn = convertGFun fdec in
-              let (fList, vList) = processGlobals l in
-              (fn :: fList, vList)
-	  | GAsm (_, loc) ->
-	      updateLoc(loc);
-              unsupported "inline assembly"
-	  | GPragma (Attr(name, _) as attr, loc) ->
-	      updateLoc(loc);
-              if not (!process_pragma_hook attr) then
-                warning ("#pragma `" ^ name ^ "' directive ignored");
-              processGlobals l
-	  | GText _ -> processGlobals l (* comments are ignored *)
-
-(** Eliminate forward declarations of globals that are defined later *)
-
-let cleanupGlobals globs =
-  let defined =
-    List.fold_right
-      (fun g def ->
-        match g with GVar (v, init, loc) -> v.vname :: def
-                   | GFun (fdec, loc) -> fdec.svar.vname :: def
-                   | _ -> def)
-      globs [] in
-  List.filter
-    (function GVarDecl(v, loc) -> not(List.mem v.vname defined)
-            | g -> true)
-    globs
-
-(** Convert a [Cil.file] into a [CabsCoq.program] *)
-let convertFile f =
-  stringNum := 0;
-  Hashtbl.clear varinfo_atom;
-  Hashtbl.clear stringTable;
-  Hashtbl.clear stub_function_table;
-  memcpy_used := false;
-  let (funList, defList) = processGlobals (cleanupGlobals f.globals) in
-  let funList1 = declare_stub_functions funList in
-  let funList2 = match f.globinit with
-    | Some fdec -> convertGFun fdec :: funList1
-    | None -> funList1 in
-  let funList3 = declare_memcpy funList2 in
-  let defList1 = globals_for_strings defList in
-  { AST.prog_funct = funList3;
-    AST.prog_vars = defList1;
-    AST.prog_main = intern_string "main" }
-
-(*-----------------------------------------------------------------------*)
-end
-
-(* Extracting information about global variables from their atom *)
-
-let atom_is_static a =
-  try
-    let v = Hashtbl.find varinfo_atom a in
-    v.vstorage = Static
-  with Not_found ->
-    false
-
-let var_is_readonly v =
-  let a = typeAttrs v.vtype in
-  if hasAttribute "volatile" a then false else
-  if hasAttribute "const" a then true else
-  match Cil.unrollType v.vtype with
-  | TArray(ty, _, _) ->
-      let a' = typeAttrs ty in
-      hasAttribute "const" a' && not (hasAttribute "volatile" a')
-  | _ -> false
-
-let atom_is_readonly a =
-  try var_is_readonly (Hashtbl.find varinfo_atom a)
-  with Not_found -> false
diff --git a/cil/INSTALL b/cil/INSTALL
deleted file mode 100644
index ef7846fd9..000000000
--- a/cil/INSTALL
+++ /dev/null
@@ -1,41 +0,0 @@
-
- (For more complete installation instructions see the documentation in
-  doc/html.)
-
- Building from source (see below for installing binary distributions)
----------------------------------------------------------------------
-
- 1. If you use Windows, you must first install cygwin. 
-
- 2. You must install OCaml version 3.08 or higher (see instructions at
-    http://caml.inria.fr/ocaml). The recommended build process is using 
-    the cygwin version of ocaml. 
-
-    You can also build with Microsoft Visual Studio, but you must still have
-    cygwin during the build process. See msvcbuild.cmd. 
-
- 3. Download and unpack the distribution. 
-
- 4. Run ./configure (from within bash if on Windows)
-
- 5. Run make
-
- 6. Run make check
-
- Now you can start using bin/cilly and bin/ccured as explained in the
- documentation (in doc/html). 
-
-
- Installing binary distributions (Windows-only)
------------------------------------------------
-
- 1. Unpack the installation package
- 
- 2. Change CILHOME to the full path of the diretory where you put cil, in 
-    the following files: bin/CilConfig.pm, bin/cilly.bat, bin/patcher.bat
- 3. Go to test/small1 directory and run 
-    ..\..\cilly /c hello.c
-
-
-
-    
\ No newline at end of file
diff --git a/cil/LICENSE b/cil/LICENSE
deleted file mode 100644
index 5a7dab5e3..000000000
--- a/cil/LICENSE
+++ /dev/null
@@ -1,35 +0,0 @@
-Copyright (c) 2001-2005,
- George C. Necula    <necula@cs.berkeley.edu>
- Scott McPeak        <smcpeak@cs.berkeley.edu>
- Wes Weimer          <weimer@cs.berkeley.edu>
- Ben Liblit          <liblit@cs.wisc.edu>
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-1. Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-
-2. Redistributions in binary form must reproduce the above copyright notice,
-this list of conditions and the following disclaimer in the documentation
-and/or other materials provided with the distribution.
-
-3. The names of the contributors may not be used to endorse or promote
-products derived from this software without specific prior written
-permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
-LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGE.
-
-
-(See http://www.opensource.org/licenses/bsd-license.php)
diff --git a/cil/Makefile.gcc b/cil/Makefile.gcc
deleted file mode 100644
index 8fae4e343..000000000
--- a/cil/Makefile.gcc
+++ /dev/null
@@ -1,75 +0,0 @@
-# -*-makefile-*-
-# Makefile for CCured. The gcc part
-
-
-COMPILERNAME := GNUCC
-
-CC := gcc
-ifdef RELEASELIB
-  # sm: I will leave this here, but only use it for compiling our runtime lib
-  CFLAGS := -D_GNUCC -Wall -O3
-else
-  CFLAGS := -D_GNUCC -Wall -g -ggdb -D_DEBUG
-endif
-
-# dsw: added optional -pg flag
-ifdef USE_PG
-  CFLAGS += -pg
-endif
-
-ifdef NO_OPTIMIZATION
-  OPT_O2 :=
-else
-  OPT_O2 := -O2
-endif
-CONLY := -c
-OBJOUT := -o
-OBJEXT := o
-LIBEXT := a
-EXEOUT := -o
-LDEXT := 
-DEF := -D
-ASMONLY := -S -o 
-WARNALL := -Wall
-# sm: shuffled around a couple things so I could use CPPSTART for patch2
-CPPSTART := gcc -E -x c -Dx86_LINUX -D_GNUCC  -I/usr/include/sys
-CPPOUT := -o %o
-CPP := $(CPPSTART) -include fixup.h %i $(CPPOUT)
-INC := -I
-
-# sm: disable patching for now ('true' has no output)
-# (set it to 'echo' to re-enable)
-ifndef PATCHECHO
-  PATCHECHO := echo
-endif
-
-AR := ar 
-LIBOUT := -rs 
-
-# The system include files to be patched
-PATCH_SYSINCLUDES := crypt.h ctype.h fcntl.h glob.h grp.h malloc.h netdb.h \
-                     pthread.h pwd.h signal.h stdarg.h stdio.h stdlib.h \
-                     string.h time.h unistd.h varargs.h arpa/inet.h \
-		     sys/cdefs.h sys/fcntl.h sys/ioctl.h sys/socket.h \
-                     sys/stat.h sys/types.h sys/uio.h malloc.h setjmp.h
-
-ifneq ($(ARCHOS), x86_WIN32)
-PATCH_SYSINCLUDES += sys/shm.h
-endif
-
-# dsw & sm: DON'T DO THIS.  See comment in ccured_GNUCC.patch, search for 'sys/io.h'.
-# PATCH_SYSINCLUDES += sys/io.h
-
-# matth: reent.h is only in Cygwin, and Cygwin defines struct sigaction 
-# in sys/signal.h:
-ifeq ($(ARCHOS), x86_WIN32)
-PATCH_SYSINCLUDES += sys/reent.h sys/signal.h
-endif
-
-# matth: these files are not in Cygwin
-ifeq ($(ARCHOS), x86_LINUX)
-PATCH_SYSINCLUDES +=  nl_types.h bits/sigaction.h bits/select.h sys/prctl.h \
-	libgen.h shadow.h
-endif
-
-
diff --git a/cil/Makefile.in b/cil/Makefile.in
deleted file mode 100644
index a16d60cf1..000000000
--- a/cil/Makefile.in
+++ /dev/null
@@ -1,656 +0,0 @@
-# -*- Mode: makefile -*- 
-
-# Makefile for the cil wrapper
-# @do_not_edit@ Makefile.in
-#
-# author: George Necula
-
-#
-# If you want to add extra CIL features, you do not always need to change 
-# this file. Just invoke 
-#        ./configure EXTRASRCDIRS=/home/foodir EXTRAFEATURES="foo bar"
-# This will add two features that must be defined in foo.ml and bar.ml
-# 
-
-# Debugging. Set ECHO= to debug this Makefile 
-.PHONY: setup quickbuild doc distrib machdep cilversion
-ECHO = @
-
-# It is important to build quickbuild first, to generate the proper dependencies
-all:  quickbuild setup
-
-# Now add the defines for the CIL features
-@CIL_FEATURES_DEFINES@
-
-
-# look out for outdated Makefile; if it's out of date, this will automatically
-# re-run ./config.status, then re-exec make with the same arguments
-Makefile: config.status Makefile.in 
-	./$<
-
-config.status: configure
-	./$@ --recheck
-
-configure: configure.in
-	autoconf
-
-ocamlutil/perfcount.c: config.status ocamlutil/perfcount.c.in
-	./$<
-
-@DEFAULT_COMPILER@=1
-
-
-
-ifdef RELEASE
-  NATIVECAML := 1
-  UNSAFE     := 1
-endif
-
-ifndef ARCHOS
-   ARCHOS=@ARCHOS@
-endif
-
-# Put here all the byproducts of make
-OBJDIR      := obj/$(ARCHOS)
-DEPENDDIR   := obj/.depend
-
-CILLY_FEATURES :=
-ifdef USE_BLOCKINGGRAPH
-  CILLY_FEATURES += blockinggraph
-endif
-ifdef USE_RAND
-  CILLY_FEATURES += rand
-endif
-ifdef USE_ARITHABS
-  CILLY_FEATURES += arithabs
-endif
-ifdef USE_SMALLOC
-  CILLY_FEATURES += smalloc
-endif
-ifdef USE_CQUALANN
-  CILLY_FEATURES += cqualann
-endif
-ifdef USE_ZRAPP
-  CILLY_FEATURES += rmciltmps zrapp
-endif
-# Add the EXTRAFEATURES
-CILLY_FEATURES += @EXTRAFEATURES@
-
-    # Now rules to make cilly
-CILLY_LIBRARY_MODULES = pretty inthash errormsg alpha trace stats util clist \
-              cilutil escape growArray\
-              cabs cabsvisit cprint lexerhack machdep cparser clexer  \
-              cilversion cil cillower formatparse formatlex formatcil cabs2cil \
-              patch frontc check mergecil \
-              dataflow dominators bitmap ssa ciltools \
-              usedef logcalls logwrites rmtmps \
-	      callgraph epicenter heapify \
-              setp uref olf ptranal \
-              canonicalize heap oneret partial simplemem simplify \
-	      dataslicing sfi \
-              cfg reachingdefs deadcodeelim availexps \
-              liveness \
-              testcil \
-	      $(CILLY_FEATURES) \
-	      ciloptions feature_config
-# ww: we don't want "main" in an external cil library (cil.cma),
-# otherwise every program that links against that library will get
-# main's argument checking and whatnot ...
-CILLY_MODULES = $(CILLY_LIBRARY_MODULES) main
-CILLY_CMODULES =
-CILLY_LIBS     = unix str
-
-SOURCEDIRS  += src src/frontc src/ext src/ext/pta ocamlutil @EXTRASRCDIRS@
-MLLS        += clexer.mll formatlex.mll
-MLYS        += cparser.mly formatparse.mly
-MODULES     += $(CILLY_MODULES) libmaincil
-
-
-
-    # Include now the common set of rules for OCAML
-include ocamlutil/Makefile.ocaml
-
-
-   # Now the rule to make cilly
-
-PROJECT_EXECUTABLE = $(OBJDIR)/cilly$(EXE)
-PROJECT_MODULES    = $(CILLY_MODULES)
-PROJECT_CMODULES   = perfcount $(CILLY_CMODULES)
-PROJECT_LIBS       = $(CILLY_LIBS)
-cilly: $(PROJECT_EXECUTABLE)
-include ocamlutil/Makefile.ocaml.build
-
-
-quickbuild: cilversion machdep cilly
-
-# Setup also makes the native code versions
-#
-# sm: cillib is only built with NATIVECAML=1 because it builds libcil.a,
-# which requires native-code .cmx compiled modules... could break it
-# into two targets so we build cil.cma both ways, but no one is using
-# cil.cma now so I'll leave it alone
-setup: cilversion machdep
-	$(MAKE) cilly NATIVECAML= 
-	$(MAKE) cilly NATIVECAML=1
-	$(MAKE) cillib NATIVECAML=
-	$(MAKE) cillib NATIVECAML=1
-
-# Create the machine dependency module
-# If the cl command cannot be run then the MSVC part will be identical to GCC
-.PHONY : machdep 
-machdep: $(OBJDIR)/machdep.ml 
-$(OBJDIR)/machdep.ml : src/machdep.c configure.in Makefile.in
-	rm -f $@
-	echo "(* This module was generated automatically by code in Makefile and machdep.c *)" >$@
-# Now generate the type definition
-	echo "type mach = {" >> $@ 
-	echo "  version_major: int;     (* Major version number *)"    >> $@
-	echo "  version_minor: int;     (* Minor version number *)"    >> $@
-	echo "  version: string;        (* version number *)"          >> $@
-	echo "  underscore_name: bool;  (* If assembly names have leading underscore *)" >> $@
-	echo "  sizeof_short: int;      (* Size of \"short\" *)"       >> $@
-	echo "  sizeof_int: int;        (* Size of \"int\" *)"         >> $@
-	echo "  sizeof_long: int ;      (* Size of \"long\" *)"        >> $@
-	echo "  sizeof_longlong: int;   (* Size of \"long long\" *)"   >> $@
-	echo "  sizeof_ptr: int;        (* Size of pointers *)"        >> $@
-	echo "  sizeof_enum: int;       (* Size of enum types *)"      >> $@
-	echo "  sizeof_float: int;      (* Size of \"float\" *)"       >> $@
-	echo "  sizeof_double: int;     (* Size of \"double\" *)"      >> $@
-	echo "  sizeof_longdouble: int; (* Size of \"long double\" *)" >> $@
-	echo "  sizeof_sizeof: int;     (* Size of \"sizeof(T)\" *)"   >> $@
-	echo "  sizeof_wchar: int;      (* Size of \"wchar_t\" *)"     >> $@ 
-	echo "  sizeof_void: int;       (* Size of \"void\" *)"        >> $@
-	echo "  sizeof_fun: int;        (* Size of function *)"        >> $@
-	echo "  alignof_short: int;     (* Alignment of \"short\" *)"  >> $@
-	echo "  alignof_int: int;       (* Alignment of \"int\" *)"    >> $@
-	echo "  alignof_long: int;      (* Alignment of \"long\" *)"   >> $@
-	echo "  alignof_longlong: int;  (* Alignment of \"long long\" *)" >> $@
-	echo "  alignof_ptr: int;       (* Alignment of pointers *)"   >> $@
-	echo "  alignof_enum: int;      (* Alignment of enum types *)" >> $@
-	echo "  alignof_float: int;     (* Alignment of \"float\" *)"  >> $@
-	echo "  alignof_double: int;    (* Alignment of \"double\" *)" >> $@
-	echo "  alignof_longdouble: int;  (* Alignment of \"long double\" *)" >> $@
-	echo "  alignof_str: int;       (* Alignment of strings *)" >> $@
-	echo "  alignof_fun: int;       (* Alignment of function *)" >> $@
-	echo "  char_is_unsigned: bool; (* Whether \"char\" is unsigned *)">> $@
-	echo "  const_string_literals: bool; (* Whether string literals have const chars *)">> $@
-	echo "  little_endian: bool; (* whether the machine is little endian *)">>$@
-	echo "}" >> $@ 	
-	if gcc -D_GNUCC $< -o $(OBJDIR)/machdep.exe ;then \
-	    echo "machdep.exe created succesfull." \
-	;else \
-            rm -f $@; exit 1 \
-        ;fi 
-	echo "let gcc = {" >>$@
-	$(OBJDIR)/machdep.exe >>$@
-	echo "	 underscore_name = @UNDERSCORE_NAME@ ;" >> $@
-	echo "}"          >>$@
-	if cl /D_MSVC $< /Fe$(OBJDIR)/machdep.exe /Fo$(OBJDIR)/machdep.obj ;then \
-           echo "let hasMSVC = true" >>$@ \
-        ;else \
-           echo "let hasMSVC = false" >>$@ ;fi
-	echo "let msvc = {" >>$@
-	$(OBJDIR)/machdep.exe >>$@
-	echo "	 underscore_name = true ;" >> $@
-	echo "}"          >>$@
-	echo "let gccHas__builtin_va_list = @HAVE_BUILTIN_VA_LIST@" >>$@
-	echo "let __thread_is_keyword = @THREAD_IS_KEYWORD@"  >>$@
-
-#
-# Create the version information module
-.PHONY: cilversion 
-cilversion: $(OBJDIR)/cilversion.ml
-$(OBJDIR)/cilversion.ml: configure.in Makefile.in
-	rm -f $@
-	echo "(* This module was generated automatically by code in Makefile *)" >$@
-# Generate here the version information
-	echo "let cilVersionMajor = @CIL_VERSION_MAJOR@" >>$@
-	echo "let cilVersionMinor = @CIL_VERSION_MINOR@" >>$@
-	echo "let cilVersionRev   = @CIL_VERSION_REV@"   >>$@
-	echo "let cilVersion      = \"@CIL_VERSION@\""  >>$@ 
-
-# build two libraries
-.PHONY: cillib libcil
-ifeq ($(NATIVECAML),1)
-cillib: $(OBJDIR)/cil.$(CMXA) # $(OBJDIR)/libcil.a
-else
-cillib: $(OBJDIR)/cil.$(CMXA) 
-endif
-
-
-$(OBJDIR)/feature_config.ml: Makefile config.status
-	rm -f $(OBJDIR)/feature_config.*
-	echo "(* This module was generated automatically by code in Makefile.in *)" >$@
-# The Cilly feature options. A list of Cil.featureDescr 
-	echo "open Cil"   >>$@ 
-	echo "let features : featureDescr list = [" >> $@
-ifdef USE_BLOCKINGGRAPH
-	echo "   Blockinggraph.feature;" >> $@  
-endif
-ifdef USE_RAND
-	echo "   Rand.feature;" >> $@  
-endif
-ifdef USE_ARITHABS
-	echo "   Arithabs.feature;" >>$@
-endif
-ifdef USE_SMALLOC
-	echo "   Smalloc.feature;" >> $@  
-endif
-ifdef USE_CQUALANN
-	echo "   Cqualann.feature;" >> $@  
-endif
-ifdef USE_ZRAPP
-	echo "   Zrapp.feature;" >> $@  
-endif
-# Now the extra features, with the first letter capitalized
-	echo \
-          $(foreach f,@EXTRAFEATURES@, \
-             `echo $f | cut -c 1 | tr "[a-z]" "[A-Z]"``echo $f | cut -c 2-`".feature;") >> $@
-	echo "]"   >>$@ 
-# Must delete main.d and remake it, because it may have been made
-# before feature_config existed.
-	rm -f $(DEPENDDIR)/main.d
-	$(MAKE) $(DEPENDDIR)/main.d
-
-
-
-
-
-
-OCAML_CIL_LIB_MODULES := $(CILLY_LIBRARY_MODULES) 
-OCAML_CIL_LIB_CMODULES := perfcount
-
-# list of modules to use for building a library; remove 'main'
-# and add 'libmaincil'
-OCAML_CIL_C_LIB_MODULES := $(CILLY_MODULES:main=) libmaincil
-
-# Build an OCAML library (CMA / CMXA) that exports our Cil stuff
-$(OBJDIR)/cil.$(CMXA): $(OCAML_CIL_LIB_CMODULES:%=$(OBJDIR)/lib%.a) \
-                       $(OCAML_CIL_LIB_MODULES:%=$(OBJDIR)/%.$(CMO))
-	$(CAMLLINK) -a -o $@ -ccopt -L$(pkglibdir) \
-               $(OCAML_CIL_LIB_CMODULES:%=-cclib -l%) \
-               $(OCAML_CIL_LIB_MODULES:%=$(OBJDIR)/%.$(CMO))
-
-$(OBJDIR)/libperfcount.a: %: %($(OBJDIR)/perfcount.$(CMC))
-	ranlib $@
-
-# sm: for Simon: build a library of CIL functions which can
-# be called from C code; this is like the target above, except
-# it is callable from C instead of from Ocaml
-ifeq ($(NATIVECAML),1)
-$(OBJDIR)/libcil.a: $(OCAML_CIL_LIB_CMODULES:%=$(OBJDIR)/lib%.a) \
-                    $(OCAML_CIL_LIB_MODULES:%=$(OBJDIR)/%.$(CMO))
-	ocamlopt -output-obj -o $@ unix.cmxa str.cmxa $^
-else
-$(OBJDIR)/libcil.a:
-	@echo "Can only build $@ when NATIVECAML is 1."
-	exit 2
-endif
-
-# Test cil
-ifdef _MSVC
-TESTCILARG=--MSVC --testcil "bash msvctestcil"
-else
-TESTCILARG=       --testcil "bash gcctestcil"
-endif
-
-.PHONY: testcil
-testcil: $(OBJDIR)/cilly$(EXE)
-	       cd test; ../$(OBJDIR)/cilly$(EXE) $(TESTCILARG)
-
-.PHONY: odoc texdoc pdfdoc
-
-###
-### DOCUMENTATION
-###
-### The following are available
-###
-###   make doc  - creates the documentation
-###   make publish_doc - creates the documentation and puts it on the web page
-
-# Documentation generated by "ocamldoc"
-odoc: $(OBJDIR)/pretty.cmi $(OBJDIR)/cil.cmi
-	-rm -rf doc/html/cil/api
-	-mkdir doc/html/cil/api
-	-mkdir doc/html/cil/api-latex
-	-rm -f doc/ocamldoc.sty
-	ocamldoc -d doc/html/cil/api -v -stars \
-             -html \
-             -t "CIL API Documentation (version @CIL_VERSION@)" \
-	     -I $(OBJDIR) \
-                    ocamlutil/pretty.mli ocamlutil/errormsg.mli \
-                    ocamlutil/clist.mli \
-	  	    ocamlutil/stats.mli src/cil.mli src/formatcil.mli \
-                    ocamlutil/alpha.mli src/cillower.mli \
-                    src/ext/cfg.mli src/ext/dataflow.mli \
-                    src/ext/dominators.mli
-
-doc/cilpp.tex: doc/cilcode.pl doc/cil.tex 
-	-rm -rf doc/html/cil
-	-mkdir doc/html/cil
-	-mkdir doc/html/cil/examples
-	cd doc; perl cilcode.pl cil.tex >cilpp.tex.tmp
-	mv doc/cilpp.tex.tmp $@
-
-# Documentation generated from latex files using "hevea"
-texdoc: doc/cilpp.tex
-# Create the version document
-	cd doc/html/cil; echo "\def\cilversion{@CIL_VERSION@}" >cil.version.tex
-	cd doc/html/cil; echo "\def\ccuredversion{@CCURED_VERSION@}" >>cil.version.tex
-	cd doc/html/cil; hevea -exec xxdate.exe ../../cilpp
-	cd doc/html/cil; hevea -exec xxdate.exe ../../cilpp
-	cd doc/html/cil; mv cilpp.html cil.html
-	cd doc/html/cil; hacha -o ciltoc.html cil.html
-	cp -f doc/index.html doc/html/cil/index.html
-	cp -f doc/header.html doc/html/cil
-
-pdfdoc: doc/cilpp.tex $(OBJDIR)/pretty.cmi $(OBJDIR)/cil.cmi
-	cd doc; echo "\def\cilversion{@CIL_VERSION@}" >cil.version.tex
-	cd doc; echo "\def\ccuredversion{@CCURED_VERSION@}" >>cil.version.tex
-	cd doc; pdflatex cilpp.tex; pdflatex cilpp.tex
-	cd doc; mv cilpp.pdf html/cil/CIL.pdf
-	ocamldoc -o doc/cil-api.tex -v -stars \
-             -latex \
-             -t "CIL API Documentation (version @CIL_VERSION@)" \
-	     -I $(OBJDIR) \
-                    ocamlutil/pretty.mli ocamlutil/errormsg.mli \
-                    ocamlutil/clist.mli \
-	  	    ocamlutil/stats.mli src/cil.mli src/formatcil.mli \
-                    ocamlutil/alpha.mli
-
-	cd doc ; TEXINPUTS="$$TEXINPUTS:/usr/local/lib/ocaml/ocamldoc:/usr/lib/ocaml/ocamldoc" pdflatex cil-api.tex
-	cd doc ; mv cil-api.pdf html/cil/CIL-API.pdf
-
-doc: texdoc pdfdoc odoc
-
-
-#----------------------------------------------------------------------
-# Generate the CIL distribution
-# This will create a file cil.tar.gz. It includes the HTML documentation 
-# so that people can use it even if they don't have ocamldoc, hevea etc. 
-
-.PHONY: distrib distrib-nocheck checkdistrib
-CIL_TAR_GZ:=cil-@CIL_VERSION@.tar.gz
-## Make a distribution and check it
-distrib: distrib-nocheck checkdistrib
-
-# Work in a temporary directory
-TEMP_DIR = TEMP_cil-distrib
-
-# The tar archive members will be relative to this directory
-TOP_DIR = $(TEMP_DIR)/cil
-
-DISTRIB_ROOT = README LICENSE INSTALL Makefile.in  \
-               config.h.in Makefile.gcc Makefile.msvc \
-	       configure configure.in install-sh config.guess config.sub \
-	       cil.spec cil.spec.in
-
-DISTRIB_SRC = cilutil.ml cil.ml cil.mli check.ml check.mli \
-	      rmtmps.ml rmtmps.mli formatlex.mll formatparse.mly \
-	      formatcil.mli formatcil.ml testcil.ml \
-	      mergecil.ml mergecil.mli main.ml machdep.c \
-	      ciloptions.ml ciloptions.mli libmaincil.ml \
-	      escape.ml escape.mli cillower.mli cillower.ml
-
-DISTRIB_OCAMLUTIL = pretty.ml pretty.mli errormsg.ml errormsg.mli \
-                    trace.ml trace.mli stats.ml stats.mli util.ml util.mli \
-                    inthash.ml inthash.mli alpha.ml alpha.mli \
-		    intmap.ml intmap.mli clist.ml clist.mli \
-                    growArray.ml growArray.mli \
-                    perfcount.c.in Makefile.ocaml Makefile.ocaml.build
-
-
-DISTRIB_SRC_FRONTC = cabs.ml cprint.ml clexer.mli clexer.mll \
-		     cparser.mly lexerhack.ml \
-		     cabs2cil.ml cabs2cil.mli frontc.ml frontc.mli \
-	             cabsvisit.mli cabsvisit.ml patch.mli patch.ml
-
-DISTRIB_SRC_EXT = logcalls.ml logcalls.mli \
-                  astslicer.ml heap.ml partial.ml \
-                  logwrites.ml heapify.ml callgraph.ml callgraph.mli \
-                  epicenter.ml usedef.ml ciltools.ml \
-                  cfg.ml deadcodeelim.ml availexps.ml \
-                  dataflow.ml dataflow.mli \
-		  dominators.ml dominators.mli \
-		  bitmap.ml bitmap.mli \
-		  ssa.ml ssa.mli \
-	          stackoverflow.mli stackoverflow.ml \
-	          canonicalize.ml canonicalize.mli \
-	          oneret.ml oneret.mli sfi.ml \
-	          simplemem.ml simplify.ml \
-	          blockinggraph.ml blockinggraph.mli \
-		  dataslicing.ml dataslicing.mli \
-		  reachingdefs.ml \
-		  cfg.ml cfg.mli \
-		  liveness.ml
-
-DISTRIB_SRC_EXT_PTA = setp.ml setp.mli golf.ml golf.mli \
-                      ptranal.ml ptranal.mli \
-	              steensgaard.mli steensgaard.ml \
-                      uref.ml uref.mli olf.ml olf.mli
-
-DISTRIB_LIB = Cilly.pm KeptFile.pm OutputFile.pm TempFile.pm
-
-DISTRIB_BIN = CilConfig.pm.in cilly cilly.bat.in \
-              patcher patcher.bat.in test-bad teetwo
-
-DISTRIB_SMALL1=hello.c func.c init.c init1.c wchar1.c vararg1.c testharness.h 
-
-distrib-nocheck: $(DISTRIB_ROOT) doc
-        # Create the distribution from scratch
-	rm -rf $(TEMP_DIR)
-	mkdir $(TEMP_DIR)
-
-	rm -rf $(CIL_TAR_GZ)
-	mkdir $(TOP_DIR) \
-	      $(TOP_DIR)/src \
-              $(TOP_DIR)/src/frontc \
-              $(TOP_DIR)/src/ext \
-              $(TOP_DIR)/src/ext/pta \
-              $(TOP_DIR)/obj \
-              $(TOP_DIR)/doc \
-	      $(TOP_DIR)/lib \
-	      $(TOP_DIR)/bin \
-	      $(TOP_DIR)/doc/api \
-              $(TOP_DIR)/obj/.depend \
-              $(TOP_DIR)/obj/x86_WIN32 \
-              $(TOP_DIR)/obj/x86_LINUX \
-              $(TOP_DIR)/obj/ppc_DARWIN \
-              $(TOP_DIR)/obj/sparc_SOLARIS \
-              $(TOP_DIR)/test \
-              $(TOP_DIR)/test/small1 \
-              $(TOP_DIR)/ocamlutil
-
-	cp $(patsubst %,%,$(DISTRIB_ROOT)) $(TOP_DIR)
-
-	cp $(patsubst %,src/%,$(DISTRIB_SRC)) $(TOP_DIR)/src
-	cp $(patsubst %,ocamlutil/%,$(DISTRIB_OCAMLUTIL)) $(TOP_DIR)/ocamlutil
-	cp $(patsubst %,src/ext/%,$(DISTRIB_SRC_EXT)) $(TOP_DIR)/src/ext
-	cp $(patsubst %,src/ext/pta/%,$(DISTRIB_SRC_EXT_PTA)) \
-                                      $(TOP_DIR)/src/ext/pta
-	cp $(patsubst %,src/frontc/%,$(DISTRIB_SRC_FRONTC)) \
-		$(TOP_DIR)/src/frontc
-	cp $(patsubst %,lib/%,$(DISTRIB_LIB)) $(TOP_DIR)/lib
-	cp $(patsubst %,bin/%,$(DISTRIB_BIN)) $(TOP_DIR)/bin
-	cp $(patsubst %,test/small1/%,$(DISTRIB_SMALL1)) $(TOP_DIR)/test/small1
-
-	cp -r doc/html/cil/* $(TOP_DIR)/doc
-# Delete all CVS directories
-	if find $(TEMP_DIR) -name CVS -print >cvss.txt ; then \
-            rm -rf `cat cvss.txt` ;fi
-# Now make the TAR ball
-	cd $(TEMP_DIR); tar cfz $(CIL_TAR_GZ) cil
-	mv $(TEMP_DIR)/$(CIL_TAR_GZ) .
-
-#	rm -rf $(TEMP_DIR)
-
-## Check a distribution
-checkdistrib:
-	cd $(TOP_DIR) && ./configure && \
-           $(MAKE) && $(MAKE) quicktest
-
-distclean: clean
-	rm -f src/frontc/cparser.output
-	rm -f src/formatparse.output
-	rm -f ocamlutil/perfcount.c
-	rm -f bin/cilly.bat
-	rm -f bin/patcher.bat
-	rm -f bin/CilConfig.pm
-	rm -f config.log
-	rm -f config.h
-	rm -f Makefile
-
-## Publish the distribution
-CILHTMLDEST=/var/www/cil
-publish_distrib: publish_doc
-	if test -d $(CILHTMLDEST); then \
-           cp -rf doc/html/cil/* $(CILHTMLDEST); \
-           cp -f $(CIL_TAR_GZ) $(CILHTMLDEST)/distrib; \
-           ln -sf $(CILHTMLDEST)/distrib/$(CIL_TAR_GZ) $(CILHTMLDEST)/distrib/cil-latest.tar.gz ; \
-           echo "Publish succeeded"; \
-	else \
-	   error "Cannot publish because $(CILHTMLDEST) does not exist" ; \
-        fi
-
-publish_doc: doc
-	if test -d $(CILHTMLDEST); then \
-           cp -rf doc/html/cil/* $(CILHTMLDEST); echo "Done publishing doc"; \
-	else \
-	   error "Cannot publish because $(CILHTMLDEST) does not exist" ; \
-        fi
-
-cleancheck:
-	rm -f test/small1/*.o
-	rm -f test/small1/hello
-	rm -f test/small1/vararg1
-	rm -f test/small1/wchar1
-
-clean: cleancaml cleancheck
-	rm -f $(OBJDIR)/machdep.ml
-
-# Now include the compiler specific stuff
-ifdef _MSVC
-  include Makefile.msvc
-else
-  ifdef _GNUCC
-    include Makefile.gcc
-  endif
-endif
-
-test/%: 
-	bin/cilly $(CONLY) test/small1/$*.c $(OBJOUT)test/small1/$*.o
-
-testrun/%: 
-	bin/cilly test/small1/$*.c $(OBJOUT)test/small1/$*
-	test/small1/$*
-
-
-
-.PHONY: quicktest
-quicktest: $(patsubst %,test/%,func init init1) \
-           $(patsubst %,testrun/%,hello wchar1 vararg1)
-
-.PHONY: check
-check: quicktest
-
-############# Binary distribution ################
-.PHONY: bindistrb checkbindistrib
-
-BINCIL_TAR_GZ:=cil-win32-@CIL_VERSION@.tar.gz
-
-# Work in a temporary directory
-BINTEMP_DIR = TEMP_cil-bindistrib
-
-# The tar archive members will be relative to this directory
-BINTOP_DIR = $(BINTEMP_DIR)/cil
-
-BINDISTRIB_ROOT = README LICENSE
-
-BINDISTRIB_LIB = Cilly.pm KeptFile.pm OutputFile.pm TempFile.pm
-
-BINDISTRIB_BIN = CilConfig.pm.in cilly cilly.bat.in \
-              patcher patcher.bat.in
-
-BINDISTRIB_OBJ = cilly.byte.exe cilly.asm.exe
-
-BINDISTRIB_SMALL1=hello.c 
-
-bindistrib-nocheck: $(BINDISTRIB_ROOT) obj/x86_WIN32/cilly.asm.exe
-        # Create the distribution from scratch
-	rm -rf $(BINTEMP_DIR)
-	mkdir $(BINTEMP_DIR)
-
-	mkdir $(BINTOP_DIR) \
-              $(BINTOP_DIR)/obj \
-              $(BINTOP_DIR)/doc \
-	      $(BINTOP_DIR)/lib \
-	      $(BINTOP_DIR)/bin \
-	      $(BINTOP_DIR)/doc/api \
-              $(BINTOP_DIR)/obj/.depend \
-              $(BINTOP_DIR)/obj/x86_WIN32 \
-              $(BINTOP_DIR)/test \
-              $(BINTOP_DIR)/test/small1 
-
-	cp $(patsubst %,%,$(BINDISTRIB_ROOT)) $(BINTOP_DIR)
-	cp $(patsubst %,lib/%,$(BINDISTRIB_LIB)) $(BINTOP_DIR)/lib
-	cat bin/CilConfig.pm.in \
-            | sed -e "s|@||g" \
-            | sed -e "s|CC|cl|" \
-            | sed -e "s|DEFAULT_CIL_MODE|MSVC|" \
-            | sed -e "s|ARCHOS|x86_WIN32|" \
-               > $(BINTOP_DIR)/bin/CilConfig.pm
-	cat bin/patcher.bat.in | sed -e "s|@||g" >$(BINTOP_DIR)/bin/patcher.bat
-	cp bin/patcher $(BINTOP_DIR)/bin
-	cp bin/cilly $(BINTOP_DIR)/bin
-	cat bin/cilly.bat.in | sed -e "s|@||g" > $(BINTOP_DIR)/bin/cilly.bat
-	cp $(patsubst %,test/small1/%,$(BINDISTRIB_SMALL1)) \
-                                                 $(BINTOP_DIR)/test/small1
-	cp $(patsubst %,obj/x86_WIN32/%,$(BINDISTRIB_OBJ)) \
-                                       $(BINTOP_DIR)/obj/x86_WIN32
-
-	cp -r doc/html/cil/* $(BINTOP_DIR)/doc
-# Delete all CVS directories
-	if find $(BINTEMP_DIR) -name CVS -print >cvss.txt ; then \
-            rm -rf `cat cvss.txt` ;fi
-# Now make the TAR ball
-	cd $(BINTEMP_DIR); tar cfz $(BINCIL_TAR_GZ) cil
-	mv $(BINTEMP_DIR)/$(BINCIL_TAR_GZ) .
-
-#	rm -rf $(TEMP_DIR)
-
-## Check a distribution
-checkbindistrib:
-
-########################################################################
-
-
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-
-prefix = @prefix@
-exec_prefix = @exec_prefix@
-libdir = @libdir@
-pkglibdir = $(libdir)/cil
-datadir = @datadir@
-pkgdatadir = $(datadir)/cil
-
-all_mli := $(filter %.mli, $(DISTRIB_OCAMLUTIL) $(DISTRIB_SRC) $(DISTRIB_SRC_FRONTC) $(DISTRIB_SRC_EXT) $(DISTRIB_SRC_EXT_PTA))
-install_mli := $(filter $(OCAML_CIL_LIB_MODULES:=.mli), $(all_mli))
-install_cmi := $(install_mli:%.mli=$(OBJDIR)/%.cmi)
-install_cma := $(addprefix $(OBJDIR)/cil., cma cmxa a)
-install_lib := $(OCAML_CIL_LIB_CMODULES:%=$(OBJDIR)/lib%.a)
-
-install: $(install_cmi) $(install_cma) $(install_lib)
-	$(INSTALL) -d $(DESTDIR)$(pkglibdir)
-	$(INSTALL_DATA) $(install_cma) $(DESTDIR)$(pkglibdir)
-	$(INSTALL_DATA) $(install_cmi) $(DESTDIR)$(pkglibdir)
-	$(INSTALL_DATA) $(install_lib) $(DESTDIR)$(pkglibdir)
-	$(INSTALL) -d $(DESTDIR)$(pkgdatadir)
-	$(INSTALL_DATA) $(addprefix lib/, $(filter %.pm, $(DISTRIB_LIB))) $(DESTDIR)$(pkgdatadir)
-
-cil.spec: cil.spec.in
-	./config.status $@
-
-rpms: distrib
-	rpmbuild -ta $(CIL_TAR_GZ)
-
diff --git a/cil/Makefile.msvc b/cil/Makefile.msvc
deleted file mode 100644
index be1bb3823..000000000
--- a/cil/Makefile.msvc
+++ /dev/null
@@ -1,42 +0,0 @@
-#
-# Makefile for CCured. The Microsoft Visual C part
-#
-COMPILERNAME=MSVC
-
-CC:=cl /nologo
-ifdef RELEASELIB
-#matth:  we need the frame pointer for CHECK_GETFRAME, so
-# use /Oy- to prevent that optimization.
-  CFLAGS:=/DRELEASE /D_MSVC /Ox /Ob2 /G6 /Oy-
-else
-  CFLAGS:=/D_DEBUG /D_MSVC /Zi /MLd
-endif
-CONLY:=/c
-
-OPT_O2:= /Ox /Ob2 /G6
-
-OBJOUT:=/Fo
-OBJEXT:=obj
-
-EXEOUT:=/Fe
-LIBEXT:=lib
-LDEXT:=.exe
-
-DEF:=/D
-ASMONLY:=/Fa
-INC:=/I
-
-CPPSTART:=cl /Dx86_WIN32 /D_MSVC /E /TC /I./lib /DCCURED
-CPPOUT:=  >%o
-CPP:=$(CPPSTART) /FI fixup.h %i $(CPPOUT)
-
-PATCHECHO:=echo
-
-AR:=lib 
-LIBOUT:=/OUT:
-
-# The system include files to be patched
-PATCH_SYSINCLUDES:=stdio.h ctype.h string.h io.h stdarg.h crtdbg.h \
-                   varargs.h stdlib.h time.h malloc.h
-
-
diff --git a/cil/README b/cil/README
deleted file mode 100644
index 52710f2a9..000000000
--- a/cil/README
+++ /dev/null
@@ -1,2 +0,0 @@
- 
- See the documentation in doc/html.
diff --git a/cil/bin/CilConfig.pm.in b/cil/bin/CilConfig.pm.in
deleted file mode 100644
index 94241b190..000000000
--- a/cil/bin/CilConfig.pm.in
+++ /dev/null
@@ -1,6 +0,0 @@
-
-$::archos    = "@ARCHOS@";
-$::cc        = "@CC@";
-$::cilhome   = "@CILHOME@";
-$::default_mode = "@DEFAULT_CIL_MODE@";
-
diff --git a/cil/bin/cilly b/cil/bin/cilly
deleted file mode 100755
index e4bf737c7..000000000
--- a/cil/bin/cilly
+++ /dev/null
@@ -1,152 +0,0 @@
-#!/usr/bin/perl
-# A simple use of the Cilly module
-#
-#
-#
-# Copyright (c) 2001-2002, 
-#  George C. Necula    <necula@cs.berkeley.edu>
-#  Scott McPeak        <smcpeak@cs.berkeley.edu>
-#  Wes Weimer          <weimer@cs.berkeley.edu>
-# All rights reserved.
-# 
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions are
-# met:
-#
-# 1. Redistributions of source code must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-#
-# 2. Redistributions in binary form must reproduce the above copyright
-# notice, this list of conditions and the following disclaimer in the
-# documentation and/or other materials provided with the distribution.
-#
-# 3. The names of the contributors may not be used to endorse or promote
-# products derived from this software without specific prior written
-# permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
-# IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
-# PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
-# OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-#
-use strict;
-use Data::Dumper;
-use FindBin;
-use lib "$FindBin::Bin";
-use lib "$FindBin::Bin/../lib"; # The libraries are in the lib directory
-# Read the configuration script
-use CilConfig;
-
-use Cilly;
-
-$::default_is_merge = 0;
-my $stub = CilCompiler->new(@ARGV);
-
-$stub->setVersion ();
-
-# print Dumper($stub);
-$stub->doit();
-
-
-# Define here your favorite compiler by overriding Merger methods
-package CilCompiler;
-use File::Basename;
-use strict;
-BEGIN {
-    @CilCompiler::ISA = qw(Cilly);
-    $CilCompiler::base = "$::cilhome/obj/$::archos/cilly";
-    # Use the most recent version of cilly
-    $CilCompiler::mtime_asm = int((stat("$CilCompiler::base.asm.exe"))[9]);
-    $CilCompiler::mtime_byte = int((stat("$CilCompiler::base.byte.exe"))[9]);
-    $CilCompiler::use_debug = 
-         grep(/--bytecode/, @ARGV) ||
-         grep(/--ocamldebug/, @ARGV) ||
-        ($CilCompiler::mtime_asm < $CilCompiler::mtime_byte);
-    $CilCompiler::compiler = 
-        $CilCompiler::base . 
-            ($CilCompiler::use_debug ? ".byte" : ".asm") . ".exe";
-    if($CilCompiler::use_debug) { 
-        $ENV{"OCAMLRUNPARAM"} = "b" . $ENV{"OCAMLRUNPARAM"};
-    } 
-}
-
-# We need to customize the collection of arguments
-sub collectOneArgument {
-    my($self, $arg, $pargs) = @_;
-    if($arg =~ m|--transval=(.+)$|)  {
-        $self->{TRANSVAL} = $1; return 1;
-    }
-    if($arg eq '--ocamldebug')  {
-        $self->{OCAMLDEBUG} = 1; return 1;
-    }
-    if($arg eq '--cabsonly') {
-        $self->{CABSONLY} = 1; return 1;
-    }
-    # See if the super class understands this
-    return $self->SUPER::collectOneArgument($arg, $pargs);
-}
-
-sub usage {
-    print "Usage: cilly [options] [gcc_or_mscl arguments]\n";
-}
-
-sub helpMessage {
-    my($self) = @_;
-    # Print first the original
-    $self->SUPER::helpMessage();
-    print <<EOF;
-
-  All other arguments starting with -- are passed to the Cilly process.
-
-The following are the arguments of the Cilly process
-EOF
-   my @cmd = ($CilCompiler::compiler, '-help');
-   $self->runShell(@cmd); 
-}
-
-
-sub CillyCommand {
-    my ($self, $ppsrc, $dest) = @_;
-
-    my $aftercil;
-    my @cmd = ($CilCompiler::compiler);
-
-    if(defined $ENV{OCAMLDEBUG} || $self->{OCAMLDEBUG}) {
-        print "OCAMLDEBUG is on\n";
-        my @idirs = ("src", "src/frontc", "src/ccured", "src/ext",
-                     "ocamlutil", 
-                     "obj/$::archos");
-	my @iflags = map { ('-I', "$::cilhome/$_") } @idirs;
-        unshift @cmd, 'ocamldebug', '-emacs', @iflags;
-    }
-    if($::docxx) {
-        push @cmd, '--cxx';
-    }
-    if($self->{CABSONLY}) {
-        $aftercil = $self->cilOutputFile($dest, 'cabs.c');
-        push @cmd, '--cabsonly', $aftercil;
-    } else {
-        if(defined $self->{CILLY_OUT}) {
-            $aftercil = new OutputFile($dest, $self->{CILLY_OUT});
-            return ($aftercil, @cmd);
-        }
-	$aftercil = $self->cilOutputFile($dest, 'cil.c');
-    }
-    return ($aftercil, @cmd, '--out', $aftercil);
-}
-
-sub MergeCommand {
-    my ($self, $ppsrc, $dir, $base) = @_;
-
-    return ('', $CilCompiler::compiler);
-}
-
-
-1;
diff --git a/cil/bin/cilly.bat.in b/cil/bin/cilly.bat.in
deleted file mode 100755
index 9e5a36e52..000000000
--- a/cil/bin/cilly.bat.in
+++ /dev/null
@@ -1 +0,0 @@
-perl @CILHOME@/bin/cilly %*
diff --git a/cil/bin/patcher b/cil/bin/patcher
deleted file mode 100755
index 6eb7d1546..000000000
--- a/cil/bin/patcher
+++ /dev/null
@@ -1,605 +0,0 @@
-#!/usr/bin/perl
-# A Perl script that patches a bunch of files
-#
-#
-#
-# Copyright (c) 2001-2002, 
-#  George C. Necula    <necula@cs.berkeley.edu>
-#  Scott McPeak        <smcpeak@cs.berkeley.edu>
-#  Wes Weimer          <weimer@cs.berkeley.edu>
-# All rights reserved.
-# 
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions are
-# met:
-#
-# 1. Redistributions of source code must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-#
-# 2. Redistributions in binary form must reproduce the above copyright
-# notice, this list of conditions and the following disclaimer in the
-# documentation and/or other materials provided with the distribution.
-#
-# 3. The names of the contributors may not be used to endorse or promote
-# products derived from this software without specific prior written
-# permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
-# IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
-# PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
-# OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-#
-use strict;
-use File::Basename;
-use File::Copy;
-use Getopt::Long;           # Command-line option processing
-use Data::Dumper;
-use FindBin;
-use lib "$FindBin::Bin";
-use lib "$FindBin::Bin/../lib";
-# Read the configuration script
-use CilConfig;
-
-$::iswin32 = $^O eq 'MSWin32' || $^O eq 'cygwin';
-# matth: On cygwin, ^O is either MSWin32 or cygwin, depending on how you build
-# perl.  We don't care about the distinction, so just treat all windows
-# platforms the same when looking at "system=cygwin" tags on patches.
-$::platform = $::iswin32 ? 'cygwin' : $^O;
-
-
-# Set filename parsing according to current operating system.
-File::Basename::fileparse_set_fstype($^O);
-
-sub printHelp {
-    print <<EOL;
-Patch include files
-Usage: patcher [options] args
-
-options: 
-  --help       Prints this help message
-  --verbose    Prints a lot of information about what is being done
-  --mode=xxx   What tool to emulate: 
-                GNUCC   - GNU CC
-                MSVC    - MS VC cl compiler
-                EDG     - EDG front end
-
-  --dest=xxx   The destination directory. Will make one if it does not exist
-  --patch=xxx  Patch file (can be specified multiple times)
-
-  --ufile=xxx  A user-include file to be patched (treated as \#include "xxx")
-  --sfile=xxx  A system-include file to be patched (treated as \#include <xxx>)
- 
-  --clean       Remove all files in the destination directory
-  --dumpversion Print the version name used for the current compiler
-
- All of the other arguments are passed to the preprocessor.
-
-We will use \"$::platform\" as your system type.
-
-Send bugs to necula\@cs.berkeley.edu.
-EOL
-}
-
-
-my %option;
-&Getopt::Long::Configure("pass_through");
-&Getopt::Long::GetOptions
-    (\%option,
-     "--help",            # Display help information
-     "--verbose|v",       # Display information about programs invoked
-     "--mode=s",          # The mode (GNUCC, MSVC)
-     "--dest=s",          # The destination directory
-     "--patch=s@",         # Patch files
-     "--ufile=s@",         # User include files
-     "--sfile=s@",         # System include files
-     "--dumpversion",
-     "--clean",
-     );
-
-if($option{help}) {
-    &printHelp();
-    exit 0;
-}
-
-# print Dumper({"option" => \%option, "ARGV" => \@ARGV});
-
-my $cversion; # Compiler version
-my $cname; # Compiler name
-my @patches; # A list of the patches to apply
-
-my $ppargs = join(' ', @ARGV);
-
-my %groups;
-
-&findCompilerVersion();
-
-if($option{dumpversion}) {
-    print $cversion;
-    exit 0;
-}
-
-# Find the destination directory
-if(!defined($option{dest})) {
-    die "Must give a --dest directory\n";
-}
-if(! -d $option{dest}) {
-    die "The destination directory $option{dest} does not exist\n";
-}
-
-if($option{clean}) {
-    # Find the destination directory for a dummy file
-    my $dest = &destinationFileName("");
-    chop $dest; # The final /
-    print "Cleaning all files in $dest\n";
-    (!system("rm -rf $dest")) || die "Cannot remove directory\n";
-    exit 0;
-}
-
-print "Patching files for $cname version $cversion\n";
-
-# Prepare the patches
-if(defined($option{patch})) {
-    my $pFile;
-    foreach $pFile (@{$option{patch}}) {
-        &preparePatchFile($pFile);
-    }
-}
-
-# print Dumper(\@patches);
-
-my $file;
-foreach $file (@{$option{ufile}}) {
-    &patchOneFile($file, 0);
-}
-foreach $file (@{$option{sfile}}) {
-    &patchOneFile($file, 1);
-} 
-
-# Now check whether we have used all the patches
-my $hadError = 0;
-foreach my $patch (@patches) {
-    # It was optional
-    if(defined $patch->{FLAGS}->{optional} ||
-       defined $patch->{FLAGS}->{disabled}) { next; }
-    # It was for another system
-    if(defined $patch->{FLAGS}->{system} &&
-       $patch->{FLAGS}->{system} ne $::platform) { next; }
-    # Its group was done
-    if(defined $patch->{FLAGS}->{group}) {
-        if(! defined $groups{$patch->{FLAGS}->{group}}) {
-            $hadError = 1;
-            print "None of the following patches from group $patch->{FLAGS}->{group} was used:\n";
-            foreach my $gp (@patches) {
-                if($gp->{FLAGS}->{group} eq $patch->{FLAGS}->{group}) {
-                    print "\tfrom $gp->{PATCHFILE} at $gp->{PATCHLINENO}\n";
-                }
-            }
-            $groups{$patch->{FLAGS}->{group}} = 1; # We're done with it
-        }
-        next;
-    }
-    # It was not in a group and was not optional
-    if(! defined $patch->{USED}) { 
-        $hadError = 1;
-        print "Non-optional patch was not used:\n\tfrom $patch->{PATCHFILE} at $patch->{PATCHLINENO}\n";
-        next;
-    }
-}
-exit $hadError;
-
-
-############# SUBROUTINES 
-sub findCompilerVersion {
-    $cname = "";
-    $cversion = 0;
-    if($option{mode} eq "GNUCC") {
-        $cname = "GNU CC";
-        open(VER, "$::cc -dumpversion $ppargs|") 
-            || die "Cannot start $cname";
-        while(<VER>) {
-            # sm: had to modify this to match "egcs-2.91.66", which is
-            # how egcs responds to the -dumpversion request
-            if($_ =~ m|^(\d+\S+)|  ||
-               $_ =~ m|^(egcs-\d+\S+)|) {
-                $cversion = "gcc_$1";
-                close(VER) || die "Cannot start $cname\n";
-                return;
-            }
-        }
-        die "Cannot find the version for GCC\n";
-    }
-    if($option{mode} eq "MSVC") {
-        $cname = "Microsoft cl";
-        $ppargs =~ s|/nologo||g;
-        open(VER, "cl $ppargs 2>&1|") || die "Cannot start $cname: cl $ppargs\n";
-        while(<VER>) {
-            if($_ =~ m|Compiler Version (\S+) |) {
-                $cversion = "cl_$1";
-                close(VER);
-                return;
-            }
-        }
-        die "Cannot find the version for Microsoft CL\n";
-    }
-    die "You must specify a --mode (either GNUCC or MSVC)";
-}
-
-sub lineDirective {
-    my ($fileName, $lineno) = @_;
-    if($::iswin32) {
-        $fileName =~ s|\\|/|g;
-    }
-    if($option{mode} eq "MSVC") {
-        return "#line $lineno \"$fileName\"\n";
-    }
-    if($option{mode} eq "GNUCC" || $option{mode} eq "EDG") {
-        return "# $lineno \"$fileName\"\n";
-    }
-    die "lineDirective: invalid mode";
-}
-
-# Find the absolute name for a file
-sub patchOneFile {
-    my ($fname, $issys) = @_;
-    my $fname1 = $issys ? "<$fname>" : "\"$fname\"";
-    print "Patching $fname1\n";
-    my $preprocfile = "__topreproc";
-    unlink "$preprocfile.i";
-    open(TOPREPROC, ">$preprocfile.c") || die "Cannot open preprocessor file";
-    print TOPREPROC "#include $fname1\n";
-    close(TOPREPROC);
-    # Do not test for error while running the preprocessor because the 
-    # error might be due to an #error directive
-    my $preproccmd = "";
-    if($option{mode} eq "GNUCC") {
-	$preproccmd = "$::cc -E $ppargs $preprocfile.c >$preprocfile.i";
-	if ($^O ne 'MSWin32') {   # Windows has no /dev/null
-	                          # ignore stderr (e.g. #error directives)
-	    $preproccmd .= " 2>/dev/null";
-	}
-    } elsif($option{mode} eq "MSVC") {
-        $preproccmd = "cl /nologo /P $ppargs $preprocfile.c";
-    } else { die "Invalid --mode"; }
-
-    if(system($preproccmd) && $option{mode} eq "MSVC" ) {
-        # For some reason the gcc returns spurious error codes
-        die "Error running preprocessor: $preproccmd"
-    }
-    
-    # Now scan the resulting file and get the real name of the file
-    my $absname = "";
-    open(PPOUT, "<$preprocfile.i") || die "Cannot find $preprocfile.i";
-    while(<PPOUT>) {
-        if($_ =~ m|^\#.+\"(.+$fname)\"|) {
-            $absname = $1;
-            last;
-        }
-    }
-    close(PPOUT);
-    if($absname eq "") {
-        die "Cannot find the absolute name of $fname1 in $preprocfile.i\n";
-    }
-    unlink "$preprocfile.c";
-    unlink "$preprocfile.i";
-    # If we fail then maybe we are using cygwin paths in a Win32 system
-    if($option{mode} eq "GNUCC" && $::iswin32) {
-        open(WINNAME, "cygpath -w $absname|")
-            || die "Cannot run cygpath to convert $absname to a Windows name";
-        $absname = <WINNAME>;
-        if($absname =~ m|\n$|) {
-            chop $absname;
-        }
-        # print "Converted $fileName to $newName\n";
-        close(WINNAME) || die "Cannot run cygpath to convert $absname";
-    }
-    if(! -f $absname) { #matth: we need to do this test after calling cygpath
-        die "Cannot find the absolute name of $fname1 (\"$absname\")\n";
-    }
-    print "   Absolute name is $absname\n";
-    # Decide where to put the result
-    my $dest = &destinationFileName($fname);
-    print "   Destination is $dest\n";
-    &applyPatches($absname, $dest);
-}
-
-# Is absolute path name?
-sub isAbsolute {
-    my($name) = @_;
-    if($::iswin32) {
-        return ($name =~ m%^([a-zA-Z]:)?[/\\]%);
-    } else {
-        return ($name =~ m%^[/\\]%);
-    }
-}
-
-# Compute the destination file name and create all necessary directories
-sub destinationFileName {
-    my ($fname) = @_;
-    if(&isAbsolute($fname)) {
-        die "Cannot process files that have absolute names\n";
-    }
-    my $dest = $option{dest} . "/" . $cversion;
-    # Break the file name into components
-    my @fnamecomp = split(m%[/\\]%, $fname);
-    # Add one component at a time
-    do {
-        if(! -d $dest) {
-            (mkdir $dest, 0777) || die "Cannot create directory $dest\n";
-        }
-        my $comp = shift @fnamecomp;
-        $dest .= ('/' . $comp);
-    } while($#fnamecomp >= 0);
-    return $dest;
-}
-#####################################################################
-# Patching of files
-#
-sub preparePatchFile {
-    my ($pFile) = @_;
-    open(PFILE, "<$pFile") ||
-        die "Cannot read patch file $pFile\n";
-    my $patchLineNo = 0;
-    my $patchStartLine = 0;
-  NextPattern:
-    while(<PFILE>) {
-        $patchLineNo ++;
-        if($_ !~ m|^<<<(.*)$|) {
-            next;
-        }
-        # Process the flags
-        my @patchflags = split(/\s*,\s*/, $1);
-        my %valueflags;
-        foreach my $flg (@patchflags) {
-            $flg = &trimSpaces($flg);
-            if($flg =~ m|^(.+)\s*=\s*(.+)$|) {
-                $valueflags{$1} = $2;
-            } else {
-                $valueflags{$flg} = 1;
-            }
-        }
-        # Now we have found the start
-        $_ = <PFILE>;
-        $patchLineNo ++;
-        my $current_pattern = [];
-        my @all_patterns = ();
-        if($_ =~ m|^===|) {
-            if(! defined $valueflags{ateof} && 
-               ! defined $valueflags{atsof}) {
-                die "A pattern is missing in $pFile";
-            }
-            goto AfterPattern;
-        }
-        if($_ eq "") {
-            die "A pattern is missing in $pFile";
-        }
-        push @{$current_pattern}, $_;
-
-        while(<PFILE>) {
-            $patchLineNo ++;
-            if($_ =~ m|^===|) {
-                last;
-            }
-            if($_ =~ m%^\|\|\|%) {
-                # This is an alternate pattern
-                push @all_patterns, $current_pattern;
-                $current_pattern = [];
-                next;
-            }
-            push @{$current_pattern}, $_;
-        }
-      AfterPattern:
-        # Finish off the last pattern
-        push @all_patterns, $current_pattern;
-        if($_ !~ m|^===|) {
-            die "No separator found after pattern in $pFile";
-        }
-        $patchStartLine = $patchLineNo + 1;
-        my $replacement = "";
-        # If we have more than one non-optional pattern with no group
-        # specified, then create a group
-        if(@all_patterns > 1 && 
-           ! defined $valueflags{group} && 
-           ! defined $valueflags{optional}) {
-            $valueflags{group} = $pFile . "_$patchStartLine";
-        }
-        while(<PFILE>) {
-            $patchLineNo ++;
-            if($_ =~ m|^>>>|) {
-                # For each alternate pattern
-                my $patt;
-                foreach $patt (@all_patterns) {
-                    # Maybe the @__pattern__@ string appears in the replacement
-                    my $pattern_repl = join('', @{$patt});
-                    my $nrlines = int(@{$patt});
-                    my $local_repl = $replacement;
-                    $local_repl =~ s/\@__pattern__\@/$pattern_repl/g;
-                    # Strip the spaces from patterns
-                    my @pattern_no_space = ();
-                    my $i;
-                    foreach $i (@{$patt}) {
-                        $i =~ s/\s+//g;
-                        push @pattern_no_space, $i;
-                    }
-                    push @patches, { HEAD => $pattern_no_space[0],
-                                     FLAGS => \%valueflags,
-                                     NRLINES   => $nrlines,
-                                     PATTERNS => \@pattern_no_space,
-                                     REPLACE => $local_repl,
-                                     PATCHFILE => $pFile,
-                                     PATCHLINENO => $patchStartLine,
-                                 };
-                }
-                next NextPattern;
-            }
-            $replacement .= $_;
-        }
-        die "Unfinished replacement for pattern in $pFile";
-    }
-    close(PFILE) ||
-        die "Cannot close patch file $pFile\n";
-    print "Loaded patches from $pFile\n";
-    # print Dumper(\@patches); die "Here\n";
-    
-}
-
-sub trimSpaces {
-    my($str) = @_;
-    if($str =~ m|^\s+(\S.*)$|) {
-        $str = $1;
-    }
-    if($str =~ m|^(.*\S)\s+$|) {
-        $str = $1;
-    }
-    return $str;
-}
-
-
-my @includeReadAhead = ();
-sub readIncludeLine {
-    my($infile) = @_;
-    if($#includeReadAhead < 0) {
-        my $newLine = <$infile>;
-        return $newLine;
-    } else {
-        return shift @includeReadAhead;
-    }
-}
-
-sub undoReadIncludeLine {
-    my($line) = @_;
-    push @includeReadAhead, $line;
-}
-
-sub applyPatches {
-    my($in, $out) = @_;
-    # Initialize all the patches
-    my $patch;
-    # And remember the EOF patches that are applicable here
-    my @eof_patches = ();
-    foreach $patch (@patches) {
-        $patch->{USE} = 1;
-        my $infile = $patch->{FLAGS}->{file};
-        if(defined $infile && $in !~ m|$infile$|) {
-#            print "Will not use patch ", 
-#                  &lineDirective($patch->{PATCHFILE},$patch->{PATCHLINENO});
-            $patch->{USE} = 0;
-            next;
-        }
-        # Disable the system specific patterns
-        if(defined $patch->{FLAGS}->{system} &&
-           $patch->{FLAGS}->{system} ne $::platform) {
-            $patch->{USE} = 0;
-            next;
-        }
-        # Disable also (for now) the patches that must be applied at EOF
-        if(defined $patch->{FLAGS}->{ateof} || 
-           defined $patch->{FLAGS}->{atsof} ||
-           defined $patch->{FLAGS}->{disabled} ) {
-            $patch->{USE} = 0;
-            push @eof_patches, $patch;
-        }
-        
-    }
-        
-    open(OUT, ">$out") || die "Cannot open patch output file $out";
-    open(IN, "<$in") || die "Cannot open patch input file $in";
-
-    @includeReadAhead = ();
-
-    my $lineno = 0;
-    my $line; # The current line
-
-    # the file name that should be printed in the line directives
-    my $lineDirectiveFile = $in;
-    # Now apply the SOF patches
-    foreach my $patch (@eof_patches) {
-        if(defined $patch->{FLAGS}->{atsof}) {
-            my $line = &applyOnePatch($patch, &lineDirective($in, $lineno));
-            print OUT $line;
-        }
-    }
-
-    while($line = &readIncludeLine(\*IN)) {
-        $lineno ++;
-            # Now we have a line to print out. See if it needs patching
-        my $patch;
-        my @lines = ($line); # A number of lines
-        my $nrLines = 1;     # How many lines
-        my $toundo  = 0;
-      NextPatch:
-        foreach $patch (@patches) {
-            if(! $patch->{USE}) { next; } # We are not using this patch
-            my $line_no_spaces = $line;
-            $line_no_spaces =~ s/\s+//g;
-            if($line_no_spaces eq $patch->{HEAD}) {
-                # Now see if all the lines match
-                my $patNrLines = $patch->{NRLINES};
-                if($patNrLines > 1) {
-                    # Make sure we have enough lines
-                    while($nrLines < $patNrLines) {
-                        push @lines, &readIncludeLine(\*IN);
-                        $nrLines ++;
-                        $toundo ++;
-                    }
-                    my @checkLines = @{$patch->{PATTERNS}};
-                    my $i;
-                    # print "check: ", join(":", @checkLines);
-                    # print "with $nrLines lines: ", join("+", @lines);
-                    for($i=0;$i<$patNrLines;$i++) {
-                        $line_no_spaces = $lines[$i];
-                        $line_no_spaces =~ s/\s+//g;
-                        if($checkLines[$i] ne $line_no_spaces) {
-                            # print "No match for $patch->{HEAD}\n";
-                            next NextPatch;
-                        }
-                    }
-                }
-                # print "Using patch from $patch->{PATCHFILE}:$patch->{PATCHLINENO} at $in:$lineno\n";
-                # Now replace
-                $lineno += ($patNrLines - 1);
-                $toundo -= ($patNrLines - 1);
-                $line = &applyOnePatch($patch, &lineDirective($in, $lineno + 1));
-                last;
-            }
-        }
-        print OUT $line;
-        # Now undo all but the first line
-        my $i;
-        for($i=$nrLines - $toundo;$i<$nrLines;$i++) {
-            &undoReadIncludeLine($lines[$i]);
-        }
-    }
-    close(IN) || die "Cannot close file $in";
-    # Now apply the EOF patches
-    foreach $patch (@eof_patches) {
-        if(defined $patch->{FLAGS}->{ateof}) {
-            my $line = &applyOnePatch($patch, &lineDirective($in, $lineno));
-            print OUT $line;
-        }
-    }
-
-    close(OUT);
-    return 1;
-}
-
-
-sub applyOnePatch {
-    my($patch, $after) = @_;
-    my $line  = &lineDirective($patch->{PATCHFILE},
-                               $patch->{PATCHLINENO});
-    $line .= $patch->{REPLACE};
-    $line .= $after;
-    # Mark that we have used this group
-    $patch->{USED} = 1;
-    if(defined $patch->{FLAGS}->{group}) {
-        $groups{$patch->{FLAGS}->{group}} = 1;
-    }
-    return $line;
-}
diff --git a/cil/bin/patcher.bat.in b/cil/bin/patcher.bat.in
deleted file mode 100755
index 2e356ae45..000000000
--- a/cil/bin/patcher.bat.in
+++ /dev/null
@@ -1 +0,0 @@
-perl @CILHOME@/bin/patcher %*
diff --git a/cil/bin/teetwo b/cil/bin/teetwo
deleted file mode 100755
index 2aa68fa5e..000000000
--- a/cil/bin/teetwo
+++ /dev/null
@@ -1,36 +0,0 @@
-#!/bin/bash
-# run a command, sending stdout to one file and stderr to another,
-# but also sending both to this process' stdout/stderr, respectively
-
-if [ "$3" = "" ]; then
-  echo "usage: $0 stdout-file stderr-file cmd [args..]"
-  exit 0
-fi
-
-stdoutFile="$1"
-stderrFile="$2"
-command="$3"
-shift
-shift
-shift
-
-result=0
-handler() {
-  # this signal means the underlying command exit erroneously,
-  # though we don't know the code
-  echo "The command failed!"
-  result=2
-}
-trap handler SIGUSR1
-
-# dup my stdout/err on fd 3,4
-exec 3>&1
-exec 4>&2
-
-
-# run the command with tees to duplicate the data
-mypid=$$
-# echo "mypid = $mypid, command=$command, args=$@, stdout=$stdoutFile, stderr=$stderrFile"
-(("$command" "$@" || kill -s USR1 $mypid) | tee "$stdoutFile" >&3) 2>&1 | tee "$stderrFile" >&4
-
-exit $result
diff --git a/cil/bin/test-bad b/cil/bin/test-bad
deleted file mode 100755
index 4eacdc006..000000000
--- a/cil/bin/test-bad
+++ /dev/null
@@ -1,202 +0,0 @@
-#!/bin/sh
-# run a regression test containing one or more intentional failures
-#
-# To create a source file to be processed by this script do the following:
-# - the file should be a standalone program with main without any arguments
-#   You can add other files as part of the CFLAGS variable
-# - add a comment
-#    // NUMERRORS n
-#   where n is the number of errors to be tested by this file
-#
-#   This file is processed n+1 times. The first time, it should succeed (main returns or 
-#   exits with code 0) and the other n times it should fail. 
-#   For each run the preprocessor variable ERROR is defined to be
-#   be k (0 <= k <= n). 
-#   You can mark certain lines in your program so that they are used ONLY in a certain run: put the 
-#   following comment after a line to make it appear only in the run with ERROR == 3
-#   
-#    some_code; // ERROR(3)
-#
-#
-#   Furthermore, for each run that is intended to fail you can specify a string that 
-#   must appear in the output.
-#
-#    some_code; // ERROR(3):this string must appear in output
-#
-#   Do not put any spaces around the : 
-#
-#   Simple example:
-#
-#   #define E(n) {printf("Error %d\n", n); exit(n); }
-#   #define SUCCESS {printf("Success\n"); exit(0); }
-#
-#   // NUMERRORS 3
-#   int main() {
-#
-#     char char x; // ERROR(1):invalid type specifier
-#     int  y;
-#     int  z = ++y;
-#     // This conditional should be true
-#     if(z == y) E(2); // ERROR(2):Error 2
-#
-#     #if ERROR == 3
-#        z = (++y, y--);
-#        if(z == y + 1) E(3); // ERROR(3):Error 3
-#     #endif
-#
-#     SUCCESS;
-#   }
-#
-#
-# set RUNONLY=n to run only the test case n
-#
-
-if [ "$1" = "" ]; then
-  # most parameters are passed by name, instead of as positional
-  # arguments, for better impedance match with Makefile; but it's
-  # good to have at least 1 positional arg so when it's missing I
-  # can easily tell, and print this message
-  echo "usage: CILHOME=... CILLY=... CFLAGS=... $0 source-file.c"
-  echo "You can also set RUNONLY=n to run only the nth iteration"
-  exit 0
-fi
-echo "CILLY=$CILLY"
-echo "CFLAGS=$CFLAGS"
-srcfile="$1"
-# Construct the name of the temporary file to use
-srcfilenoext=`echo $srcfile | sed s/.c\$//`
-tmpname="$srcfilenoext-tmp"
-
-# for GCC, use "# xx foo.c".  For MSVC, use "#line xx foo.c"
-if [ "$_MSVC" != "" ]; then 
-  LINEOPT="line"
-  OUTFLAG="/Fe"
-  OUTEXT=".exe"
-else
-  LINEOPT=""
-  OUTFLAG="-o "
-  OUTEXT=".exe" # So that I can delete the executables
-fi
-
-# Start it in the right directory
-# cd "$CILLYHOME/test/small2" || exit
-
-# read how many failure cases are in the file; expect line of form
-# "// NUMERRORS n"
-numcases=`grep NUMERRORS "$srcfile" | perl -e '$_ = <>; m|(\d+)|; print $1;'`
-if [ -z "$numcases" ]; then
-  echo "didn't find a string of form NUMERRORS <n> in the file"
-  exit 2
-fi
-echo "there are $numcases failure cases in this file"
-
-
-# iterate through the cases; first case (0) is where no errors are present
-i=0
-if [ "$RUNONLY" != "" ] ;then
-   i=$RUNONLY
-fi
-while [ $i -le $numcases ]; do
-  echo
-  echo
-  echo "********************** Iteration $i"
-  echo
-  echo
-  # generate a temporary file; first hide the ERROR tags which identify
-  # the current test, then remove all remaining ERROR lines
-  # (syntax for errors has parentheses so if I have >=10 cases I don't
-  # run into problems where e.g. ERROR1 is a substring of ERROR10)
-  # use the little perl script to put line number directives where we remove 
-  # lines 
-  echo "generating test $i"
-  rm -f $tmpname.c 2>/dev/null
-  ( echo "#define ERROR $i"; echo "#$LINEOPT 1 \"$srcfile\"";cat "$srcfile") |\
-       sed "s|ERROR($i)|(selected: $i)|" | \
-       perl -e 'my $ln = 0; while(<>) { if($_ =~ m|ERROR\(|) { print "#'$LINEOPT' $ln\n"; } else { print $_; }; $ln ++}' \
-         > "$tmpname.c"
-  chmod a-w "$tmpname.c"
-
-  # Grab the errorline for this test case
-  themsg=`cat "$srcfile" | grep "ERROR($i).*:" | sed "s/^.*ERROR.*://" `
-  if [ "x$themsg" != "x" ] ;then 
-     echo "Expecting error message:$themsg"
-  fi
-
-  # compile this with our tool
-  rm -f test-bad.out test-bad.err ${tmpname}$OUTEXT
-  echo $CILLY $CFLAGS $tmpname.c ${OUTFLAG}${tmpname}$OUTEXT
-  $CILHOME/bin/teetwo test-bad.out test-bad.err \
-              $CILLY $CFLAGS -DERROR=$i $tmpname.c ${OUTFLAG}${tmpname}$OUTEXT
-  # cat test-bad.out test-bad.err
-  status=$?
-  runit=1
-  if [ $status != 0 ]; then
-    if [ $i = 0 ] ;then
-      echo "The 0th iteration failed to CURE! It is supposed to succeed."
-      exit $status
-    else
-      if [ "x$themsg" != "x" ] ;then
-         echo "grep \"$themsg\" test-bad.out test-bad.err"
-         if ! grep "$themsg" test-bad.out test-bad.err  ;then
-            echo "The ${i}th iteration failed to CURE but cannot find: $themsg"
-            exit 3
-         else
-           echo "The ${i}th iteration failed to CURE, as expected!"
-         fi
-      else
-         echo "The ${i}th iteration failed to CURE. We expected some failure!"
-      fi
-      runit=0
-    fi
-  fi
-
-  # run it
-  if [ $runit != 0 ]; then 
-    echo "./$tmpname$OUTEXT"
-    rm -f test-bad.out test-bad.err
-    if $CILHOME/bin/teetwo test-bad.out test-bad.err ./$tmpname$OUTEXT ; then
-      # cat test-bad.out test-bad.err
-      if [ $i = 0 ]; then
-        # expected success on 0th iteration
-        echo "(succeeded as expected)"
-      else
-        # unexpected success on >0th iteration
-        echo "The ${i}th iteration did not fail!  It is supposed to fail."
-        exit 2
-      fi
-    else
-      # cat test-bad.out test-bad.err
-      if [ $i = 0 ]; then
-        # unexpected failure on 0th iteration
-        echo "The 0th iteration failed! It is supposed to succeed."
-        #cat $tmpname.c
-        exit 2
-      else
-        # expected failure on >0th iteration
-        if [ "x$themsg" != "x" ] ;then
-           echo "grep \"$themsg\" test-bad.out test-bad.err"
-           if ! grep "$themsg" test-bad.out test-bad.err ;then
-              echo "The ${i}th iteration failed but cannot find:$themsg"
-              exit 3
-           fi
-        fi
-        echo "(failed as expected)"
-      fi
-    fi
-  fi
-
-  # possibly bail after 0th
-  if [ "$TESTBADONCE" != "" ]; then
-    echo "bailing after 0th iteration because TESTBADONCE is set"
-    exit 0
-  fi
-  if [ "$RUNONLY" != "" ]; then
-    echo "bailing after ${RUNONLY}th iteration because RUNONLY is set"
-    exit 0
-  fi
-
-  i=`expr $i + 1`
-done
-
-echo "all $numcases cases in $srcfile failed as expected"
-
diff --git a/cil/cil.spec b/cil/cil.spec
deleted file mode 100644
index 538097363..000000000
--- a/cil/cil.spec
+++ /dev/null
@@ -1,90 +0,0 @@
-Name: cil
-Version: 1.3.5
-Release: 1
-License: BSD
-URL: http://manju.cs.berkeley.edu/cil/
-Source0: %{name}-%{version}.tar.gz
-BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-buildroot
-BuildRequires: gcc
-BuildRequires: ocaml >= 3.08
-BuildRequires: perl >= 5.6.1
-
-# No ELF executables or shared libraries
-%define debug_package %{nil}
-
-
-########################################################################
-#
-#  Package cil
-#
-
-Summary: OCaml library for C program analysis and transformation
-Group: Development/Libraries
-Requires: perl >= 5.6.1
-
-%description
-CIL (C Intermediate Language) is a high-level representation along
-with a set of tools that permit easy analysis and source-to-source
-transformation of C programs.
-
-This package provides Perl modules which are useful for building
-compiler wrappers.  A wrapper can use CIL to transform C code before
-passing it along to the native C compiler.
-
-%files
-%defattr(-,root,root,-)
-%doc LICENSE
-%{_datadir}/%{name}
-
-
-########################################################################
-#
-#  Package cil-devel
-#
-
-%package devel
-
-Summary: OCaml library for C program analysis and transformation
-Group: Development/Libraries
-Requires: ocaml >= 3.04
-
-%description devel
-CIL (C Intermediate Language) is a high-level representation along
-with a set of tools that permit easy analysis and source-to-source
-transformation of C programs.
-
-This package provides OCaml interfaces and an OCaml library which form
-the CIL API.
-
-%files devel
-%defattr(-,root,root,-)
-%doc LICENSE
-%{_libdir}/%{name}
-
-
-########################################################################
-#
-#  General scripts
-#
-
-%prep
-%setup -q -n %{name}
-
-%build
-%configure
-%define cilmake make -f Makefile.cil
-%cilmake cilversion machdep
-%cilmake cillib NATIVECAML=
-%cilmake cillib NATIVECAML=1
-
-%install
-rm -rf $RPM_BUILD_ROOT
-%makeinstall
-
-%clean
-rm -rf $RPM_BUILD_ROOT
-
-
-%changelog
-* Tue Aug  5 2003 Ben Liblit <liblit@cs.berkeley.edu> 
-- Initial build.
diff --git a/cil/cil.spec.in b/cil/cil.spec.in
deleted file mode 100644
index 0a47dbdd4..000000000
--- a/cil/cil.spec.in
+++ /dev/null
@@ -1,90 +0,0 @@
-Name: cil
-Version: @CIL_VERSION@
-Release: 1
-License: BSD
-URL: http://manju.cs.berkeley.edu/cil/
-Source0: %{name}-%{version}.tar.gz
-BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-buildroot
-BuildRequires: gcc
-BuildRequires: ocaml >= 3.08
-BuildRequires: perl >= 5.6.1
-
-# No ELF executables or shared libraries
-%define debug_package %{nil}
-
-
-########################################################################
-#
-#  Package cil
-#
-
-Summary: OCaml library for C program analysis and transformation
-Group: Development/Libraries
-Requires: perl >= 5.6.1
-
-%description
-CIL (C Intermediate Language) is a high-level representation along
-with a set of tools that permit easy analysis and source-to-source
-transformation of C programs.
-
-This package provides Perl modules which are useful for building
-compiler wrappers.  A wrapper can use CIL to transform C code before
-passing it along to the native C compiler.
-
-%files
-%defattr(-,root,root,-)
-%doc LICENSE
-%{_datadir}/%{name}
-
-
-########################################################################
-#
-#  Package cil-devel
-#
-
-%package devel
-
-Summary: OCaml library for C program analysis and transformation
-Group: Development/Libraries
-Requires: ocaml >= 3.04
-
-%description devel
-CIL (C Intermediate Language) is a high-level representation along
-with a set of tools that permit easy analysis and source-to-source
-transformation of C programs.
-
-This package provides OCaml interfaces and an OCaml library which form
-the CIL API.
-
-%files devel
-%defattr(-,root,root,-)
-%doc LICENSE
-%{_libdir}/%{name}
-
-
-########################################################################
-#
-#  General scripts
-#
-
-%prep
-%setup -q -n %{name}
-
-%build
-%configure
-%define cilmake make -f Makefile.cil
-%cilmake cilversion machdep
-%cilmake cillib NATIVECAML=
-%cilmake cillib NATIVECAML=1
-
-%install
-rm -rf $RPM_BUILD_ROOT
-%makeinstall
-
-%clean
-rm -rf $RPM_BUILD_ROOT
-
-
-%changelog
-* Tue Aug  5 2003 Ben Liblit <liblit@cs.berkeley.edu> 
-- Initial build.
diff --git a/cil/config.guess b/cil/config.guess
deleted file mode 100755
index c085f4f51..000000000
--- a/cil/config.guess
+++ /dev/null
@@ -1,1497 +0,0 @@
-#! /bin/sh
-# Attempt to guess a canonical system name.
-#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-#   2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation,
-#   Inc.
-
-timestamp='2006-05-13'
-
-# This file is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
-# 02110-1301, USA.
-#
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-
-# Originally written by Per Bothner <per@bothner.com>.
-# Please send patches to <config-patches@gnu.org>.  Submit a context
-# diff and a properly formatted ChangeLog entry.
-#
-# This script attempts to guess a canonical system name similar to
-# config.sub.  If it succeeds, it prints the system name on stdout, and
-# exits with 0.  Otherwise, it exits with 1.
-#
-# The plan is that this can be called by configure scripts if you
-# don't specify an explicit build system type.
-
-me=`echo "$0" | sed -e 's,.*/,,'`
-
-usage="\
-Usage: $0 [OPTION]
-
-Output the configuration name of the system \`$me' is run on.
-
-Operation modes:
-  -h, --help         print this help, then exit
-  -t, --time-stamp   print date of last modification, then exit
-  -v, --version      print version number, then exit
-
-Report bugs and patches to <config-patches@gnu.org>."
-
-version="\
-GNU config.guess ($timestamp)
-
-Originally written by Per Bothner.
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
-Free Software Foundation, Inc.
-
-This is free software; see the source for copying conditions.  There is NO
-warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
-
-help="
-Try \`$me --help' for more information."
-
-# Parse command line
-while test $# -gt 0 ; do
-  case $1 in
-    --time-stamp | --time* | -t )
-       echo "$timestamp" ; exit ;;
-    --version | -v )
-       echo "$version" ; exit ;;
-    --help | --h* | -h )
-       echo "$usage"; exit ;;
-    -- )     # Stop option processing
-       shift; break ;;
-    - )	# Use stdin as input.
-       break ;;
-    -* )
-       echo "$me: invalid option $1$help" >&2
-       exit 1 ;;
-    * )
-       break ;;
-  esac
-done
-
-if test $# != 0; then
-  echo "$me: too many arguments$help" >&2
-  exit 1
-fi
-
-trap 'exit 1' 1 2 15
-
-# CC_FOR_BUILD -- compiler used by this script. Note that the use of a
-# compiler to aid in system detection is discouraged as it requires
-# temporary files to be created and, as you can see below, it is a
-# headache to deal with in a portable fashion.
-
-# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
-# use `HOST_CC' if defined, but it is deprecated.
-
-# Portable tmp directory creation inspired by the Autoconf team.
-
-set_cc_for_build='
-trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
-trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ;
-: ${TMPDIR=/tmp} ;
- { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
- { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
- { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } ||
- { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;
-dummy=$tmp/dummy ;
-tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ;
-case $CC_FOR_BUILD,$HOST_CC,$CC in
- ,,)    echo "int x;" > $dummy.c ;
-	for c in cc gcc c89 c99 ; do
-	  if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then
-	     CC_FOR_BUILD="$c"; break ;
-	  fi ;
-	done ;
-	if test x"$CC_FOR_BUILD" = x ; then
-	  CC_FOR_BUILD=no_compiler_found ;
-	fi
-	;;
- ,,*)   CC_FOR_BUILD=$CC ;;
- ,*,*)  CC_FOR_BUILD=$HOST_CC ;;
-esac ; set_cc_for_build= ;'
-
-# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
-# (ghazi@noc.rutgers.edu 1994-08-24)
-if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
-	PATH=$PATH:/.attbin ; export PATH
-fi
-
-UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
-UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
-UNAME_SYSTEM=`(uname -s) 2>/dev/null`  || UNAME_SYSTEM=unknown
-UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
-
-# Note: order is significant - the case branches are not exclusive.
-
-case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
-    *:NetBSD:*:*)
-	# NetBSD (nbsd) targets should (where applicable) match one or
-	# more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
-	# *-*-netbsdecoff* and *-*-netbsd*.  For targets that recently
-	# switched to ELF, *-*-netbsd* would select the old
-	# object file format.  This provides both forward
-	# compatibility and a consistent mechanism for selecting the
-	# object file format.
-	#
-	# Note: NetBSD doesn't particularly care about the vendor
-	# portion of the name.  We always set it to "unknown".
-	sysctl="sysctl -n hw.machine_arch"
-	UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
-	    /usr/sbin/$sysctl 2>/dev/null || echo unknown)`
-	case "${UNAME_MACHINE_ARCH}" in
-	    armeb) machine=armeb-unknown ;;
-	    arm*) machine=arm-unknown ;;
-	    sh3el) machine=shl-unknown ;;
-	    sh3eb) machine=sh-unknown ;;
-	    *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
-	esac
-	# The Operating System including object format, if it has switched
-	# to ELF recently, or will in the future.
-	case "${UNAME_MACHINE_ARCH}" in
-	    arm*|i386|m68k|ns32k|sh3*|sparc|vax)
-		eval $set_cc_for_build
-		if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
-			| grep __ELF__ >/dev/null
-		then
-		    # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
-		    # Return netbsd for either.  FIX?
-		    os=netbsd
-		else
-		    os=netbsdelf
-		fi
-		;;
-	    *)
-	        os=netbsd
-		;;
-	esac
-	# The OS release
-	# Debian GNU/NetBSD machines have a different userland, and
-	# thus, need a distinct triplet. However, they do not need
-	# kernel version information, so it can be replaced with a
-	# suitable tag, in the style of linux-gnu.
-	case "${UNAME_VERSION}" in
-	    Debian*)
-		release='-gnu'
-		;;
-	    *)
-		release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
-		;;
-	esac
-	# Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
-	# contains redundant information, the shorter form:
-	# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
-	echo "${machine}-${os}${release}"
-	exit ;;
-    *:OpenBSD:*:*)
-	UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
-	echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE}
-	exit ;;
-    *:ekkoBSD:*:*)
-	echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
-	exit ;;
-    *:SolidBSD:*:*)
-	echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE}
-	exit ;;
-    macppc:MirBSD:*:*)
-	echo powerppc-unknown-mirbsd${UNAME_RELEASE}
-	exit ;;
-    *:MirBSD:*:*)
-	echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
-	exit ;;
-    alpha:OSF1:*:*)
-	case $UNAME_RELEASE in
-	*4.0)
-		UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
-		;;
-	*5.*)
-	        UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
-		;;
-	esac
-	# According to Compaq, /usr/sbin/psrinfo has been available on
-	# OSF/1 and Tru64 systems produced since 1995.  I hope that
-	# covers most systems running today.  This code pipes the CPU
-	# types through head -n 1, so we only detect the type of CPU 0.
-	ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^  The alpha \(.*\) processor.*$/\1/p' | head -n 1`
-	case "$ALPHA_CPU_TYPE" in
-	    "EV4 (21064)")
-		UNAME_MACHINE="alpha" ;;
-	    "EV4.5 (21064)")
-		UNAME_MACHINE="alpha" ;;
-	    "LCA4 (21066/21068)")
-		UNAME_MACHINE="alpha" ;;
-	    "EV5 (21164)")
-		UNAME_MACHINE="alphaev5" ;;
-	    "EV5.6 (21164A)")
-		UNAME_MACHINE="alphaev56" ;;
-	    "EV5.6 (21164PC)")
-		UNAME_MACHINE="alphapca56" ;;
-	    "EV5.7 (21164PC)")
-		UNAME_MACHINE="alphapca57" ;;
-	    "EV6 (21264)")
-		UNAME_MACHINE="alphaev6" ;;
-	    "EV6.7 (21264A)")
-		UNAME_MACHINE="alphaev67" ;;
-	    "EV6.8CB (21264C)")
-		UNAME_MACHINE="alphaev68" ;;
-	    "EV6.8AL (21264B)")
-		UNAME_MACHINE="alphaev68" ;;
-	    "EV6.8CX (21264D)")
-		UNAME_MACHINE="alphaev68" ;;
-	    "EV6.9A (21264/EV69A)")
-		UNAME_MACHINE="alphaev69" ;;
-	    "EV7 (21364)")
-		UNAME_MACHINE="alphaev7" ;;
-	    "EV7.9 (21364A)")
-		UNAME_MACHINE="alphaev79" ;;
-	esac
-	# A Pn.n version is a patched version.
-	# A Vn.n version is a released version.
-	# A Tn.n version is a released field test version.
-	# A Xn.n version is an unreleased experimental baselevel.
-	# 1.2 uses "1.2" for uname -r.
-	echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
-	exit ;;
-    Alpha\ *:Windows_NT*:*)
-	# How do we know it's Interix rather than the generic POSIX subsystem?
-	# Should we change UNAME_MACHINE based on the output of uname instead
-	# of the specific Alpha model?
-	echo alpha-pc-interix
-	exit ;;
-    21064:Windows_NT:50:3)
-	echo alpha-dec-winnt3.5
-	exit ;;
-    Amiga*:UNIX_System_V:4.0:*)
-	echo m68k-unknown-sysv4
-	exit ;;
-    *:[Aa]miga[Oo][Ss]:*:*)
-	echo ${UNAME_MACHINE}-unknown-amigaos
-	exit ;;
-    *:[Mm]orph[Oo][Ss]:*:*)
-	echo ${UNAME_MACHINE}-unknown-morphos
-	exit ;;
-    *:OS/390:*:*)
-	echo i370-ibm-openedition
-	exit ;;
-    *:z/VM:*:*)
-	echo s390-ibm-zvmoe
-	exit ;;
-    *:OS400:*:*)
-        echo powerpc-ibm-os400
-	exit ;;
-    arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
-	echo arm-acorn-riscix${UNAME_RELEASE}
-	exit ;;
-    arm:riscos:*:*|arm:RISCOS:*:*)
-	echo arm-unknown-riscos
-	exit ;;
-    SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
-	echo hppa1.1-hitachi-hiuxmpp
-	exit ;;
-    Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
-	# akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
-	if test "`(/bin/universe) 2>/dev/null`" = att ; then
-		echo pyramid-pyramid-sysv3
-	else
-		echo pyramid-pyramid-bsd
-	fi
-	exit ;;
-    NILE*:*:*:dcosx)
-	echo pyramid-pyramid-svr4
-	exit ;;
-    DRS?6000:unix:4.0:6*)
-	echo sparc-icl-nx6
-	exit ;;
-    DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*)
-	case `/usr/bin/uname -p` in
-	    sparc) echo sparc-icl-nx7; exit ;;
-	esac ;;
-    sun4H:SunOS:5.*:*)
-	echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-	exit ;;
-    sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
-	echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-	exit ;;
-    i86pc:SunOS:5.*:*)
-	echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-	exit ;;
-    sun4*:SunOS:6*:*)
-	# According to config.sub, this is the proper way to canonicalize
-	# SunOS6.  Hard to guess exactly what SunOS6 will be like, but
-	# it's likely to be more like Solaris than SunOS4.
-	echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-	exit ;;
-    sun4*:SunOS:*:*)
-	case "`/usr/bin/arch -k`" in
-	    Series*|S4*)
-		UNAME_RELEASE=`uname -v`
-		;;
-	esac
-	# Japanese Language versions have a version number like `4.1.3-JL'.
-	echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
-	exit ;;
-    sun3*:SunOS:*:*)
-	echo m68k-sun-sunos${UNAME_RELEASE}
-	exit ;;
-    sun*:*:4.2BSD:*)
-	UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
-	test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
-	case "`/bin/arch`" in
-	    sun3)
-		echo m68k-sun-sunos${UNAME_RELEASE}
-		;;
-	    sun4)
-		echo sparc-sun-sunos${UNAME_RELEASE}
-		;;
-	esac
-	exit ;;
-    aushp:SunOS:*:*)
-	echo sparc-auspex-sunos${UNAME_RELEASE}
-	exit ;;
-    # The situation for MiNT is a little confusing.  The machine name
-    # can be virtually everything (everything which is not
-    # "atarist" or "atariste" at least should have a processor
-    # > m68000).  The system name ranges from "MiNT" over "FreeMiNT"
-    # to the lowercase version "mint" (or "freemint").  Finally
-    # the system name "TOS" denotes a system which is actually not
-    # MiNT.  But MiNT is downward compatible to TOS, so this should
-    # be no problem.
-    atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
-        echo m68k-atari-mint${UNAME_RELEASE}
-	exit ;;
-    atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
-	echo m68k-atari-mint${UNAME_RELEASE}
-        exit ;;
-    *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
-        echo m68k-atari-mint${UNAME_RELEASE}
-	exit ;;
-    milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
-        echo m68k-milan-mint${UNAME_RELEASE}
-        exit ;;
-    hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
-        echo m68k-hades-mint${UNAME_RELEASE}
-        exit ;;
-    *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
-        echo m68k-unknown-mint${UNAME_RELEASE}
-        exit ;;
-    m68k:machten:*:*)
-	echo m68k-apple-machten${UNAME_RELEASE}
-	exit ;;
-    powerpc:machten:*:*)
-	echo powerpc-apple-machten${UNAME_RELEASE}
-	exit ;;
-    RISC*:Mach:*:*)
-	echo mips-dec-mach_bsd4.3
-	exit ;;
-    RISC*:ULTRIX:*:*)
-	echo mips-dec-ultrix${UNAME_RELEASE}
-	exit ;;
-    VAX*:ULTRIX*:*:*)
-	echo vax-dec-ultrix${UNAME_RELEASE}
-	exit ;;
-    2020:CLIX:*:* | 2430:CLIX:*:*)
-	echo clipper-intergraph-clix${UNAME_RELEASE}
-	exit ;;
-    mips:*:*:UMIPS | mips:*:*:RISCos)
-	eval $set_cc_for_build
-	sed 's/^	//' << EOF >$dummy.c
-#ifdef __cplusplus
-#include <stdio.h>  /* for printf() prototype */
-	int main (int argc, char *argv[]) {
-#else
-	int main (argc, argv) int argc; char *argv[]; {
-#endif
-	#if defined (host_mips) && defined (MIPSEB)
-	#if defined (SYSTYPE_SYSV)
-	  printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
-	#endif
-	#if defined (SYSTYPE_SVR4)
-	  printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
-	#endif
-	#if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
-	  printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
-	#endif
-	#endif
-	  exit (-1);
-	}
-EOF
-	$CC_FOR_BUILD -o $dummy $dummy.c &&
-	  dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` &&
-	  SYSTEM_NAME=`$dummy $dummyarg` &&
-	    { echo "$SYSTEM_NAME"; exit; }
-	echo mips-mips-riscos${UNAME_RELEASE}
-	exit ;;
-    Motorola:PowerMAX_OS:*:*)
-	echo powerpc-motorola-powermax
-	exit ;;
-    Motorola:*:4.3:PL8-*)
-	echo powerpc-harris-powermax
-	exit ;;
-    Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
-	echo powerpc-harris-powermax
-	exit ;;
-    Night_Hawk:Power_UNIX:*:*)
-	echo powerpc-harris-powerunix
-	exit ;;
-    m88k:CX/UX:7*:*)
-	echo m88k-harris-cxux7
-	exit ;;
-    m88k:*:4*:R4*)
-	echo m88k-motorola-sysv4
-	exit ;;
-    m88k:*:3*:R3*)
-	echo m88k-motorola-sysv3
-	exit ;;
-    AViiON:dgux:*:*)
-        # DG/UX returns AViiON for all architectures
-        UNAME_PROCESSOR=`/usr/bin/uname -p`
-	if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
-	then
-	    if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
-	       [ ${TARGET_BINARY_INTERFACE}x = x ]
-	    then
-		echo m88k-dg-dgux${UNAME_RELEASE}
-	    else
-		echo m88k-dg-dguxbcs${UNAME_RELEASE}
-	    fi
-	else
-	    echo i586-dg-dgux${UNAME_RELEASE}
-	fi
- 	exit ;;
-    M88*:DolphinOS:*:*)	# DolphinOS (SVR3)
-	echo m88k-dolphin-sysv3
-	exit ;;
-    M88*:*:R3*:*)
-	# Delta 88k system running SVR3
-	echo m88k-motorola-sysv3
-	exit ;;
-    XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
-	echo m88k-tektronix-sysv3
-	exit ;;
-    Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
-	echo m68k-tektronix-bsd
-	exit ;;
-    *:IRIX*:*:*)
-	echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
-	exit ;;
-    ????????:AIX?:[12].1:2)   # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
-	echo romp-ibm-aix     # uname -m gives an 8 hex-code CPU id
-	exit ;;               # Note that: echo "'`uname -s`'" gives 'AIX '
-    i*86:AIX:*:*)
-	echo i386-ibm-aix
-	exit ;;
-    ia64:AIX:*:*)
-	if [ -x /usr/bin/oslevel ] ; then
-		IBM_REV=`/usr/bin/oslevel`
-	else
-		IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
-	fi
-	echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
-	exit ;;
-    *:AIX:2:3)
-	if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
-		eval $set_cc_for_build
-		sed 's/^		//' << EOF >$dummy.c
-		#include <sys/systemcfg.h>
-
-		main()
-			{
-			if (!__power_pc())
-				exit(1);
-			puts("powerpc-ibm-aix3.2.5");
-			exit(0);
-			}
-EOF
-		if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy`
-		then
-			echo "$SYSTEM_NAME"
-		else
-			echo rs6000-ibm-aix3.2.5
-		fi
-	elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
-		echo rs6000-ibm-aix3.2.4
-	else
-		echo rs6000-ibm-aix3.2
-	fi
-	exit ;;
-    *:AIX:*:[45])
-	IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
-	if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
-		IBM_ARCH=rs6000
-	else
-		IBM_ARCH=powerpc
-	fi
-	if [ -x /usr/bin/oslevel ] ; then
-		IBM_REV=`/usr/bin/oslevel`
-	else
-		IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
-	fi
-	echo ${IBM_ARCH}-ibm-aix${IBM_REV}
-	exit ;;
-    *:AIX:*:*)
-	echo rs6000-ibm-aix
-	exit ;;
-    ibmrt:4.4BSD:*|romp-ibm:BSD:*)
-	echo romp-ibm-bsd4.4
-	exit ;;
-    ibmrt:*BSD:*|romp-ibm:BSD:*)            # covers RT/PC BSD and
-	echo romp-ibm-bsd${UNAME_RELEASE}   # 4.3 with uname added to
-	exit ;;                             # report: romp-ibm BSD 4.3
-    *:BOSX:*:*)
-	echo rs6000-bull-bosx
-	exit ;;
-    DPX/2?00:B.O.S.:*:*)
-	echo m68k-bull-sysv3
-	exit ;;
-    9000/[34]??:4.3bsd:1.*:*)
-	echo m68k-hp-bsd
-	exit ;;
-    hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
-	echo m68k-hp-bsd4.4
-	exit ;;
-    9000/[34678]??:HP-UX:*:*)
-	HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
-	case "${UNAME_MACHINE}" in
-	    9000/31? )            HP_ARCH=m68000 ;;
-	    9000/[34]?? )         HP_ARCH=m68k ;;
-	    9000/[678][0-9][0-9])
-		if [ -x /usr/bin/getconf ]; then
-		    sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
-                    sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
-                    case "${sc_cpu_version}" in
-                      523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
-                      528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
-                      532)                      # CPU_PA_RISC2_0
-                        case "${sc_kernel_bits}" in
-                          32) HP_ARCH="hppa2.0n" ;;
-                          64) HP_ARCH="hppa2.0w" ;;
-			  '') HP_ARCH="hppa2.0" ;;   # HP-UX 10.20
-                        esac ;;
-                    esac
-		fi
-		if [ "${HP_ARCH}" = "" ]; then
-		    eval $set_cc_for_build
-		    sed 's/^              //' << EOF >$dummy.c
-
-              #define _HPUX_SOURCE
-              #include <stdlib.h>
-              #include <unistd.h>
-
-              int main ()
-              {
-              #if defined(_SC_KERNEL_BITS)
-                  long bits = sysconf(_SC_KERNEL_BITS);
-              #endif
-                  long cpu  = sysconf (_SC_CPU_VERSION);
-
-                  switch (cpu)
-              	{
-              	case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
-              	case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
-              	case CPU_PA_RISC2_0:
-              #if defined(_SC_KERNEL_BITS)
-              	    switch (bits)
-              		{
-              		case 64: puts ("hppa2.0w"); break;
-              		case 32: puts ("hppa2.0n"); break;
-              		default: puts ("hppa2.0"); break;
-              		} break;
-              #else  /* !defined(_SC_KERNEL_BITS) */
-              	    puts ("hppa2.0"); break;
-              #endif
-              	default: puts ("hppa1.0"); break;
-              	}
-                  exit (0);
-              }
-EOF
-		    (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
-		    test -z "$HP_ARCH" && HP_ARCH=hppa
-		fi ;;
-	esac
-	if [ ${HP_ARCH} = "hppa2.0w" ]
-	then
-	    eval $set_cc_for_build
-
-	    # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating
-	    # 32-bit code.  hppa64-hp-hpux* has the same kernel and a compiler
-	    # generating 64-bit code.  GNU and HP use different nomenclature:
-	    #
-	    # $ CC_FOR_BUILD=cc ./config.guess
-	    # => hppa2.0w-hp-hpux11.23
-	    # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess
-	    # => hppa64-hp-hpux11.23
-
-	    if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) |
-		grep __LP64__ >/dev/null
-	    then
-		HP_ARCH="hppa2.0w"
-	    else
-		HP_ARCH="hppa64"
-	    fi
-	fi
-	echo ${HP_ARCH}-hp-hpux${HPUX_REV}
-	exit ;;
-    ia64:HP-UX:*:*)
-	HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
-	echo ia64-hp-hpux${HPUX_REV}
-	exit ;;
-    3050*:HI-UX:*:*)
-	eval $set_cc_for_build
-	sed 's/^	//' << EOF >$dummy.c
-	#include <unistd.h>
-	int
-	main ()
-	{
-	  long cpu = sysconf (_SC_CPU_VERSION);
-	  /* The order matters, because CPU_IS_HP_MC68K erroneously returns
-	     true for CPU_PA_RISC1_0.  CPU_IS_PA_RISC returns correct
-	     results, however.  */
-	  if (CPU_IS_PA_RISC (cpu))
-	    {
-	      switch (cpu)
-		{
-		  case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
-		  case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
-		  case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
-		  default: puts ("hppa-hitachi-hiuxwe2"); break;
-		}
-	    }
-	  else if (CPU_IS_HP_MC68K (cpu))
-	    puts ("m68k-hitachi-hiuxwe2");
-	  else puts ("unknown-hitachi-hiuxwe2");
-	  exit (0);
-	}
-EOF
-	$CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` &&
-		{ echo "$SYSTEM_NAME"; exit; }
-	echo unknown-hitachi-hiuxwe2
-	exit ;;
-    9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
-	echo hppa1.1-hp-bsd
-	exit ;;
-    9000/8??:4.3bsd:*:*)
-	echo hppa1.0-hp-bsd
-	exit ;;
-    *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
-	echo hppa1.0-hp-mpeix
-	exit ;;
-    hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
-	echo hppa1.1-hp-osf
-	exit ;;
-    hp8??:OSF1:*:*)
-	echo hppa1.0-hp-osf
-	exit ;;
-    i*86:OSF1:*:*)
-	if [ -x /usr/sbin/sysversion ] ; then
-	    echo ${UNAME_MACHINE}-unknown-osf1mk
-	else
-	    echo ${UNAME_MACHINE}-unknown-osf1
-	fi
-	exit ;;
-    parisc*:Lites*:*:*)
-	echo hppa1.1-hp-lites
-	exit ;;
-    C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
-	echo c1-convex-bsd
-        exit ;;
-    C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
-	if getsysinfo -f scalar_acc
-	then echo c32-convex-bsd
-	else echo c2-convex-bsd
-	fi
-        exit ;;
-    C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
-	echo c34-convex-bsd
-        exit ;;
-    C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
-	echo c38-convex-bsd
-        exit ;;
-    C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
-	echo c4-convex-bsd
-        exit ;;
-    CRAY*Y-MP:*:*:*)
-	echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
-	exit ;;
-    CRAY*[A-Z]90:*:*:*)
-	echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
-	| sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
-	      -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
-	      -e 's/\.[^.]*$/.X/'
-	exit ;;
-    CRAY*TS:*:*:*)
-	echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
-	exit ;;
-    CRAY*T3E:*:*:*)
-	echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
-	exit ;;
-    CRAY*SV1:*:*:*)
-	echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
-	exit ;;
-    *:UNICOS/mp:*:*)
-	echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
-	exit ;;
-    F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
-	FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
-        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
-        FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
-        echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
-        exit ;;
-    5000:UNIX_System_V:4.*:*)
-        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
-        FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
-        echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
-	exit ;;
-    i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
-	echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
-	exit ;;
-    sparc*:BSD/OS:*:*)
-	echo sparc-unknown-bsdi${UNAME_RELEASE}
-	exit ;;
-    *:BSD/OS:*:*)
-	echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
-	exit ;;
-    *:FreeBSD:*:*)
-	case ${UNAME_MACHINE} in
-	    pc98)
-		echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
-	    amd64)
-		echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
-	    *)
-		echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
-	esac
-	exit ;;
-    i*:CYGWIN*:*)
-	echo ${UNAME_MACHINE}-pc-cygwin
-	exit ;;
-    i*:MINGW*:*)
-	echo ${UNAME_MACHINE}-pc-mingw32
-	exit ;;
-    i*:windows32*:*)
-    	# uname -m includes "-pc" on this system.
-    	echo ${UNAME_MACHINE}-mingw32
-	exit ;;
-    i*:PW*:*)
-	echo ${UNAME_MACHINE}-pc-pw32
-	exit ;;
-    x86:Interix*:[345]*)
-	echo i586-pc-interix${UNAME_RELEASE}
-	exit ;;
-    EM64T:Interix*:[345]*)
-	echo x86_64-unknown-interix${UNAME_RELEASE}
-	exit ;;
-    [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
-	echo i${UNAME_MACHINE}-pc-mks
-	exit ;;
-    i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
-	# How do we know it's Interix rather than the generic POSIX subsystem?
-	# It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
-	# UNAME_MACHINE based on the output of uname instead of i386?
-	echo i586-pc-interix
-	exit ;;
-    i*:UWIN*:*)
-	echo ${UNAME_MACHINE}-pc-uwin
-	exit ;;
-    amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*)
-	echo x86_64-unknown-cygwin
-	exit ;;
-    p*:CYGWIN*:*)
-	echo powerpcle-unknown-cygwin
-	exit ;;
-    prep*:SunOS:5.*:*)
-	echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-	exit ;;
-    *:GNU:*:*)
-	# the GNU system
-	echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
-	exit ;;
-    *:GNU/*:*:*)
-	# other systems with GNU libc and userland
-	echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu
-	exit ;;
-    i*86:Minix:*:*)
-	echo ${UNAME_MACHINE}-pc-minix
-	exit ;;
-    arm*:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-gnu
-	exit ;;
-    cris:Linux:*:*)
-	echo cris-axis-linux-gnu
-	exit ;;
-    crisv32:Linux:*:*)
-	echo crisv32-axis-linux-gnu
-	exit ;;
-    frv:Linux:*:*)
-    	echo frv-unknown-linux-gnu
-	exit ;;
-    ia64:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-gnu
-	exit ;;
-    m32r*:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-gnu
-	exit ;;
-    m68*:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-gnu
-	exit ;;
-    mips:Linux:*:*)
-	eval $set_cc_for_build
-	sed 's/^	//' << EOF >$dummy.c
-	#undef CPU
-	#undef mips
-	#undef mipsel
-	#if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
-	CPU=mipsel
-	#else
-	#if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
-	CPU=mips
-	#else
-	CPU=
-	#endif
-	#endif
-EOF
-	eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
-	    /^CPU/{
-		s: ::g
-		p
-	    }'`"
-	test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
-	;;
-    mips64:Linux:*:*)
-	eval $set_cc_for_build
-	sed 's/^	//' << EOF >$dummy.c
-	#undef CPU
-	#undef mips64
-	#undef mips64el
-	#if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
-	CPU=mips64el
-	#else
-	#if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
-	CPU=mips64
-	#else
-	CPU=
-	#endif
-	#endif
-EOF
-	eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
-	    /^CPU/{
-		s: ::g
-		p
-	    }'`"
-	test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
-	;;
-    or32:Linux:*:*)
-	echo or32-unknown-linux-gnu
-	exit ;;
-    ppc:Linux:*:*)
-	echo powerpc-unknown-linux-gnu
-	exit ;;
-    ppc64:Linux:*:*)
-	echo powerpc64-unknown-linux-gnu
-	exit ;;
-    alpha:Linux:*:*)
-	case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
-	  EV5)   UNAME_MACHINE=alphaev5 ;;
-	  EV56)  UNAME_MACHINE=alphaev56 ;;
-	  PCA56) UNAME_MACHINE=alphapca56 ;;
-	  PCA57) UNAME_MACHINE=alphapca56 ;;
-	  EV6)   UNAME_MACHINE=alphaev6 ;;
-	  EV67)  UNAME_MACHINE=alphaev67 ;;
-	  EV68*) UNAME_MACHINE=alphaev68 ;;
-        esac
-	objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null
-	if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
-	echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
-	exit ;;
-    parisc:Linux:*:* | hppa:Linux:*:*)
-	# Look for CPU level
-	case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
-	  PA7*) echo hppa1.1-unknown-linux-gnu ;;
-	  PA8*) echo hppa2.0-unknown-linux-gnu ;;
-	  *)    echo hppa-unknown-linux-gnu ;;
-	esac
-	exit ;;
-    parisc64:Linux:*:* | hppa64:Linux:*:*)
-	echo hppa64-unknown-linux-gnu
-	exit ;;
-    s390:Linux:*:* | s390x:Linux:*:*)
-	echo ${UNAME_MACHINE}-ibm-linux
-	exit ;;
-    sh64*:Linux:*:*)
-    	echo ${UNAME_MACHINE}-unknown-linux-gnu
-	exit ;;
-    sh*:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-gnu
-	exit ;;
-    sparc:Linux:*:* | sparc64:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-gnu
-	exit ;;
-    vax:Linux:*:*)
-	echo ${UNAME_MACHINE}-dec-linux-gnu
-	exit ;;
-    x86_64:Linux:*:*)
-	echo x86_64-unknown-linux-gnu
-	exit ;;
-    i*86:Linux:*:*)
-	# The BFD linker knows what the default object file format is, so
-	# first see if it will tell us. cd to the root directory to prevent
-	# problems with other programs or directories called `ld' in the path.
-	# Set LC_ALL=C to ensure ld outputs messages in English.
-	ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \
-			 | sed -ne '/supported targets:/!d
-				    s/[ 	][ 	]*/ /g
-				    s/.*supported targets: *//
-				    s/ .*//
-				    p'`
-        case "$ld_supported_targets" in
-	  elf32-i386)
-		TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu"
-		;;
-	  a.out-i386-linux)
-		echo "${UNAME_MACHINE}-pc-linux-gnuaout"
-		exit ;;
-	  coff-i386)
-		echo "${UNAME_MACHINE}-pc-linux-gnucoff"
-		exit ;;
-	  "")
-		# Either a pre-BFD a.out linker (linux-gnuoldld) or
-		# one that does not give us useful --help.
-		echo "${UNAME_MACHINE}-pc-linux-gnuoldld"
-		exit ;;
-	esac
-	# Determine whether the default compiler is a.out or elf
-	eval $set_cc_for_build
-	sed 's/^	//' << EOF >$dummy.c
-	#include <features.h>
-	#ifdef __ELF__
-	# ifdef __GLIBC__
-	#  if __GLIBC__ >= 2
-	LIBC=gnu
-	#  else
-	LIBC=gnulibc1
-	#  endif
-	# else
-	LIBC=gnulibc1
-	# endif
-	#else
-	#if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC)
-	LIBC=gnu
-	#else
-	LIBC=gnuaout
-	#endif
-	#endif
-	#ifdef __dietlibc__
-	LIBC=dietlibc
-	#endif
-EOF
-	eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
-	    /^LIBC/{
-		s: ::g
-		p
-	    }'`"
-	test x"${LIBC}" != x && {
-		echo "${UNAME_MACHINE}-pc-linux-${LIBC}"
-		exit
-	}
-	test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; }
-	;;
-    i*86:DYNIX/ptx:4*:*)
-	# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
-	# earlier versions are messed up and put the nodename in both
-	# sysname and nodename.
-	echo i386-sequent-sysv4
-	exit ;;
-    i*86:UNIX_SV:4.2MP:2.*)
-        # Unixware is an offshoot of SVR4, but it has its own version
-        # number series starting with 2...
-        # I am not positive that other SVR4 systems won't match this,
-	# I just have to hope.  -- rms.
-        # Use sysv4.2uw... so that sysv4* matches it.
-	echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
-	exit ;;
-    i*86:OS/2:*:*)
-	# If we were able to find `uname', then EMX Unix compatibility
-	# is probably installed.
-	echo ${UNAME_MACHINE}-pc-os2-emx
-	exit ;;
-    i*86:XTS-300:*:STOP)
-	echo ${UNAME_MACHINE}-unknown-stop
-	exit ;;
-    i*86:atheos:*:*)
-	echo ${UNAME_MACHINE}-unknown-atheos
-	exit ;;
-    i*86:syllable:*:*)
-	echo ${UNAME_MACHINE}-pc-syllable
-	exit ;;
-    i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)
-	echo i386-unknown-lynxos${UNAME_RELEASE}
-	exit ;;
-    i*86:*DOS:*:*)
-	echo ${UNAME_MACHINE}-pc-msdosdjgpp
-	exit ;;
-    i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
-	UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
-	if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
-		echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
-	else
-		echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
-	fi
-	exit ;;
-    i*86:*:5:[678]*)
-    	# UnixWare 7.x, OpenUNIX and OpenServer 6.
-	case `/bin/uname -X | grep "^Machine"` in
-	    *486*)	     UNAME_MACHINE=i486 ;;
-	    *Pentium)	     UNAME_MACHINE=i586 ;;
-	    *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
-	esac
-	echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
-	exit ;;
-    i*86:*:3.2:*)
-	if test -f /usr/options/cb.name; then
-		UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
-		echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
-	elif /bin/uname -X 2>/dev/null >/dev/null ; then
-		UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`
-		(/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
-		(/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \
-			&& UNAME_MACHINE=i586
-		(/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \
-			&& UNAME_MACHINE=i686
-		(/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \
-			&& UNAME_MACHINE=i686
-		echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
-	else
-		echo ${UNAME_MACHINE}-pc-sysv32
-	fi
-	exit ;;
-    pc:*:*:*)
-	# Left here for compatibility:
-        # uname -m prints for DJGPP always 'pc', but it prints nothing about
-        # the processor, so we play safe by assuming i386.
-	echo i386-pc-msdosdjgpp
-        exit ;;
-    Intel:Mach:3*:*)
-	echo i386-pc-mach3
-	exit ;;
-    paragon:*:*:*)
-	echo i860-intel-osf1
-	exit ;;
-    i860:*:4.*:*) # i860-SVR4
-	if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
-	  echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
-	else # Add other i860-SVR4 vendors below as they are discovered.
-	  echo i860-unknown-sysv${UNAME_RELEASE}  # Unknown i860-SVR4
-	fi
-	exit ;;
-    mini*:CTIX:SYS*5:*)
-	# "miniframe"
-	echo m68010-convergent-sysv
-	exit ;;
-    mc68k:UNIX:SYSTEM5:3.51m)
-	echo m68k-convergent-sysv
-	exit ;;
-    M680?0:D-NIX:5.3:*)
-	echo m68k-diab-dnix
-	exit ;;
-    M68*:*:R3V[5678]*:*)
-	test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;;
-    3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0)
-	OS_REL=''
-	test -r /etc/.relid \
-	&& OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
-	/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
-	  && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
-	/bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
-	  && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
-    3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
-        /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
-          && { echo i486-ncr-sysv4; exit; } ;;
-    m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
-	echo m68k-unknown-lynxos${UNAME_RELEASE}
-	exit ;;
-    mc68030:UNIX_System_V:4.*:*)
-	echo m68k-atari-sysv4
-	exit ;;
-    TSUNAMI:LynxOS:2.*:*)
-	echo sparc-unknown-lynxos${UNAME_RELEASE}
-	exit ;;
-    rs6000:LynxOS:2.*:*)
-	echo rs6000-unknown-lynxos${UNAME_RELEASE}
-	exit ;;
-    PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*)
-	echo powerpc-unknown-lynxos${UNAME_RELEASE}
-	exit ;;
-    SM[BE]S:UNIX_SV:*:*)
-	echo mips-dde-sysv${UNAME_RELEASE}
-	exit ;;
-    RM*:ReliantUNIX-*:*:*)
-	echo mips-sni-sysv4
-	exit ;;
-    RM*:SINIX-*:*:*)
-	echo mips-sni-sysv4
-	exit ;;
-    *:SINIX-*:*:*)
-	if uname -p 2>/dev/null >/dev/null ; then
-		UNAME_MACHINE=`(uname -p) 2>/dev/null`
-		echo ${UNAME_MACHINE}-sni-sysv4
-	else
-		echo ns32k-sni-sysv
-	fi
-	exit ;;
-    PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
-                      # says <Richard.M.Bartel@ccMail.Census.GOV>
-        echo i586-unisys-sysv4
-        exit ;;
-    *:UNIX_System_V:4*:FTX*)
-	# From Gerald Hewes <hewes@openmarket.com>.
-	# How about differentiating between stratus architectures? -djm
-	echo hppa1.1-stratus-sysv4
-	exit ;;
-    *:*:*:FTX*)
-	# From seanf@swdc.stratus.com.
-	echo i860-stratus-sysv4
-	exit ;;
-    i*86:VOS:*:*)
-	# From Paul.Green@stratus.com.
-	echo ${UNAME_MACHINE}-stratus-vos
-	exit ;;
-    *:VOS:*:*)
-	# From Paul.Green@stratus.com.
-	echo hppa1.1-stratus-vos
-	exit ;;
-    mc68*:A/UX:*:*)
-	echo m68k-apple-aux${UNAME_RELEASE}
-	exit ;;
-    news*:NEWS-OS:6*:*)
-	echo mips-sony-newsos6
-	exit ;;
-    R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
-	if [ -d /usr/nec ]; then
-	        echo mips-nec-sysv${UNAME_RELEASE}
-	else
-	        echo mips-unknown-sysv${UNAME_RELEASE}
-	fi
-        exit ;;
-    BeBox:BeOS:*:*)	# BeOS running on hardware made by Be, PPC only.
-	echo powerpc-be-beos
-	exit ;;
-    BeMac:BeOS:*:*)	# BeOS running on Mac or Mac clone, PPC only.
-	echo powerpc-apple-beos
-	exit ;;
-    BePC:BeOS:*:*)	# BeOS running on Intel PC compatible.
-	echo i586-pc-beos
-	exit ;;
-    SX-4:SUPER-UX:*:*)
-	echo sx4-nec-superux${UNAME_RELEASE}
-	exit ;;
-    SX-5:SUPER-UX:*:*)
-	echo sx5-nec-superux${UNAME_RELEASE}
-	exit ;;
-    SX-6:SUPER-UX:*:*)
-	echo sx6-nec-superux${UNAME_RELEASE}
-	exit ;;
-    Power*:Rhapsody:*:*)
-	echo powerpc-apple-rhapsody${UNAME_RELEASE}
-	exit ;;
-    *:Rhapsody:*:*)
-	echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
-	exit ;;
-    *:Darwin:*:*)
-	UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
-	case $UNAME_PROCESSOR in
-	    unknown) UNAME_PROCESSOR=powerpc ;;
-	esac
-	echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
-	exit ;;
-    *:procnto*:*:* | *:QNX:[0123456789]*:*)
-	UNAME_PROCESSOR=`uname -p`
-	if test "$UNAME_PROCESSOR" = "x86"; then
-		UNAME_PROCESSOR=i386
-		UNAME_MACHINE=pc
-	fi
-	echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
-	exit ;;
-    *:QNX:*:4*)
-	echo i386-pc-qnx
-	exit ;;
-    NSE-?:NONSTOP_KERNEL:*:*)
-	echo nse-tandem-nsk${UNAME_RELEASE}
-	exit ;;
-    NSR-?:NONSTOP_KERNEL:*:*)
-	echo nsr-tandem-nsk${UNAME_RELEASE}
-	exit ;;
-    *:NonStop-UX:*:*)
-	echo mips-compaq-nonstopux
-	exit ;;
-    BS2000:POSIX*:*:*)
-	echo bs2000-siemens-sysv
-	exit ;;
-    DS/*:UNIX_System_V:*:*)
-	echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
-	exit ;;
-    *:Plan9:*:*)
-	# "uname -m" is not consistent, so use $cputype instead. 386
-	# is converted to i386 for consistency with other x86
-	# operating systems.
-	if test "$cputype" = "386"; then
-	    UNAME_MACHINE=i386
-	else
-	    UNAME_MACHINE="$cputype"
-	fi
-	echo ${UNAME_MACHINE}-unknown-plan9
-	exit ;;
-    *:TOPS-10:*:*)
-	echo pdp10-unknown-tops10
-	exit ;;
-    *:TENEX:*:*)
-	echo pdp10-unknown-tenex
-	exit ;;
-    KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
-	echo pdp10-dec-tops20
-	exit ;;
-    XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
-	echo pdp10-xkl-tops20
-	exit ;;
-    *:TOPS-20:*:*)
-	echo pdp10-unknown-tops20
-	exit ;;
-    *:ITS:*:*)
-	echo pdp10-unknown-its
-	exit ;;
-    SEI:*:*:SEIUX)
-        echo mips-sei-seiux${UNAME_RELEASE}
-	exit ;;
-    *:DragonFly:*:*)
-	echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
-	exit ;;
-    *:*VMS:*:*)
-    	UNAME_MACHINE=`(uname -p) 2>/dev/null`
-	case "${UNAME_MACHINE}" in
-	    A*) echo alpha-dec-vms ; exit ;;
-	    I*) echo ia64-dec-vms ; exit ;;
-	    V*) echo vax-dec-vms ; exit ;;
-	esac ;;
-    *:XENIX:*:SysV)
-	echo i386-pc-xenix
-	exit ;;
-    i*86:skyos:*:*)
-	echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//'
-	exit ;;
-    i*86:rdos:*:*)
-	echo ${UNAME_MACHINE}-pc-rdos
-	exit ;;
-esac
-
-#echo '(No uname command or uname output not recognized.)' 1>&2
-#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
-
-eval $set_cc_for_build
-cat >$dummy.c <<EOF
-#ifdef _SEQUENT_
-# include <sys/types.h>
-# include <sys/utsname.h>
-#endif
-main ()
-{
-#if defined (sony)
-#if defined (MIPSEB)
-  /* BFD wants "bsd" instead of "newsos".  Perhaps BFD should be changed,
-     I don't know....  */
-  printf ("mips-sony-bsd\n"); exit (0);
-#else
-#include <sys/param.h>
-  printf ("m68k-sony-newsos%s\n",
-#ifdef NEWSOS4
-          "4"
-#else
-	  ""
-#endif
-         ); exit (0);
-#endif
-#endif
-
-#if defined (__arm) && defined (__acorn) && defined (__unix)
-  printf ("arm-acorn-riscix\n"); exit (0);
-#endif
-
-#if defined (hp300) && !defined (hpux)
-  printf ("m68k-hp-bsd\n"); exit (0);
-#endif
-
-#if defined (NeXT)
-#if !defined (__ARCHITECTURE__)
-#define __ARCHITECTURE__ "m68k"
-#endif
-  int version;
-  version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
-  if (version < 4)
-    printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
-  else
-    printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
-  exit (0);
-#endif
-
-#if defined (MULTIMAX) || defined (n16)
-#if defined (UMAXV)
-  printf ("ns32k-encore-sysv\n"); exit (0);
-#else
-#if defined (CMU)
-  printf ("ns32k-encore-mach\n"); exit (0);
-#else
-  printf ("ns32k-encore-bsd\n"); exit (0);
-#endif
-#endif
-#endif
-
-#if defined (__386BSD__)
-  printf ("i386-pc-bsd\n"); exit (0);
-#endif
-
-#if defined (sequent)
-#if defined (i386)
-  printf ("i386-sequent-dynix\n"); exit (0);
-#endif
-#if defined (ns32000)
-  printf ("ns32k-sequent-dynix\n"); exit (0);
-#endif
-#endif
-
-#if defined (_SEQUENT_)
-    struct utsname un;
-
-    uname(&un);
-
-    if (strncmp(un.version, "V2", 2) == 0) {
-	printf ("i386-sequent-ptx2\n"); exit (0);
-    }
-    if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
-	printf ("i386-sequent-ptx1\n"); exit (0);
-    }
-    printf ("i386-sequent-ptx\n"); exit (0);
-
-#endif
-
-#if defined (vax)
-# if !defined (ultrix)
-#  include <sys/param.h>
-#  if defined (BSD)
-#   if BSD == 43
-      printf ("vax-dec-bsd4.3\n"); exit (0);
-#   else
-#    if BSD == 199006
-      printf ("vax-dec-bsd4.3reno\n"); exit (0);
-#    else
-      printf ("vax-dec-bsd\n"); exit (0);
-#    endif
-#   endif
-#  else
-    printf ("vax-dec-bsd\n"); exit (0);
-#  endif
-# else
-    printf ("vax-dec-ultrix\n"); exit (0);
-# endif
-#endif
-
-#if defined (alliant) && defined (i860)
-  printf ("i860-alliant-bsd\n"); exit (0);
-#endif
-
-  exit (1);
-}
-EOF
-
-$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` &&
-	{ echo "$SYSTEM_NAME"; exit; }
-
-# Apollos put the system type in the environment.
-
-test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; }
-
-# Convex versions that predate uname can use getsysinfo(1)
-
-if [ -x /usr/convex/getsysinfo ]
-then
-    case `getsysinfo -f cpu_type` in
-    c1*)
-	echo c1-convex-bsd
-	exit ;;
-    c2*)
-	if getsysinfo -f scalar_acc
-	then echo c32-convex-bsd
-	else echo c2-convex-bsd
-	fi
-	exit ;;
-    c34*)
-	echo c34-convex-bsd
-	exit ;;
-    c38*)
-	echo c38-convex-bsd
-	exit ;;
-    c4*)
-	echo c4-convex-bsd
-	exit ;;
-    esac
-fi
-
-cat >&2 <<EOF
-$0: unable to guess system type
-
-This script, last modified $timestamp, has failed to recognize
-the operating system you are using. It is advised that you
-download the most up to date version of the config scripts from
-
-  http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/config/config/config.guess
-and
-  http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/config/config/config.sub
-
-If the version you run ($0) is already up to date, please
-send the following data and any information you think might be
-pertinent to <config-patches@gnu.org> in order to provide the needed
-information to handle your system.
-
-config.guess timestamp = $timestamp
-
-uname -m = `(uname -m) 2>/dev/null || echo unknown`
-uname -r = `(uname -r) 2>/dev/null || echo unknown`
-uname -s = `(uname -s) 2>/dev/null || echo unknown`
-uname -v = `(uname -v) 2>/dev/null || echo unknown`
-
-/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
-/bin/uname -X     = `(/bin/uname -X) 2>/dev/null`
-
-hostinfo               = `(hostinfo) 2>/dev/null`
-/bin/universe          = `(/bin/universe) 2>/dev/null`
-/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null`
-/bin/arch              = `(/bin/arch) 2>/dev/null`
-/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null`
-/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
-
-UNAME_MACHINE = ${UNAME_MACHINE}
-UNAME_RELEASE = ${UNAME_RELEASE}
-UNAME_SYSTEM  = ${UNAME_SYSTEM}
-UNAME_VERSION = ${UNAME_VERSION}
-EOF
-
-exit 1
-
-# Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "timestamp='"
-# time-stamp-format: "%:y-%02m-%02d"
-# time-stamp-end: "'"
-# End:
diff --git a/cil/config.h.in b/cil/config.h.in
deleted file mode 100644
index 57dc9f0a3..000000000
--- a/cil/config.h.in
+++ /dev/null
@@ -1,23 +0,0 @@
-#undef HAVE_WCHAR_T
-
-#undef HAVE_STDLIB_H
-
-#undef HAVE_STRINGS_H
-
-#undef HAVE_SYS_TIME_H
-
-#undef HAVE_UNISTD_H
-
-#undef HAVE_CONST
-
-#undef HAVE_INLINE
-
-#undef HAVE_TIME_H
-
-#undef HAVE_MEMCP
-
-#undef HAVE_MKDIR
-
-#undef HAVE_SELECT
-
-#undef HAVE_SOCKET
diff --git a/cil/config.sub b/cil/config.sub
deleted file mode 100755
index f0675aa6b..000000000
--- a/cil/config.sub
+++ /dev/null
@@ -1,1469 +0,0 @@
-#! /bin/sh
-# Configuration validation subroutine script.
-#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-#   2000, 2001, 2002 Free Software Foundation, Inc.
-
-timestamp='2002-11-30'
-
-# This file is (in principle) common to ALL GNU software.
-# The presence of a machine in this file suggests that SOME GNU software
-# can handle that machine.  It does not imply ALL GNU software can.
-#
-# This file is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330,
-# Boston, MA 02111-1307, USA.
-
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-# Please send patches to <config-patches@gnu.org>.  Submit a context
-# diff and a properly formatted ChangeLog entry.
-#
-# Configuration subroutine to validate and canonicalize a configuration type.
-# Supply the specified configuration type as an argument.
-# If it is invalid, we print an error message on stderr and exit with code 1.
-# Otherwise, we print the canonical config type on stdout and succeed.
-
-# This file is supposed to be the same for all GNU packages
-# and recognize all the CPU types, system types and aliases
-# that are meaningful with *any* GNU software.
-# Each package is responsible for reporting which valid configurations
-# it does not support.  The user should be able to distinguish
-# a failure to support a valid configuration from a meaningless
-# configuration.
-
-# The goal of this file is to map all the various variations of a given
-# machine specification into a single specification in the form:
-#	CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
-# or in some cases, the newer four-part form:
-#	CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
-# It is wrong to echo any other type of specification.
-
-me=`echo "$0" | sed -e 's,.*/,,'`
-
-usage="\
-Usage: $0 [OPTION] CPU-MFR-OPSYS
-       $0 [OPTION] ALIAS
-
-Canonicalize a configuration name.
-
-Operation modes:
-  -h, --help         print this help, then exit
-  -t, --time-stamp   print date of last modification, then exit
-  -v, --version      print version number, then exit
-
-Report bugs and patches to <config-patches@gnu.org>."
-
-version="\
-GNU config.sub ($timestamp)
-
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
-Free Software Foundation, Inc.
-
-This is free software; see the source for copying conditions.  There is NO
-warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
-
-help="
-Try \`$me --help' for more information."
-
-# Parse command line
-while test $# -gt 0 ; do
-  case $1 in
-    --time-stamp | --time* | -t )
-       echo "$timestamp" ; exit 0 ;;
-    --version | -v )
-       echo "$version" ; exit 0 ;;
-    --help | --h* | -h )
-       echo "$usage"; exit 0 ;;
-    -- )     # Stop option processing
-       shift; break ;;
-    - )	# Use stdin as input.
-       break ;;
-    -* )
-       echo "$me: invalid option $1$help"
-       exit 1 ;;
-
-    *local*)
-       # First pass through any local machine types.
-       echo $1
-       exit 0;;
-
-    * )
-       break ;;
-  esac
-done
-
-case $# in
- 0) echo "$me: missing argument$help" >&2
-    exit 1;;
- 1) ;;
- *) echo "$me: too many arguments$help" >&2
-    exit 1;;
-esac
-
-# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
-# Here we must recognize all the valid KERNEL-OS combinations.
-maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
-case $maybe_os in
-  nto-qnx* | linux-gnu* | freebsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*)
-    os=-$maybe_os
-    basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
-    ;;
-  *)
-    basic_machine=`echo $1 | sed 's/-[^-]*$//'`
-    if [ $basic_machine != $1 ]
-    then os=`echo $1 | sed 's/.*-/-/'`
-    else os=; fi
-    ;;
-esac
-
-### Let's recognize common machines as not being operating systems so
-### that things like config.sub decstation-3100 work.  We also
-### recognize some manufacturers as not being operating systems, so we
-### can provide default operating systems below.
-case $os in
-	-sun*os*)
-		# Prevent following clause from handling this invalid input.
-		;;
-	-dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
-	-att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
-	-unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
-	-convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
-	-c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
-	-harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
-	-apple | -axis)
-		os=
-		basic_machine=$1
-		;;
-	-sim | -cisco | -oki | -wec | -winbond)
-		os=
-		basic_machine=$1
-		;;
-	-scout)
-		;;
-	-wrs)
-		os=-vxworks
-		basic_machine=$1
-		;;
-	-chorusos*)
-		os=-chorusos
-		basic_machine=$1
-		;;
- 	-chorusrdb)
- 		os=-chorusrdb
-		basic_machine=$1
- 		;;
-	-hiux*)
-		os=-hiuxwe2
-		;;
-	-sco5)
-		os=-sco3.2v5
-		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-		;;
-	-sco4)
-		os=-sco3.2v4
-		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-		;;
-	-sco3.2.[4-9]*)
-		os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
-		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-		;;
-	-sco3.2v[4-9]*)
-		# Don't forget version if it is 3.2v4 or newer.
-		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-		;;
-	-sco*)
-		os=-sco3.2v2
-		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-		;;
-	-udk*)
-		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-		;;
-	-isc)
-		os=-isc2.2
-		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-		;;
-	-clix*)
-		basic_machine=clipper-intergraph
-		;;
-	-isc*)
-		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-		;;
-	-lynx*)
-		os=-lynxos
-		;;
-	-ptx*)
-		basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
-		;;
-	-windowsnt*)
-		os=`echo $os | sed -e 's/windowsnt/winnt/'`
-		;;
-	-psos*)
-		os=-psos
-		;;
-	-mint | -mint[0-9]*)
-		basic_machine=m68k-atari
-		os=-mint
-		;;
-esac
-
-# Decode aliases for certain CPU-COMPANY combinations.
-case $basic_machine in
-	# Recognize the basic CPU types without company name.
-	# Some are omitted here because they have special meanings below.
-	1750a | 580 \
-	| a29k \
-	| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
-	| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
-	| arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \
-	| clipper \
-	| d10v | d30v | dlx | dsp16xx \
-	| fr30 | frv \
-	| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
-	| i370 | i860 | i960 | ia64 \
-	| ip2k \
-	| m32r | m68000 | m68k | m88k | mcore \
-	| mips | mipsbe | mipseb | mipsel | mipsle \
-	| mips16 \
-	| mips64 | mips64el \
-	| mips64vr | mips64vrel \
-	| mips64orion | mips64orionel \
-	| mips64vr4100 | mips64vr4100el \
-	| mips64vr4300 | mips64vr4300el \
-	| mips64vr5000 | mips64vr5000el \
-	| mipsisa32 | mipsisa32el \
-	| mipsisa64 | mipsisa64el \
-	| mipsisa64sb1 | mipsisa64sb1el \
-	| mipsisa64sr71k | mipsisa64sr71kel \
-	| mipstx39 | mipstx39el \
-	| mn10200 | mn10300 \
-	| ns16k | ns32k \
-	| openrisc | or32 \
-	| pdp10 | pdp11 | pj | pjl \
-	| powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
-	| pyramid \
-	| sh | sh[1234] | sh3e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \
-	| sh64 | sh64le \
-	| sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv9 | sparcv9b \
-	| strongarm \
-	| tahoe | thumb | tic80 | tron \
-	| v850 | v850e \
-	| we32k \
-	| x86 | xscale | xstormy16 | xtensa \
-	| z8k)
-		basic_machine=$basic_machine-unknown
-		;;
-	m6811 | m68hc11 | m6812 | m68hc12)
-		# Motorola 68HC11/12.
-		basic_machine=$basic_machine-unknown
-		os=-none
-		;;
-	m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
-		;;
-
-	# We use `pc' rather than `unknown'
-	# because (1) that's what they normally are, and
-	# (2) the word "unknown" tends to confuse beginning users.
-	i*86 | x86_64)
-	  basic_machine=$basic_machine-pc
-	  ;;
-	# Object if more than one company name word.
-	*-*-*)
-		echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
-		exit 1
-		;;
-	# Recognize the basic CPU types with company name.
-	580-* \
-	| a29k-* \
-	| alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
-	| alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
-	| alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
-	| arm-*  | armbe-* | armle-* | armeb-* | armv*-* \
-	| avr-* \
-	| bs2000-* \
-	| c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* \
-	| clipper-* | cydra-* \
-	| d10v-* | d30v-* | dlx-* \
-	| elxsi-* \
-	| f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \
-	| h8300-* | h8500-* \
-	| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
-	| i*86-* | i860-* | i960-* | ia64-* \
-	| ip2k-* \
-	| m32r-* \
-	| m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
-	| m88110-* | m88k-* | mcore-* \
-	| mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
-	| mips16-* \
-	| mips64-* | mips64el-* \
-	| mips64vr-* | mips64vrel-* \
-	| mips64orion-* | mips64orionel-* \
-	| mips64vr4100-* | mips64vr4100el-* \
-	| mips64vr4300-* | mips64vr4300el-* \
-	| mips64vr5000-* | mips64vr5000el-* \
-	| mipsisa32-* | mipsisa32el-* \
-	| mipsisa64-* | mipsisa64el-* \
-	| mipsisa64sb1-* | mipsisa64sb1el-* \
-	| mipsisa64sr71k-* | mipsisa64sr71kel-* \
-	| mipstx39 | mipstx39el \
-	| none-* | np1-* | ns16k-* | ns32k-* \
-	| orion-* \
-	| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
-	| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
-	| pyramid-* \
-	| romp-* | rs6000-* \
-	| sh-* | sh[1234]-* | sh3e-* | sh[34]eb-* | shbe-* \
-	| shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
-	| sparc-* | sparc64-* | sparc86x-* | sparclet-* | sparclite-* \
-	| sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \
-	| tahoe-* | thumb-* | tic30-* | tic4x-* | tic54x-* | tic80-* | tron-* \
-	| v850-* | v850e-* | vax-* \
-	| we32k-* \
-	| x86-* | x86_64-* | xps100-* | xscale-* | xstormy16-* \
-	| xtensa-* \
-	| ymp-* \
-	| z8k-*)
-		;;
-	# Recognize the various machine names and aliases which stand
-	# for a CPU type and a company and sometimes even an OS.
-	386bsd)
-		basic_machine=i386-unknown
-		os=-bsd
-		;;
-	3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
-		basic_machine=m68000-att
-		;;
-	3b*)
-		basic_machine=we32k-att
-		;;
-	a29khif)
-		basic_machine=a29k-amd
-		os=-udi
-		;;
-	adobe68k)
-		basic_machine=m68010-adobe
-		os=-scout
-		;;
-	alliant | fx80)
-		basic_machine=fx80-alliant
-		;;
-	altos | altos3068)
-		basic_machine=m68k-altos
-		;;
-	am29k)
-		basic_machine=a29k-none
-		os=-bsd
-		;;
-	amdahl)
-		basic_machine=580-amdahl
-		os=-sysv
-		;;
-	amiga | amiga-*)
-		basic_machine=m68k-unknown
-		;;
-	amigaos | amigados)
-		basic_machine=m68k-unknown
-		os=-amigaos
-		;;
-	amigaunix | amix)
-		basic_machine=m68k-unknown
-		os=-sysv4
-		;;
-	apollo68)
-		basic_machine=m68k-apollo
-		os=-sysv
-		;;
-	apollo68bsd)
-		basic_machine=m68k-apollo
-		os=-bsd
-		;;
-	aux)
-		basic_machine=m68k-apple
-		os=-aux
-		;;
-	balance)
-		basic_machine=ns32k-sequent
-		os=-dynix
-		;;
-	c90)
-		basic_machine=c90-cray
-		os=-unicos
-		;;
-	convex-c1)
-		basic_machine=c1-convex
-		os=-bsd
-		;;
-	convex-c2)
-		basic_machine=c2-convex
-		os=-bsd
-		;;
-	convex-c32)
-		basic_machine=c32-convex
-		os=-bsd
-		;;
-	convex-c34)
-		basic_machine=c34-convex
-		os=-bsd
-		;;
-	convex-c38)
-		basic_machine=c38-convex
-		os=-bsd
-		;;
-	cray | j90)
-		basic_machine=j90-cray
-		os=-unicos
-		;;
-	crds | unos)
-		basic_machine=m68k-crds
-		;;
-	cris | cris-* | etrax*)
-		basic_machine=cris-axis
-		;;
-	da30 | da30-*)
-		basic_machine=m68k-da30
-		;;
-	decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
-		basic_machine=mips-dec
-		;;
-	decsystem10* | dec10*)
-		basic_machine=pdp10-dec
-		os=-tops10
-		;;
-	decsystem20* | dec20*)
-		basic_machine=pdp10-dec
-		os=-tops20
-		;;
-	delta | 3300 | motorola-3300 | motorola-delta \
-	      | 3300-motorola | delta-motorola)
-		basic_machine=m68k-motorola
-		;;
-	delta88)
-		basic_machine=m88k-motorola
-		os=-sysv3
-		;;
-	dpx20 | dpx20-*)
-		basic_machine=rs6000-bull
-		os=-bosx
-		;;
-	dpx2* | dpx2*-bull)
-		basic_machine=m68k-bull
-		os=-sysv3
-		;;
-	ebmon29k)
-		basic_machine=a29k-amd
-		os=-ebmon
-		;;
-	elxsi)
-		basic_machine=elxsi-elxsi
-		os=-bsd
-		;;
-	encore | umax | mmax)
-		basic_machine=ns32k-encore
-		;;
-	es1800 | OSE68k | ose68k | ose | OSE)
-		basic_machine=m68k-ericsson
-		os=-ose
-		;;
-	fx2800)
-		basic_machine=i860-alliant
-		;;
-	genix)
-		basic_machine=ns32k-ns
-		;;
-	gmicro)
-		basic_machine=tron-gmicro
-		os=-sysv
-		;;
-	go32)
-		basic_machine=i386-pc
-		os=-go32
-		;;
-	h3050r* | hiux*)
-		basic_machine=hppa1.1-hitachi
-		os=-hiuxwe2
-		;;
-	h8300hms)
-		basic_machine=h8300-hitachi
-		os=-hms
-		;;
-	h8300xray)
-		basic_machine=h8300-hitachi
-		os=-xray
-		;;
-	h8500hms)
-		basic_machine=h8500-hitachi
-		os=-hms
-		;;
-	harris)
-		basic_machine=m88k-harris
-		os=-sysv3
-		;;
-	hp300-*)
-		basic_machine=m68k-hp
-		;;
-	hp300bsd)
-		basic_machine=m68k-hp
-		os=-bsd
-		;;
-	hp300hpux)
-		basic_machine=m68k-hp
-		os=-hpux
-		;;
-	hp3k9[0-9][0-9] | hp9[0-9][0-9])
-		basic_machine=hppa1.0-hp
-		;;
-	hp9k2[0-9][0-9] | hp9k31[0-9])
-		basic_machine=m68000-hp
-		;;
-	hp9k3[2-9][0-9])
-		basic_machine=m68k-hp
-		;;
-	hp9k6[0-9][0-9] | hp6[0-9][0-9])
-		basic_machine=hppa1.0-hp
-		;;
-	hp9k7[0-79][0-9] | hp7[0-79][0-9])
-		basic_machine=hppa1.1-hp
-		;;
-	hp9k78[0-9] | hp78[0-9])
-		# FIXME: really hppa2.0-hp
-		basic_machine=hppa1.1-hp
-		;;
-	hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
-		# FIXME: really hppa2.0-hp
-		basic_machine=hppa1.1-hp
-		;;
-	hp9k8[0-9][13679] | hp8[0-9][13679])
-		basic_machine=hppa1.1-hp
-		;;
-	hp9k8[0-9][0-9] | hp8[0-9][0-9])
-		basic_machine=hppa1.0-hp
-		;;
-	hppa-next)
-		os=-nextstep3
-		;;
-	hppaosf)
-		basic_machine=hppa1.1-hp
-		os=-osf
-		;;
-	hppro)
-		basic_machine=hppa1.1-hp
-		os=-proelf
-		;;
-	i370-ibm* | ibm*)
-		basic_machine=i370-ibm
-		;;
-# I'm not sure what "Sysv32" means.  Should this be sysv3.2?
-	i*86v32)
-		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
-		os=-sysv32
-		;;
-	i*86v4*)
-		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
-		os=-sysv4
-		;;
-	i*86v)
-		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
-		os=-sysv
-		;;
-	i*86sol2)
-		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
-		os=-solaris2
-		;;
-	i386mach)
-		basic_machine=i386-mach
-		os=-mach
-		;;
-	i386-vsta | vsta)
-		basic_machine=i386-unknown
-		os=-vsta
-		;;
-	iris | iris4d)
-		basic_machine=mips-sgi
-		case $os in
-		    -irix*)
-			;;
-		    *)
-			os=-irix4
-			;;
-		esac
-		;;
-	isi68 | isi)
-		basic_machine=m68k-isi
-		os=-sysv
-		;;
-	m88k-omron*)
-		basic_machine=m88k-omron
-		;;
-	magnum | m3230)
-		basic_machine=mips-mips
-		os=-sysv
-		;;
-	merlin)
-		basic_machine=ns32k-utek
-		os=-sysv
-		;;
-	mingw32)
-		basic_machine=i386-pc
-		os=-mingw32
-		;;
-	miniframe)
-		basic_machine=m68000-convergent
-		;;
-	*mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
-		basic_machine=m68k-atari
-		os=-mint
-		;;
-	mips3*-*)
-		basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
-		;;
-	mips3*)
-		basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
-		;;
-	mmix*)
-		basic_machine=mmix-knuth
-		os=-mmixware
-		;;
-	monitor)
-		basic_machine=m68k-rom68k
-		os=-coff
-		;;
-	morphos)
-		basic_machine=powerpc-unknown
-		os=-morphos
-		;;
-	msdos)
-		basic_machine=i386-pc
-		os=-msdos
-		;;
-	mvs)
-		basic_machine=i370-ibm
-		os=-mvs
-		;;
-	ncr3000)
-		basic_machine=i486-ncr
-		os=-sysv4
-		;;
-	netbsd386)
-		basic_machine=i386-unknown
-		os=-netbsd
-		;;
-	netwinder)
-		basic_machine=armv4l-rebel
-		os=-linux
-		;;
-	news | news700 | news800 | news900)
-		basic_machine=m68k-sony
-		os=-newsos
-		;;
-	news1000)
-		basic_machine=m68030-sony
-		os=-newsos
-		;;
-	news-3600 | risc-news)
-		basic_machine=mips-sony
-		os=-newsos
-		;;
-	necv70)
-		basic_machine=v70-nec
-		os=-sysv
-		;;
-	next | m*-next )
-		basic_machine=m68k-next
-		case $os in
-		    -nextstep* )
-			;;
-		    -ns2*)
-		      os=-nextstep2
-			;;
-		    *)
-		      os=-nextstep3
-			;;
-		esac
-		;;
-	nh3000)
-		basic_machine=m68k-harris
-		os=-cxux
-		;;
-	nh[45]000)
-		basic_machine=m88k-harris
-		os=-cxux
-		;;
-	nindy960)
-		basic_machine=i960-intel
-		os=-nindy
-		;;
-	mon960)
-		basic_machine=i960-intel
-		os=-mon960
-		;;
-	nonstopux)
-		basic_machine=mips-compaq
-		os=-nonstopux
-		;;
-	np1)
-		basic_machine=np1-gould
-		;;
-	nsr-tandem)
-		basic_machine=nsr-tandem
-		;;
-	op50n-* | op60c-*)
-		basic_machine=hppa1.1-oki
-		os=-proelf
-		;;
-	or32 | or32-*)
-		basic_machine=or32-unknown
-		os=-coff
-		;;
-	OSE68000 | ose68000)
-		basic_machine=m68000-ericsson
-		os=-ose
-		;;
-	os68k)
-		basic_machine=m68k-none
-		os=-os68k
-		;;
-	pa-hitachi)
-		basic_machine=hppa1.1-hitachi
-		os=-hiuxwe2
-		;;
-	paragon)
-		basic_machine=i860-intel
-		os=-osf
-		;;
-	pbd)
-		basic_machine=sparc-tti
-		;;
-	pbb)
-		basic_machine=m68k-tti
-		;;
-	pc532 | pc532-*)
-		basic_machine=ns32k-pc532
-		;;
-	pentium | p5 | k5 | k6 | nexgen | viac3)
-		basic_machine=i586-pc
-		;;
-	pentiumpro | p6 | 6x86 | athlon | athlon_*)
-		basic_machine=i686-pc
-		;;
-	pentiumii | pentium2)
-		basic_machine=i686-pc
-		;;
-	pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
-		basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
-		;;
-	pentiumpro-* | p6-* | 6x86-* | athlon-*)
-		basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
-		;;
-	pentiumii-* | pentium2-*)
-		basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
-		;;
-	pn)
-		basic_machine=pn-gould
-		;;
-	power)	basic_machine=power-ibm
-		;;
-	ppc)	basic_machine=powerpc-unknown
-		;;
-	ppc-*)	basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
-		;;
-	ppcle | powerpclittle | ppc-le | powerpc-little)
-		basic_machine=powerpcle-unknown
-		;;
-	ppcle-* | powerpclittle-*)
-		basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
-		;;
-	ppc64)	basic_machine=powerpc64-unknown
-		;;
-	ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
-		;;
-	ppc64le | powerpc64little | ppc64-le | powerpc64-little)
-		basic_machine=powerpc64le-unknown
-		;;
-	ppc64le-* | powerpc64little-*)
-		basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
-		;;
-	ps2)
-		basic_machine=i386-ibm
-		;;
-	pw32)
-		basic_machine=i586-unknown
-		os=-pw32
-		;;
-	rom68k)
-		basic_machine=m68k-rom68k
-		os=-coff
-		;;
-	rm[46]00)
-		basic_machine=mips-siemens
-		;;
-	rtpc | rtpc-*)
-		basic_machine=romp-ibm
-		;;
-	s390 | s390-*)
-		basic_machine=s390-ibm
-		;;
-	s390x | s390x-*)
-		basic_machine=s390x-ibm
-		;;
-	sa29200)
-		basic_machine=a29k-amd
-		os=-udi
-		;;
-	sb1)
-		basic_machine=mipsisa64sb1-unknown
-		;;
-	sb1el)
-		basic_machine=mipsisa64sb1el-unknown
-		;;
-	sequent)
-		basic_machine=i386-sequent
-		;;
-	sh)
-		basic_machine=sh-hitachi
-		os=-hms
-		;;
-	sparclite-wrs | simso-wrs)
-		basic_machine=sparclite-wrs
-		os=-vxworks
-		;;
-	sps7)
-		basic_machine=m68k-bull
-		os=-sysv2
-		;;
-	spur)
-		basic_machine=spur-unknown
-		;;
-	st2000)
-		basic_machine=m68k-tandem
-		;;
-	stratus)
-		basic_machine=i860-stratus
-		os=-sysv4
-		;;
-	sun2)
-		basic_machine=m68000-sun
-		;;
-	sun2os3)
-		basic_machine=m68000-sun
-		os=-sunos3
-		;;
-	sun2os4)
-		basic_machine=m68000-sun
-		os=-sunos4
-		;;
-	sun3os3)
-		basic_machine=m68k-sun
-		os=-sunos3
-		;;
-	sun3os4)
-		basic_machine=m68k-sun
-		os=-sunos4
-		;;
-	sun4os3)
-		basic_machine=sparc-sun
-		os=-sunos3
-		;;
-	sun4os4)
-		basic_machine=sparc-sun
-		os=-sunos4
-		;;
-	sun4sol2)
-		basic_machine=sparc-sun
-		os=-solaris2
-		;;
-	sun3 | sun3-*)
-		basic_machine=m68k-sun
-		;;
-	sun4)
-		basic_machine=sparc-sun
-		;;
-	sun386 | sun386i | roadrunner)
-		basic_machine=i386-sun
-		;;
-	sv1)
-		basic_machine=sv1-cray
-		os=-unicos
-		;;
-	symmetry)
-		basic_machine=i386-sequent
-		os=-dynix
-		;;
-	t3d)
-		basic_machine=alpha-cray
-		os=-unicos
-		;;
-	t3e)
-		basic_machine=alphaev5-cray
-		os=-unicos
-		;;
-	t90)
-		basic_machine=t90-cray
-		os=-unicos
-		;;
-        tic4x | c4x*)
-		basic_machine=tic4x-unknown
-		os=-coff
-		;;
-	tic54x | c54x*)
-		basic_machine=tic54x-unknown
-		os=-coff
-		;;
-	tx39)
-		basic_machine=mipstx39-unknown
-		;;
-	tx39el)
-		basic_machine=mipstx39el-unknown
-		;;
-	toad1)
-		basic_machine=pdp10-xkl
-		os=-tops20
-		;;
-	tower | tower-32)
-		basic_machine=m68k-ncr
-		;;
-	udi29k)
-		basic_machine=a29k-amd
-		os=-udi
-		;;
-	ultra3)
-		basic_machine=a29k-nyu
-		os=-sym1
-		;;
-	v810 | necv810)
-		basic_machine=v810-nec
-		os=-none
-		;;
-	vaxv)
-		basic_machine=vax-dec
-		os=-sysv
-		;;
-	vms)
-		basic_machine=vax-dec
-		os=-vms
-		;;
-	vpp*|vx|vx-*)
-		basic_machine=f301-fujitsu
-		;;
-	vxworks960)
-		basic_machine=i960-wrs
-		os=-vxworks
-		;;
-	vxworks68)
-		basic_machine=m68k-wrs
-		os=-vxworks
-		;;
-	vxworks29k)
-		basic_machine=a29k-wrs
-		os=-vxworks
-		;;
-	w65*)
-		basic_machine=w65-wdc
-		os=-none
-		;;
-	w89k-*)
-		basic_machine=hppa1.1-winbond
-		os=-proelf
-		;;
-	xps | xps100)
-		basic_machine=xps100-honeywell
-		;;
-	ymp)
-		basic_machine=ymp-cray
-		os=-unicos
-		;;
-	z8k-*-coff)
-		basic_machine=z8k-unknown
-		os=-sim
-		;;
-	none)
-		basic_machine=none-none
-		os=-none
-		;;
-
-# Here we handle the default manufacturer of certain CPU types.  It is in
-# some cases the only manufacturer, in others, it is the most popular.
-	w89k)
-		basic_machine=hppa1.1-winbond
-		;;
-	op50n)
-		basic_machine=hppa1.1-oki
-		;;
-	op60c)
-		basic_machine=hppa1.1-oki
-		;;
-	romp)
-		basic_machine=romp-ibm
-		;;
-	rs6000)
-		basic_machine=rs6000-ibm
-		;;
-	vax)
-		basic_machine=vax-dec
-		;;
-	pdp10)
-		# there are many clones, so DEC is not a safe bet
-		basic_machine=pdp10-unknown
-		;;
-	pdp11)
-		basic_machine=pdp11-dec
-		;;
-	we32k)
-		basic_machine=we32k-att
-		;;
-	sh3 | sh4 | sh3eb | sh4eb | sh[1234]le | sh3ele)
-		basic_machine=sh-unknown
-		;;
-	sh64)
-		basic_machine=sh64-unknown
-		;;
-	sparc | sparcv9 | sparcv9b)
-		basic_machine=sparc-sun
-		;;
-	cydra)
-		basic_machine=cydra-cydrome
-		;;
-	orion)
-		basic_machine=orion-highlevel
-		;;
-	orion105)
-		basic_machine=clipper-highlevel
-		;;
-	mac | mpw | mac-mpw)
-		basic_machine=m68k-apple
-		;;
-	pmac | pmac-mpw)
-		basic_machine=powerpc-apple
-		;;
-	*-unknown)
-		# Make sure to match an already-canonicalized machine name.
-		;;
-	*)
-		echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
-		exit 1
-		;;
-esac
-
-# Here we canonicalize certain aliases for manufacturers.
-case $basic_machine in
-	*-digital*)
-		basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
-		;;
-	*-commodore*)
-		basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
-		;;
-	*)
-		;;
-esac
-
-# Decode manufacturer-specific aliases for certain operating systems.
-
-if [ x"$os" != x"" ]
-then
-case $os in
-        # First match some system type aliases
-        # that might get confused with valid system types.
-	# -solaris* is a basic system type, with this one exception.
-	-solaris1 | -solaris1.*)
-		os=`echo $os | sed -e 's|solaris1|sunos4|'`
-		;;
-	-solaris)
-		os=-solaris2
-		;;
-	-svr4*)
-		os=-sysv4
-		;;
-	-unixware*)
-		os=-sysv4.2uw
-		;;
-	-gnu/linux*)
-		os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
-		;;
-	# First accept the basic system types.
-	# The portable systems comes first.
-	# Each alternative MUST END IN A *, to match a version number.
-	# -sysv* is not here because it comes later, after sysvr4.
-	-gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
-	      | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\
-	      | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
-	      | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
-	      | -aos* \
-	      | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
-	      | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
-	      | -hiux* | -386bsd* | -netbsd* | -openbsd* | -freebsd* | -riscix* \
-	      | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
-	      | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
-	      | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
-	      | -chorusos* | -chorusrdb* \
-	      | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
-	      | -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \
-	      | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
-	      | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
-	      | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
-	      | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
-	      | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
-	      | -powermax* | -dnix*)
-	# Remember, each alternative MUST END IN *, to match a version number.
-		;;
-	-qnx*)
-		case $basic_machine in
-		    x86-* | i*86-*)
-			;;
-		    *)
-			os=-nto$os
-			;;
-		esac
-		;;
-	-nto-qnx*)
-		;;
-	-nto*)
-		os=`echo $os | sed -e 's|nto|nto-qnx|'`
-		;;
-	-sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
-	      | -windows* | -osx | -abug | -netware* | -os9* | -beos* \
-	      | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
-		;;
-	-mac*)
-		os=`echo $os | sed -e 's|mac|macos|'`
-		;;
-	-linux*)
-		os=`echo $os | sed -e 's|linux|linux-gnu|'`
-		;;
-	-sunos5*)
-		os=`echo $os | sed -e 's|sunos5|solaris2|'`
-		;;
-	-sunos6*)
-		os=`echo $os | sed -e 's|sunos6|solaris3|'`
-		;;
-	-opened*)
-		os=-openedition
-		;;
-	-wince*)
-		os=-wince
-		;;
-	-osfrose*)
-		os=-osfrose
-		;;
-	-osf*)
-		os=-osf
-		;;
-	-utek*)
-		os=-bsd
-		;;
-	-dynix*)
-		os=-bsd
-		;;
-	-acis*)
-		os=-aos
-		;;
-	-atheos*)
-		os=-atheos
-		;;
-	-386bsd)
-		os=-bsd
-		;;
-	-ctix* | -uts*)
-		os=-sysv
-		;;
-	-nova*)
-		os=-rtmk-nova
-		;;
-	-ns2 )
-		os=-nextstep2
-		;;
-	-nsk*)
-		os=-nsk
-		;;
-	# Preserve the version number of sinix5.
-	-sinix5.*)
-		os=`echo $os | sed -e 's|sinix|sysv|'`
-		;;
-	-sinix*)
-		os=-sysv4
-		;;
-	-triton*)
-		os=-sysv3
-		;;
-	-oss*)
-		os=-sysv3
-		;;
-	-svr4)
-		os=-sysv4
-		;;
-	-svr3)
-		os=-sysv3
-		;;
-	-sysvr4)
-		os=-sysv4
-		;;
-	# This must come after -sysvr4.
-	-sysv*)
-		;;
-	-ose*)
-		os=-ose
-		;;
-	-es1800*)
-		os=-ose
-		;;
-	-xenix)
-		os=-xenix
-		;;
-	-*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
-		os=-mint
-		;;
-	-none)
-		;;
-	*)
-		# Get rid of the `-' at the beginning of $os.
-		os=`echo $os | sed 's/[^-]*-//'`
-		echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
-		exit 1
-		;;
-esac
-else
-
-# Here we handle the default operating systems that come with various machines.
-# The value should be what the vendor currently ships out the door with their
-# machine or put another way, the most popular os provided with the machine.
-
-# Note that if you're going to try to match "-MANUFACTURER" here (say,
-# "-sun"), then you have to tell the case statement up towards the top
-# that MANUFACTURER isn't an operating system.  Otherwise, code above
-# will signal an error saying that MANUFACTURER isn't an operating
-# system, and we'll never get to this point.
-
-case $basic_machine in
-	*-acorn)
-		os=-riscix1.2
-		;;
-	arm*-rebel)
-		os=-linux
-		;;
-	arm*-semi)
-		os=-aout
-		;;
-	# This must come before the *-dec entry.
-	pdp10-*)
-		os=-tops20
-		;;
-	pdp11-*)
-		os=-none
-		;;
-	*-dec | vax-*)
-		os=-ultrix4.2
-		;;
-	m68*-apollo)
-		os=-domain
-		;;
-	i386-sun)
-		os=-sunos4.0.2
-		;;
-	m68000-sun)
-		os=-sunos3
-		# This also exists in the configure program, but was not the
-		# default.
-		# os=-sunos4
-		;;
-	m68*-cisco)
-		os=-aout
-		;;
-	mips*-cisco)
-		os=-elf
-		;;
-	mips*-*)
-		os=-elf
-		;;
-	or32-*)
-		os=-coff
-		;;
-	*-tti)	# must be before sparc entry or we get the wrong os.
-		os=-sysv3
-		;;
-	sparc-* | *-sun)
-		os=-sunos4.1.1
-		;;
-	*-be)
-		os=-beos
-		;;
-	*-ibm)
-		os=-aix
-		;;
-	*-wec)
-		os=-proelf
-		;;
-	*-winbond)
-		os=-proelf
-		;;
-	*-oki)
-		os=-proelf
-		;;
-	*-hp)
-		os=-hpux
-		;;
-	*-hitachi)
-		os=-hiux
-		;;
-	i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
-		os=-sysv
-		;;
-	*-cbm)
-		os=-amigaos
-		;;
-	*-dg)
-		os=-dgux
-		;;
-	*-dolphin)
-		os=-sysv3
-		;;
-	m68k-ccur)
-		os=-rtu
-		;;
-	m88k-omron*)
-		os=-luna
-		;;
-	*-next )
-		os=-nextstep
-		;;
-	*-sequent)
-		os=-ptx
-		;;
-	*-crds)
-		os=-unos
-		;;
-	*-ns)
-		os=-genix
-		;;
-	i370-*)
-		os=-mvs
-		;;
-	*-next)
-		os=-nextstep3
-		;;
-	*-gould)
-		os=-sysv
-		;;
-	*-highlevel)
-		os=-bsd
-		;;
-	*-encore)
-		os=-bsd
-		;;
-	*-sgi)
-		os=-irix
-		;;
-	*-siemens)
-		os=-sysv4
-		;;
-	*-masscomp)
-		os=-rtu
-		;;
-	f30[01]-fujitsu | f700-fujitsu)
-		os=-uxpv
-		;;
-	*-rom68k)
-		os=-coff
-		;;
-	*-*bug)
-		os=-coff
-		;;
-	*-apple)
-		os=-macos
-		;;
-	*-atari*)
-		os=-mint
-		;;
-	*)
-		os=-none
-		;;
-esac
-fi
-
-# Here we handle the case where we know the os, and the CPU type, but not the
-# manufacturer.  We pick the logical manufacturer.
-vendor=unknown
-case $basic_machine in
-	*-unknown)
-		case $os in
-			-riscix*)
-				vendor=acorn
-				;;
-			-sunos*)
-				vendor=sun
-				;;
-			-aix*)
-				vendor=ibm
-				;;
-			-beos*)
-				vendor=be
-				;;
-			-hpux*)
-				vendor=hp
-				;;
-			-mpeix*)
-				vendor=hp
-				;;
-			-hiux*)
-				vendor=hitachi
-				;;
-			-unos*)
-				vendor=crds
-				;;
-			-dgux*)
-				vendor=dg
-				;;
-			-luna*)
-				vendor=omron
-				;;
-			-genix*)
-				vendor=ns
-				;;
-			-mvs* | -opened*)
-				vendor=ibm
-				;;
-			-ptx*)
-				vendor=sequent
-				;;
-			-vxsim* | -vxworks* | -windiss*)
-				vendor=wrs
-				;;
-			-aux*)
-				vendor=apple
-				;;
-			-hms*)
-				vendor=hitachi
-				;;
-			-mpw* | -macos*)
-				vendor=apple
-				;;
-			-*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
-				vendor=atari
-				;;
-			-vos*)
-				vendor=stratus
-				;;
-		esac
-		basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
-		;;
-esac
-
-echo $basic_machine$os
-exit 0
-
-# Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "timestamp='"
-# time-stamp-format: "%:y-%02m-%02d"
-# time-stamp-end: "'"
-# End:
diff --git a/cil/configure b/cil/configure
deleted file mode 100755
index fe8634bf0..000000000
--- a/cil/configure
+++ /dev/null
@@ -1,5697 +0,0 @@
-#! /bin/sh
-# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.59.
-#
-# Copyright (C) 2003 Free Software Foundation, Inc.
-# This configure script is free software; the Free Software Foundation
-# gives unlimited permission to copy, distribute and modify it.
-## --------------------- ##
-## M4sh Initialization.  ##
-## --------------------- ##
-
-# Be Bourne compatible
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
-  emulate sh
-  NULLCMD=:
-  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
-  # is contrary to our usage.  Disable this feature.
-  alias -g '${1+"$@"}'='"$@"'
-elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
-  set -o posix
-fi
-DUALCASE=1; export DUALCASE # for MKS sh
-
-# Support unset when possible.
-if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
-  as_unset=unset
-else
-  as_unset=false
-fi
-
-
-# Work around bugs in pre-3.0 UWIN ksh.
-$as_unset ENV MAIL MAILPATH
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-for as_var in \
-  LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
-  LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
-  LC_TELEPHONE LC_TIME
-do
-  if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
-    eval $as_var=C; export $as_var
-  else
-    $as_unset $as_var
-  fi
-done
-
-# Required to use basename.
-if expr a : '\(a\)' >/dev/null 2>&1; then
-  as_expr=expr
-else
-  as_expr=false
-fi
-
-if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then
-  as_basename=basename
-else
-  as_basename=false
-fi
-
-
-# Name of the executable.
-as_me=`$as_basename "$0" ||
-$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
-	 X"$0" : 'X\(//\)$' \| \
-	 X"$0" : 'X\(/\)$' \| \
-	 .     : '\(.\)' 2>/dev/null ||
-echo X/"$0" |
-    sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
-  	  /^X\/\(\/\/\)$/{ s//\1/; q; }
-  	  /^X\/\(\/\).*/{ s//\1/; q; }
-  	  s/.*/./; q'`
-
-
-# PATH needs CR, and LINENO needs CR and PATH.
-# Avoid depending upon Character Ranges.
-as_cr_letters='abcdefghijklmnopqrstuvwxyz'
-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-as_cr_Letters=$as_cr_letters$as_cr_LETTERS
-as_cr_digits='0123456789'
-as_cr_alnum=$as_cr_Letters$as_cr_digits
-
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
-  echo "#! /bin/sh" >conf$$.sh
-  echo  "exit 0"   >>conf$$.sh
-  chmod +x conf$$.sh
-  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
-    PATH_SEPARATOR=';'
-  else
-    PATH_SEPARATOR=:
-  fi
-  rm -f conf$$.sh
-fi
-
-
-  as_lineno_1=$LINENO
-  as_lineno_2=$LINENO
-  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
-  test "x$as_lineno_1" != "x$as_lineno_2" &&
-  test "x$as_lineno_3"  = "x$as_lineno_2"  || {
-  # Find who we are.  Look in the path if we contain no path at all
-  # relative or not.
-  case $0 in
-    *[\\/]* ) as_myself=$0 ;;
-    *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
-done
-
-       ;;
-  esac
-  # We did not find ourselves, most probably we were run as `sh COMMAND'
-  # in which case we are not to be found in the path.
-  if test "x$as_myself" = x; then
-    as_myself=$0
-  fi
-  if test ! -f "$as_myself"; then
-    { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2
-   { (exit 1); exit 1; }; }
-  fi
-  case $CONFIG_SHELL in
-  '')
-    as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for as_base in sh bash ksh sh5; do
-	 case $as_dir in
-	 /*)
-	   if ("$as_dir/$as_base" -c '
-  as_lineno_1=$LINENO
-  as_lineno_2=$LINENO
-  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
-  test "x$as_lineno_1" != "x$as_lineno_2" &&
-  test "x$as_lineno_3"  = "x$as_lineno_2" ') 2>/dev/null; then
-	     $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
-	     $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
-	     CONFIG_SHELL=$as_dir/$as_base
-	     export CONFIG_SHELL
-	     exec "$CONFIG_SHELL" "$0" ${1+"$@"}
-	   fi;;
-	 esac
-       done
-done
-;;
-  esac
-
-  # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
-  # uniformly replaced by the line number.  The first 'sed' inserts a
-  # line-number line before each line; the second 'sed' does the real
-  # work.  The second script uses 'N' to pair each line-number line
-  # with the numbered line, and appends trailing '-' during
-  # substitution so that $LINENO is not a special case at line end.
-  # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
-  # second 'sed' script.  Blame Lee E. McMahon for sed's syntax.  :-)
-  sed '=' <$as_myself |
-    sed '
-      N
-      s,$,-,
-      : loop
-      s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
-      t loop
-      s,-$,,
-      s,^['$as_cr_digits']*\n,,
-    ' >$as_me.lineno &&
-  chmod +x $as_me.lineno ||
-    { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
-   { (exit 1); exit 1; }; }
-
-  # Don't try to exec as it changes $[0], causing all sort of problems
-  # (the dirname of $[0] is not the place where we might find the
-  # original and so on.  Autoconf is especially sensible to this).
-  . ./$as_me.lineno
-  # Exit status is that of the last command.
-  exit
-}
-
-
-case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
-  *c*,-n*) ECHO_N= ECHO_C='
-' ECHO_T='	' ;;
-  *c*,*  ) ECHO_N=-n ECHO_C= ECHO_T= ;;
-  *)       ECHO_N= ECHO_C='\c' ECHO_T= ;;
-esac
-
-if expr a : '\(a\)' >/dev/null 2>&1; then
-  as_expr=expr
-else
-  as_expr=false
-fi
-
-rm -f conf$$ conf$$.exe conf$$.file
-echo >conf$$.file
-if ln -s conf$$.file conf$$ 2>/dev/null; then
-  # We could just check for DJGPP; but this test a) works b) is more generic
-  # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
-  if test -f conf$$.exe; then
-    # Don't use ln at all; we don't have any links
-    as_ln_s='cp -p'
-  else
-    as_ln_s='ln -s'
-  fi
-elif ln conf$$.file conf$$ 2>/dev/null; then
-  as_ln_s=ln
-else
-  as_ln_s='cp -p'
-fi
-rm -f conf$$ conf$$.exe conf$$.file
-
-if mkdir -p . 2>/dev/null; then
-  as_mkdir_p=:
-else
-  test -d ./-p && rmdir ./-p
-  as_mkdir_p=false
-fi
-
-as_executable_p="test -f"
-
-# Sed expression to map a string onto a valid CPP name.
-as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
-
-# Sed expression to map a string onto a valid variable name.
-as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
-
-
-# IFS
-# We need space, tab and new line, in precisely that order.
-as_nl='
-'
-IFS=" 	$as_nl"
-
-# CDPATH.
-$as_unset CDPATH
-
-
-# Name of the host.
-# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
-# so uname gets run too.
-ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
-
-exec 6>&1
-
-#
-# Initializations.
-#
-ac_default_prefix=/usr/local
-ac_config_libobj_dir=.
-cross_compiling=no
-subdirs=
-MFLAGS=
-MAKEFLAGS=
-SHELL=${CONFIG_SHELL-/bin/sh}
-
-# Maximum number of lines to put in a shell here document.
-# This variable seems obsolete.  It should probably be removed, and
-# only ac_max_sed_lines should be used.
-: ${ac_max_here_lines=38}
-
-# Identity of this package.
-PACKAGE_NAME=
-PACKAGE_TARNAME=
-PACKAGE_VERSION=
-PACKAGE_STRING=
-PACKAGE_BUGREPORT=
-
-ac_unique_file="src/cil.mli"
-# Factoring default headers for most tests.
-ac_includes_default="\
-#include <stdio.h>
-#if HAVE_SYS_TYPES_H
-# include <sys/types.h>
-#endif
-#if HAVE_SYS_STAT_H
-# include <sys/stat.h>
-#endif
-#if STDC_HEADERS
-# include <stdlib.h>
-# include <stddef.h>
-#else
-# if HAVE_STDLIB_H
-#  include <stdlib.h>
-# endif
-#endif
-#if HAVE_STRING_H
-# if !STDC_HEADERS && HAVE_MEMORY_H
-#  include <memory.h>
-# endif
-# include <string.h>
-#endif
-#if HAVE_STRINGS_H
-# include <strings.h>
-#endif
-#if HAVE_INTTYPES_H
-# include <inttypes.h>
-#else
-# if HAVE_STDINT_H
-#  include <stdint.h>
-# endif
-#endif
-#if HAVE_UNISTD_H
-# include <unistd.h>
-#endif"
-
-ac_subst_vars='CIL_FEATURES_DEFINES NEWLINE SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA build build_cpu build_vendor build_os host host_cpu host_vendor host_os target target_cpu target_vendor target_os CPP EGREP LIBOBJS ARCHOS CILHOME HAS_MSVC DEFAULT_COMPILER DEFAULT_CIL_MODE CIL_VERSION_MAJOR CIL_VERSION_MINOR CIL_VERSION_REV CIL_VERSION CYCLES_PER_USEC HAS_PERFCOUNT HAVE_BUILTIN_VA_LIST THREAD_IS_KEYWORD UNDERSCORE_NAME EXTRAFEATURES EXTRASRCDIRS LTLIBOBJS'
-ac_subst_files=''
-
-# Initialize some variables set by options.
-ac_init_help=
-ac_init_version=false
-# The variables have the same names as the options, with
-# dashes changed to underlines.
-cache_file=/dev/null
-exec_prefix=NONE
-no_create=
-no_recursion=
-prefix=NONE
-program_prefix=NONE
-program_suffix=NONE
-program_transform_name=s,x,x,
-silent=
-site=
-srcdir=
-verbose=
-x_includes=NONE
-x_libraries=NONE
-
-# Installation directory options.
-# These are left unexpanded so users can "make install exec_prefix=/foo"
-# and all the variables that are supposed to be based on exec_prefix
-# by default will actually change.
-# Use braces instead of parens because sh, perl, etc. also accept them.
-bindir='${exec_prefix}/bin'
-sbindir='${exec_prefix}/sbin'
-libexecdir='${exec_prefix}/libexec'
-datadir='${prefix}/share'
-sysconfdir='${prefix}/etc'
-sharedstatedir='${prefix}/com'
-localstatedir='${prefix}/var'
-libdir='${exec_prefix}/lib'
-includedir='${prefix}/include'
-oldincludedir='/usr/include'
-infodir='${prefix}/info'
-mandir='${prefix}/man'
-
-ac_prev=
-for ac_option
-do
-  # If the previous option needs an argument, assign it.
-  if test -n "$ac_prev"; then
-    eval "$ac_prev=\$ac_option"
-    ac_prev=
-    continue
-  fi
-
-  ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`
-
-  # Accept the important Cygnus configure options, so we can diagnose typos.
-
-  case $ac_option in
-
-  -bindir | --bindir | --bindi | --bind | --bin | --bi)
-    ac_prev=bindir ;;
-  -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
-    bindir=$ac_optarg ;;
-
-  -build | --build | --buil | --bui | --bu)
-    ac_prev=build_alias ;;
-  -build=* | --build=* | --buil=* | --bui=* | --bu=*)
-    build_alias=$ac_optarg ;;
-
-  -cache-file | --cache-file | --cache-fil | --cache-fi \
-  | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
-    ac_prev=cache_file ;;
-  -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
-  | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
-    cache_file=$ac_optarg ;;
-
-  --config-cache | -C)
-    cache_file=config.cache ;;
-
-  -datadir | --datadir | --datadi | --datad | --data | --dat | --da)
-    ac_prev=datadir ;;
-  -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
-  | --da=*)
-    datadir=$ac_optarg ;;
-
-  -disable-* | --disable-*)
-    ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
-    # Reject names that are not valid shell variable names.
-    expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
-      { echo "$as_me: error: invalid feature name: $ac_feature" >&2
-   { (exit 1); exit 1; }; }
-    ac_feature=`echo $ac_feature | sed 's/-/_/g'`
-    eval "enable_$ac_feature=no" ;;
-
-  -enable-* | --enable-*)
-    ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
-    # Reject names that are not valid shell variable names.
-    expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
-      { echo "$as_me: error: invalid feature name: $ac_feature" >&2
-   { (exit 1); exit 1; }; }
-    ac_feature=`echo $ac_feature | sed 's/-/_/g'`
-    case $ac_option in
-      *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
-      *) ac_optarg=yes ;;
-    esac
-    eval "enable_$ac_feature='$ac_optarg'" ;;
-
-  -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
-  | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
-  | --exec | --exe | --ex)
-    ac_prev=exec_prefix ;;
-  -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
-  | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
-  | --exec=* | --exe=* | --ex=*)
-    exec_prefix=$ac_optarg ;;
-
-  -gas | --gas | --ga | --g)
-    # Obsolete; use --with-gas.
-    with_gas=yes ;;
-
-  -help | --help | --hel | --he | -h)
-    ac_init_help=long ;;
-  -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
-    ac_init_help=recursive ;;
-  -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
-    ac_init_help=short ;;
-
-  -host | --host | --hos | --ho)
-    ac_prev=host_alias ;;
-  -host=* | --host=* | --hos=* | --ho=*)
-    host_alias=$ac_optarg ;;
-
-  -includedir | --includedir | --includedi | --included | --include \
-  | --includ | --inclu | --incl | --inc)
-    ac_prev=includedir ;;
-  -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
-  | --includ=* | --inclu=* | --incl=* | --inc=*)
-    includedir=$ac_optarg ;;
-
-  -infodir | --infodir | --infodi | --infod | --info | --inf)
-    ac_prev=infodir ;;
-  -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
-    infodir=$ac_optarg ;;
-
-  -libdir | --libdir | --libdi | --libd)
-    ac_prev=libdir ;;
-  -libdir=* | --libdir=* | --libdi=* | --libd=*)
-    libdir=$ac_optarg ;;
-
-  -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
-  | --libexe | --libex | --libe)
-    ac_prev=libexecdir ;;
-  -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
-  | --libexe=* | --libex=* | --libe=*)
-    libexecdir=$ac_optarg ;;
-
-  -localstatedir | --localstatedir | --localstatedi | --localstated \
-  | --localstate | --localstat | --localsta | --localst \
-  | --locals | --local | --loca | --loc | --lo)
-    ac_prev=localstatedir ;;
-  -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
-  | --localstate=* | --localstat=* | --localsta=* | --localst=* \
-  | --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
-    localstatedir=$ac_optarg ;;
-
-  -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
-    ac_prev=mandir ;;
-  -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
-    mandir=$ac_optarg ;;
-
-  -nfp | --nfp | --nf)
-    # Obsolete; use --without-fp.
-    with_fp=no ;;
-
-  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
-  | --no-cr | --no-c | -n)
-    no_create=yes ;;
-
-  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
-  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
-    no_recursion=yes ;;
-
-  -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
-  | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
-  | --oldin | --oldi | --old | --ol | --o)
-    ac_prev=oldincludedir ;;
-  -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
-  | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
-  | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
-    oldincludedir=$ac_optarg ;;
-
-  -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
-    ac_prev=prefix ;;
-  -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
-    prefix=$ac_optarg ;;
-
-  -program-prefix | --program-prefix | --program-prefi | --program-pref \
-  | --program-pre | --program-pr | --program-p)
-    ac_prev=program_prefix ;;
-  -program-prefix=* | --program-prefix=* | --program-prefi=* \
-  | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
-    program_prefix=$ac_optarg ;;
-
-  -program-suffix | --program-suffix | --program-suffi | --program-suff \
-  | --program-suf | --program-su | --program-s)
-    ac_prev=program_suffix ;;
-  -program-suffix=* | --program-suffix=* | --program-suffi=* \
-  | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
-    program_suffix=$ac_optarg ;;
-
-  -program-transform-name | --program-transform-name \
-  | --program-transform-nam | --program-transform-na \
-  | --program-transform-n | --program-transform- \
-  | --program-transform | --program-transfor \
-  | --program-transfo | --program-transf \
-  | --program-trans | --program-tran \
-  | --progr-tra | --program-tr | --program-t)
-    ac_prev=program_transform_name ;;
-  -program-transform-name=* | --program-transform-name=* \
-  | --program-transform-nam=* | --program-transform-na=* \
-  | --program-transform-n=* | --program-transform-=* \
-  | --program-transform=* | --program-transfor=* \
-  | --program-transfo=* | --program-transf=* \
-  | --program-trans=* | --program-tran=* \
-  | --progr-tra=* | --program-tr=* | --program-t=*)
-    program_transform_name=$ac_optarg ;;
-
-  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
-  | -silent | --silent | --silen | --sile | --sil)
-    silent=yes ;;
-
-  -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
-    ac_prev=sbindir ;;
-  -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
-  | --sbi=* | --sb=*)
-    sbindir=$ac_optarg ;;
-
-  -sharedstatedir | --sharedstatedir | --sharedstatedi \
-  | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
-  | --sharedst | --shareds | --shared | --share | --shar \
-  | --sha | --sh)
-    ac_prev=sharedstatedir ;;
-  -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
-  | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
-  | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
-  | --sha=* | --sh=*)
-    sharedstatedir=$ac_optarg ;;
-
-  -site | --site | --sit)
-    ac_prev=site ;;
-  -site=* | --site=* | --sit=*)
-    site=$ac_optarg ;;
-
-  -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
-    ac_prev=srcdir ;;
-  -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
-    srcdir=$ac_optarg ;;
-
-  -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
-  | --syscon | --sysco | --sysc | --sys | --sy)
-    ac_prev=sysconfdir ;;
-  -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
-  | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
-    sysconfdir=$ac_optarg ;;
-
-  -target | --target | --targe | --targ | --tar | --ta | --t)
-    ac_prev=target_alias ;;
-  -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
-    target_alias=$ac_optarg ;;
-
-  -v | -verbose | --verbose | --verbos | --verbo | --verb)
-    verbose=yes ;;
-
-  -version | --version | --versio | --versi | --vers | -V)
-    ac_init_version=: ;;
-
-  -with-* | --with-*)
-    ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
-    # Reject names that are not valid shell variable names.
-    expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
-      { echo "$as_me: error: invalid package name: $ac_package" >&2
-   { (exit 1); exit 1; }; }
-    ac_package=`echo $ac_package| sed 's/-/_/g'`
-    case $ac_option in
-      *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
-      *) ac_optarg=yes ;;
-    esac
-    eval "with_$ac_package='$ac_optarg'" ;;
-
-  -without-* | --without-*)
-    ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'`
-    # Reject names that are not valid shell variable names.
-    expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
-      { echo "$as_me: error: invalid package name: $ac_package" >&2
-   { (exit 1); exit 1; }; }
-    ac_package=`echo $ac_package | sed 's/-/_/g'`
-    eval "with_$ac_package=no" ;;
-
-  --x)
-    # Obsolete; use --with-x.
-    with_x=yes ;;
-
-  -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
-  | --x-incl | --x-inc | --x-in | --x-i)
-    ac_prev=x_includes ;;
-  -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
-  | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
-    x_includes=$ac_optarg ;;
-
-  -x-libraries | --x-libraries | --x-librarie | --x-librari \
-  | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
-    ac_prev=x_libraries ;;
-  -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
-  | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
-    x_libraries=$ac_optarg ;;
-
-  -*) { echo "$as_me: error: unrecognized option: $ac_option
-Try \`$0 --help' for more information." >&2
-   { (exit 1); exit 1; }; }
-    ;;
-
-  *=*)
-    ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
-    # Reject names that are not valid shell variable names.
-    expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null &&
-      { echo "$as_me: error: invalid variable name: $ac_envvar" >&2
-   { (exit 1); exit 1; }; }
-    ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`
-    eval "$ac_envvar='$ac_optarg'"
-    export $ac_envvar ;;
-
-  *)
-    # FIXME: should be removed in autoconf 3.0.
-    echo "$as_me: WARNING: you should use --build, --host, --target" >&2
-    expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
-      echo "$as_me: WARNING: invalid host type: $ac_option" >&2
-    : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
-    ;;
-
-  esac
-done
-
-if test -n "$ac_prev"; then
-  ac_option=--`echo $ac_prev | sed 's/_/-/g'`
-  { echo "$as_me: error: missing argument to $ac_option" >&2
-   { (exit 1); exit 1; }; }
-fi
-
-# Be sure to have absolute paths.
-for ac_var in exec_prefix prefix
-do
-  eval ac_val=$`echo $ac_var`
-  case $ac_val in
-    [\\/$]* | ?:[\\/]* | NONE | '' ) ;;
-    *)  { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
-   { (exit 1); exit 1; }; };;
-  esac
-done
-
-# Be sure to have absolute paths.
-for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \
-	      localstatedir libdir includedir oldincludedir infodir mandir
-do
-  eval ac_val=$`echo $ac_var`
-  case $ac_val in
-    [\\/$]* | ?:[\\/]* ) ;;
-    *)  { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
-   { (exit 1); exit 1; }; };;
-  esac
-done
-
-# There might be people who depend on the old broken behavior: `$host'
-# used to hold the argument of --host etc.
-# FIXME: To remove some day.
-build=$build_alias
-host=$host_alias
-target=$target_alias
-
-# FIXME: To remove some day.
-if test "x$host_alias" != x; then
-  if test "x$build_alias" = x; then
-    cross_compiling=maybe
-    echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
-    If a cross compiler is detected then cross compile mode will be used." >&2
-  elif test "x$build_alias" != "x$host_alias"; then
-    cross_compiling=yes
-  fi
-fi
-
-ac_tool_prefix=
-test -n "$host_alias" && ac_tool_prefix=$host_alias-
-
-test "$silent" = yes && exec 6>/dev/null
-
-
-# Find the source files, if location was not specified.
-if test -z "$srcdir"; then
-  ac_srcdir_defaulted=yes
-  # Try the directory containing this script, then its parent.
-  ac_confdir=`(dirname "$0") 2>/dev/null ||
-$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X"$0" : 'X\(//\)[^/]' \| \
-	 X"$0" : 'X\(//\)$' \| \
-	 X"$0" : 'X\(/\)' \| \
-	 .     : '\(.\)' 2>/dev/null ||
-echo X"$0" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
-  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
-  	  /^X\(\/\/\)$/{ s//\1/; q; }
-  	  /^X\(\/\).*/{ s//\1/; q; }
-  	  s/.*/./; q'`
-  srcdir=$ac_confdir
-  if test ! -r $srcdir/$ac_unique_file; then
-    srcdir=..
-  fi
-else
-  ac_srcdir_defaulted=no
-fi
-if test ! -r $srcdir/$ac_unique_file; then
-  if test "$ac_srcdir_defaulted" = yes; then
-    { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2
-   { (exit 1); exit 1; }; }
-  else
-    { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2
-   { (exit 1); exit 1; }; }
-  fi
-fi
-(cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null ||
-  { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2
-   { (exit 1); exit 1; }; }
-srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'`
-ac_env_build_alias_set=${build_alias+set}
-ac_env_build_alias_value=$build_alias
-ac_cv_env_build_alias_set=${build_alias+set}
-ac_cv_env_build_alias_value=$build_alias
-ac_env_host_alias_set=${host_alias+set}
-ac_env_host_alias_value=$host_alias
-ac_cv_env_host_alias_set=${host_alias+set}
-ac_cv_env_host_alias_value=$host_alias
-ac_env_target_alias_set=${target_alias+set}
-ac_env_target_alias_value=$target_alias
-ac_cv_env_target_alias_set=${target_alias+set}
-ac_cv_env_target_alias_value=$target_alias
-ac_env_CC_set=${CC+set}
-ac_env_CC_value=$CC
-ac_cv_env_CC_set=${CC+set}
-ac_cv_env_CC_value=$CC
-ac_env_CFLAGS_set=${CFLAGS+set}
-ac_env_CFLAGS_value=$CFLAGS
-ac_cv_env_CFLAGS_set=${CFLAGS+set}
-ac_cv_env_CFLAGS_value=$CFLAGS
-ac_env_LDFLAGS_set=${LDFLAGS+set}
-ac_env_LDFLAGS_value=$LDFLAGS
-ac_cv_env_LDFLAGS_set=${LDFLAGS+set}
-ac_cv_env_LDFLAGS_value=$LDFLAGS
-ac_env_CPPFLAGS_set=${CPPFLAGS+set}
-ac_env_CPPFLAGS_value=$CPPFLAGS
-ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set}
-ac_cv_env_CPPFLAGS_value=$CPPFLAGS
-ac_env_CPP_set=${CPP+set}
-ac_env_CPP_value=$CPP
-ac_cv_env_CPP_set=${CPP+set}
-ac_cv_env_CPP_value=$CPP
-
-#
-# Report the --help message.
-#
-if test "$ac_init_help" = "long"; then
-  # Omit some internal or obsolete options to make the list less imposing.
-  # This message is too long to be a string in the A/UX 3.1 sh.
-  cat <<_ACEOF
-\`configure' configures this package to adapt to many kinds of systems.
-
-Usage: $0 [OPTION]... [VAR=VALUE]...
-
-To assign environment variables (e.g., CC, CFLAGS...), specify them as
-VAR=VALUE.  See below for descriptions of some of the useful variables.
-
-Defaults for the options are specified in brackets.
-
-Configuration:
-  -h, --help              display this help and exit
-      --help=short        display options specific to this package
-      --help=recursive    display the short help of all the included packages
-  -V, --version           display version information and exit
-  -q, --quiet, --silent   do not print \`checking...' messages
-      --cache-file=FILE   cache test results in FILE [disabled]
-  -C, --config-cache      alias for \`--cache-file=config.cache'
-  -n, --no-create         do not create output files
-      --srcdir=DIR        find the sources in DIR [configure dir or \`..']
-
-_ACEOF
-
-  cat <<_ACEOF
-Installation directories:
-  --prefix=PREFIX         install architecture-independent files in PREFIX
-			  [$ac_default_prefix]
-  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
-			  [PREFIX]
-
-By default, \`make install' will install all the files in
-\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc.  You can specify
-an installation prefix other than \`$ac_default_prefix' using \`--prefix',
-for instance \`--prefix=\$HOME'.
-
-For better control, use the options below.
-
-Fine tuning of the installation directories:
-  --bindir=DIR           user executables [EPREFIX/bin]
-  --sbindir=DIR          system admin executables [EPREFIX/sbin]
-  --libexecdir=DIR       program executables [EPREFIX/libexec]
-  --datadir=DIR          read-only architecture-independent data [PREFIX/share]
-  --sysconfdir=DIR       read-only single-machine data [PREFIX/etc]
-  --sharedstatedir=DIR   modifiable architecture-independent data [PREFIX/com]
-  --localstatedir=DIR    modifiable single-machine data [PREFIX/var]
-  --libdir=DIR           object code libraries [EPREFIX/lib]
-  --includedir=DIR       C header files [PREFIX/include]
-  --oldincludedir=DIR    C header files for non-gcc [/usr/include]
-  --infodir=DIR          info documentation [PREFIX/info]
-  --mandir=DIR           man documentation [PREFIX/man]
-_ACEOF
-
-  cat <<\_ACEOF
-
-System types:
-  --build=BUILD     configure for building on BUILD [guessed]
-  --host=HOST       cross-compile to build programs to run on HOST [BUILD]
-  --target=TARGET   configure for building compilers for TARGET [HOST]
-_ACEOF
-fi
-
-if test -n "$ac_init_help"; then
-
-  cat <<\_ACEOF
-
-Optional Packages:
-  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
-  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
-  --with-blockinggraph    enable the blocking graph feature
-  --with-rand             enable the randomized value numbering
-  --with-arithabs         enable the arithmetic abstraction
-  --with-zrapp            enable the zrapp pretty-printer
-
-Some influential environment variables:
-  CC          C compiler command
-  CFLAGS      C compiler flags
-  LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in a
-              nonstandard directory <lib dir>
-  CPPFLAGS    C/C++ preprocessor flags, e.g. -I<include dir> if you have
-              headers in a nonstandard directory <include dir>
-  CPP         C preprocessor
-
-Use these variables to override the choices made by `configure' or to help
-it to find libraries and programs with nonstandard names/locations.
-
-_ACEOF
-fi
-
-if test "$ac_init_help" = "recursive"; then
-  # If there are subdirs, report their specific --help.
-  ac_popdir=`pwd`
-  for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
-    test -d $ac_dir || continue
-    ac_builddir=.
-
-if test "$ac_dir" != .; then
-  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
-  # A "../" for each directory in $ac_dir_suffix.
-  ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
-else
-  ac_dir_suffix= ac_top_builddir=
-fi
-
-case $srcdir in
-  .)  # No --srcdir option.  We are building in place.
-    ac_srcdir=.
-    if test -z "$ac_top_builddir"; then
-       ac_top_srcdir=.
-    else
-       ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
-    fi ;;
-  [\\/]* | ?:[\\/]* )  # Absolute path.
-    ac_srcdir=$srcdir$ac_dir_suffix;
-    ac_top_srcdir=$srcdir ;;
-  *) # Relative path.
-    ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
-    ac_top_srcdir=$ac_top_builddir$srcdir ;;
-esac
-
-# Do not use `cd foo && pwd` to compute absolute paths, because
-# the directories may not exist.
-case `pwd` in
-.) ac_abs_builddir="$ac_dir";;
-*)
-  case "$ac_dir" in
-  .) ac_abs_builddir=`pwd`;;
-  [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
-  *) ac_abs_builddir=`pwd`/"$ac_dir";;
-  esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_top_builddir=${ac_top_builddir}.;;
-*)
-  case ${ac_top_builddir}. in
-  .) ac_abs_top_builddir=$ac_abs_builddir;;
-  [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
-  *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
-  esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_srcdir=$ac_srcdir;;
-*)
-  case $ac_srcdir in
-  .) ac_abs_srcdir=$ac_abs_builddir;;
-  [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
-  *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
-  esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_top_srcdir=$ac_top_srcdir;;
-*)
-  case $ac_top_srcdir in
-  .) ac_abs_top_srcdir=$ac_abs_builddir;;
-  [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
-  *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
-  esac;;
-esac
-
-    cd $ac_dir
-    # Check for guested configure; otherwise get Cygnus style configure.
-    if test -f $ac_srcdir/configure.gnu; then
-      echo
-      $SHELL $ac_srcdir/configure.gnu  --help=recursive
-    elif test -f $ac_srcdir/configure; then
-      echo
-      $SHELL $ac_srcdir/configure  --help=recursive
-    elif test -f $ac_srcdir/configure.ac ||
-	   test -f $ac_srcdir/configure.in; then
-      echo
-      $ac_configure --help
-    else
-      echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
-    fi
-    cd $ac_popdir
-  done
-fi
-
-test -n "$ac_init_help" && exit 0
-if $ac_init_version; then
-  cat <<\_ACEOF
-
-Copyright (C) 2003 Free Software Foundation, Inc.
-This configure script is free software; the Free Software Foundation
-gives unlimited permission to copy, distribute and modify it.
-_ACEOF
-  exit 0
-fi
-exec 5>config.log
-cat >&5 <<_ACEOF
-This file contains any messages produced by compilers while
-running configure, to aid debugging if configure makes a mistake.
-
-It was created by $as_me, which was
-generated by GNU Autoconf 2.59.  Invocation command line was
-
-  $ $0 $@
-
-_ACEOF
-{
-cat <<_ASUNAME
-## --------- ##
-## Platform. ##
-## --------- ##
-
-hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
-uname -m = `(uname -m) 2>/dev/null || echo unknown`
-uname -r = `(uname -r) 2>/dev/null || echo unknown`
-uname -s = `(uname -s) 2>/dev/null || echo unknown`
-uname -v = `(uname -v) 2>/dev/null || echo unknown`
-
-/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
-/bin/uname -X     = `(/bin/uname -X) 2>/dev/null     || echo unknown`
-
-/bin/arch              = `(/bin/arch) 2>/dev/null              || echo unknown`
-/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null       || echo unknown`
-/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
-hostinfo               = `(hostinfo) 2>/dev/null               || echo unknown`
-/bin/machine           = `(/bin/machine) 2>/dev/null           || echo unknown`
-/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null       || echo unknown`
-/bin/universe          = `(/bin/universe) 2>/dev/null          || echo unknown`
-
-_ASUNAME
-
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  echo "PATH: $as_dir"
-done
-
-} >&5
-
-cat >&5 <<_ACEOF
-
-
-## ----------- ##
-## Core tests. ##
-## ----------- ##
-
-_ACEOF
-
-
-# Keep a trace of the command line.
-# Strip out --no-create and --no-recursion so they do not pile up.
-# Strip out --silent because we don't want to record it for future runs.
-# Also quote any args containing shell meta-characters.
-# Make two passes to allow for proper duplicate-argument suppression.
-ac_configure_args=
-ac_configure_args0=
-ac_configure_args1=
-ac_sep=
-ac_must_keep_next=false
-for ac_pass in 1 2
-do
-  for ac_arg
-  do
-    case $ac_arg in
-    -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
-    -q | -quiet | --quiet | --quie | --qui | --qu | --q \
-    | -silent | --silent | --silen | --sile | --sil)
-      continue ;;
-    *" "*|*"	"*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
-      ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
-    esac
-    case $ac_pass in
-    1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;;
-    2)
-      ac_configure_args1="$ac_configure_args1 '$ac_arg'"
-      if test $ac_must_keep_next = true; then
-	ac_must_keep_next=false # Got value, back to normal.
-      else
-	case $ac_arg in
-	  *=* | --config-cache | -C | -disable-* | --disable-* \
-	  | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
-	  | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
-	  | -with-* | --with-* | -without-* | --without-* | --x)
-	    case "$ac_configure_args0 " in
-	      "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
-	    esac
-	    ;;
-	  -* ) ac_must_keep_next=true ;;
-	esac
-      fi
-      ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'"
-      # Get rid of the leading space.
-      ac_sep=" "
-      ;;
-    esac
-  done
-done
-$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; }
-$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; }
-
-# When interrupted or exit'd, cleanup temporary files, and complete
-# config.log.  We remove comments because anyway the quotes in there
-# would cause problems or look ugly.
-# WARNING: Be sure not to use single quotes in there, as some shells,
-# such as our DU 5.0 friend, will then `close' the trap.
-trap 'exit_status=$?
-  # Save into config.log some information that might help in debugging.
-  {
-    echo
-
-    cat <<\_ASBOX
-## ---------------- ##
-## Cache variables. ##
-## ---------------- ##
-_ASBOX
-    echo
-    # The following way of writing the cache mishandles newlines in values,
-{
-  (set) 2>&1 |
-    case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in
-    *ac_space=\ *)
-      sed -n \
-	"s/'"'"'/'"'"'\\\\'"'"''"'"'/g;
-	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p"
-      ;;
-    *)
-      sed -n \
-	"s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
-      ;;
-    esac;
-}
-    echo
-
-    cat <<\_ASBOX
-## ----------------- ##
-## Output variables. ##
-## ----------------- ##
-_ASBOX
-    echo
-    for ac_var in $ac_subst_vars
-    do
-      eval ac_val=$`echo $ac_var`
-      echo "$ac_var='"'"'$ac_val'"'"'"
-    done | sort
-    echo
-
-    if test -n "$ac_subst_files"; then
-      cat <<\_ASBOX
-## ------------- ##
-## Output files. ##
-## ------------- ##
-_ASBOX
-      echo
-      for ac_var in $ac_subst_files
-      do
-	eval ac_val=$`echo $ac_var`
-	echo "$ac_var='"'"'$ac_val'"'"'"
-      done | sort
-      echo
-    fi
-
-    if test -s confdefs.h; then
-      cat <<\_ASBOX
-## ----------- ##
-## confdefs.h. ##
-## ----------- ##
-_ASBOX
-      echo
-      sed "/^$/d" confdefs.h | sort
-      echo
-    fi
-    test "$ac_signal" != 0 &&
-      echo "$as_me: caught signal $ac_signal"
-    echo "$as_me: exit $exit_status"
-  } >&5
-  rm -f core *.core &&
-  rm -rf conftest* confdefs* conf$$* $ac_clean_files &&
-    exit $exit_status
-     ' 0
-for ac_signal in 1 2 13 15; do
-  trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal
-done
-ac_signal=0
-
-# confdefs.h avoids OS command line length limits that DEFS can exceed.
-rm -rf conftest* confdefs.h
-# AIX cpp loses on an empty file, so make sure it contains at least a newline.
-echo >confdefs.h
-
-# Predefined preprocessor variables.
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_NAME "$PACKAGE_NAME"
-_ACEOF
-
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
-_ACEOF
-
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_VERSION "$PACKAGE_VERSION"
-_ACEOF
-
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_STRING "$PACKAGE_STRING"
-_ACEOF
-
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
-_ACEOF
-
-
-# Let the site file select an alternate cache file if it wants to.
-# Prefer explicitly selected file to automatically selected ones.
-if test -z "$CONFIG_SITE"; then
-  if test "x$prefix" != xNONE; then
-    CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
-  else
-    CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
-  fi
-fi
-for ac_site_file in $CONFIG_SITE; do
-  if test -r "$ac_site_file"; then
-    { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5
-echo "$as_me: loading site script $ac_site_file" >&6;}
-    sed 's/^/| /' "$ac_site_file" >&5
-    . "$ac_site_file"
-  fi
-done
-
-if test -r "$cache_file"; then
-  # Some versions of bash will fail to source /dev/null (special
-  # files actually), so we avoid doing that.
-  if test -f "$cache_file"; then
-    { echo "$as_me:$LINENO: loading cache $cache_file" >&5
-echo "$as_me: loading cache $cache_file" >&6;}
-    case $cache_file in
-      [\\/]* | ?:[\\/]* ) . $cache_file;;
-      *)                      . ./$cache_file;;
-    esac
-  fi
-else
-  { echo "$as_me:$LINENO: creating cache $cache_file" >&5
-echo "$as_me: creating cache $cache_file" >&6;}
-  >$cache_file
-fi
-
-# Check that the precious variables saved in the cache have kept the same
-# value.
-ac_cache_corrupted=false
-for ac_var in `(set) 2>&1 |
-	       sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do
-  eval ac_old_set=\$ac_cv_env_${ac_var}_set
-  eval ac_new_set=\$ac_env_${ac_var}_set
-  eval ac_old_val="\$ac_cv_env_${ac_var}_value"
-  eval ac_new_val="\$ac_env_${ac_var}_value"
-  case $ac_old_set,$ac_new_set in
-    set,)
-      { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
-echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
-      ac_cache_corrupted=: ;;
-    ,set)
-      { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5
-echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
-      ac_cache_corrupted=: ;;
-    ,);;
-    *)
-      if test "x$ac_old_val" != "x$ac_new_val"; then
-	{ echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5
-echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
-	{ echo "$as_me:$LINENO:   former value:  $ac_old_val" >&5
-echo "$as_me:   former value:  $ac_old_val" >&2;}
-	{ echo "$as_me:$LINENO:   current value: $ac_new_val" >&5
-echo "$as_me:   current value: $ac_new_val" >&2;}
-	ac_cache_corrupted=:
-      fi;;
-  esac
-  # Pass precious variables to config.status.
-  if test "$ac_new_set" = set; then
-    case $ac_new_val in
-    *" "*|*"	"*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
-      ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
-    *) ac_arg=$ac_var=$ac_new_val ;;
-    esac
-    case " $ac_configure_args " in
-      *" '$ac_arg' "*) ;; # Avoid dups.  Use of quotes ensures accuracy.
-      *) ac_configure_args="$ac_configure_args '$ac_arg'" ;;
-    esac
-  fi
-done
-if $ac_cache_corrupted; then
-  { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5
-echo "$as_me: error: changes in the environment can compromise the build" >&2;}
-  { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5
-echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;}
-   { (exit 1); exit 1; }; }
-fi
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-          ac_config_headers="$ac_config_headers config.h"
-
-
-# sm: require a late-enough autoconf; this is the version number
-# that's on manju, so I assume it's ok
-
-
-#
-# Assign here the CIL version numbers
-CIL_VERSION_MAJOR=1
-CIL_VERSION_MINOR=3
-CIL_VERSION_REV=5
-CIL_VERSION=$CIL_VERSION_MAJOR.$CIL_VERSION_MINOR.$CIL_VERSION_REV
-
-
-# make sure I haven't forgotten to run autoconf
-if test configure -ot configure.in; then
-  { { echo "$as_me:$LINENO: error: configure is older than configure.in; you forgot to run autoconf" >&5
-echo "$as_me: error: configure is older than configure.in; you forgot to run autoconf" >&2;}
-   { (exit 1); exit 1; }; }
-fi
-
-# check for C compiler; this typically finds gcc; it sets the
-# variable CC to whatever it finds, which then gets substituted
-# for @CC@ in output files; you have to do this even if you don't
-# care about @CC@, because system feature tests later on in
-# the ./configure script will expect $CC to be set right
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
-set dummy ${ac_tool_prefix}gcc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -n "$CC"; then
-  ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_CC="${ac_tool_prefix}gcc"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
-  echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-fi
-if test -z "$ac_cv_prog_CC"; then
-  ac_ct_CC=$CC
-  # Extract the first word of "gcc", so it can be a program name with args.
-set dummy gcc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -n "$ac_ct_CC"; then
-  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_CC="gcc"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
-  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
-echo "${ECHO_T}$ac_ct_CC" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-  CC=$ac_ct_CC
-else
-  CC="$ac_cv_prog_CC"
-fi
-
-if test -z "$CC"; then
-  if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
-set dummy ${ac_tool_prefix}cc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -n "$CC"; then
-  ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_CC="${ac_tool_prefix}cc"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
-  echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-fi
-if test -z "$ac_cv_prog_CC"; then
-  ac_ct_CC=$CC
-  # Extract the first word of "cc", so it can be a program name with args.
-set dummy cc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -n "$ac_ct_CC"; then
-  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_CC="cc"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
-  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
-echo "${ECHO_T}$ac_ct_CC" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-  CC=$ac_ct_CC
-else
-  CC="$ac_cv_prog_CC"
-fi
-
-fi
-if test -z "$CC"; then
-  # Extract the first word of "cc", so it can be a program name with args.
-set dummy cc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -n "$CC"; then
-  ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-  ac_prog_rejected=no
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
-       ac_prog_rejected=yes
-       continue
-     fi
-    ac_cv_prog_CC="cc"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-if test $ac_prog_rejected = yes; then
-  # We found a bogon in the path, so make sure we never use it.
-  set dummy $ac_cv_prog_CC
-  shift
-  if test $# != 0; then
-    # We chose a different compiler from the bogus one.
-    # However, it has the same basename, so the bogon will be chosen
-    # first if we set CC to just the basename; use the full file name.
-    shift
-    ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
-  fi
-fi
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
-  echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-fi
-if test -z "$CC"; then
-  if test -n "$ac_tool_prefix"; then
-  for ac_prog in cl
-  do
-    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
-set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -n "$CC"; then
-  ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
-  echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-    test -n "$CC" && break
-  done
-fi
-if test -z "$CC"; then
-  ac_ct_CC=$CC
-  for ac_prog in cl
-do
-  # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -n "$ac_ct_CC"; then
-  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_CC="$ac_prog"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
-  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
-echo "${ECHO_T}$ac_ct_CC" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-  test -n "$ac_ct_CC" && break
-done
-
-  CC=$ac_ct_CC
-fi
-
-fi
-
-
-test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH
-See \`config.log' for more details." >&5
-echo "$as_me: error: no acceptable C compiler found in \$PATH
-See \`config.log' for more details." >&2;}
-   { (exit 1); exit 1; }; }
-
-# Provide some information about the compiler.
-echo "$as_me:$LINENO:" \
-     "checking for C compiler version" >&5
-ac_compiler=`set X $ac_compile; echo $2`
-{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
-  (eval $ac_compiler --version </dev/null >&5) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }
-{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
-  (eval $ac_compiler -v </dev/null >&5) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }
-{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
-  (eval $ac_compiler -V </dev/null >&5) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }
-
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files a.out a.exe b.out"
-# Try to create an executable without -o first, disregard a.out.
-# It will help us diagnose broken compilers, and finding out an intuition
-# of exeext.
-echo "$as_me:$LINENO: checking for C compiler default output file name" >&5
-echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6
-ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
-if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5
-  (eval $ac_link_default) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; then
-  # Find the output, starting from the most likely.  This scheme is
-# not robust to junk in `.', hence go to wildcards (a.*) only as a last
-# resort.
-
-# Be careful to initialize this variable, since it used to be cached.
-# Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile.
-ac_cv_exeext=
-# b.out is created by i960 compilers.
-for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out
-do
-  test -f "$ac_file" || continue
-  case $ac_file in
-    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj )
-	;;
-    conftest.$ac_ext )
-	# This is the source file.
-	;;
-    [ab].out )
-	# We found the default executable, but exeext='' is most
-	# certainly right.
-	break;;
-    *.* )
-	ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
-	# FIXME: I believe we export ac_cv_exeext for Libtool,
-	# but it would be cool to find out if it's true.  Does anybody
-	# maintain Libtool? --akim.
-	export ac_cv_exeext
-	break;;
-    * )
-	break;;
-  esac
-done
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-{ { echo "$as_me:$LINENO: error: C compiler cannot create executables
-See \`config.log' for more details." >&5
-echo "$as_me: error: C compiler cannot create executables
-See \`config.log' for more details." >&2;}
-   { (exit 77); exit 77; }; }
-fi
-
-ac_exeext=$ac_cv_exeext
-echo "$as_me:$LINENO: result: $ac_file" >&5
-echo "${ECHO_T}$ac_file" >&6
-
-# Check the compiler produces executables we can run.  If not, either
-# the compiler is broken, or we cross compile.
-echo "$as_me:$LINENO: checking whether the C compiler works" >&5
-echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6
-# FIXME: These cross compiler hacks should be removed for Autoconf 3.0
-# If not cross compiling, check that we can run a simple program.
-if test "$cross_compiling" != yes; then
-  if { ac_try='./$ac_file'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-    cross_compiling=no
-  else
-    if test "$cross_compiling" = maybe; then
-	cross_compiling=yes
-    else
-	{ { echo "$as_me:$LINENO: error: cannot run C compiled programs.
-If you meant to cross compile, use \`--host'.
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot run C compiled programs.
-If you meant to cross compile, use \`--host'.
-See \`config.log' for more details." >&2;}
-   { (exit 1); exit 1; }; }
-    fi
-  fi
-fi
-echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
-
-rm -f a.out a.exe conftest$ac_cv_exeext b.out
-ac_clean_files=$ac_clean_files_save
-# Check the compiler produces executables we can run.  If not, either
-# the compiler is broken, or we cross compile.
-echo "$as_me:$LINENO: checking whether we are cross compiling" >&5
-echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6
-echo "$as_me:$LINENO: result: $cross_compiling" >&5
-echo "${ECHO_T}$cross_compiling" >&6
-
-echo "$as_me:$LINENO: checking for suffix of executables" >&5
-echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; then
-  # If both `conftest.exe' and `conftest' are `present' (well, observable)
-# catch `conftest.exe'.  For instance with Cygwin, `ls conftest' will
-# work properly (i.e., refer to `conftest.exe'), while it won't with
-# `rm'.
-for ac_file in conftest.exe conftest conftest.*; do
-  test -f "$ac_file" || continue
-  case $ac_file in
-    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;;
-    *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
-	  export ac_cv_exeext
-	  break;;
-    * ) break;;
-  esac
-done
-else
-  { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute suffix of executables: cannot compile and link
-See \`config.log' for more details." >&2;}
-   { (exit 1); exit 1; }; }
-fi
-
-rm -f conftest$ac_cv_exeext
-echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5
-echo "${ECHO_T}$ac_cv_exeext" >&6
-
-rm -f conftest.$ac_ext
-EXEEXT=$ac_cv_exeext
-ac_exeext=$EXEEXT
-echo "$as_me:$LINENO: checking for suffix of object files" >&5
-echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6
-if test "${ac_cv_objext+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.o conftest.obj
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; then
-  for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do
-  case $ac_file in
-    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;;
-    *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
-       break;;
-  esac
-done
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute suffix of object files: cannot compile
-See \`config.log' for more details." >&2;}
-   { (exit 1); exit 1; }; }
-fi
-
-rm -f conftest.$ac_cv_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_objext" >&5
-echo "${ECHO_T}$ac_cv_objext" >&6
-OBJEXT=$ac_cv_objext
-ac_objext=$OBJEXT
-echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
-echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6
-if test "${ac_cv_c_compiler_gnu+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-int
-main ()
-{
-#ifndef __GNUC__
-       choke me
-#endif
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_compiler_gnu=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_compiler_gnu=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_cv_c_compiler_gnu=$ac_compiler_gnu
-
-fi
-echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
-echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6
-GCC=`test $ac_compiler_gnu = yes && echo yes`
-ac_test_CFLAGS=${CFLAGS+set}
-ac_save_CFLAGS=$CFLAGS
-CFLAGS="-g"
-echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
-echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6
-if test "${ac_cv_prog_cc_g+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_prog_cc_g=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_prog_cc_g=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
-echo "${ECHO_T}$ac_cv_prog_cc_g" >&6
-if test "$ac_test_CFLAGS" = set; then
-  CFLAGS=$ac_save_CFLAGS
-elif test $ac_cv_prog_cc_g = yes; then
-  if test "$GCC" = yes; then
-    CFLAGS="-g -O2"
-  else
-    CFLAGS="-g"
-  fi
-else
-  if test "$GCC" = yes; then
-    CFLAGS="-O2"
-  else
-    CFLAGS=
-  fi
-fi
-echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5
-echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6
-if test "${ac_cv_prog_cc_stdc+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_cv_prog_cc_stdc=no
-ac_save_CC=$CC
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <stdarg.h>
-#include <stdio.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-/* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
-struct buf { int x; };
-FILE * (*rcsopen) (struct buf *, struct stat *, int);
-static char *e (p, i)
-     char **p;
-     int i;
-{
-  return p[i];
-}
-static char *f (char * (*g) (char **, int), char **p, ...)
-{
-  char *s;
-  va_list v;
-  va_start (v,p);
-  s = g (p, va_arg (v,int));
-  va_end (v);
-  return s;
-}
-
-/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default.  It has
-   function prototypes and stuff, but not '\xHH' hex character constants.
-   These don't provoke an error unfortunately, instead are silently treated
-   as 'x'.  The following induces an error, until -std1 is added to get
-   proper ANSI mode.  Curiously '\x00'!='x' always comes out true, for an
-   array size at least.  It's necessary to write '\x00'==0 to get something
-   that's true only with -std1.  */
-int osf4_cc_array ['\x00' == 0 ? 1 : -1];
-
-int test (int i, double x);
-struct s1 {int (*f) (int a);};
-struct s2 {int (*f) (double a);};
-int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
-int argc;
-char **argv;
-int
-main ()
-{
-return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
-  ;
-  return 0;
-}
-_ACEOF
-# Don't try gcc -ansi; that turns off useful extensions and
-# breaks some systems' header files.
-# AIX			-qlanglvl=ansi
-# Ultrix and OSF/1	-std1
-# HP-UX 10.20 and later	-Ae
-# HP-UX older versions	-Aa -D_HPUX_SOURCE
-# SVR4			-Xc -D__EXTENSIONS__
-for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
-do
-  CC="$ac_save_CC $ac_arg"
-  rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_prog_cc_stdc=$ac_arg
-break
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-fi
-rm -f conftest.err conftest.$ac_objext
-done
-rm -f conftest.$ac_ext conftest.$ac_objext
-CC=$ac_save_CC
-
-fi
-
-case "x$ac_cv_prog_cc_stdc" in
-  x|xno)
-    echo "$as_me:$LINENO: result: none needed" >&5
-echo "${ECHO_T}none needed" >&6 ;;
-  *)
-    echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5
-echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6
-    CC="$CC $ac_cv_prog_cc_stdc" ;;
-esac
-
-# Some people use a C++ compiler to compile C.  Since we use `exit',
-# in C++ we need to declare it.  In case someone uses the same compiler
-# for both compiling C and C++ we need to have the C++ compiler decide
-# the declaration of exit, since it's the most demanding environment.
-cat >conftest.$ac_ext <<_ACEOF
-#ifndef __cplusplus
-  choke me
-#endif
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  for ac_declaration in \
-   '' \
-   'extern "C" void std::exit (int) throw (); using std::exit;' \
-   'extern "C" void std::exit (int); using std::exit;' \
-   'extern "C" void exit (int) throw ();' \
-   'extern "C" void exit (int);' \
-   'void exit (int);'
-do
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_declaration
-#include <stdlib.h>
-int
-main ()
-{
-exit (42);
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  :
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-continue
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_declaration
-int
-main ()
-{
-exit (42);
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  break
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-done
-rm -f conftest*
-if test -n "$ac_declaration"; then
-  echo '#ifdef __cplusplus' >>confdefs.h
-  echo $ac_declaration      >>confdefs.h
-  echo '#endif'             >>confdefs.h
-fi
-
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-ac_aux_dir=
-for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do
-  if test -f $ac_dir/install-sh; then
-    ac_aux_dir=$ac_dir
-    ac_install_sh="$ac_aux_dir/install-sh -c"
-    break
-  elif test -f $ac_dir/install.sh; then
-    ac_aux_dir=$ac_dir
-    ac_install_sh="$ac_aux_dir/install.sh -c"
-    break
-  elif test -f $ac_dir/shtool; then
-    ac_aux_dir=$ac_dir
-    ac_install_sh="$ac_aux_dir/shtool install -c"
-    break
-  fi
-done
-if test -z "$ac_aux_dir"; then
-  { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5
-echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;}
-   { (exit 1); exit 1; }; }
-fi
-ac_config_guess="$SHELL $ac_aux_dir/config.guess"
-ac_config_sub="$SHELL $ac_aux_dir/config.sub"
-ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure.
-
-# Find a good install program.  We prefer a C program (faster),
-# so one script is as good as another.  But avoid the broken or
-# incompatible versions:
-# SysV /etc/install, /usr/sbin/install
-# SunOS /usr/etc/install
-# IRIX /sbin/install
-# AIX /bin/install
-# AmigaOS /C/install, which installs bootblocks on floppy discs
-# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
-# AFS /usr/afsws/bin/install, which mishandles nonexistent args
-# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
-# OS/2's system install, which has a completely different semantic
-# ./install, which can be erroneously created by make from ./install.sh.
-echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5
-echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6
-if test -z "$INSTALL"; then
-if test "${ac_cv_path_install+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  # Account for people who put trailing slashes in PATH elements.
-case $as_dir/ in
-  ./ | .// | /cC/* | \
-  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
-  ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \
-  /usr/ucb/* ) ;;
-  *)
-    # OSF1 and SCO ODT 3.0 have their own names for install.
-    # Don't use installbsd from OSF since it installs stuff as root
-    # by default.
-    for ac_prog in ginstall scoinst install; do
-      for ac_exec_ext in '' $ac_executable_extensions; do
-	if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
-	  if test $ac_prog = install &&
-	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
-	    # AIX install.  It has an incompatible calling convention.
-	    :
-	  elif test $ac_prog = install &&
-	    grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
-	    # program-specific install script used by HP pwplus--don't use.
-	    :
-	  else
-	    ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
-	    break 3
-	  fi
-	fi
-      done
-    done
-    ;;
-esac
-done
-
-
-fi
-  if test "${ac_cv_path_install+set}" = set; then
-    INSTALL=$ac_cv_path_install
-  else
-    # As a last resort, use the slow shell script.  We don't cache a
-    # path for INSTALL within a source directory, because that will
-    # break other packages using the cache if that directory is
-    # removed, or if the path is relative.
-    INSTALL=$ac_install_sh
-  fi
-fi
-echo "$as_me:$LINENO: result: $INSTALL" >&5
-echo "${ECHO_T}$INSTALL" >&6
-
-# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
-# It thinks the first close brace ends the variable substitution.
-test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
-
-test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
-
-test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
-
-
-
-# find system type (using this macro means we must include
-# the files install-sh, config.sub, and config.guess (all from
-# the autoconf distribution) in our source tree!)
-# Make sure we can run config.sub.
-$ac_config_sub sun4 >/dev/null 2>&1 ||
-  { { echo "$as_me:$LINENO: error: cannot run $ac_config_sub" >&5
-echo "$as_me: error: cannot run $ac_config_sub" >&2;}
-   { (exit 1); exit 1; }; }
-
-echo "$as_me:$LINENO: checking build system type" >&5
-echo $ECHO_N "checking build system type... $ECHO_C" >&6
-if test "${ac_cv_build+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_cv_build_alias=$build_alias
-test -z "$ac_cv_build_alias" &&
-  ac_cv_build_alias=`$ac_config_guess`
-test -z "$ac_cv_build_alias" &&
-  { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5
-echo "$as_me: error: cannot guess build type; you must specify one" >&2;}
-   { (exit 1); exit 1; }; }
-ac_cv_build=`$ac_config_sub $ac_cv_build_alias` ||
-  { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_build_alias failed" >&5
-echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed" >&2;}
-   { (exit 1); exit 1; }; }
-
-fi
-echo "$as_me:$LINENO: result: $ac_cv_build" >&5
-echo "${ECHO_T}$ac_cv_build" >&6
-build=$ac_cv_build
-build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
-build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
-build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
-
-
-echo "$as_me:$LINENO: checking host system type" >&5
-echo $ECHO_N "checking host system type... $ECHO_C" >&6
-if test "${ac_cv_host+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_cv_host_alias=$host_alias
-test -z "$ac_cv_host_alias" &&
-  ac_cv_host_alias=$ac_cv_build_alias
-ac_cv_host=`$ac_config_sub $ac_cv_host_alias` ||
-  { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_host_alias failed" >&5
-echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;}
-   { (exit 1); exit 1; }; }
-
-fi
-echo "$as_me:$LINENO: result: $ac_cv_host" >&5
-echo "${ECHO_T}$ac_cv_host" >&6
-host=$ac_cv_host
-host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
-host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
-host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
-
-
-echo "$as_me:$LINENO: checking target system type" >&5
-echo $ECHO_N "checking target system type... $ECHO_C" >&6
-if test "${ac_cv_target+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_cv_target_alias=$target_alias
-test "x$ac_cv_target_alias" = "x" &&
-  ac_cv_target_alias=$ac_cv_host_alias
-ac_cv_target=`$ac_config_sub $ac_cv_target_alias` ||
-  { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_target_alias failed" >&5
-echo "$as_me: error: $ac_config_sub $ac_cv_target_alias failed" >&2;}
-   { (exit 1); exit 1; }; }
-
-fi
-echo "$as_me:$LINENO: result: $ac_cv_target" >&5
-echo "${ECHO_T}$ac_cv_target" >&6
-target=$ac_cv_target
-target_cpu=`echo $ac_cv_target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
-target_vendor=`echo $ac_cv_target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
-target_os=`echo $ac_cv_target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
-
-
-# The aliases save the names the user supplied, while $host etc.
-# will get canonicalized.
-test -n "$target_alias" &&
-  test "$program_prefix$program_suffix$program_transform_name" = \
-    NONENONEs,x,x, &&
-  program_prefix=${target_alias}-
-
-
-# ---------------- generic functions -----------------
-# debugging diagnostic; set to 'echo' to debug or 'true' for production
-# (technically you're not supposed to use shell functions in
-# configure scripts, because some-obscure-sh somewhere doesn't
-# support them.. but they're too convenient to not use)
-diagnostic() {
-  #echo "$@"
-  true "$@"
-}
-
-# determine if a binary is in the path
-binaryExists() {
-  # on cygwin, 'which' always returns success, so use 'type' instead
-  if type "$1" >/dev/null 2>&1; then
-    return 0
-  else
-    return 1
-  fi
-}
-
-
-# -------------- portable configuration ----------------
-# this specifies the root of the source tree; it's just the
-# directory where ./configure runs, except on cygwin, which
-# overrides this below
-CILHOME=`pwd`
-
-DEFAULT_COMPILER=_GNUCC
-DEFAULT_CIL_MODE=GNUCC
-
-# is the microsoft compiler available?
-# hmm.. I think we should check the version or something, because
-# sometimes people have Common Lisp's interpreter called 'cl' ..
-echo "$as_me:$LINENO: checking for msvc cl.exe (optional)" >&5
-echo $ECHO_N "checking for msvc cl.exe (optional)... $ECHO_C" >&6
-# See if CC points to the MS compiler
-if "$CC" 2>&1 | grep "Microsoft" >/dev/null; then
-  echo "$as_me:$LINENO: result: found, set as default" >&5
-echo "${ECHO_T}found, set as default" >&6
-  HAS_MSVC=yes
-  DEFAULT_COMPILER=_MSVC
-  DEFAULT_CIL_MODE=MSVC
-else
-  if cl 2>&1 | grep "Microsoft" >/dev/null ;then
-     echo "$as_me:$LINENO: result: found" >&5
-echo "${ECHO_T}found" >&6
-     HAS_MSVC=yes
-  else
-     echo "$as_me:$LINENO: result: not found" >&5
-echo "${ECHO_T}not found" >&6
-     HAS_MSVC=no
-  fi
-fi
-
-# is ocaml available?
-# needed binaries: ocamllex ocamlyacc ocamldep ocamlopt ocamlc
-ocamlDownloadInstructions="
-      OCaml can be downloaded from http://caml.inria.fr/ocaml/.
-      After downloading and unpacking the source distribution, in the ocaml
-      directory, do
-        ./configure
-        make world
-        make opt
-        make install
-      Then come back here and re-run ./configure."
-
-# required major/minor.
-# required major/minor
-reqMaj=3
-reqMin=08
-knownMaj=3
-knownMin=09
-echo "$as_me:$LINENO: checking ocaml version is at least $reqMaj.$reqMin" >&5
-echo $ECHO_N "checking ocaml version is at least $reqMaj.$reqMin... $ECHO_C" >&6
-if binaryExists ocamlc; then
-  # what version?
-  ver=`ocamlc -v | grep version | sed 's/^.*version //'`
-  diagnostic "ver is $ver"
-  # major: anything before the .
-  major=`echo $ver | sed 's/\..*$//'`
-  diagnostic "major is $major"
-  # minor: numbers after the .
-  # (the outer level of bracket-quotation protects the inner brackets)
-  minor=`echo $ver | sed 's/^[^.]*\.\([0-9][0-9]*\).*$/\1/'`
-  diagnostic "minor is $minor"
-
-  # I would think autoconf would already have a facility for doing
-  # these kinds of major/minor version checks, but I can't find it
-  if test $major -gt $reqMaj -o $major -ge $reqMaj -a $minor -ge $reqMin; then
-    echo "$as_me:$LINENO: result: version is $ver, ok" >&5
-echo "${ECHO_T}version is $ver, ok" >&6
-
-    # sm: added this test when we found that CCured needed to be changed
-    # a little when 3.06 came out (it had previously worked with 3.04)
-    if test "$major" -gt $knownMaj -o "$major" -ge $knownMaj -a "$minor" -gt $knownMin; then
-      { echo "$as_me:$LINENO: WARNING: Your ocaml version is $ver, but the latest version this program
-                   is known to work with is $knownMaj.$knownMin.  If you have
-                   trouble compiling, please try using an earlier version
-                   or see if there is a later version of this program." >&5
-echo "$as_me: WARNING: Your ocaml version is $ver, but the latest version this program
-                   is known to work with is $knownMaj.$knownMin.  If you have
-                   trouble compiling, please try using an earlier version
-                   or see if there is a later version of this program." >&2;}
-    fi
-  else
-    { { echo "$as_me:$LINENO: error:
-      I found OCaml version $ver; this program requires at least $reqMaj.$reqMin.
-      Please download a newer OCaml distribution.
-      $ocamlDownloadInstructions
-    " >&5
-echo "$as_me: error:
-      I found OCaml version $ver; this program requires at least $reqMaj.$reqMin.
-      Please download a newer OCaml distribution.
-      $ocamlDownloadInstructions
-    " >&2;}
-   { (exit 1); exit 1; }; }
-  fi
-
-  # check for existence of other binaries
-  echo "$as_me:$LINENO: checking existence of related ocaml tools" >&5
-echo $ECHO_N "checking existence of related ocaml tools... $ECHO_C" >&6
-  if binaryExists ocamllex && \
-     binaryExists ocamlyacc && \
-     binaryExists ocamldep && \
-     binaryExists ocamlopt; then
-    echo "$as_me:$LINENO: result: ok" >&5
-echo "${ECHO_T}ok" >&6
-  else
-    { { echo "$as_me:$LINENO: error:
-      At least one of ocamllex, ocamlyacc, ocamldep or ocamlopt is missing.
-      In particular, ocamlopt requires you to \"make opt\" when building
-      OCaml from source.  Please make sure all these tools are built and
-      in the path.
-    " >&5
-echo "$as_me: error:
-      At least one of ocamllex, ocamlyacc, ocamldep or ocamlopt is missing.
-      In particular, ocamlopt requires you to \"make opt\" when building
-      OCaml from source.  Please make sure all these tools are built and
-      in the path.
-    " >&2;}
-   { (exit 1); exit 1; }; }
-  fi
-else
-  { { echo "$as_me:$LINENO: error:
-      The \"ocamlc\" OCaml compiler was not found in the path: $PATH.
-
-      Most of this program is written in the OCaml language, so its compiler
-      is required.
-      $ocamlDownloadInstructions
-  " >&5
-echo "$as_me: error:
-      The \"ocamlc\" OCaml compiler was not found in the path: $PATH.
-
-      Most of this program is written in the OCaml language, so its compiler
-      is required.
-      $ocamlDownloadInstructions
-  " >&2;}
-   { (exit 1); exit 1; }; }
-fi
-
-#
-# ------------------- Perl ----------------
-#
-echo "$as_me:$LINENO: checking for Perl" >&5
-echo $ECHO_N "checking for Perl... $ECHO_C" >&6
-  if ! binaryExists perl; then
-    { { echo "$as_me:$LINENO: error:
-      perl not found.
-      You need perl version 5.6.1 or later for CIL.
-      You can get perl at http://www.cpan.org/src/index.html .
-    " >&5
-echo "$as_me: error:
-      perl not found.
-      You need perl version 5.6.1 or later for CIL.
-      You can get perl at http://www.cpan.org/src/index.html .
-    " >&2;}
-   { (exit 1); exit 1; }; }
-  fi
-
-  # sm: oh how nice it would be to just say "use English;
-  # print($PERL_VERSION)", but that appears broken on 5.6.1.. so I'm
-  # trying to say "caret right-bracket", but then that would run afoul
-  # of autoconf's quoting characters, so I use the "quadrigraph" ]
-  # to stand for right-bracket.  what a mess.
-  perlver=`perl -e 'print($]);'`
-  if perl -e "exit( $perlver >= 5.006001 );"; then
-    { { echo "$as_me:$LINENO: error:
-      Found perl version $perlver, but at least 5.6.1 is required.
-      You can get a newer perl at http://www.cpan.org/src/index.html .
-    " >&5
-echo "$as_me: error:
-      Found perl version $perlver, but at least 5.6.1 is required.
-      You can get a newer perl at http://www.cpan.org/src/index.html .
-    " >&2;}
-   { (exit 1); exit 1; }; }
-  fi
-
-  perlport=`perl -e "print $^O;"`
-  case "$perlport" in
-    cygwin)
-        ;;
-    MSWin32) # ActivePerl
-        ;;
-    linux)
-        ;;
-    freebsd)
-        ;;
-    openbsd)
-        ;;
-    darwin) # Mac OS X
-        ;;
-    solaris)
-	;;
-    *)
-      { { echo "$as_me:$LINENO: error:
-        Unsupported Perl port $perlport -- sorry.
-        cygwin, MSWin32 (ActivePerl), linux, freebsd, openbsd, darwin,
-        and solaris are the supported ports.
-      " >&5
-echo "$as_me: error:
-        Unsupported Perl port $perlport -- sorry.
-        cygwin, MSWin32 (ActivePerl), linux, freebsd, openbsd, darwin,
-        and solaris are the supported ports.
-      " >&2;}
-   { (exit 1); exit 1; }; }
-  esac
-echo "$as_me:$LINENO: result: found version $perlver, port $perlport" >&5
-echo "${ECHO_T}found version $perlver, port $perlport" >&6
-
-        # The cygwin port has some bugs in the File::Spec module
-if test "$perlport" = "cygwin" ;then
-  echo "$as_me:$LINENO: checking for known cygwin Perl bug in File::Spec" >&5
-echo $ECHO_N "checking for known cygwin Perl bug in File::Spec... $ECHO_C" >&6
-  perlfixres=`perl -e '
-      use File::Spec;
-      if(File::Spec->file_name_is_absolute("C:/test")) {
-        print "no bug found"; exit 0;
-      } else {
-        print "bug";
-        foreach $d (@INC) {
-           if(-f "$d/File/Spec/Unix.pm") {
-              open(IN, "<$d/File/Spec/Unix.pm");
-              open(OUT, ">$d/File/Spec/Unix.pm.fixed")
-                       || die "Cannot open $d/File/Spec/Unix.pm.fixed";
-              while(<IN>) {
-                if($_ =~ m|sub file_name_is_absolute|) {
-                   print OUT $_;
-                   print OUT scalar(<IN>);
-                   print OUT <<EOF;
-   if(\\$^O eq \"cygwin\") {
-       return scalar(\\$file =~ m{^(\\[a-z\\]:)?\\[\\\\\\\\/\\]}is);
-};
-EOF
-                   next;
-                }
-                print OUT $_;
-              }
-              close(OUT);
-              close(IN);
-              system("mv -f $d/File/Spec/Unix.pm.fixed $d/File/Spec/Unix.pm");
-           }
-        }
-      }
-  '`
-  # See if it was indeed fixed
-  if test "$perlfixres" = "bug" ;then
-     perlfixres=`perl -e '
-      use File::Spec;
-      if(File::Spec->file_name_is_absolute("C:/test")) {
-        print "bug fixed"; exit 0;
-      } else {
-        print "cannot fix bug"; exit 1;
-      }'`
-  fi
-  if test "x$perlfixres" = "x" ;then
-      { { echo "$as_me:$LINENO: error:
-        Cannot run perl
-      " >&5
-echo "$as_me: error:
-        Cannot run perl
-      " >&2;}
-   { (exit 1); exit 1; }; }
-  elif test "$perlfixres" = "cannot fix bug" ;then
-      { { echo "$as_me:$LINENO: error:
-        Found a bug but cannot fix it.
-      " >&5
-echo "$as_me: error:
-        Found a bug but cannot fix it.
-      " >&2;}
-   { (exit 1); exit 1; }; }
-  else
-     echo "$as_me:$LINENO: result: $perlfixres" >&5
-echo "${ECHO_T}$perlfixres" >&6
- fi
-fi
-
-#
-# Now setup the performance counters
-#
-echo "$as_me:$LINENO: checking if performance counters are usable" >&5
-echo $ECHO_N "checking if performance counters are usable... $ECHO_C" >&6
-# Create a C file from src/perfcount.c.in
-rm -f ./cycles.exe
-if gcc -DCONFIGURATION_ONLY \
-       -x c ocamlutil/perfcount.c.in -lm -o ./cycles.exe >/dev/null 2>&1; then
-
-   if CYCLES_PER_USEC=`./cycles.exe 2>&1` ;then
-     echo "$as_me:$LINENO: result: ok ($CYCLES_PER_USEC cycles per us)" >&5
-echo "${ECHO_T}ok ($CYCLES_PER_USEC cycles per us)" >&6
-   else
-     # Print what we got
-     echo "$as_me:$LINENO: result: no ($CYCLES_PER_USEC)" >&5
-echo "${ECHO_T}no ($CYCLES_PER_USEC)" >&6
-     CYCLES_PER_USEC=0
-   fi
-else
-   CYCLES_PER_USEC=0
-   echo "$as_me:$LINENO: result: no (cannot compile perfcount.c)" >&5
-echo "${ECHO_T}no (cannot compile perfcount.c)" >&6
-fi
-rm -f ./cycles.exe
-
-# If we are on Linux and we use performance counters try to get
-# the processor speed from /proc/cpuinfo
-if test "$CYCLES_PER_USEC" != "0" ;then
-     case "$target" in
-        # linux
-        *86*linux*)
-             echo "$as_me:$LINENO: checking if /proc/cpuinfo has processor speed" >&5
-echo $ECHO_N "checking if /proc/cpuinfo has processor speed... $ECHO_C" >&6
-             cpuinfo=`cat /proc/cpuinfo 2>/dev/null | grep "cpu MHz"`
-             procspeed=`echo $cpuinfo | sed 's/^.*[^0-9]\([0-9]\+\.[0-9]\+\).*$/\1/g'`
-             if test "$procspeed"!="" ;then
-                CYCLES_PER_USEC=$procspeed
-                echo "$as_me:$LINENO: result: got $CYCLES_PER_USEC cycles per us" >&5
-echo "${ECHO_T}got $CYCLES_PER_USEC cycles per us" >&6
-             else
-                echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-             fi
-             ;;
-        *)
-             ;;
-      esac
-      # Now set HAS_PERFCOUNT
-      HAS_PERFCOUNT=1
-else
-      HAS_PERFCOUNT=0
-fi
-
-# additional tools we might check for:
-#   - gnu make
-
-#
-# -------------------- GCC --------------
-#
-
-echo "$as_me:$LINENO: checking for gcc version" >&5
-echo $ECHO_N "checking for gcc version... $ECHO_C" >&6
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5
-echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6
-# On Suns, sometimes $CPP names a directory.
-if test -n "$CPP" && test -d "$CPP"; then
-  CPP=
-fi
-if test -z "$CPP"; then
-  if test "${ac_cv_prog_CPP+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-      # Double quotes because CPP needs to be expanded
-    for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
-    do
-      ac_preproc_ok=false
-for ac_c_preproc_warn_flag in '' yes
-do
-  # Use a header file that comes with gcc, so configuring glibc
-  # with a fresh cross-compiler works.
-  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-  # <limits.h> exists even on freestanding compilers.
-  # On the NeXT, cc -E runs the code through the compiler's parser,
-  # not just through cpp. "Syntax error" is here to catch this case.
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-		     Syntax error
-_ACEOF
-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
-  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null; then
-  if test -s conftest.err; then
-    ac_cpp_err=$ac_c_preproc_warn_flag
-    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
-  else
-    ac_cpp_err=
-  fi
-else
-  ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
-  :
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-  # Broken: fails on valid input.
-continue
-fi
-rm -f conftest.err conftest.$ac_ext
-
-  # OK, works on sane cases.  Now check whether non-existent headers
-  # can be detected and how.
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <ac_nonexistent.h>
-_ACEOF
-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
-  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null; then
-  if test -s conftest.err; then
-    ac_cpp_err=$ac_c_preproc_warn_flag
-    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
-  else
-    ac_cpp_err=
-  fi
-else
-  ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
-  # Broken: success on invalid input.
-continue
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-  # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-rm -f conftest.err conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then
-  break
-fi
-
-    done
-    ac_cv_prog_CPP=$CPP
-
-fi
-  CPP=$ac_cv_prog_CPP
-else
-  ac_cv_prog_CPP=$CPP
-fi
-echo "$as_me:$LINENO: result: $CPP" >&5
-echo "${ECHO_T}$CPP" >&6
-ac_preproc_ok=false
-for ac_c_preproc_warn_flag in '' yes
-do
-  # Use a header file that comes with gcc, so configuring glibc
-  # with a fresh cross-compiler works.
-  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-  # <limits.h> exists even on freestanding compilers.
-  # On the NeXT, cc -E runs the code through the compiler's parser,
-  # not just through cpp. "Syntax error" is here to catch this case.
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-		     Syntax error
-_ACEOF
-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
-  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null; then
-  if test -s conftest.err; then
-    ac_cpp_err=$ac_c_preproc_warn_flag
-    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
-  else
-    ac_cpp_err=
-  fi
-else
-  ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
-  :
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-  # Broken: fails on valid input.
-continue
-fi
-rm -f conftest.err conftest.$ac_ext
-
-  # OK, works on sane cases.  Now check whether non-existent headers
-  # can be detected and how.
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <ac_nonexistent.h>
-_ACEOF
-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
-  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null; then
-  if test -s conftest.err; then
-    ac_cpp_err=$ac_c_preproc_warn_flag
-    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
-  else
-    ac_cpp_err=
-  fi
-else
-  ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
-  # Broken: success on invalid input.
-continue
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-  # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-rm -f conftest.err conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then
-  :
-else
-  { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check
-See \`config.log' for more details." >&5
-echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check
-See \`config.log' for more details." >&2;}
-   { (exit 1); exit 1; }; }
-fi
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-echo "$as_me:$LINENO: checking for egrep" >&5
-echo $ECHO_N "checking for egrep... $ECHO_C" >&6
-if test "${ac_cv_prog_egrep+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if echo a | (grep -E '(a|b)') >/dev/null 2>&1
-    then ac_cv_prog_egrep='grep -E'
-    else ac_cv_prog_egrep='egrep'
-    fi
-fi
-echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5
-echo "${ECHO_T}$ac_cv_prog_egrep" >&6
- EGREP=$ac_cv_prog_egrep
-
-
-echo "$as_me:$LINENO: checking for ANSI C header files" >&5
-echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6
-if test "${ac_cv_header_stdc+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <stdlib.h>
-#include <stdarg.h>
-#include <string.h>
-#include <float.h>
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_header_stdc=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_header_stdc=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-
-if test $ac_cv_header_stdc = yes; then
-  # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <string.h>
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "memchr" >/dev/null 2>&1; then
-  :
-else
-  ac_cv_header_stdc=no
-fi
-rm -f conftest*
-
-fi
-
-if test $ac_cv_header_stdc = yes; then
-  # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <stdlib.h>
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "free" >/dev/null 2>&1; then
-  :
-else
-  ac_cv_header_stdc=no
-fi
-rm -f conftest*
-
-fi
-
-if test $ac_cv_header_stdc = yes; then
-  # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
-  if test "$cross_compiling" = yes; then
-  :
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <ctype.h>
-#if ((' ' & 0x0FF) == 0x020)
-# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
-# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
-#else
-# define ISLOWER(c) \
-		   (('a' <= (c) && (c) <= 'i') \
-		     || ('j' <= (c) && (c) <= 'r') \
-		     || ('s' <= (c) && (c) <= 'z'))
-# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
-#endif
-
-#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
-int
-main ()
-{
-  int i;
-  for (i = 0; i < 256; i++)
-    if (XOR (islower (i), ISLOWER (i))
-	|| toupper (i) != TOUPPER (i))
-      exit(2);
-  exit (0);
-}
-_ACEOF
-rm -f conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  :
-else
-  echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-( exit $ac_status )
-ac_cv_header_stdc=no
-fi
-rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-fi
-fi
-fi
-echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
-echo "${ECHO_T}$ac_cv_header_stdc" >&6
-if test $ac_cv_header_stdc = yes; then
-
-cat >>confdefs.h <<\_ACEOF
-#define STDC_HEADERS 1
-_ACEOF
-
-fi
-
-# On IRIX 5.3, sys/types and inttypes.h are conflicting.
-
-
-
-
-
-
-
-
-
-for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
-		  inttypes.h stdint.h unistd.h
-do
-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-
-#include <$ac_header>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  eval "$as_ac_Header=yes"
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_Header=no"
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
-  cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-
-done
-
-
-echo "$as_me:$LINENO: checking for __builtin_va_list" >&5
-echo $ECHO_N "checking for __builtin_va_list... $ECHO_C" >&6
-if test "${ac_cv_type___builtin_va_list+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-int
-main ()
-{
-if ((__builtin_va_list *) 0)
-  return 0;
-if (sizeof (__builtin_va_list))
-  return 0;
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_type___builtin_va_list=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_type___builtin_va_list=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_type___builtin_va_list" >&5
-echo "${ECHO_T}$ac_cv_type___builtin_va_list" >&6
-if test $ac_cv_type___builtin_va_list = yes; then
-  HAVE_BUILTIN_VA_LIST=true
-else
-  HAVE_BUILTIN_VA_LIST=false
-fi
-
-echo "$as_me:$LINENO: checking if __thread is a keyword" >&5
-echo $ECHO_N "checking if __thread is a keyword... $ECHO_C" >&6
-cat >conftest.$ac_ext <<_ACEOF
-int main(int __thread) { return 0; }
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  THREAD_IS_KEYWORD=false
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-THREAD_IS_KEYWORD=true
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-echo "$as_me:$LINENO: result: $THREAD_IS_KEYWORD" >&5
-echo "${ECHO_T}$THREAD_IS_KEYWORD" >&6
-
-# Does gcc add underscores to identifiers to make assembly labels?
-# (I think MSVC always does)
-echo "$as_me:$LINENO: checking if gcc adds underscores to assembly labels." >&5
-echo $ECHO_N "checking if gcc adds underscores to assembly labels.... $ECHO_C" >&6
-cat >conftest.$ac_ext <<_ACEOF
-int main() { __asm__("jmp _main"); }
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  UNDERSCORE_NAME=true
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-UNDERSCORE_NAME=false
-fi
-rm -f conftest.err conftest.$ac_objext \
-      conftest$ac_exeext conftest.$ac_ext
-echo "$as_me:$LINENO: result: $UNDERSCORE_NAME" >&5
-echo "${ECHO_T}$UNDERSCORE_NAME" >&6
-
-
-# ----------- some stuff 'autoscan' put here --------------
-# (autoscan is part of the autoconf distribution)
-
-# checks for header files
-echo "$as_me:$LINENO: checking for ANSI C header files" >&5
-echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6
-if test "${ac_cv_header_stdc+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <stdlib.h>
-#include <stdarg.h>
-#include <string.h>
-#include <float.h>
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_header_stdc=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_header_stdc=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-
-if test $ac_cv_header_stdc = yes; then
-  # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <string.h>
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "memchr" >/dev/null 2>&1; then
-  :
-else
-  ac_cv_header_stdc=no
-fi
-rm -f conftest*
-
-fi
-
-if test $ac_cv_header_stdc = yes; then
-  # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <stdlib.h>
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "free" >/dev/null 2>&1; then
-  :
-else
-  ac_cv_header_stdc=no
-fi
-rm -f conftest*
-
-fi
-
-if test $ac_cv_header_stdc = yes; then
-  # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
-  if test "$cross_compiling" = yes; then
-  :
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <ctype.h>
-#if ((' ' & 0x0FF) == 0x020)
-# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
-# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
-#else
-# define ISLOWER(c) \
-		   (('a' <= (c) && (c) <= 'i') \
-		     || ('j' <= (c) && (c) <= 'r') \
-		     || ('s' <= (c) && (c) <= 'z'))
-# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
-#endif
-
-#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
-int
-main ()
-{
-  int i;
-  for (i = 0; i < 256; i++)
-    if (XOR (islower (i), ISLOWER (i))
-	|| toupper (i) != TOUPPER (i))
-      exit(2);
-  exit (0);
-}
-_ACEOF
-rm -f conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  :
-else
-  echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-( exit $ac_status )
-ac_cv_header_stdc=no
-fi
-rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-fi
-fi
-fi
-echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
-echo "${ECHO_T}$ac_cv_header_stdc" >&6
-if test $ac_cv_header_stdc = yes; then
-
-cat >>confdefs.h <<\_ACEOF
-#define STDC_HEADERS 1
-_ACEOF
-
-fi
-
-
-
-
-
-
-for ac_header in stdlib.h strings.h sys/time.h unistd.h wchar.h
-do
-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
-  echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
-else
-  # Is the header compilable?
-echo "$as_me:$LINENO: checking $ac_header usability" >&5
-echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-#include <$ac_header>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_header_compiler=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_header_compiler=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6
-
-# Is the header present?
-echo "$as_me:$LINENO: checking $ac_header presence" >&5
-echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <$ac_header>
-_ACEOF
-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
-  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null; then
-  if test -s conftest.err; then
-    ac_cpp_err=$ac_c_preproc_warn_flag
-    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
-  else
-    ac_cpp_err=
-  fi
-else
-  ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
-  ac_header_preproc=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-  ac_header_preproc=no
-fi
-rm -f conftest.err conftest.$ac_ext
-echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6
-
-# So?  What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
-  yes:no: )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
-    ac_header_preproc=yes
-    ;;
-  no:yes:* )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
-echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-    (
-      cat <<\_ASBOX
-## ------------------------------------------ ##
-## Report this to the AC_PACKAGE_NAME lists.  ##
-## ------------------------------------------ ##
-_ASBOX
-    ) |
-      sed "s/^/$as_me: WARNING:     /" >&2
-    ;;
-esac
-echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  eval "$as_ac_Header=\$ac_header_preproc"
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
-
-fi
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
-  cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-
-done
-
-
-# checks for typedefs, structures, and compiler characteristics
-echo "$as_me:$LINENO: checking for an ANSI C-conforming const" >&5
-echo $ECHO_N "checking for an ANSI C-conforming const... $ECHO_C" >&6
-if test "${ac_cv_c_const+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-int
-main ()
-{
-/* FIXME: Include the comments suggested by Paul. */
-#ifndef __cplusplus
-  /* Ultrix mips cc rejects this.  */
-  typedef int charset[2];
-  const charset x;
-  /* SunOS 4.1.1 cc rejects this.  */
-  char const *const *ccp;
-  char **p;
-  /* NEC SVR4.0.2 mips cc rejects this.  */
-  struct point {int x, y;};
-  static struct point const zero = {0,0};
-  /* AIX XL C 1.02.0.0 rejects this.
-     It does not let you subtract one const X* pointer from another in
-     an arm of an if-expression whose if-part is not a constant
-     expression */
-  const char *g = "string";
-  ccp = &g + (g ? g-g : 0);
-  /* HPUX 7.0 cc rejects these. */
-  ++ccp;
-  p = (char**) ccp;
-  ccp = (char const *const *) p;
-  { /* SCO 3.2v4 cc rejects this.  */
-    char *t;
-    char const *s = 0 ? (char *) 0 : (char const *) 0;
-
-    *t++ = 0;
-  }
-  { /* Someone thinks the Sun supposedly-ANSI compiler will reject this.  */
-    int x[] = {25, 17};
-    const int *foo = &x[0];
-    ++foo;
-  }
-  { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */
-    typedef const int *iptr;
-    iptr p = 0;
-    ++p;
-  }
-  { /* AIX XL C 1.02.0.0 rejects this saying
-       "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */
-    struct s { int j; const int *ap[3]; };
-    struct s *b; b->j = 5;
-  }
-  { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */
-    const int foo = 10;
-  }
-#endif
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_c_const=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_c_const=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_c_const" >&5
-echo "${ECHO_T}$ac_cv_c_const" >&6
-if test $ac_cv_c_const = no; then
-
-cat >>confdefs.h <<\_ACEOF
-#define const
-_ACEOF
-
-fi
-
-echo "$as_me:$LINENO: checking for inline" >&5
-echo $ECHO_N "checking for inline... $ECHO_C" >&6
-if test "${ac_cv_c_inline+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_cv_c_inline=no
-for ac_kw in inline __inline__ __inline; do
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#ifndef __cplusplus
-typedef int foo_t;
-static $ac_kw foo_t static_foo () {return 0; }
-$ac_kw foo_t foo () {return 0; }
-#endif
-
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_c_inline=$ac_kw; break
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-done
-
-fi
-echo "$as_me:$LINENO: result: $ac_cv_c_inline" >&5
-echo "${ECHO_T}$ac_cv_c_inline" >&6
-
-
-case $ac_cv_c_inline in
-  inline | yes) ;;
-  *)
-    case $ac_cv_c_inline in
-      no) ac_val=;;
-      *) ac_val=$ac_cv_c_inline;;
-    esac
-    cat >>confdefs.h <<_ACEOF
-#ifndef __cplusplus
-#define inline $ac_val
-#endif
-_ACEOF
-    ;;
-esac
-
-echo "$as_me:$LINENO: checking whether time.h and sys/time.h may both be included" >&5
-echo $ECHO_N "checking whether time.h and sys/time.h may both be included... $ECHO_C" >&6
-if test "${ac_cv_header_time+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <sys/types.h>
-#include <sys/time.h>
-#include <time.h>
-
-int
-main ()
-{
-if ((struct tm *) 0)
-return 0;
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_header_time=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_header_time=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_header_time" >&5
-echo "${ECHO_T}$ac_cv_header_time" >&6
-if test $ac_cv_header_time = yes; then
-
-cat >>confdefs.h <<\_ACEOF
-#define TIME_WITH_SYS_TIME 1
-_ACEOF
-
-fi
-
-
-# checks for library functions; more autoscan stuff
-echo "$as_me:$LINENO: checking for working memcmp" >&5
-echo $ECHO_N "checking for working memcmp... $ECHO_C" >&6
-if test "${ac_cv_func_memcmp_working+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test "$cross_compiling" = yes; then
-  ac_cv_func_memcmp_working=no
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-int
-main ()
-{
-
-  /* Some versions of memcmp are not 8-bit clean.  */
-  char c0 = 0x40, c1 = 0x80, c2 = 0x81;
-  if (memcmp(&c0, &c2, 1) >= 0 || memcmp(&c1, &c2, 1) >= 0)
-    exit (1);
-
-  /* The Next x86 OpenStep bug shows up only when comparing 16 bytes
-     or more and with at least one buffer not starting on a 4-byte boundary.
-     William Lewis provided this test program.   */
-  {
-    char foo[21];
-    char bar[21];
-    int i;
-    for (i = 0; i < 4; i++)
-      {
-	char *a = foo + i;
-	char *b = bar + i;
-	strcpy (a, "--------01111111");
-	strcpy (b, "--------10000000");
-	if (memcmp (a, b, 16) >= 0)
-	  exit (1);
-      }
-    exit (0);
-  }
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_func_memcmp_working=yes
-else
-  echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-( exit $ac_status )
-ac_cv_func_memcmp_working=no
-fi
-rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-fi
-fi
-echo "$as_me:$LINENO: result: $ac_cv_func_memcmp_working" >&5
-echo "${ECHO_T}$ac_cv_func_memcmp_working" >&6
-test $ac_cv_func_memcmp_working = no && case $LIBOBJS in
-    "memcmp.$ac_objext"   | \
-  *" memcmp.$ac_objext"   | \
-    "memcmp.$ac_objext "* | \
-  *" memcmp.$ac_objext "* ) ;;
-  *) LIBOBJS="$LIBOBJS memcmp.$ac_objext" ;;
-esac
-
-
-
-
-
-
-for ac_func in mkdir select socket __sysv_signal
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
-   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char $ac_func (); below.
-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-    <limits.h> exists even on freestanding compilers.  */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any gcc2 internal prototype to avoid an error.  */
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-/* We use char because int might match the return type of a gcc2
-   builtin and then its argument prototype would still apply.  */
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
-    to always fail with ENOSYS.  Some functions are actually named
-    something starting with __ and the normal name is an alias.  */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-int
-main ()
-{
-return f != $ac_func;
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_c_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  eval "$as_ac_var=yes"
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-eval "$as_ac_var=no"
-fi
-rm -f conftest.err conftest.$ac_objext \
-      conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
-  cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
-
-
-
-# ----------- platform-specific code -------------
-# $target is typically processor-vendor-os
-case "$target" in
-  # linux
-  *86*linux*|*86*freebsd*|*86*openbsd*|*86*darwin*)
-    echo "$as_me:$LINENO: result: configuring for linux/x86" >&5
-echo "${ECHO_T}configuring for linux/x86" >&6
-
-    ARCHOS=x86_LINUX
-    ;;
-
-  # Mac OS X
-  *powerpc*darwin*)
-    echo "$as_me:$LINENO: result: configuring for powerpc/darwin" >&5
-echo "${ECHO_T}configuring for powerpc/darwin" >&6
-
-    ARCHOS=ppc_DARWIN
-    ;;
-
-  # cygwin
-  *86*cygwin*)
-    echo "$as_me:$LINENO: result: configuring for Cygwin on win32/x86" >&5
-echo "${ECHO_T}configuring for Cygwin on win32/x86" >&6
-
-    ARCHOS=x86_WIN32
-
-    # override CILHOME; even on cygwin we want forward slashes
-    # sm: I folded this into what I hope will be the only
-    # case-analysis of machine type
-    CILHOME=`cygpath -wa "$CILHOME"  | sed -e "s/\\\\\/\\//g"`
-    CC=`which $CC`
-    CC=`cygpath -wa "$CC"  | sed -e "s/\\\\\/\\//g"`
-    ;;
-
-  # Solaris
-  *sparc*solaris*)
-    echo "$as_me:$LINENO: result: configuring for SPARC/Solaris" >&5
-echo "${ECHO_T}configuring for SPARC/Solaris" >&6
-
-    ARCHOS=sparc_SOLARIS
-    ;;
-
-  *)
-    { { echo "$as_me:$LINENO: error:
-      Unsupported platform $target -- sorry.
-      ./configure supports these platforms:
-         on x86:     Linux, Win32(with Cygwin), freeBSD, openBSD, and Mac OS X
-         on PowerPC: Mac OS X
-         on SPARC:   Solaris
-    " >&5
-echo "$as_me: error:
-      Unsupported platform $target -- sorry.
-      ./configure supports these platforms:
-         on x86:     Linux, Win32(with Cygwin), freeBSD, openBSD, and Mac OS X
-         on PowerPC: Mac OS X
-         on SPARC:   Solaris
-    " >&2;}
-   { (exit 1); exit 1; }; }
-    ;;
-esac
-
-# Make the object directory if not already present
-as_ac_File=`echo "ac_cv_file_obj/$ARCHOS" | $as_tr_sh`
-echo "$as_me:$LINENO: checking for obj/$ARCHOS" >&5
-echo $ECHO_N "checking for obj/$ARCHOS... $ECHO_C" >&6
-if eval "test \"\${$as_ac_File+set}\" = set"; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  test "$cross_compiling" = yes &&
-  { { echo "$as_me:$LINENO: error: cannot check for file existence when cross compiling" >&5
-echo "$as_me: error: cannot check for file existence when cross compiling" >&2;}
-   { (exit 1); exit 1; }; }
-if test -r "obj/$ARCHOS"; then
-  eval "$as_ac_File=yes"
-else
-  eval "$as_ac_File=no"
-fi
-fi
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_File'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_File'}'`" >&6
-if test `eval echo '${'$as_ac_File'}'` = yes; then
-  :
-else
-  echo "$as_me:$LINENO: result: creating obj/$ARCHOS" >&5
-echo "${ECHO_T}creating obj/$ARCHOS" >&6;
-                            mkdir -p obj/$ARCHOS
-fi
-
-
-echo "$as_me:$LINENO: checking delete the obj/$ARCHOS/feature_config.ml and obj/$ARCHOS/machdep.ml file" >&5
-echo $ECHO_N "checking delete the obj/$ARCHOS/feature_config.ml and obj/$ARCHOS/machdep.ml file... $ECHO_C" >&6
-rm -f obj/$ARCHOS/machdep.ml
-rm -f obj/.depend/machdep.d
-rm -f obj/$ARCHOS/feature_config.ml
-rm -f obj/.depend/feature_config.d
-echo "$as_me:$LINENO: result: done" >&5
-echo "${ECHO_T}done" >&6
-
-# We will use substitution variables whose definition contains newlines. The
-# problem is that when config.status runs, it wants to break the series of
-# substitution commands for sed into fragments based on line count. We could
-# be unlucky and have config.status break the series of substitution in the
-# middle of a variable that contains newlines. So, we first create a single
-# variable called NEWLINE whose definition is a carriage return. This means
-# that there will be exactly one opportunity for this error to happen (in the
-# definition of NEWLINE). The occurrence of AC_SUBST for NEWLINE must occur
-# after those of the variables that use it! And we want to put all of these
-# very early on, to make sure that they are not around the place when the file
-# bets broken.
-
-NEWLINE="\\
-"
-
-
-#
-# CIL/CCured features
-#
-#
-
-# Set the defaults
-
-
-# Give a space-separated list of features with the defaults
-features="blockinggraph=no rand=no arithabs=no zrapp=no"
-
-
-# Check whether --with-blockinggraph or --without-blockinggraph was given.
-if test "${with_blockinggraph+set}" = set; then
-  withval="$with_blockinggraph"
-
-fi;
-
-# Check whether --with-rand or --without-rand was given.
-if test "${with_rand+set}" = set; then
-  withval="$with_rand"
-
-fi;
-
-# Check whether --with-arithabs or --without-arithabs was given.
-if test "${with_arithabs+set}" = set; then
-  withval="$with_arithabs"
-
-fi;
-
-# Check whether --with-zrapp or --without-zrapp was given.
-if test "${with_zrapp+set}" = set; then
-  withval="$with_zrapp"
-
-fi;
-
-# Smalloc.ml is distributed by {matth,nks}@cs.berkeley.edu as part of Scrash.
-features="$features smalloc=no"
-
-# cqualann.ml is used by Matt Harren.  Please ignore.
-features="$features cqualann=no"
-
-# Now add any features specified in the command-line
-
-features="$features $EXTRAFEATURES"
-
-for f_val in $features
-do
-   # If there is no =, then we default to yes
-   if ! (echo $f_val | grep "=" >/dev/null) ;then f_val="$f_val=yes"; fi
-   # echo "Testing feature $f_val"
-   f=`echo $f_val | sed -e s%=.*$%%`
-   echo "$as_me:$LINENO: checking whether to use CIL feature $f" >&5
-echo $ECHO_N "checking whether to use CIL feature $f... $ECHO_C" >&6
-   # default value from "features"
-   defval=`echo $f_val | sed -e s%^.*=%%`
-   # current value
-   getcurval="echo \${with_$f:=$defval}"
-   curval=`eval $getcurval`
-   echo "$as_me:$LINENO: result: $curval" >&5
-echo "${ECHO_T}$curval" >&6
-   if test $curval = yes ;then
-      CIL_FEATURES="$CIL_FEATURES $f"
-   fi
-done
-
-## Now produce the CIL_FEATURES_DEFINES
-CIL_FEATURES_DEFINES=""
-# Convert to upper case
-for f in `echo $CIL_FEATURES | tr a-z A-Z`
-do
-   CIL_FEATURES_DEFINES="${CIL_FEATURES_DEFINES}@NEWLINE@export USE_$f=yes"
-done
-
-
-# ----------------- finish up -------------------
-# names of the variables that get substituted in files; for example,
-# write @ARCHOS@ somewhere in a written file to get it substituted
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-# finish the configure script and generate various files; ./configure
-# will apply variable substitutions to <filename>.in to generate <filename>;
-# I find it useful to mark generated files as read-only so I don't
-# accidentally edit them (and them lose my changes when ./configure
-# runs again); I had originally done the chmod after AC_OUTPUT, but
-# the problem is then the chmod doesn't run inside ./config.status
-
-# MY_AC_CONFIG_FILES(filename)
-# do AC_CONFIG_FILES(filename, chmod a-w filename)
-
-
-
-{
-  if test -f Makefile.in; then
-              ac_config_files="$ac_config_files Makefile"
-
-  else
-    true
-    #echo "skipping [Makefile] because it's not in this distribution"
-  fi
-}
-{
-  if test -f cil.spec.in; then
-              ac_config_files="$ac_config_files cil.spec"
-
-  else
-    true
-    #echo "skipping [cil.spec] because it's not in this distribution"
-  fi
-}
-{
-  if test -f config.mk.in; then
-              ac_config_files="$ac_config_files config.mk"
-
-  else
-    true
-    #echo "skipping [config.mk] because it's not in this distribution"
-  fi
-}
-{
-  if test -f test/Makefile.in; then
-              ac_config_files="$ac_config_files test/Makefile"
-
-  else
-    true
-    #echo "skipping [test/Makefile] because it's not in this distribution"
-  fi
-}
-{
-  if test -f bin/cilly.bat.in; then
-              ac_config_files="$ac_config_files bin/cilly.bat"
-
-  else
-    true
-    #echo "skipping [bin/cilly.bat] because it's not in this distribution"
-  fi
-}
-{
-  if test -f bin/patcher.bat.in; then
-              ac_config_files="$ac_config_files bin/patcher.bat"
-
-  else
-    true
-    #echo "skipping [bin/patcher.bat] because it's not in this distribution"
-  fi
-}
-{
-  if test -f bin/CilConfig.pm.in; then
-              ac_config_files="$ac_config_files bin/CilConfig.pm"
-
-  else
-    true
-    #echo "skipping [bin/CilConfig.pm] because it's not in this distribution"
-  fi
-}
-{
-  if test -f doc/index.html.in; then
-              ac_config_files="$ac_config_files doc/index.html"
-
-  else
-    true
-    #echo "skipping [doc/index.html] because it's not in this distribution"
-  fi
-}
-{
-  if test -f doc/header.html.in; then
-              ac_config_files="$ac_config_files doc/header.html"
-
-  else
-    true
-    #echo "skipping [doc/header.html] because it's not in this distribution"
-  fi
-}
-{
-  if test -f ocamlutil/perfcount.c.in; then
-              ac_config_files="$ac_config_files ocamlutil/perfcount.c"
-
-  else
-    true
-    #echo "skipping [ocamlutil/perfcount.c] because it's not in this distribution"
-  fi
-}
-
-cat >confcache <<\_ACEOF
-# This file is a shell script that caches the results of configure
-# tests run on this system so they can be shared between configure
-# scripts and configure runs, see configure's option --config-cache.
-# It is not useful on other systems.  If it contains results you don't
-# want to keep, you may remove or edit it.
-#
-# config.status only pays attention to the cache file if you give it
-# the --recheck option to rerun configure.
-#
-# `ac_cv_env_foo' variables (set or unset) will be overridden when
-# loading this file, other *unset* `ac_cv_foo' will be assigned the
-# following values.
-
-_ACEOF
-
-# The following way of writing the cache mishandles newlines in values,
-# but we know of no workaround that is simple, portable, and efficient.
-# So, don't put newlines in cache variables' values.
-# Ultrix sh set writes to stderr and can't be redirected directly,
-# and sets the high bit in the cache file unless we assign to the vars.
-{
-  (set) 2>&1 |
-    case `(ac_space=' '; set | grep ac_space) 2>&1` in
-    *ac_space=\ *)
-      # `set' does not quote correctly, so add quotes (double-quote
-      # substitution turns \\\\ into \\, and sed turns \\ into \).
-      sed -n \
-	"s/'/'\\\\''/g;
-	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
-      ;;
-    *)
-      # `set' quotes correctly as required by POSIX, so do not add quotes.
-      sed -n \
-	"s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
-      ;;
-    esac;
-} |
-  sed '
-     t clear
-     : clear
-     s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
-     t end
-     /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
-     : end' >>confcache
-if diff $cache_file confcache >/dev/null 2>&1; then :; else
-  if test -w $cache_file; then
-    test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file"
-    cat confcache >$cache_file
-  else
-    echo "not updating unwritable cache $cache_file"
-  fi
-fi
-rm -f confcache
-
-test "x$prefix" = xNONE && prefix=$ac_default_prefix
-# Let make expand exec_prefix.
-test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
-
-# VPATH may cause trouble with some makes, so we remove $(srcdir),
-# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
-# trailing colons and then remove the whole line if VPATH becomes empty
-# (actually we leave an empty line to preserve line numbers).
-if test "x$srcdir" = x.; then
-  ac_vpsub='/^[	 ]*VPATH[	 ]*=/{
-s/:*\$(srcdir):*/:/;
-s/:*\${srcdir}:*/:/;
-s/:*@srcdir@:*/:/;
-s/^\([^=]*=[	 ]*\):*/\1/;
-s/:*$//;
-s/^[^=]*=[	 ]*$//;
-}'
-fi
-
-DEFS=-DHAVE_CONFIG_H
-
-ac_libobjs=
-ac_ltlibobjs=
-for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
-  # 1. Remove the extension, and $U if already installed.
-  ac_i=`echo "$ac_i" |
-	 sed 's/\$U\././;s/\.o$//;s/\.obj$//'`
-  # 2. Prepend LIBOBJDIR.  When used with automake>=1.10 LIBOBJDIR
-  #    will be set to the directory where LIBOBJS objects are built.
-  ac_libobjs="$ac_libobjs \${LIBOBJDIR}$ac_i\$U.$ac_objext"
-  ac_ltlibobjs="$ac_ltlibobjs \${LIBOBJDIR}$ac_i"'$U.lo'
-done
-LIBOBJS=$ac_libobjs
-
-LTLIBOBJS=$ac_ltlibobjs
-
-
-
-: ${CONFIG_STATUS=./config.status}
-ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files $CONFIG_STATUS"
-{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5
-echo "$as_me: creating $CONFIG_STATUS" >&6;}
-cat >$CONFIG_STATUS <<_ACEOF
-#! $SHELL
-# Generated by $as_me.
-# Run this file to recreate the current configuration.
-# Compiler output produced by configure, useful for debugging
-# configure, is in config.log if it exists.
-
-debug=false
-ac_cs_recheck=false
-ac_cs_silent=false
-SHELL=\${CONFIG_SHELL-$SHELL}
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF
-## --------------------- ##
-## M4sh Initialization.  ##
-## --------------------- ##
-
-# Be Bourne compatible
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
-  emulate sh
-  NULLCMD=:
-  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
-  # is contrary to our usage.  Disable this feature.
-  alias -g '${1+"$@"}'='"$@"'
-elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
-  set -o posix
-fi
-DUALCASE=1; export DUALCASE # for MKS sh
-
-# Support unset when possible.
-if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
-  as_unset=unset
-else
-  as_unset=false
-fi
-
-
-# Work around bugs in pre-3.0 UWIN ksh.
-$as_unset ENV MAIL MAILPATH
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-for as_var in \
-  LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
-  LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
-  LC_TELEPHONE LC_TIME
-do
-  if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
-    eval $as_var=C; export $as_var
-  else
-    $as_unset $as_var
-  fi
-done
-
-# Required to use basename.
-if expr a : '\(a\)' >/dev/null 2>&1; then
-  as_expr=expr
-else
-  as_expr=false
-fi
-
-if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then
-  as_basename=basename
-else
-  as_basename=false
-fi
-
-
-# Name of the executable.
-as_me=`$as_basename "$0" ||
-$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
-	 X"$0" : 'X\(//\)$' \| \
-	 X"$0" : 'X\(/\)$' \| \
-	 .     : '\(.\)' 2>/dev/null ||
-echo X/"$0" |
-    sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
-  	  /^X\/\(\/\/\)$/{ s//\1/; q; }
-  	  /^X\/\(\/\).*/{ s//\1/; q; }
-  	  s/.*/./; q'`
-
-
-# PATH needs CR, and LINENO needs CR and PATH.
-# Avoid depending upon Character Ranges.
-as_cr_letters='abcdefghijklmnopqrstuvwxyz'
-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-as_cr_Letters=$as_cr_letters$as_cr_LETTERS
-as_cr_digits='0123456789'
-as_cr_alnum=$as_cr_Letters$as_cr_digits
-
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
-  echo "#! /bin/sh" >conf$$.sh
-  echo  "exit 0"   >>conf$$.sh
-  chmod +x conf$$.sh
-  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
-    PATH_SEPARATOR=';'
-  else
-    PATH_SEPARATOR=:
-  fi
-  rm -f conf$$.sh
-fi
-
-
-  as_lineno_1=$LINENO
-  as_lineno_2=$LINENO
-  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
-  test "x$as_lineno_1" != "x$as_lineno_2" &&
-  test "x$as_lineno_3"  = "x$as_lineno_2"  || {
-  # Find who we are.  Look in the path if we contain no path at all
-  # relative or not.
-  case $0 in
-    *[\\/]* ) as_myself=$0 ;;
-    *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
-done
-
-       ;;
-  esac
-  # We did not find ourselves, most probably we were run as `sh COMMAND'
-  # in which case we are not to be found in the path.
-  if test "x$as_myself" = x; then
-    as_myself=$0
-  fi
-  if test ! -f "$as_myself"; then
-    { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5
-echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;}
-   { (exit 1); exit 1; }; }
-  fi
-  case $CONFIG_SHELL in
-  '')
-    as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for as_base in sh bash ksh sh5; do
-	 case $as_dir in
-	 /*)
-	   if ("$as_dir/$as_base" -c '
-  as_lineno_1=$LINENO
-  as_lineno_2=$LINENO
-  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
-  test "x$as_lineno_1" != "x$as_lineno_2" &&
-  test "x$as_lineno_3"  = "x$as_lineno_2" ') 2>/dev/null; then
-	     $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
-	     $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
-	     CONFIG_SHELL=$as_dir/$as_base
-	     export CONFIG_SHELL
-	     exec "$CONFIG_SHELL" "$0" ${1+"$@"}
-	   fi;;
-	 esac
-       done
-done
-;;
-  esac
-
-  # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
-  # uniformly replaced by the line number.  The first 'sed' inserts a
-  # line-number line before each line; the second 'sed' does the real
-  # work.  The second script uses 'N' to pair each line-number line
-  # with the numbered line, and appends trailing '-' during
-  # substitution so that $LINENO is not a special case at line end.
-  # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
-  # second 'sed' script.  Blame Lee E. McMahon for sed's syntax.  :-)
-  sed '=' <$as_myself |
-    sed '
-      N
-      s,$,-,
-      : loop
-      s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
-      t loop
-      s,-$,,
-      s,^['$as_cr_digits']*\n,,
-    ' >$as_me.lineno &&
-  chmod +x $as_me.lineno ||
-    { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5
-echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;}
-   { (exit 1); exit 1; }; }
-
-  # Don't try to exec as it changes $[0], causing all sort of problems
-  # (the dirname of $[0] is not the place where we might find the
-  # original and so on.  Autoconf is especially sensible to this).
-  . ./$as_me.lineno
-  # Exit status is that of the last command.
-  exit
-}
-
-
-case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
-  *c*,-n*) ECHO_N= ECHO_C='
-' ECHO_T='	' ;;
-  *c*,*  ) ECHO_N=-n ECHO_C= ECHO_T= ;;
-  *)       ECHO_N= ECHO_C='\c' ECHO_T= ;;
-esac
-
-if expr a : '\(a\)' >/dev/null 2>&1; then
-  as_expr=expr
-else
-  as_expr=false
-fi
-
-rm -f conf$$ conf$$.exe conf$$.file
-echo >conf$$.file
-if ln -s conf$$.file conf$$ 2>/dev/null; then
-  # We could just check for DJGPP; but this test a) works b) is more generic
-  # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
-  if test -f conf$$.exe; then
-    # Don't use ln at all; we don't have any links
-    as_ln_s='cp -p'
-  else
-    as_ln_s='ln -s'
-  fi
-elif ln conf$$.file conf$$ 2>/dev/null; then
-  as_ln_s=ln
-else
-  as_ln_s='cp -p'
-fi
-rm -f conf$$ conf$$.exe conf$$.file
-
-if mkdir -p . 2>/dev/null; then
-  as_mkdir_p=:
-else
-  test -d ./-p && rmdir ./-p
-  as_mkdir_p=false
-fi
-
-as_executable_p="test -f"
-
-# Sed expression to map a string onto a valid CPP name.
-as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
-
-# Sed expression to map a string onto a valid variable name.
-as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
-
-
-# IFS
-# We need space, tab and new line, in precisely that order.
-as_nl='
-'
-IFS=" 	$as_nl"
-
-# CDPATH.
-$as_unset CDPATH
-
-exec 6>&1
-
-# Open the log real soon, to keep \$[0] and so on meaningful, and to
-# report actual input values of CONFIG_FILES etc. instead of their
-# values after options handling.  Logging --version etc. is OK.
-exec 5>>config.log
-{
-  echo
-  sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
-## Running $as_me. ##
-_ASBOX
-} >&5
-cat >&5 <<_CSEOF
-
-This file was extended by $as_me, which was
-generated by GNU Autoconf 2.59.  Invocation command line was
-
-  CONFIG_FILES    = $CONFIG_FILES
-  CONFIG_HEADERS  = $CONFIG_HEADERS
-  CONFIG_LINKS    = $CONFIG_LINKS
-  CONFIG_COMMANDS = $CONFIG_COMMANDS
-  $ $0 $@
-
-_CSEOF
-echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5
-echo >&5
-_ACEOF
-
-# Files that config.status was made for.
-if test -n "$ac_config_files"; then
-  echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS
-fi
-
-if test -n "$ac_config_headers"; then
-  echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS
-fi
-
-if test -n "$ac_config_links"; then
-  echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS
-fi
-
-if test -n "$ac_config_commands"; then
-  echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS
-fi
-
-cat >>$CONFIG_STATUS <<\_ACEOF
-
-ac_cs_usage="\
-\`$as_me' instantiates files from templates according to the
-current configuration.
-
-Usage: $0 [OPTIONS] [FILE]...
-
-  -h, --help       print this help, then exit
-  -V, --version    print version number, then exit
-  -q, --quiet      do not print progress messages
-  -d, --debug      don't remove temporary files
-      --recheck    update $as_me by reconfiguring in the same conditions
-  --file=FILE[:TEMPLATE]
-		   instantiate the configuration file FILE
-  --header=FILE[:TEMPLATE]
-		   instantiate the configuration header FILE
-
-Configuration files:
-$config_files
-
-Configuration headers:
-$config_headers
-
-Report bugs to <bug-autoconf@gnu.org>."
-_ACEOF
-
-cat >>$CONFIG_STATUS <<_ACEOF
-ac_cs_version="\\
-config.status
-configured by $0, generated by GNU Autoconf 2.59,
-  with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
-
-Copyright (C) 2003 Free Software Foundation, Inc.
-This config.status script is free software; the Free Software Foundation
-gives unlimited permission to copy, distribute and modify it."
-srcdir=$srcdir
-INSTALL="$INSTALL"
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF
-# If no file are specified by the user, then we need to provide default
-# value.  By we need to know if files were specified by the user.
-ac_need_defaults=:
-while test $# != 0
-do
-  case $1 in
-  --*=*)
-    ac_option=`expr "x$1" : 'x\([^=]*\)='`
-    ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'`
-    ac_shift=:
-    ;;
-  -*)
-    ac_option=$1
-    ac_optarg=$2
-    ac_shift=shift
-    ;;
-  *) # This is not an option, so the user has probably given explicit
-     # arguments.
-     ac_option=$1
-     ac_need_defaults=false;;
-  esac
-
-  case $ac_option in
-  # Handling of the options.
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF
-  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
-    ac_cs_recheck=: ;;
-  --version | --vers* | -V )
-    echo "$ac_cs_version"; exit 0 ;;
-  --he | --h)
-    # Conflict between --help and --header
-    { { echo "$as_me:$LINENO: error: ambiguous option: $1
-Try \`$0 --help' for more information." >&5
-echo "$as_me: error: ambiguous option: $1
-Try \`$0 --help' for more information." >&2;}
-   { (exit 1); exit 1; }; };;
-  --help | --hel | -h )
-    echo "$ac_cs_usage"; exit 0 ;;
-  --debug | --d* | -d )
-    debug=: ;;
-  --file | --fil | --fi | --f )
-    $ac_shift
-    CONFIG_FILES="$CONFIG_FILES $ac_optarg"
-    ac_need_defaults=false;;
-  --header | --heade | --head | --hea )
-    $ac_shift
-    CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg"
-    ac_need_defaults=false;;
-  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
-  | -silent | --silent | --silen | --sile | --sil | --si | --s)
-    ac_cs_silent=: ;;
-
-  # This is an error.
-  -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1
-Try \`$0 --help' for more information." >&5
-echo "$as_me: error: unrecognized option: $1
-Try \`$0 --help' for more information." >&2;}
-   { (exit 1); exit 1; }; } ;;
-
-  *) ac_config_targets="$ac_config_targets $1" ;;
-
-  esac
-  shift
-done
-
-ac_configure_extra_args=
-
-if $ac_cs_silent; then
-  exec 6>/dev/null
-  ac_configure_extra_args="$ac_configure_extra_args --silent"
-fi
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF
-if \$ac_cs_recheck; then
-  echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6
-  exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
-fi
-
-_ACEOF
-
-
-
-
-
-cat >>$CONFIG_STATUS <<\_ACEOF
-for ac_config_target in $ac_config_targets
-do
-  case "$ac_config_target" in
-  # Handling of arguments.
-  "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;;
-  "cil.spec" ) CONFIG_FILES="$CONFIG_FILES cil.spec" ;;
-  "config.mk" ) CONFIG_FILES="$CONFIG_FILES config.mk" ;;
-  "test/Makefile" ) CONFIG_FILES="$CONFIG_FILES test/Makefile" ;;
-  "bin/cilly.bat" ) CONFIG_FILES="$CONFIG_FILES bin/cilly.bat" ;;
-  "bin/patcher.bat" ) CONFIG_FILES="$CONFIG_FILES bin/patcher.bat" ;;
-  "bin/CilConfig.pm" ) CONFIG_FILES="$CONFIG_FILES bin/CilConfig.pm" ;;
-  "doc/index.html" ) CONFIG_FILES="$CONFIG_FILES doc/index.html" ;;
-  "doc/header.html" ) CONFIG_FILES="$CONFIG_FILES doc/header.html" ;;
-  "ocamlutil/perfcount.c" ) CONFIG_FILES="$CONFIG_FILES ocamlutil/perfcount.c" ;;
-  "config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;;
-  *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
-echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
-   { (exit 1); exit 1; }; };;
-  esac
-done
-
-# If the user did not use the arguments to specify the items to instantiate,
-# then the envvar interface is used.  Set only those that are not.
-# We use the long form for the default assignment because of an extremely
-# bizarre bug on SunOS 4.1.3.
-if $ac_need_defaults; then
-  test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
-  test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
-fi
-
-# Have a temporary directory for convenience.  Make it in the build tree
-# simply because there is no reason to put it here, and in addition,
-# creating and moving files from /tmp can sometimes cause problems.
-# Create a temporary directory, and hook for its removal unless debugging.
-$debug ||
-{
-  trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0
-  trap '{ (exit 1); exit 1; }' 1 2 13 15
-}
-
-# Create a (secure) tmp directory for tmp files.
-
-{
-  tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` &&
-  test -n "$tmp" && test -d "$tmp"
-}  ||
-{
-  tmp=./confstat$$-$RANDOM
-  (umask 077 && mkdir $tmp)
-} ||
-{
-   echo "$me: cannot create a temporary directory in ." >&2
-   { (exit 1); exit 1; }
-}
-
-_ACEOF
-
-cat >>$CONFIG_STATUS <<_ACEOF
-
-#
-# CONFIG_FILES section.
-#
-
-# No need to generate the scripts if there are no CONFIG_FILES.
-# This happens for instance when ./config.status config.h
-if test -n "\$CONFIG_FILES"; then
-  # Protect against being on the right side of a sed subst in config.status.
-  sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g;
-   s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF
-s,@CIL_FEATURES_DEFINES@,$CIL_FEATURES_DEFINES,;t t
-s,@NEWLINE@,$NEWLINE,;t t
-s,@SHELL@,$SHELL,;t t
-s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t
-s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t
-s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t
-s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t
-s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t
-s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t
-s,@exec_prefix@,$exec_prefix,;t t
-s,@prefix@,$prefix,;t t
-s,@program_transform_name@,$program_transform_name,;t t
-s,@bindir@,$bindir,;t t
-s,@sbindir@,$sbindir,;t t
-s,@libexecdir@,$libexecdir,;t t
-s,@datadir@,$datadir,;t t
-s,@sysconfdir@,$sysconfdir,;t t
-s,@sharedstatedir@,$sharedstatedir,;t t
-s,@localstatedir@,$localstatedir,;t t
-s,@libdir@,$libdir,;t t
-s,@includedir@,$includedir,;t t
-s,@oldincludedir@,$oldincludedir,;t t
-s,@infodir@,$infodir,;t t
-s,@mandir@,$mandir,;t t
-s,@build_alias@,$build_alias,;t t
-s,@host_alias@,$host_alias,;t t
-s,@target_alias@,$target_alias,;t t
-s,@DEFS@,$DEFS,;t t
-s,@ECHO_C@,$ECHO_C,;t t
-s,@ECHO_N@,$ECHO_N,;t t
-s,@ECHO_T@,$ECHO_T,;t t
-s,@LIBS@,$LIBS,;t t
-s,@CC@,$CC,;t t
-s,@CFLAGS@,$CFLAGS,;t t
-s,@LDFLAGS@,$LDFLAGS,;t t
-s,@CPPFLAGS@,$CPPFLAGS,;t t
-s,@ac_ct_CC@,$ac_ct_CC,;t t
-s,@EXEEXT@,$EXEEXT,;t t
-s,@OBJEXT@,$OBJEXT,;t t
-s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t
-s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t
-s,@INSTALL_DATA@,$INSTALL_DATA,;t t
-s,@build@,$build,;t t
-s,@build_cpu@,$build_cpu,;t t
-s,@build_vendor@,$build_vendor,;t t
-s,@build_os@,$build_os,;t t
-s,@host@,$host,;t t
-s,@host_cpu@,$host_cpu,;t t
-s,@host_vendor@,$host_vendor,;t t
-s,@host_os@,$host_os,;t t
-s,@target@,$target,;t t
-s,@target_cpu@,$target_cpu,;t t
-s,@target_vendor@,$target_vendor,;t t
-s,@target_os@,$target_os,;t t
-s,@CPP@,$CPP,;t t
-s,@EGREP@,$EGREP,;t t
-s,@LIBOBJS@,$LIBOBJS,;t t
-s,@ARCHOS@,$ARCHOS,;t t
-s,@CILHOME@,$CILHOME,;t t
-s,@HAS_MSVC@,$HAS_MSVC,;t t
-s,@DEFAULT_COMPILER@,$DEFAULT_COMPILER,;t t
-s,@DEFAULT_CIL_MODE@,$DEFAULT_CIL_MODE,;t t
-s,@CIL_VERSION_MAJOR@,$CIL_VERSION_MAJOR,;t t
-s,@CIL_VERSION_MINOR@,$CIL_VERSION_MINOR,;t t
-s,@CIL_VERSION_REV@,$CIL_VERSION_REV,;t t
-s,@CIL_VERSION@,$CIL_VERSION,;t t
-s,@CYCLES_PER_USEC@,$CYCLES_PER_USEC,;t t
-s,@HAS_PERFCOUNT@,$HAS_PERFCOUNT,;t t
-s,@HAVE_BUILTIN_VA_LIST@,$HAVE_BUILTIN_VA_LIST,;t t
-s,@THREAD_IS_KEYWORD@,$THREAD_IS_KEYWORD,;t t
-s,@UNDERSCORE_NAME@,$UNDERSCORE_NAME,;t t
-s,@EXTRAFEATURES@,$EXTRAFEATURES,;t t
-s,@EXTRASRCDIRS@,$EXTRASRCDIRS,;t t
-s,@LTLIBOBJS@,$LTLIBOBJS,;t t
-CEOF
-
-_ACEOF
-
-  cat >>$CONFIG_STATUS <<\_ACEOF
-  # Split the substitutions into bite-sized pieces for seds with
-  # small command number limits, like on Digital OSF/1 and HP-UX.
-  ac_max_sed_lines=48
-  ac_sed_frag=1 # Number of current file.
-  ac_beg=1 # First line for current file.
-  ac_end=$ac_max_sed_lines # Line after last line for current file.
-  ac_more_lines=:
-  ac_sed_cmds=
-  while $ac_more_lines; do
-    if test $ac_beg -gt 1; then
-      sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
-    else
-      sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
-    fi
-    if test ! -s $tmp/subs.frag; then
-      ac_more_lines=false
-    else
-      # The purpose of the label and of the branching condition is to
-      # speed up the sed processing (if there are no `@' at all, there
-      # is no need to browse any of the substitutions).
-      # These are the two extra sed commands mentioned above.
-      (echo ':t
-  /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed
-      if test -z "$ac_sed_cmds"; then
-	ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed"
-      else
-	ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed"
-      fi
-      ac_sed_frag=`expr $ac_sed_frag + 1`
-      ac_beg=$ac_end
-      ac_end=`expr $ac_end + $ac_max_sed_lines`
-    fi
-  done
-  if test -z "$ac_sed_cmds"; then
-    ac_sed_cmds=cat
-  fi
-fi # test -n "$CONFIG_FILES"
-
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF
-for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue
-  # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
-  case $ac_file in
-  - | *:- | *:-:* ) # input from stdin
-	cat >$tmp/stdin
-	ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
-	ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
-  *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
-	ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
-  * )   ac_file_in=$ac_file.in ;;
-  esac
-
-  # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories.
-  ac_dir=`(dirname "$ac_file") 2>/dev/null ||
-$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X"$ac_file" : 'X\(//\)[^/]' \| \
-	 X"$ac_file" : 'X\(//\)$' \| \
-	 X"$ac_file" : 'X\(/\)' \| \
-	 .     : '\(.\)' 2>/dev/null ||
-echo X"$ac_file" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
-  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
-  	  /^X\(\/\/\)$/{ s//\1/; q; }
-  	  /^X\(\/\).*/{ s//\1/; q; }
-  	  s/.*/./; q'`
-  { if $as_mkdir_p; then
-    mkdir -p "$ac_dir"
-  else
-    as_dir="$ac_dir"
-    as_dirs=
-    while test ! -d "$as_dir"; do
-      as_dirs="$as_dir $as_dirs"
-      as_dir=`(dirname "$as_dir") 2>/dev/null ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X"$as_dir" : 'X\(//\)[^/]' \| \
-	 X"$as_dir" : 'X\(//\)$' \| \
-	 X"$as_dir" : 'X\(/\)' \| \
-	 .     : '\(.\)' 2>/dev/null ||
-echo X"$as_dir" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
-  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
-  	  /^X\(\/\/\)$/{ s//\1/; q; }
-  	  /^X\(\/\).*/{ s//\1/; q; }
-  	  s/.*/./; q'`
-    done
-    test ! -n "$as_dirs" || mkdir $as_dirs
-  fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
-echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
-   { (exit 1); exit 1; }; }; }
-
-  ac_builddir=.
-
-if test "$ac_dir" != .; then
-  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
-  # A "../" for each directory in $ac_dir_suffix.
-  ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
-else
-  ac_dir_suffix= ac_top_builddir=
-fi
-
-case $srcdir in
-  .)  # No --srcdir option.  We are building in place.
-    ac_srcdir=.
-    if test -z "$ac_top_builddir"; then
-       ac_top_srcdir=.
-    else
-       ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
-    fi ;;
-  [\\/]* | ?:[\\/]* )  # Absolute path.
-    ac_srcdir=$srcdir$ac_dir_suffix;
-    ac_top_srcdir=$srcdir ;;
-  *) # Relative path.
-    ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
-    ac_top_srcdir=$ac_top_builddir$srcdir ;;
-esac
-
-# Do not use `cd foo && pwd` to compute absolute paths, because
-# the directories may not exist.
-case `pwd` in
-.) ac_abs_builddir="$ac_dir";;
-*)
-  case "$ac_dir" in
-  .) ac_abs_builddir=`pwd`;;
-  [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
-  *) ac_abs_builddir=`pwd`/"$ac_dir";;
-  esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_top_builddir=${ac_top_builddir}.;;
-*)
-  case ${ac_top_builddir}. in
-  .) ac_abs_top_builddir=$ac_abs_builddir;;
-  [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
-  *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
-  esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_srcdir=$ac_srcdir;;
-*)
-  case $ac_srcdir in
-  .) ac_abs_srcdir=$ac_abs_builddir;;
-  [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
-  *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
-  esac;;
-esac
-case $ac_abs_builddir in
-.) ac_abs_top_srcdir=$ac_top_srcdir;;
-*)
-  case $ac_top_srcdir in
-  .) ac_abs_top_srcdir=$ac_abs_builddir;;
-  [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
-  *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
-  esac;;
-esac
-
-
-  case $INSTALL in
-  [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
-  *) ac_INSTALL=$ac_top_builddir$INSTALL ;;
-  esac
-
-  if test x"$ac_file" != x-; then
-    { echo "$as_me:$LINENO: creating $ac_file" >&5
-echo "$as_me: creating $ac_file" >&6;}
-    rm -f "$ac_file"
-  fi
-  # Let's still pretend it is `configure' which instantiates (i.e., don't
-  # use $as_me), people would be surprised to read:
-  #    /* config.h.  Generated by config.status.  */
-  if test x"$ac_file" = x-; then
-    configure_input=
-  else
-    configure_input="$ac_file.  "
-  fi
-  configure_input=$configure_input"Generated from `echo $ac_file_in |
-				     sed 's,.*/,,'` by configure."
-
-  # First look for the input files in the build tree, otherwise in the
-  # src tree.
-  ac_file_inputs=`IFS=:
-    for f in $ac_file_in; do
-      case $f in
-      -) echo $tmp/stdin ;;
-      [\\/$]*)
-	 # Absolute (can't be DOS-style, as IFS=:)
-	 test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
-echo "$as_me: error: cannot find input file: $f" >&2;}
-   { (exit 1); exit 1; }; }
-	 echo "$f";;
-      *) # Relative
-	 if test -f "$f"; then
-	   # Build tree
-	   echo "$f"
-	 elif test -f "$srcdir/$f"; then
-	   # Source tree
-	   echo "$srcdir/$f"
-	 else
-	   # /dev/null tree
-	   { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
-echo "$as_me: error: cannot find input file: $f" >&2;}
-   { (exit 1); exit 1; }; }
-	 fi;;
-      esac
-    done` || { (exit 1); exit 1; }
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF
-  sed "$ac_vpsub
-$extrasub
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF
-:t
-/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
-s,@configure_input@,$configure_input,;t t
-s,@srcdir@,$ac_srcdir,;t t
-s,@abs_srcdir@,$ac_abs_srcdir,;t t
-s,@top_srcdir@,$ac_top_srcdir,;t t
-s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t
-s,@builddir@,$ac_builddir,;t t
-s,@abs_builddir@,$ac_abs_builddir,;t t
-s,@top_builddir@,$ac_top_builddir,;t t
-s,@abs_top_builddir@,$ac_abs_top_builddir,;t t
-s,@INSTALL@,$ac_INSTALL,;t t
-" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out
-  rm -f $tmp/stdin
-  if test x"$ac_file" != x-; then
-    mv $tmp/out $ac_file
-  else
-    cat $tmp/out
-    rm -f $tmp/out
-  fi
-
-  # Run the commands associated with the file.
-  case $ac_file in
-    Makefile ) chmod a-w Makefile ;;
-    cil.spec ) chmod a-w cil.spec ;;
-    config.mk ) chmod a-w config.mk ;;
-    test/Makefile ) chmod a-w test/Makefile ;;
-    bin/cilly.bat ) chmod a-w,a+x bin/cilly.bat ;;
-    bin/patcher.bat ) chmod a-w,a+x bin/patcher.bat ;;
-    bin/CilConfig.pm ) chmod a-w bin/CilConfig.pm ;;
-    doc/index.html ) chmod a-w doc/index.html ;;
-    doc/header.html ) chmod a-w doc/header.html ;;
-    ocamlutil/perfcount.c ) chmod a-w ocamlutil/perfcount.c ;;
-  esac
-done
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF
-
-#
-# CONFIG_HEADER section.
-#
-
-# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where
-# NAME is the cpp macro being defined and VALUE is the value it is being given.
-#
-# ac_d sets the value in "#define NAME VALUE" lines.
-ac_dA='s,^\([	 ]*\)#\([	 ]*define[	 ][	 ]*\)'
-ac_dB='[	 ].*$,\1#\2'
-ac_dC=' '
-ac_dD=',;t'
-# ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
-ac_uA='s,^\([	 ]*\)#\([	 ]*\)undef\([	 ][	 ]*\)'
-ac_uB='$,\1#\2define\3'
-ac_uC=' '
-ac_uD=',;t'
-
-for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue
-  # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
-  case $ac_file in
-  - | *:- | *:-:* ) # input from stdin
-	cat >$tmp/stdin
-	ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
-	ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
-  *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
-	ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
-  * )   ac_file_in=$ac_file.in ;;
-  esac
-
-  test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5
-echo "$as_me: creating $ac_file" >&6;}
-
-  # First look for the input files in the build tree, otherwise in the
-  # src tree.
-  ac_file_inputs=`IFS=:
-    for f in $ac_file_in; do
-      case $f in
-      -) echo $tmp/stdin ;;
-      [\\/$]*)
-	 # Absolute (can't be DOS-style, as IFS=:)
-	 test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
-echo "$as_me: error: cannot find input file: $f" >&2;}
-   { (exit 1); exit 1; }; }
-	 # Do quote $f, to prevent DOS paths from being IFS'd.
-	 echo "$f";;
-      *) # Relative
-	 if test -f "$f"; then
-	   # Build tree
-	   echo "$f"
-	 elif test -f "$srcdir/$f"; then
-	   # Source tree
-	   echo "$srcdir/$f"
-	 else
-	   # /dev/null tree
-	   { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
-echo "$as_me: error: cannot find input file: $f" >&2;}
-   { (exit 1); exit 1; }; }
-	 fi;;
-      esac
-    done` || { (exit 1); exit 1; }
-  # Remove the trailing spaces.
-  sed 's/[	 ]*$//' $ac_file_inputs >$tmp/in
-
-_ACEOF
-
-# Transform confdefs.h into two sed scripts, `conftest.defines' and
-# `conftest.undefs', that substitutes the proper values into
-# config.h.in to produce config.h.  The first handles `#define'
-# templates, and the second `#undef' templates.
-# And first: Protect against being on the right side of a sed subst in
-# config.status.  Protect against being in an unquoted here document
-# in config.status.
-rm -f conftest.defines conftest.undefs
-# Using a here document instead of a string reduces the quoting nightmare.
-# Putting comments in sed scripts is not portable.
-#
-# `end' is used to avoid that the second main sed command (meant for
-# 0-ary CPP macros) applies to n-ary macro definitions.
-# See the Autoconf documentation for `clear'.
-cat >confdef2sed.sed <<\_ACEOF
-s/[\\&,]/\\&/g
-s,[\\$`],\\&,g
-t clear
-: clear
-s,^[	 ]*#[	 ]*define[	 ][	 ]*\([^	 (][^	 (]*\)\(([^)]*)\)[	 ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp
-t end
-s,^[	 ]*#[	 ]*define[	 ][	 ]*\([^	 ][^	 ]*\)[	 ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp
-: end
-_ACEOF
-# If some macros were called several times there might be several times
-# the same #defines, which is useless.  Nevertheless, we may not want to
-# sort them, since we want the *last* AC-DEFINE to be honored.
-uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines
-sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs
-rm -f confdef2sed.sed
-
-# This sed command replaces #undef with comments.  This is necessary, for
-# example, in the case of _POSIX_SOURCE, which is predefined and required
-# on some systems where configure will not decide to define it.
-cat >>conftest.undefs <<\_ACEOF
-s,^[	 ]*#[	 ]*undef[	 ][	 ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */,
-_ACEOF
-
-# Break up conftest.defines because some shells have a limit on the size
-# of here documents, and old seds have small limits too (100 cmds).
-echo '  # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS
-echo '  if grep "^[	 ]*#[	 ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS
-echo '  # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS
-echo '  :' >>$CONFIG_STATUS
-rm -f conftest.tail
-while grep . conftest.defines >/dev/null
-do
-  # Write a limited-size here document to $tmp/defines.sed.
-  echo '  cat >$tmp/defines.sed <<CEOF' >>$CONFIG_STATUS
-  # Speed up: don't consider the non `#define' lines.
-  echo '/^[	 ]*#[	 ]*define/!b' >>$CONFIG_STATUS
-  # Work around the forget-to-reset-the-flag bug.
-  echo 't clr' >>$CONFIG_STATUS
-  echo ': clr' >>$CONFIG_STATUS
-  sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS
-  echo 'CEOF
-  sed -f $tmp/defines.sed $tmp/in >$tmp/out
-  rm -f $tmp/in
-  mv $tmp/out $tmp/in
-' >>$CONFIG_STATUS
-  sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail
-  rm -f conftest.defines
-  mv conftest.tail conftest.defines
-done
-rm -f conftest.defines
-echo '  fi # grep' >>$CONFIG_STATUS
-echo >>$CONFIG_STATUS
-
-# Break up conftest.undefs because some shells have a limit on the size
-# of here documents, and old seds have small limits too (100 cmds).
-echo '  # Handle all the #undef templates' >>$CONFIG_STATUS
-rm -f conftest.tail
-while grep . conftest.undefs >/dev/null
-do
-  # Write a limited-size here document to $tmp/undefs.sed.
-  echo '  cat >$tmp/undefs.sed <<CEOF' >>$CONFIG_STATUS
-  # Speed up: don't consider the non `#undef'
-  echo '/^[	 ]*#[	 ]*undef/!b' >>$CONFIG_STATUS
-  # Work around the forget-to-reset-the-flag bug.
-  echo 't clr' >>$CONFIG_STATUS
-  echo ': clr' >>$CONFIG_STATUS
-  sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS
-  echo 'CEOF
-  sed -f $tmp/undefs.sed $tmp/in >$tmp/out
-  rm -f $tmp/in
-  mv $tmp/out $tmp/in
-' >>$CONFIG_STATUS
-  sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail
-  rm -f conftest.undefs
-  mv conftest.tail conftest.undefs
-done
-rm -f conftest.undefs
-
-cat >>$CONFIG_STATUS <<\_ACEOF
-  # Let's still pretend it is `configure' which instantiates (i.e., don't
-  # use $as_me), people would be surprised to read:
-  #    /* config.h.  Generated by config.status.  */
-  if test x"$ac_file" = x-; then
-    echo "/* Generated by configure.  */" >$tmp/config.h
-  else
-    echo "/* $ac_file.  Generated by configure.  */" >$tmp/config.h
-  fi
-  cat $tmp/in >>$tmp/config.h
-  rm -f $tmp/in
-  if test x"$ac_file" != x-; then
-    if diff $ac_file $tmp/config.h >/dev/null 2>&1; then
-      { echo "$as_me:$LINENO: $ac_file is unchanged" >&5
-echo "$as_me: $ac_file is unchanged" >&6;}
-    else
-      ac_dir=`(dirname "$ac_file") 2>/dev/null ||
-$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X"$ac_file" : 'X\(//\)[^/]' \| \
-	 X"$ac_file" : 'X\(//\)$' \| \
-	 X"$ac_file" : 'X\(/\)' \| \
-	 .     : '\(.\)' 2>/dev/null ||
-echo X"$ac_file" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
-  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
-  	  /^X\(\/\/\)$/{ s//\1/; q; }
-  	  /^X\(\/\).*/{ s//\1/; q; }
-  	  s/.*/./; q'`
-      { if $as_mkdir_p; then
-    mkdir -p "$ac_dir"
-  else
-    as_dir="$ac_dir"
-    as_dirs=
-    while test ! -d "$as_dir"; do
-      as_dirs="$as_dir $as_dirs"
-      as_dir=`(dirname "$as_dir") 2>/dev/null ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X"$as_dir" : 'X\(//\)[^/]' \| \
-	 X"$as_dir" : 'X\(//\)$' \| \
-	 X"$as_dir" : 'X\(/\)' \| \
-	 .     : '\(.\)' 2>/dev/null ||
-echo X"$as_dir" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
-  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
-  	  /^X\(\/\/\)$/{ s//\1/; q; }
-  	  /^X\(\/\).*/{ s//\1/; q; }
-  	  s/.*/./; q'`
-    done
-    test ! -n "$as_dirs" || mkdir $as_dirs
-  fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
-echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
-   { (exit 1); exit 1; }; }; }
-
-      rm -f $ac_file
-      mv $tmp/config.h $ac_file
-    fi
-  else
-    cat $tmp/config.h
-    rm -f $tmp/config.h
-  fi
-done
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF
-
-{ (exit 0); exit 0; }
-_ACEOF
-chmod +x $CONFIG_STATUS
-ac_clean_files=$ac_clean_files_save
-
-
-# configure is writing to config.log, and then calls config.status.
-# config.status does its own redirection, appending to config.log.
-# Unfortunately, on DOS this fails, as config.log is still kept open
-# by configure, so config.status won't be able to write to it; its
-# output is simply discarded.  So we exec the FD to /dev/null,
-# effectively closing config.log, so it can be properly (re)opened and
-# appended to by config.status.  When coming back to configure, we
-# need to make the FD available again.
-if test "$no_create" != yes; then
-  ac_cs_success=:
-  ac_config_status_args=
-  test "$silent" = yes &&
-    ac_config_status_args="$ac_config_status_args --quiet"
-  exec 5>/dev/null
-  $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
-  exec 5>>config.log
-  # Use ||, not &&, to avoid exiting from the if with $? = 1, which
-  # would make configure fail if this is the last instruction.
-  $ac_cs_success || { (exit 1); exit 1; }
-fi
-
-
-# show the user what the variables have been set to
-cat <<EOF
-
-CIL configuration:
-  architecture/OS:            ARCHOS             $ARCHOS
-  source tree root:           CILHOME            $CILHOME
-  (optional) cl.exe found:    HAS_MSVC           $HAS_MSVC
-  gcc to use                  CC                 $CC
-  default compiler            DEFAULT_COMPILER   $DEFAULT_COMPILER
-  CIL version                 CIL_VERSION        $CIL_VERSION
-  CIL features                CIL_FEATURES       $CIL_FEATURES
-  Extra source directories    EXTRASRCDIRS       $EXTRASRCDIRS
-  Cycles per microsecond      CYCLES_PER_USEC    $CYCLES_PER_USEC
-EOF
-
diff --git a/cil/configure.in b/cil/configure.in
deleted file mode 100644
index aee7ac73d..000000000
--- a/cil/configure.in
+++ /dev/null
@@ -1,600 +0,0 @@
-# configure.in for CIL           -*- sh -*-
-# Process this file with autoconf to produce a configure script.
-
-# Autoconf runs this through the M4 macroprocessor first; lines
-# starting with "dnl" are comments to M4.  The result is a bash
-# script; any text which isn't an M4/autoconf directive gets
-# copied verbatim to that script.
-
-# also, in general, watch out: the M4 quoting charactes are
-# the square brackets: [ and ].  if you want to pass brackets
-# to something, you can quote the brackets with more brackets.
-# I don't know how to pass a single (unbalanced) bracket ..
-
-# sm: changed this file to use '#' for comments, since that's
-# just as good (since this becomes an 'sh' script)
-
-
-# We must put these AC_SUBST very early, and in this order. See below where we
-# define NEWLINE
-AC_SUBST(CIL_FEATURES_DEFINES) 
-AC_SUBST(NEWLINE)
-
-
-# -------------- usual initial stuff -------------
-# this simply names a file somewhere in the source tree to verify
-# we're in the right directory
-AC_INIT(src/cil.mli)
-AC_CONFIG_HEADERS(config.h)
-
-# sm: require a late-enough autoconf; this is the version number
-# that's on manju, so I assume it's ok
-AC_PREREQ(2.50)
-
-#
-# Assign here the CIL version numbers
-CIL_VERSION_MAJOR=1
-CIL_VERSION_MINOR=3
-CIL_VERSION_REV=5
-CIL_VERSION=$CIL_VERSION_MAJOR.$CIL_VERSION_MINOR.$CIL_VERSION_REV
-
-
-# make sure I haven't forgotten to run autoconf
-if test configure -ot configure.in; then
-  AC_MSG_ERROR(configure is older than configure.in; you forgot to run autoconf)
-fi
-
-# check for C compiler; this typically finds gcc; it sets the
-# variable CC to whatever it finds, which then gets substituted
-# for @CC@ in output files; you have to do this even if you don't
-# care about @CC@, because system feature tests later on in
-# the ./configure script will expect $CC to be set right
-AC_PROG_CC
-
-AC_PROG_INSTALL
-
-
-# find system type (using this macro means we must include
-# the files install-sh, config.sub, and config.guess (all from
-# the autoconf distribution) in our source tree!)
-AC_CANONICAL_SYSTEM
-
-
-# ---------------- generic functions -----------------
-# debugging diagnostic; set to 'echo' to debug or 'true' for production
-# (technically you're not supposed to use shell functions in
-# configure scripts, because some-obscure-sh somewhere doesn't
-# support them.. but they're too convenient to not use)
-diagnostic() {
-  #echo "$@"
-  true "$@"
-}
-
-# determine if a binary is in the path
-binaryExists() {
-  # on cygwin, 'which' always returns success, so use 'type' instead
-  if type "$1" >/dev/null 2>&1; then
-    return 0
-  else
-    return 1
-  fi
-}
-
-
-# -------------- portable configuration ----------------
-# this specifies the root of the source tree; it's just the
-# directory where ./configure runs, except on cygwin, which
-# overrides this below
-CILHOME=`pwd`
-
-DEFAULT_COMPILER=_GNUCC
-DEFAULT_CIL_MODE=GNUCC
-
-# is the microsoft compiler available?
-# hmm.. I think we should check the version or something, because
-# sometimes people have Common Lisp's interpreter called 'cl' ..
-AC_MSG_CHECKING(for msvc cl.exe (optional))
-# See if CC points to the MS compiler
-if "$CC" 2>&1 | grep "Microsoft" >/dev/null; then 
-  AC_MSG_RESULT([found, set as default])
-  HAS_MSVC=yes
-  DEFAULT_COMPILER=_MSVC
-  DEFAULT_CIL_MODE=MSVC
-else
-  if cl 2>&1 | grep "Microsoft" >/dev/null ;then
-     AC_MSG_RESULT(found)
-     HAS_MSVC=yes
-  else
-     AC_MSG_RESULT(not found)
-     HAS_MSVC=no
-  fi
-fi
-
-# is ocaml available?
-# needed binaries: ocamllex ocamlyacc ocamldep ocamlopt ocamlc
-ocamlDownloadInstructions="
-      OCaml can be downloaded from http://caml.inria.fr/ocaml/.
-      After downloading and unpacking the source distribution, in the ocaml
-      directory, do
-        ./configure
-        make world
-        make opt
-        make install
-      Then come back here and re-run ./configure."
-
-# required major/minor. 
-# required major/minor
-reqMaj=3
-reqMin=08
-knownMaj=3
-knownMin=09
-AC_MSG_CHECKING(ocaml version is at least $reqMaj.$reqMin)
-if binaryExists ocamlc; then
-  # what version?
-  ver=`ocamlc -v | grep version | sed 's/^.*version //'`
-  diagnostic "ver is $ver"
-  # major: anything before the .
-  major=`echo $ver | sed 's/\..*$//'`
-  diagnostic "major is $major"
-  # minor: numbers after the .
-  # (the outer level of bracket-quotation protects the inner brackets)
-  [minor=`echo $ver | sed 's/^[^.]*\.\([0-9][0-9]*\).*$/\1/'`]
-  diagnostic "minor is $minor"
-
-  # I would think autoconf would already have a facility for doing
-  # these kinds of major/minor version checks, but I can't find it
-  if test $major -gt $reqMaj -o $major -ge $reqMaj -a $minor -ge $reqMin; then
-    AC_MSG_RESULT([version is $ver, ok])
-
-    # sm: added this test when we found that CCured needed to be changed
-    # a little when 3.06 came out (it had previously worked with 3.04)
-    if test "$major" -gt $knownMaj -o "$major" -ge $knownMaj -a "$minor" -gt $knownMin; then
-      AC_MSG_WARN([Your ocaml version is $ver, but the latest version this program
-                   is known to work with is $knownMaj.$knownMin.  If you have
-                   trouble compiling, please try using an earlier version
-                   or see if there is a later version of this program.])
-    fi
-  else
-    AC_MSG_ERROR([
-      I found OCaml version $ver; this program requires at least $reqMaj.$reqMin.
-      Please download a newer OCaml distribution.
-      $ocamlDownloadInstructions
-    ])
-  fi
-
-  # check for existence of other binaries
-  AC_MSG_CHECKING(existence of related ocaml tools)
-  if binaryExists ocamllex && \
-     binaryExists ocamlyacc && \
-     binaryExists ocamldep && \
-     binaryExists ocamlopt; then
-    AC_MSG_RESULT(ok)
-  else
-    AC_MSG_ERROR([
-      At least one of ocamllex, ocamlyacc, ocamldep or ocamlopt is missing.
-      In particular, ocamlopt requires you to "make opt" when building
-      OCaml from source.  Please make sure all these tools are built and
-      in the path.
-    ])
-  fi
-else
-  AC_MSG_ERROR([
-      The "ocamlc" OCaml compiler was not found in the path: $PATH.
-
-      Most of this program is written in the OCaml language, so its compiler
-      is required.
-      $ocamlDownloadInstructions
-  ])
-fi
-
-#
-# ------------------- Perl ----------------
-#
-AC_MSG_CHECKING([for Perl])
-  if ! binaryExists perl; then
-    AC_MSG_ERROR([
-      perl not found.
-      You need perl version 5.6.1 or later for CIL.
-      You can get perl at http://www.cpan.org/src/index.html .
-    ])
-  fi
-
-  # sm: oh how nice it would be to just say "use English;
-  # print($PERL_VERSION)", but that appears broken on 5.6.1.. so I'm
-  # trying to say "caret right-bracket", but then that would run afoul
-  # of autoconf's quoting characters, so I use the "quadrigraph" @:>@
-  # to stand for right-bracket.  what a mess.
-  perlver=`perl -e 'print($@:>@);'`
-  if perl -e "exit( $perlver >= 5.006001 );"; then
-    AC_MSG_ERROR([
-      Found perl version $perlver, but at least 5.6.1 is required.
-      You can get a newer perl at http://www.cpan.org/src/index.html .
-    ])
-  fi
-
-  perlport=`perl -e "print $^O;"`
-  case "$perlport" in
-    cygwin)
-        ;;
-    MSWin32) # ActivePerl
-        ;;
-    linux)
-        ;;
-    freebsd)
-        ;;
-    openbsd)
-        ;;
-    darwin) # Mac OS X
-        ;;
-    solaris)
-	;;
-    *)
-      AC_MSG_ERROR([
-        Unsupported Perl port $perlport -- sorry.
-        cygwin, MSWin32 (ActivePerl), linux, freebsd, openbsd, darwin,
-        and solaris are the supported ports.
-      ])
-  esac
-AC_MSG_RESULT([found version $perlver, port $perlport])
-
-        # The cygwin port has some bugs in the File::Spec module
-if test "$perlport" = "cygwin" ;then
-  AC_MSG_CHECKING([for known cygwin Perl bug in File::Spec])
-  perlfixres=[`perl -e '
-      use File::Spec;
-      if(File::Spec->file_name_is_absolute("C:/test")) {
-        print "no bug found"; exit 0;
-      } else {
-        print "bug";
-        foreach $d (@INC) {
-           if(-f "$d/File/Spec/Unix.pm") {
-              open(IN, "<$d/File/Spec/Unix.pm");
-              open(OUT, ">$d/File/Spec/Unix.pm.fixed") 
-                       || die "Cannot open $d/File/Spec/Unix.pm.fixed";
-              while(<IN>) {
-                if($_ =~ m|sub file_name_is_absolute|) {
-                   print OUT $_;
-                   print OUT scalar(<IN>);
-                   print OUT <<EOF;
-   if(\\$^O eq \"cygwin\") { 
-       return scalar(\\$file =~ m{^(\\[a-z\\]:)?\\[\\\\\\\\/\\]}is);
-};
-EOF
-                   next;
-                }
-                print OUT $_;
-              }
-              close(OUT);
-              close(IN);
-              system("mv -f $d/File/Spec/Unix.pm.fixed $d/File/Spec/Unix.pm");
-           }
-        }
-      }
-  '`]
-  # See if it was indeed fixed
-  if test "$perlfixres" = "bug" ;then
-     perlfixres=`perl -e '
-      use File::Spec;
-      if(File::Spec->file_name_is_absolute("C:/test")) {
-        print "bug fixed"; exit 0;
-      } else {
-        print "cannot fix bug"; exit 1;
-      }'`
-  fi
-  if test "x$perlfixres" = "x" ;then
-      AC_MSG_ERROR([
-        Cannot run perl
-      ])
-  elif test "$perlfixres" = "cannot fix bug" ;then
-      AC_MSG_ERROR([
-        Found a bug but cannot fix it.
-      ])
-  else
-     AC_MSG_RESULT([$perlfixres])
- fi
-fi
-
-# 
-# Now setup the performance counters
-#
-AC_MSG_CHECKING(if performance counters are usable)
-# Create a C file from src/perfcount.c.in
-rm -f ./cycles.exe
-if gcc -DCONFIGURATION_ONLY \
-       -x c ocamlutil/perfcount.c.in -lm -o ./cycles.exe >/dev/null 2>&1; then
-
-   if CYCLES_PER_USEC=`./cycles.exe 2>&1` ;then
-     AC_MSG_RESULT([ok ($CYCLES_PER_USEC cycles per us)])
-   else
-     # Print what we got 
-     AC_MSG_RESULT([no ($CYCLES_PER_USEC)])
-     CYCLES_PER_USEC=0
-   fi
-else
-   CYCLES_PER_USEC=0
-   AC_MSG_RESULT([no (cannot compile perfcount.c)])
-fi
-rm -f ./cycles.exe
-
-# If we are on Linux and we use performance counters try to get
-# the processor speed from /proc/cpuinfo
-if test "$CYCLES_PER_USEC" != "0" ;then
-     case "$target" in
-        # linux
-        *86*linux*)
-             AC_MSG_CHECKING(if /proc/cpuinfo has processor speed)
-             cpuinfo=`cat /proc/cpuinfo 2>/dev/null | grep "cpu MHz"`
-             [procspeed=`echo $cpuinfo | sed 's/^.*[^0-9]\([0-9]\+\.[0-9]\+\).*$/\1/g'`]
-             if test "$procspeed"!="" ;then
-                CYCLES_PER_USEC=$procspeed
-                AC_MSG_RESULT([got $CYCLES_PER_USEC cycles per us])
-             else
-                AC_MSG_RESULT(no)
-             fi   
-             ;;
-        *)      
-             ;;
-      esac
-      # Now set HAS_PERFCOUNT
-      HAS_PERFCOUNT=1
-else
-      HAS_PERFCOUNT=0
-fi
-
-# additional tools we might check for:
-#   - gnu make
-
-#
-# -------------------- GCC --------------
-#
-
-AC_MSG_CHECKING([for gcc version])
-AC_CHECK_TYPE(__builtin_va_list,
-              HAVE_BUILTIN_VA_LIST=true,
-              HAVE_BUILTIN_VA_LIST=false)
-AC_MSG_CHECKING([if __thread is a keyword])
-AC_COMPILE_IFELSE([int main(int __thread) { return 0; }],
-                  THREAD_IS_KEYWORD=false,
-                  THREAD_IS_KEYWORD=true)
-AC_MSG_RESULT($THREAD_IS_KEYWORD)
-
-# Does gcc add underscores to identifiers to make assembly labels?
-# (I think MSVC always does)
-AC_MSG_CHECKING([if gcc adds underscores to assembly labels.])
-AC_LINK_IFELSE([int main() { __asm__("jmp _main"); }],
-                  UNDERSCORE_NAME=true,
-                  UNDERSCORE_NAME=false)
-AC_MSG_RESULT($UNDERSCORE_NAME)
-
-
-# ----------- some stuff 'autoscan' put here --------------
-# (autoscan is part of the autoconf distribution)
-
-# checks for header files
-AC_HEADER_STDC
-AC_CHECK_HEADERS(stdlib.h strings.h sys/time.h unistd.h wchar.h)
-
-# checks for typedefs, structures, and compiler characteristics
-AC_C_CONST
-AC_C_INLINE
-AC_HEADER_TIME
-
-# checks for library functions; more autoscan stuff
-AC_FUNC_MEMCMP
-AC_CHECK_FUNCS(mkdir select socket __sysv_signal)
-
-
-
-# ----------- platform-specific code -------------
-# $target is typically processor-vendor-os
-case "$target" in
-  # linux
-  *86*linux*|*86*freebsd*|*86*openbsd*|*86*darwin*)
-    AC_MSG_RESULT(configuring for linux/x86)
-
-    ARCHOS=x86_LINUX
-    ;;
-
-  # Mac OS X
-  *powerpc*darwin*)
-    AC_MSG_RESULT(configuring for powerpc/darwin, which we treat like linux/x86)
-
-    ARCHOS=ppc_DARWIN
-    ;;
-
-  # cygwin
-  *86*cygwin*)
-    AC_MSG_RESULT(configuring for Cygwin on win32/x86)
-
-    ARCHOS=x86_WIN32
-
-    # override CILHOME; even on cygwin we want forward slashes
-    # sm: I folded this into what I hope will be the only
-    # case-analysis of machine type
-    CILHOME=`cygpath -wa "$CILHOME"  | sed -e "s/\\\\\/\\//g"`
-    CC=`which $CC`
-    CC=`cygpath -wa "$CC"  | sed -e "s/\\\\\/\\//g"`
-    ;;
-
-  # Solaris
-  *sparc*solaris*)
-    AC_MSG_RESULT(configuring for SPARC/Solaris)
-
-    ARCHOS=sparc_SOLARIS
-    ;;
-
-  *)
-    AC_MSG_ERROR([
-      Unsupported platform $target -- sorry.
-      ./configure supports these platforms:
-         on x86:     Linux, Win32(with Cygwin), freeBSD, openBSD, and Mac OS X
-         on PowerPC: Mac OS X 
-         on SPARC:   Solaris
-    ])
-    ;;
-esac
-
-# Make the object directory if not already present
-AC_CHECK_FILE(obj/$ARCHOS,, AC_MSG_RESULT(creating obj/$ARCHOS);
-                            mkdir -p obj/$ARCHOS)
-   
-AC_MSG_CHECKING([delete the obj/$ARCHOS/feature_config.ml and obj/$ARCHOS/machdep.ml file])
-rm -f obj/$ARCHOS/machdep.ml
-rm -f obj/.depend/machdep.d
-rm -f obj/$ARCHOS/feature_config.ml
-rm -f obj/.depend/feature_config.d
-AC_MSG_RESULT([done])
-
-# We will use substitution variables whose definition contains newlines. The
-# problem is that when config.status runs, it wants to break the series of
-# substitution commands for sed into fragments based on line count. We could
-# be unlucky and have config.status break the series of substitution in the
-# middle of a variable that contains newlines. So, we first create a single
-# variable called NEWLINE whose definition is a carriage return. This means
-# that there will be exactly one opportunity for this error to happen (in the
-# definition of NEWLINE). The occurrence of AC_SUBST for NEWLINE must occur
-# after those of the variables that use it! And we want to put all of these
-# very early on, to make sure that they are not around the place when the file
-# bets broken.
-
-NEWLINE="\\
-"
-
-
-#
-# CIL/CCured features
-#
-#
-   
-# Set the defaults
-
-
-# Give a space-separated list of features with the defaults
-features="blockinggraph=no rand=no arithabs=no zrapp=no"
-
-AC_ARG_WITH(blockinggraph,
-    AC_HELP_STRING([--with-blockinggraph],
-                   [enable the blocking graph feature]))
-AC_ARG_WITH(rand,
-    AC_HELP_STRING([--with-rand],
-                   [enable the randomized value numbering]))
-AC_ARG_WITH(arithabs,
-    AC_HELP_STRING([--with-arithabs],
-                   [enable the arithmetic abstraction]))
-AC_ARG_WITH(zrapp,
-    AC_HELP_STRING([--with-zrapp],
-                   [enable the zrapp pretty-printer]))
-
-# Smalloc.ml is distributed by {matth,nks}@cs.berkeley.edu as part of Scrash.
-features="$features smalloc=no"
-
-# cqualann.ml is used by Matt Harren.  Please ignore.
-features="$features cqualann=no"
-
-# Now add any features specified in the command-line
-
-features="$features $EXTRAFEATURES"
-
-for f_val in $features
-do
-   # If there is no =, then we default to yes
-   if ! (echo $f_val | grep "=" >/dev/null) ;then f_val="$f_val=yes"; fi
-   # echo "Testing feature $f_val"
-   f=`echo $f_val | sed -e s%=.*$%%`
-   AC_MSG_CHECKING(whether to use CIL feature $f)
-   # default value from "features"
-   defval=`echo $f_val | sed -e s%^.*=%%`
-   # current value
-   getcurval="echo \${with_$f:=$defval}"
-   curval=`eval $getcurval`
-   AC_MSG_RESULT($curval)
-   if test $curval = yes ;then
-      CIL_FEATURES="$CIL_FEATURES $f"
-   fi
-done
-
-## Now produce the CIL_FEATURES_DEFINES
-CIL_FEATURES_DEFINES=""
-# Convert to upper case
-for f in `echo $CIL_FEATURES | tr a-z A-Z`
-do
-   CIL_FEATURES_DEFINES="${CIL_FEATURES_DEFINES}@NEWLINE@export USE_$f=yes"
-done
-
-
-# ----------------- finish up -------------------
-# names of the variables that get substituted in files; for example,
-# write @ARCHOS@ somewhere in a written file to get it substituted
-AC_SUBST(ARCHOS)
-AC_SUBST(CILHOME)
-AC_SUBST(HAS_MSVC)
-AC_SUBST(DEFAULT_COMPILER)
-AC_SUBST(DEFAULT_CIL_MODE)
-AC_SUBST(CIL_VERSION_MAJOR)
-AC_SUBST(CIL_VERSION_MINOR)
-AC_SUBST(CIL_VERSION_REV)
-AC_SUBST(CIL_VERSION)
-AC_SUBST(CYCLES_PER_USEC)
-AC_SUBST(HAS_PERFCOUNT)
-AC_SUBST(HAVE_BUILTIN_VA_LIST)
-AC_SUBST(THREAD_IS_KEYWORD)
-AC_SUBST(UNDERSCORE_NAME)
-AC_SUBST(EXTRAFEATURES)
-AC_SUBST(EXTRASRCDIRS)
-
-# finish the configure script and generate various files; ./configure
-# will apply variable substitutions to <filename>.in to generate <filename>;
-# I find it useful to mark generated files as read-only so I don't
-# accidentally edit them (and them lose my changes when ./configure
-# runs again); I had originally done the chmod after AC_OUTPUT, but
-# the problem is then the chmod doesn't run inside ./config.status
-
-# MY_AC_CONFIG_FILES(filename)
-# do AC_CONFIG_FILES(filename, chmod a-w filename)
-define([MY_AC_CONFIG_FILES],
-[{
-  if test -f [$1].in; then
-    AC_CONFIG_FILES([$1], chmod a-w [$1])
-  else
-    true
-    #echo "skipping [$1] because it's not in this distribution"
-  fi
-}])
-define([MY_AC_CONFIG_EXE_FILES],
-[{
-  if test -f [$1].in; then
-    AC_CONFIG_FILES([$1], [chmod a-w,a+x $1])
-  else
-    true
-    #echo "skipping [$1] because it's not in this distribution"
-  fi
-}])
-
-MY_AC_CONFIG_FILES(Makefile)
-MY_AC_CONFIG_FILES(cil.spec)
-MY_AC_CONFIG_FILES(config.mk)
-MY_AC_CONFIG_FILES(test/Makefile)
-MY_AC_CONFIG_EXE_FILES(bin/cilly.bat)
-MY_AC_CONFIG_EXE_FILES(bin/patcher.bat)
-MY_AC_CONFIG_FILES(bin/CilConfig.pm)
-MY_AC_CONFIG_FILES(doc/index.html)
-MY_AC_CONFIG_FILES(doc/header.html)
-MY_AC_CONFIG_FILES(ocamlutil/perfcount.c)
-
-AC_OUTPUT()
-
-# show the user what the variables have been set to
-cat <<EOF
-
-CIL configuration:
-  architecture/OS:            ARCHOS             $ARCHOS
-  source tree root:           CILHOME            $CILHOME
-  (optional) cl.exe found:    HAS_MSVC           $HAS_MSVC
-  gcc to use                  CC                 $CC
-  default compiler            DEFAULT_COMPILER   $DEFAULT_COMPILER
-  CIL version                 CIL_VERSION        $CIL_VERSION
-  CIL features                CIL_FEATURES       $CIL_FEATURES
-  Extra source directories    EXTRASRCDIRS       $EXTRASRCDIRS
-  Cycles per microsecond      CYCLES_PER_USEC    $CYCLES_PER_USEC
-EOF
-
diff --git a/cil/doc/CIL-API.pdf b/cil/doc/CIL-API.pdf
deleted file mode 100644
index 240ff49104c9dbad0bfe2c3753d29c2050316f9a..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 226152
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

diff --git a/cil/doc/CIL.pdf b/cil/doc/CIL.pdf
deleted file mode 100644
index 34554fa69bf4297900ba175c2464caa7af62179f..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 269328
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

diff --git a/cil/doc/api/Alpha.html b/cil/doc/api/Alpha.html
deleted file mode 100644
index 699fac099..000000000
--- a/cil/doc/api/Alpha.html
+++ /dev/null
@@ -1,79 +0,0 @@
-<html>
-<head>
-<link rel="stylesheet" href="style.css" type="text/css">
-<link rel="Start" href="index.html">
-<link rel="previous" href="Formatcil.html">
-<link rel="next" href="Cillower.html">
-<link rel="Up" href="index.html">
-<link title="Index of types" rel=Appendix href="index_types.html">
-<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
-<link title="Index of values" rel=Appendix href="index_values.html">
-<link title="Index of class methods" rel=Appendix href="index_methods.html">
-<link title="Index of classes" rel=Appendix href="index_classes.html">
-<link title="Index of class types" rel=Appendix href="index_class_types.html">
-<link title="Index of modules" rel=Appendix href="index_modules.html">
-<link title="Index of module types" rel=Appendix href="index_module_types.html">
-<link title="Pretty" rel="Chapter" href="Pretty.html">
-<link title="Errormsg" rel="Chapter" href="Errormsg.html">
-<link title="Clist" rel="Chapter" href="Clist.html">
-<link title="Stats" rel="Chapter" href="Stats.html">
-<link title="Cil" rel="Chapter" href="Cil.html">
-<link title="Formatcil" rel="Chapter" href="Formatcil.html">
-<link title="Alpha" rel="Chapter" href="Alpha.html">
-<link title="Cillower" rel="Chapter" href="Cillower.html">
-<link title="Cfg" rel="Chapter" href="Cfg.html">
-<link title="Dataflow" rel="Chapter" href="Dataflow.html">
-<link title="Dominators" rel="Chapter" href="Dominators.html"><title>CIL API Documentation (version 1.3.5) : Alpha</title>
-</head>
-<body>
-<div class="navbar"><a href="Formatcil.html">Previous</a>
-&nbsp;<a href="index.html">Up</a>
-&nbsp;<a href="Cillower.html">Next</a>
-</div>
-<center><h1>Module <a href="type_Alpha.html">Alpha</a></h1></center>
-<br>
-<pre><span class="keyword">module</span> Alpha: <code class="code">sig</code> <a href="Alpha.html">..</a> <code class="code">end</code></pre><b>ALPHA conversion</b><br>
-<hr width="100%">
-<pre><span class="keyword">type</span> <a name="TYPEundoAlphaElement"></a><code class="type">'a</code> undoAlphaElement </pre>
-<div class="info">
-This is the type of the elements that are recorded by the alpha 
- conversion functions in order to be able to undo changes to the tables 
- they modify. Useful for implementing 
- scoping<br>
-</div>
-
-<pre><span class="keyword">type</span> <a name="TYPEalphaTableData"></a><code class="type">'a</code> alphaTableData </pre>
-<div class="info">
-This is the type of the elements of the alpha renaming table. These 
- elements can carry some data associated with each occurrence of the name.<br>
-</div>
-
-<pre><span class="keyword">val</span> <a name="VALnewAlphaName"></a>newAlphaName : <code class="type">alphaTable:(string, 'a <a href="Alpha.html#TYPEalphaTableData">alphaTableData</a> Pervasives.ref) Hashtbl.t -><br>       undolist:'a <a href="Alpha.html#TYPEundoAlphaElement">undoAlphaElement</a> list Pervasives.ref option -><br>       lookupname:string -> data:'a -> string * 'a</code></pre><div class="info">
-Create a new name based on a given name. The new name is formed from a 
- prefix (obtained from the given name by stripping a suffix consisting of _ 
- followed by only digits), followed by a special separator and then by a 
- positive integer suffix. The first argument is a table mapping name 
- prefixes to some data that specifies what suffixes have been used and how 
- to create the new one. This function updates the table with the new 
- largest suffix generated. The "undolist" argument, when present, will be 
- used by the function to record information that can be used by 
- <a href="Alpha.html#VALundoAlphaChanges"><code class="code">Alpha.undoAlphaChanges</code></a> to undo those changes. Note that the undo 
- information will be in reverse order in which the action occurred. Returns 
- the new name and, if different from the lookupname, the location of the 
- previous occurrence. This function knows about the location implicitly 
- from the <a href="Cil.html#VALcurrentLoc"><code class="code">Cil.currentLoc</code></a>.<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALregisterAlphaName"></a>registerAlphaName : <code class="type">alphaTable:(string, 'a <a href="Alpha.html#TYPEalphaTableData">alphaTableData</a> Pervasives.ref) Hashtbl.t -><br>       undolist:'a <a href="Alpha.html#TYPEundoAlphaElement">undoAlphaElement</a> list Pervasives.ref option -><br>       lookupname:string -> data:'a -> unit</code></pre><div class="info">
-Register a name with an alpha conversion table to ensure that when later 
- we call newAlphaName we do not end up generating this one<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALdocAlphaTable"></a>docAlphaTable : <code class="type">unit -><br>       (string, 'a <a href="Alpha.html#TYPEalphaTableData">alphaTableData</a> Pervasives.ref) Hashtbl.t -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
-Split the name in preparation for newAlphaName. The prefix returned is 
-    used to index into the hashtable. The next result value is a separator 
-    (either empty or the separator chosen to separate the original name from 
-     the index)<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALgetAlphaPrefix"></a>getAlphaPrefix : <code class="type">lookupname:string -> string</code></pre><pre><span class="keyword">val</span> <a name="VALundoAlphaChanges"></a>undoAlphaChanges : <code class="type">alphaTable:(string, 'a <a href="Alpha.html#TYPEalphaTableData">alphaTableData</a> Pervasives.ref) Hashtbl.t -><br>       undolist:'a <a href="Alpha.html#TYPEundoAlphaElement">undoAlphaElement</a> list -> unit</code></pre><div class="info">
-Undo the changes to a table<br>
-</div>
-</body></html>
\ No newline at end of file
diff --git a/cil/doc/api/Cfg.html b/cil/doc/api/Cfg.html
deleted file mode 100644
index 142de8ae7..000000000
--- a/cil/doc/api/Cfg.html
+++ /dev/null
@@ -1,69 +0,0 @@
-<html>
-<head>
-<link rel="stylesheet" href="style.css" type="text/css">
-<link rel="Start" href="index.html">
-<link rel="previous" href="Cillower.html">
-<link rel="next" href="Dataflow.html">
-<link rel="Up" href="index.html">
-<link title="Index of types" rel=Appendix href="index_types.html">
-<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
-<link title="Index of values" rel=Appendix href="index_values.html">
-<link title="Index of class methods" rel=Appendix href="index_methods.html">
-<link title="Index of classes" rel=Appendix href="index_classes.html">
-<link title="Index of class types" rel=Appendix href="index_class_types.html">
-<link title="Index of modules" rel=Appendix href="index_modules.html">
-<link title="Index of module types" rel=Appendix href="index_module_types.html">
-<link title="Pretty" rel="Chapter" href="Pretty.html">
-<link title="Errormsg" rel="Chapter" href="Errormsg.html">
-<link title="Clist" rel="Chapter" href="Clist.html">
-<link title="Stats" rel="Chapter" href="Stats.html">
-<link title="Cil" rel="Chapter" href="Cil.html">
-<link title="Formatcil" rel="Chapter" href="Formatcil.html">
-<link title="Alpha" rel="Chapter" href="Alpha.html">
-<link title="Cillower" rel="Chapter" href="Cillower.html">
-<link title="Cfg" rel="Chapter" href="Cfg.html">
-<link title="Dataflow" rel="Chapter" href="Dataflow.html">
-<link title="Dominators" rel="Chapter" href="Dominators.html"><title>CIL API Documentation (version 1.3.5) : Cfg</title>
-</head>
-<body>
-<div class="navbar"><a href="Cillower.html">Previous</a>
-&nbsp;<a href="index.html">Up</a>
-&nbsp;<a href="Dataflow.html">Next</a>
-</div>
-<center><h1>Module <a href="type_Cfg.html">Cfg</a></h1></center>
-<br>
-<pre><span class="keyword">module</span> Cfg: <code class="code">sig</code> <a href="Cfg.html">..</a> <code class="code">end</code></pre>Code to compute the control-flow graph of a function or file.  
-  This will fill in the <code class="code">preds</code> and <code class="code">succs</code> fields of <a href="Cil.html#TYPEstmt"><code class="code">Cil.stmt</code></a>
-<p>
-
-  This is required for several other extensions, such as <a href="Dataflow.html"><code class="code">Dataflow</code></a>.<br>
-<hr width="100%">
-<pre><span class="keyword">val</span> <a name="VALcomputeFileCFG"></a>computeFileCFG : <code class="type"><a href="Cil.html#TYPEfile">Cil.file</a> -> unit</code></pre><div class="info">
-Compute the CFG for an entire file, by calling cfgFun on each function.<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALclearFileCFG"></a>clearFileCFG : <code class="type"><a href="Cil.html#TYPEfile">Cil.file</a> -> unit</code></pre><div class="info">
-clear the sid, succs, and preds fields of each statement.<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALcfgFun"></a>cfgFun : <code class="type"><a href="Cil.html#TYPEfundec">Cil.fundec</a> -> int</code></pre><div class="info">
-Compute a control flow graph for fd.  Stmts in fd have preds and succs
-  filled in<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALclearCFGinfo"></a>clearCFGinfo : <code class="type"><a href="Cil.html#TYPEfundec">Cil.fundec</a> -> unit</code></pre><div class="info">
-clear the sid, succs, and preds fields of each statment in a function<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALprintCfgChannel"></a>printCfgChannel : <code class="type">Pervasives.out_channel -> <a href="Cil.html#TYPEfundec">Cil.fundec</a> -> unit</code></pre><div class="info">
-print control flow graph (in dot form) for fundec to channel<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALprintCfgFilename"></a>printCfgFilename : <code class="type">string -> <a href="Cil.html#TYPEfundec">Cil.fundec</a> -> unit</code></pre><div class="info">
-Print control flow graph (in dot form) for fundec to file<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALstart_id"></a>start_id : <code class="type">int Pervasives.ref</code></pre><div class="info">
-Next statement id that will be assigned.<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALnodeList"></a>nodeList : <code class="type"><a href="Cil.html#TYPEstmt">Cil.stmt</a> list Pervasives.ref</code></pre><div class="info">
-All of the nodes in a file.<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALnumNodes"></a>numNodes : <code class="type">int Pervasives.ref</code></pre><div class="info">
-number of nodes in the CFG<br>
-</div>
-</body></html>
\ No newline at end of file
diff --git a/cil/doc/api/Cil.cilPrinter.html b/cil/doc/api/Cil.cilPrinter.html
deleted file mode 100644
index 1b9511f6d..000000000
--- a/cil/doc/api/Cil.cilPrinter.html
+++ /dev/null
@@ -1,118 +0,0 @@
-<html>
-<head>
-<link rel="stylesheet" href="style.css" type="text/css">
-<link rel="Start" href="index.html">
-<link rel="previous" href="Cil.cilVisitor.html">
-<link rel="Up" href="Cil.html">
-<link title="Index of types" rel=Appendix href="index_types.html">
-<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
-<link title="Index of values" rel=Appendix href="index_values.html">
-<link title="Index of class methods" rel=Appendix href="index_methods.html">
-<link title="Index of classes" rel=Appendix href="index_classes.html">
-<link title="Index of class types" rel=Appendix href="index_class_types.html">
-<link title="Index of modules" rel=Appendix href="index_modules.html">
-<link title="Index of module types" rel=Appendix href="index_module_types.html">
-<link title="Pretty" rel="Chapter" href="Pretty.html">
-<link title="Errormsg" rel="Chapter" href="Errormsg.html">
-<link title="Clist" rel="Chapter" href="Clist.html">
-<link title="Stats" rel="Chapter" href="Stats.html">
-<link title="Cil" rel="Chapter" href="Cil.html">
-<link title="Formatcil" rel="Chapter" href="Formatcil.html">
-<link title="Alpha" rel="Chapter" href="Alpha.html">
-<link title="Cillower" rel="Chapter" href="Cillower.html">
-<link title="Cfg" rel="Chapter" href="Cfg.html">
-<link title="Dataflow" rel="Chapter" href="Dataflow.html">
-<link title="Dominators" rel="Chapter" href="Dominators.html"><title>CIL API Documentation (version 1.3.5) : Cil.cilPrinter</title>
-</head>
-<body>
-<div class="navbar"><a href="Cil.cilVisitor.html">Previous</a>
-&nbsp;<a href="Cil.html">Up</a>
-&nbsp;</div>
-<center><h1>Class type <a href="type_Cil.cilPrinter.html">Cil.cilPrinter</a></h1></center>
-<br>
-<pre><span class="keyword">class type</span> <a name="TYPEcilPrinter"></a>cilPrinter = <code class="code">object</code> <a href="Cil.cilPrinter.html">..</a> <code class="code">end</code></pre>A printer interface for CIL trees. Create instantiations of 
- this type by specializing the class <a href="Cil.defaultCilPrinterClass.html"><code class="code">Cil.defaultCilPrinterClass</code></a>.<br>
-<hr width="100%">
-<pre><span class="keyword">method</span> <a name="METHODpVDecl"></a>pVDecl : <code class="type">unit -> <a href="Cil.html#TYPEvarinfo">varinfo</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
-Invoked for each variable declaration. Note that variable 
- declarations are all the <code class="code">GVar</code>, <code class="code">GVarDecl</code>, <code class="code">GFun</code>, all the <code class="code">varinfo</code> 
- in formals of function types, and the formals and locals for function 
- definitions.<br>
-</div>
-<pre><span class="keyword">method</span> <a name="METHODpVar"></a>pVar : <code class="type"><a href="Cil.html#TYPEvarinfo">varinfo</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
-Invoked on each variable use.<br>
-</div>
-<pre><span class="keyword">method</span> <a name="METHODpLval"></a>pLval : <code class="type">unit -> <a href="Cil.html#TYPElval">lval</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
-Invoked on each lvalue occurrence<br>
-</div>
-<pre><span class="keyword">method</span> <a name="METHODpOffset"></a>pOffset : <code class="type"><a href="Pretty.html#TYPEdoc">Pretty.doc</a> -> <a href="Cil.html#TYPEoffset">offset</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
-Invoked on each offset occurrence. The second argument is the base.<br>
-</div>
-<pre><span class="keyword">method</span> <a name="METHODpInstr"></a>pInstr : <code class="type">unit -> <a href="Cil.html#TYPEinstr">instr</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
-Invoked on each instruction occurrence.<br>
-</div>
-<pre><span class="keyword">method</span> <a name="METHODpLabel"></a>pLabel : <code class="type">unit -> <a href="Cil.html#TYPElabel">label</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
-Print a label.<br>
-</div>
-<pre><span class="keyword">method</span> <a name="METHODpStmt"></a>pStmt : <code class="type">unit -> <a href="Cil.html#TYPEstmt">stmt</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
-Control-flow statement. This is used by 
- <a href="Cil.html#VALprintGlobal"><code class="code">Cil.printGlobal</code></a> and by <a href="Cil.html#VALdumpGlobal"><code class="code">Cil.dumpGlobal</code></a>.<br>
-</div>
-<pre><span class="keyword">method</span> <a name="METHODdStmt"></a>dStmt : <code class="type">Pervasives.out_channel -> int -> <a href="Cil.html#TYPEstmt">stmt</a> -> unit</code></pre><div class="info">
-Dump a control-flow statement to a file with a given indentation. 
- This is used by <a href="Cil.html#VALdumpGlobal"><code class="code">Cil.dumpGlobal</code></a>.<br>
-</div>
-<pre><span class="keyword">method</span> <a name="METHODdBlock"></a>dBlock : <code class="type">Pervasives.out_channel -> int -> <a href="Cil.html#TYPEblock">block</a> -> unit</code></pre><div class="info">
-Dump a control-flow block to a file with a given indentation. 
- This is used by <a href="Cil.html#VALdumpGlobal"><code class="code">Cil.dumpGlobal</code></a>.<br>
-</div>
-<pre><span class="keyword">method</span> <a name="METHODpBlock"></a>pBlock : <code class="type">unit -> <a href="Cil.html#TYPEblock">block</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><pre><span class="keyword">method</span> <a name="METHODpBlock"></a>pBlock : <code class="type">unit -> <a href="Cil.html#TYPEblock">block</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
-Print a block.<br>
-</div>
-<pre><span class="keyword">method</span> <a name="METHODpGlobal"></a>pGlobal : <code class="type">unit -> <a href="Cil.html#TYPEglobal">global</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
-Global (vars, types, etc.). This can be slow and is used only by 
- <a href="Cil.html#VALprintGlobal"><code class="code">Cil.printGlobal</code></a> but not by <a href="Cil.html#VALdumpGlobal"><code class="code">Cil.dumpGlobal</code></a>.<br>
-</div>
-<pre><span class="keyword">method</span> <a name="METHODdGlobal"></a>dGlobal : <code class="type">Pervasives.out_channel -> <a href="Cil.html#TYPEglobal">global</a> -> unit</code></pre><div class="info">
-Dump a global to a file with a given indentation. This is used by 
- <a href="Cil.html#VALdumpGlobal"><code class="code">Cil.dumpGlobal</code></a><br>
-</div>
-<pre><span class="keyword">method</span> <a name="METHODpFieldDecl"></a>pFieldDecl : <code class="type">unit -> <a href="Cil.html#TYPEfieldinfo">fieldinfo</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
-A field declaration<br>
-</div>
-<pre><span class="keyword">method</span> <a name="METHODpType"></a>pType : <code class="type"><a href="Pretty.html#TYPEdoc">Pretty.doc</a> option -> unit -> <a href="Cil.html#TYPEtyp">typ</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><pre><span class="keyword">method</span> <a name="METHODpAttr"></a>pAttr : <code class="type"><a href="Cil.html#TYPEattribute">attribute</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a> * bool</code></pre><div class="info">
-Attribute. Also return an indication whether this attribute must be 
- printed inside the __attribute__ list or not.<br>
-</div>
-<pre><span class="keyword">method</span> <a name="METHODpAttrParam"></a>pAttrParam : <code class="type">unit -> <a href="Cil.html#TYPEattrparam">attrparam</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
-Attribute parameter<br>
-</div>
-<pre><span class="keyword">method</span> <a name="METHODpAttrs"></a>pAttrs : <code class="type">unit -> <a href="Cil.html#TYPEattributes">attributes</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
-Attribute lists<br>
-</div>
-<pre><span class="keyword">method</span> <a name="METHODpLineDirective"></a>pLineDirective : <code class="type">?forcefile:bool -> <a href="Cil.html#TYPElocation">location</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
-Print a line-number. This is assumed to come always on an empty line. 
- If the forcefile argument is present and is true then the file name 
- will be printed always. Otherwise the file name is printed only if it 
- is different from the last time time this function is called. The last 
- file name is stored in a private field inside the cilPrinter object.<br>
-</div>
-<pre><span class="keyword">method</span> <a name="METHODpStmtKind"></a>pStmtKind : <code class="type"><a href="Cil.html#TYPEstmt">stmt</a> -> unit -> <a href="Cil.html#TYPEstmtkind">stmtkind</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
-Print a statement kind. The code to be printed is given in the
- <a href="Cil.html#TYPEstmtkind"><code class="code">Cil.stmtkind</code></a> argument.  The initial <a href="Cil.html#TYPEstmt"><code class="code">Cil.stmt</code></a> argument
- records the statement which follows the one being printed;
- <a href="Cil.defaultCilPrinterClass.html"><code class="code">Cil.defaultCilPrinterClass</code></a> uses this information to prettify
- statement printing in certain special cases.<br>
-</div>
-<pre><span class="keyword">method</span> <a name="METHODpExp"></a>pExp : <code class="type">unit -> <a href="Cil.html#TYPEexp">exp</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
-Print expressions<br>
-</div>
-<pre><span class="keyword">method</span> <a name="METHODpInit"></a>pInit : <code class="type">unit -> <a href="Cil.html#TYPEinit">init</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
-Print initializers. This can be slow and is used by 
- <a href="Cil.html#VALprintGlobal"><code class="code">Cil.printGlobal</code></a> but not by <a href="Cil.html#VALdumpGlobal"><code class="code">Cil.dumpGlobal</code></a>.<br>
-</div>
-<pre><span class="keyword">method</span> <a name="METHODdInit"></a>dInit : <code class="type">Pervasives.out_channel -> int -> <a href="Cil.html#TYPEinit">init</a> -> unit</code></pre><div class="info">
-Dump a global to a file with a given indentation. This is used by 
- <a href="Cil.html#VALdumpGlobal"><code class="code">Cil.dumpGlobal</code></a><br>
-</div>
-</body></html>
\ No newline at end of file
diff --git a/cil/doc/api/Cil.cilVisitor.html b/cil/doc/api/Cil.cilVisitor.html
deleted file mode 100644
index f8c649637..000000000
--- a/cil/doc/api/Cil.cilVisitor.html
+++ /dev/null
@@ -1,125 +0,0 @@
-<html>
-<head>
-<link rel="stylesheet" href="style.css" type="text/css">
-<link rel="Start" href="index.html">
-<link rel="next" href="Cil.cilPrinter.html">
-<link rel="Up" href="Cil.html">
-<link title="Index of types" rel=Appendix href="index_types.html">
-<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
-<link title="Index of values" rel=Appendix href="index_values.html">
-<link title="Index of class methods" rel=Appendix href="index_methods.html">
-<link title="Index of classes" rel=Appendix href="index_classes.html">
-<link title="Index of class types" rel=Appendix href="index_class_types.html">
-<link title="Index of modules" rel=Appendix href="index_modules.html">
-<link title="Index of module types" rel=Appendix href="index_module_types.html">
-<link title="Pretty" rel="Chapter" href="Pretty.html">
-<link title="Errormsg" rel="Chapter" href="Errormsg.html">
-<link title="Clist" rel="Chapter" href="Clist.html">
-<link title="Stats" rel="Chapter" href="Stats.html">
-<link title="Cil" rel="Chapter" href="Cil.html">
-<link title="Formatcil" rel="Chapter" href="Formatcil.html">
-<link title="Alpha" rel="Chapter" href="Alpha.html">
-<link title="Cillower" rel="Chapter" href="Cillower.html">
-<link title="Cfg" rel="Chapter" href="Cfg.html">
-<link title="Dataflow" rel="Chapter" href="Dataflow.html">
-<link title="Dominators" rel="Chapter" href="Dominators.html"><title>CIL API Documentation (version 1.3.5) : Cil.cilVisitor</title>
-</head>
-<body>
-<div class="navbar">&nbsp;<a href="Cil.html">Up</a>
-&nbsp;<a href="Cil.cilPrinter.html">Next</a>
-</div>
-<center><h1>Class type <a href="type_Cil.cilVisitor.html">Cil.cilVisitor</a></h1></center>
-<br>
-<pre><span class="keyword">class type</span> <a name="TYPEcilVisitor"></a>cilVisitor = <code class="code">object</code> <a href="Cil.cilVisitor.html">..</a> <code class="code">end</code></pre>A visitor interface for traversing CIL trees. Create instantiations of 
- this type by specializing the class <a href="Cil.nopCilVisitor.html"><code class="code">Cil.nopCilVisitor</code></a>. Each of the 
- specialized visiting functions can also call the <code class="code">queueInstr</code> to specify 
- that some instructions should be inserted before the current instruction 
- or statement. Use syntax like <code class="code">self#queueInstr</code> to call a method
- associated with the current object.<br>
-<hr width="100%">
-<pre><span class="keyword">method</span> <a name="METHODvvdec"></a>vvdec : <code class="type"><a href="Cil.html#TYPEvarinfo">varinfo</a> -> <a href="Cil.html#TYPEvarinfo">varinfo</a> <a href="Cil.html#TYPEvisitAction">visitAction</a></code></pre><div class="info">
-Invoked for each variable declaration. The subtrees to be traversed 
- are those corresponding to the type and attributes of the variable. 
- Note that variable declarations are all the <code class="code">GVar</code>, <code class="code">GVarDecl</code>, <code class="code">GFun</code>, 
- all the <code class="code">varinfo</code> in formals of function types, and the formals and 
- locals for function definitions. This means that the list of formals 
- in a function definition will be traversed twice, once as part of the 
- function type and second as part of the formals in a function 
- definition.<br>
-</div>
-<pre><span class="keyword">method</span> <a name="METHODvvrbl"></a>vvrbl : <code class="type"><a href="Cil.html#TYPEvarinfo">varinfo</a> -> <a href="Cil.html#TYPEvarinfo">varinfo</a> <a href="Cil.html#TYPEvisitAction">visitAction</a></code></pre><div class="info">
-Invoked on each variable use. Here only the <code class="code">SkipChildren</code> and 
- <code class="code">ChangeTo</code> actions make sense since there are no subtrees. Note that 
- the type and attributes of the variable are not traversed for a 
- variable use<br>
-</div>
-<pre><span class="keyword">method</span> <a name="METHODvexpr"></a>vexpr : <code class="type"><a href="Cil.html#TYPEexp">exp</a> -> <a href="Cil.html#TYPEexp">exp</a> <a href="Cil.html#TYPEvisitAction">visitAction</a></code></pre><div class="info">
-Invoked on each expression occurrence. The subtrees are the 
- subexpressions, the types (for a <code class="code">Cast</code> or <code class="code">SizeOf</code> expression) or the 
- variable use.<br>
-</div>
-<pre><span class="keyword">method</span> <a name="METHODvlval"></a>vlval : <code class="type"><a href="Cil.html#TYPElval">lval</a> -> <a href="Cil.html#TYPElval">lval</a> <a href="Cil.html#TYPEvisitAction">visitAction</a></code></pre><div class="info">
-Invoked on each lvalue occurrence<br>
-</div>
-<pre><span class="keyword">method</span> <a name="METHODvoffs"></a>voffs : <code class="type"><a href="Cil.html#TYPEoffset">offset</a> -> <a href="Cil.html#TYPEoffset">offset</a> <a href="Cil.html#TYPEvisitAction">visitAction</a></code></pre><div class="info">
-Invoked on each offset occurrence that is *not* as part
- of an initializer list specification, i.e. in an lval or
- recursively inside an offset.<br>
-</div>
-<pre><span class="keyword">method</span> <a name="METHODvinitoffs"></a>vinitoffs : <code class="type"><a href="Cil.html#TYPEoffset">offset</a> -> <a href="Cil.html#TYPEoffset">offset</a> <a href="Cil.html#TYPEvisitAction">visitAction</a></code></pre><div class="info">
-Invoked on each offset appearing in the list of a 
- CompoundInit initializer.<br>
-</div>
-<pre><span class="keyword">method</span> <a name="METHODvinst"></a>vinst : <code class="type"><a href="Cil.html#TYPEinstr">instr</a> -> <a href="Cil.html#TYPEinstr">instr</a> list <a href="Cil.html#TYPEvisitAction">visitAction</a></code></pre><div class="info">
-Invoked on each instruction occurrence. The <code class="code">ChangeTo</code> action can
- replace this instruction with a list of instructions<br>
-</div>
-<pre><span class="keyword">method</span> <a name="METHODvstmt"></a>vstmt : <code class="type"><a href="Cil.html#TYPEstmt">stmt</a> -> <a href="Cil.html#TYPEstmt">stmt</a> <a href="Cil.html#TYPEvisitAction">visitAction</a></code></pre><div class="info">
-Control-flow statement. The default <code class="code">DoChildren</code> action does not 
- create a new statement when the components change. Instead it updates 
- the contents of the original statement. This is done to preserve the 
- sharing with <code class="code">Goto</code> and <code class="code">Case</code> statements that point to the original 
- statement. If you use the <code class="code">ChangeTo</code> action then you should take care 
- of preserving that sharing yourself.<br>
-</div>
-<pre><span class="keyword">method</span> <a name="METHODvblock"></a>vblock : <code class="type"><a href="Cil.html#TYPEblock">block</a> -> <a href="Cil.html#TYPEblock">block</a> <a href="Cil.html#TYPEvisitAction">visitAction</a></code></pre><div class="info">
-Block.<br>
-</div>
-<pre><span class="keyword">method</span> <a name="METHODvfunc"></a>vfunc : <code class="type"><a href="Cil.html#TYPEfundec">fundec</a> -> <a href="Cil.html#TYPEfundec">fundec</a> <a href="Cil.html#TYPEvisitAction">visitAction</a></code></pre><div class="info">
-Function definition. 
-                                                    Replaced in place.<br>
-</div>
-<pre><span class="keyword">method</span> <a name="METHODvglob"></a>vglob : <code class="type"><a href="Cil.html#TYPEglobal">global</a> -> <a href="Cil.html#TYPEglobal">global</a> list <a href="Cil.html#TYPEvisitAction">visitAction</a></code></pre><div class="info">
-Global (vars, types,
-                                                      etc.)<br>
-</div>
-<pre><span class="keyword">method</span> <a name="METHODvinit"></a>vinit : <code class="type"><a href="Cil.html#TYPEinit">init</a> -> <a href="Cil.html#TYPEinit">init</a> <a href="Cil.html#TYPEvisitAction">visitAction</a></code></pre><div class="info">
-Initializers for globals<br>
-</div>
-<pre><span class="keyword">method</span> <a name="METHODvtype"></a>vtype : <code class="type"><a href="Cil.html#TYPEtyp">typ</a> -> <a href="Cil.html#TYPEtyp">typ</a> <a href="Cil.html#TYPEvisitAction">visitAction</a></code></pre><div class="info">
-Use of some type. Note 
- that for structure/union 
- and enumeration types the 
- definition of the 
- composite type is not 
- visited. Use <code class="code">vglob</code> to 
- visit it.<br>
-</div>
-<pre><span class="keyword">method</span> <a name="METHODvattr"></a>vattr : <code class="type"><a href="Cil.html#TYPEattribute">attribute</a> -> <a href="Cil.html#TYPEattribute">attribute</a> list <a href="Cil.html#TYPEvisitAction">visitAction</a></code></pre><div class="info">
-Attribute. Each attribute can be replaced by a list<br>
-</div>
-<pre><span class="keyword">method</span> <a name="METHODvattrparam"></a>vattrparam : <code class="type"><a href="Cil.html#TYPEattrparam">attrparam</a> -> <a href="Cil.html#TYPEattrparam">attrparam</a> <a href="Cil.html#TYPEvisitAction">visitAction</a></code></pre><div class="info">
-Attribute parameters.<br>
-</div>
-<pre><span class="keyword">method</span> <a name="METHODqueueInstr"></a>queueInstr : <code class="type"><a href="Cil.html#TYPEinstr">instr</a> list -> unit</code></pre><div class="info">
-Add here instructions while visiting to queue them to preceede the 
- current statement or instruction being processed. Use this method only 
- when you are visiting an expression that is inside a function body, or 
- a statement, because otherwise there will no place for the visitor to 
- place your instructions.<br>
-</div>
-<pre><span class="keyword">method</span> <a name="METHODunqueueInstr"></a>unqueueInstr : <code class="type">unit -> <a href="Cil.html#TYPEinstr">instr</a> list</code></pre><div class="info">
-Gets the queue of instructions and resets the queue. This is done 
- automatically for you when you visit statments.<br>
-</div>
-</body></html>
\ No newline at end of file
diff --git a/cil/doc/api/Cil.defaultCilPrinterClass.html b/cil/doc/api/Cil.defaultCilPrinterClass.html
deleted file mode 100644
index d85955953..000000000
--- a/cil/doc/api/Cil.defaultCilPrinterClass.html
+++ /dev/null
@@ -1,36 +0,0 @@
-<html>
-<head>
-<link rel="stylesheet" href="style.css" type="text/css">
-<link rel="Start" href="index.html">
-<link rel="previous" href="Cil.nopCilVisitor.html">
-<link rel="next" href="Cil.plainCilPrinterClass.html">
-<link rel="Up" href="Cil.html">
-<link title="Index of types" rel=Appendix href="index_types.html">
-<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
-<link title="Index of values" rel=Appendix href="index_values.html">
-<link title="Index of class methods" rel=Appendix href="index_methods.html">
-<link title="Index of classes" rel=Appendix href="index_classes.html">
-<link title="Index of class types" rel=Appendix href="index_class_types.html">
-<link title="Index of modules" rel=Appendix href="index_modules.html">
-<link title="Index of module types" rel=Appendix href="index_module_types.html">
-<link title="Pretty" rel="Chapter" href="Pretty.html">
-<link title="Errormsg" rel="Chapter" href="Errormsg.html">
-<link title="Clist" rel="Chapter" href="Clist.html">
-<link title="Stats" rel="Chapter" href="Stats.html">
-<link title="Cil" rel="Chapter" href="Cil.html">
-<link title="Formatcil" rel="Chapter" href="Formatcil.html">
-<link title="Alpha" rel="Chapter" href="Alpha.html">
-<link title="Cillower" rel="Chapter" href="Cillower.html">
-<link title="Cfg" rel="Chapter" href="Cfg.html">
-<link title="Dataflow" rel="Chapter" href="Dataflow.html">
-<link title="Dominators" rel="Chapter" href="Dominators.html"><title>CIL API Documentation (version 1.3.5) : Cil.defaultCilPrinterClass</title>
-</head>
-<body>
-<div class="navbar"><a href="Cil.nopCilVisitor.html">Previous</a>
-&nbsp;<a href="Cil.html">Up</a>
-&nbsp;<a href="Cil.plainCilPrinterClass.html">Next</a>
-</div>
-<center><h1>Class <a href="type_Cil.defaultCilPrinterClass.html">Cil.defaultCilPrinterClass</a></h1></center>
-<br>
-<pre><span class="keyword">class</span> <a name="TYPEdefaultCilPrinterClass"></a>defaultCilPrinterClass : <code class="type"></code><code class="type"><a href="Cil.cilPrinter.html">cilPrinter</a></code></pre><hr width="100%">
-</body></html>
\ No newline at end of file
diff --git a/cil/doc/api/Cil.html b/cil/doc/api/Cil.html
deleted file mode 100644
index f2e09c270..000000000
--- a/cil/doc/api/Cil.html
+++ /dev/null
@@ -1,3337 +0,0 @@
-<html>
-<head>
-<link rel="stylesheet" href="style.css" type="text/css">
-<link rel="Start" href="index.html">
-<link rel="previous" href="Stats.html">
-<link rel="next" href="Formatcil.html">
-<link rel="Up" href="index.html">
-<link title="Index of types" rel=Appendix href="index_types.html">
-<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
-<link title="Index of values" rel=Appendix href="index_values.html">
-<link title="Index of class methods" rel=Appendix href="index_methods.html">
-<link title="Index of classes" rel=Appendix href="index_classes.html">
-<link title="Index of class types" rel=Appendix href="index_class_types.html">
-<link title="Index of modules" rel=Appendix href="index_modules.html">
-<link title="Index of module types" rel=Appendix href="index_module_types.html">
-<link title="Pretty" rel="Chapter" href="Pretty.html">
-<link title="Errormsg" rel="Chapter" href="Errormsg.html">
-<link title="Clist" rel="Chapter" href="Clist.html">
-<link title="Stats" rel="Chapter" href="Stats.html">
-<link title="Cil" rel="Chapter" href="Cil.html">
-<link title="Formatcil" rel="Chapter" href="Formatcil.html">
-<link title="Alpha" rel="Chapter" href="Alpha.html">
-<link title="Cillower" rel="Chapter" href="Cillower.html">
-<link title="Cfg" rel="Chapter" href="Cfg.html">
-<link title="Dataflow" rel="Chapter" href="Dataflow.html">
-<link title="Dominators" rel="Chapter" href="Dominators.html"><title>CIL API Documentation (version 1.3.5) : Cil</title>
-</head>
-<body>
-<div class="navbar"><a href="Stats.html">Previous</a>
-&nbsp;<a href="index.html">Up</a>
-&nbsp;<a href="Formatcil.html">Next</a>
-</div>
-<center><h1>Module <a href="type_Cil.html">Cil</a></h1></center>
-<br>
-<pre><span class="keyword">module</span> Cil: <code class="code">sig</code> <a href="Cil.html">..</a> <code class="code">end</code></pre>CIL API Documentation. An html version of this document can be found at 
- http://manju.cs.berkeley.edu/cil.<br>
-<hr width="100%">
-<pre><span class="keyword">val</span> <a name="VALinitCIL"></a>initCIL : <code class="type">unit -> unit</code></pre><div class="info">
-Call this function to perform some initialization. Call if after you have 
- set <a href="Cil.html#VALmsvcMode"><code class="code">Cil.msvcMode</code></a>.<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALcilVersion"></a>cilVersion : <code class="type">string</code></pre><div class="info">
-This are the CIL version numbers. A CIL version is a number of the form 
- M.m.r (major, minor and release)<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALcilVersionMajor"></a>cilVersionMajor : <code class="type">int</code></pre><pre><span class="keyword">val</span> <a name="VALcilVersionMinor"></a>cilVersionMinor : <code class="type">int</code></pre><pre><span class="keyword">val</span> <a name="VALcilVersionRevision"></a>cilVersionRevision : <code class="type">int</code></pre><br>
-This module defines the abstract syntax of CIL. It also provides utility 
- functions for traversing the CIL data structures, and pretty-printing 
- them. The parser for both the GCC and MSVC front-ends can be invoked as 
- <code class="code">Frontc.parse: string -&gt; unit -&gt;</code> <a href="Cil.html#TYPEfile"><code class="code">Cil.file</code></a>. This function must be given 
- the name of a preprocessed C file and will return the top-level data 
- structure that describes a whole source file. By default the parsing and 
- elaboration into CIL is done as for GCC source. If you want to use MSVC 
- source you must set the <a href="Cil.html#VALmsvcMode"><code class="code">Cil.msvcMode</code></a> to <code class="code">true</code> and must also invoke the 
- function <code class="code">Frontc.setMSVCMode: unit -&gt; unit</code>.<br>
-<br>
-<b>The Abstract Syntax of CIL</b><br>
-<br>
-The top-level representation of a CIL source file (and the result of the 
- parsing and elaboration). Its main contents is the list of global 
- declarations and definitions. You can iterate over the globals in a 
- <a href="Cil.html#TYPEfile"><code class="code">Cil.file</code></a> using the following iterators: <a href="Cil.html#VALmapGlobals"><code class="code">Cil.mapGlobals</code></a>, 
- <a href="Cil.html#VALiterGlobals"><code class="code">Cil.iterGlobals</code></a> and <a href="Cil.html#VALfoldGlobals"><code class="code">Cil.foldGlobals</code></a>. You can also use the 
- <a href="Cil.html#VALdummyFile"><code class="code">Cil.dummyFile</code></a> when you need a <a href="Cil.html#TYPEfile"><code class="code">Cil.file</code></a> as a placeholder. For each 
- global item CIL stores the source location where it appears (using the 
- type <a href="Cil.html#TYPElocation"><code class="code">Cil.location</code></a>)<br>
-<br><code><span class="keyword">type</span> <a name="TYPEfile"></a><code class="type"></code>file = {</code><table class="typetable">
-<tr>
-<td align="left" valign="top" >
-<code>&nbsp;&nbsp;</code></td>
-<td align="left" valign="top" >
-<code><span class="keyword">mutable&nbsp;</span>fileName&nbsp;: <code class="type">string</code>;</code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>The complete file name</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code>&nbsp;&nbsp;</code></td>
-<td align="left" valign="top" >
-<code><span class="keyword">mutable&nbsp;</span>globals&nbsp;: <code class="type"><a href="Cil.html#TYPEglobal">global</a> list</code>;</code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>List of globals as they will appear 
-                                        in the printed file</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code>&nbsp;&nbsp;</code></td>
-<td align="left" valign="top" >
-<code><span class="keyword">mutable&nbsp;</span>globinit&nbsp;: <code class="type"><a href="Cil.html#TYPEfundec">fundec</a> option</code>;</code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>An optional global initializer function. This is a function where 
- you can put stuff that must be executed before the program is 
- started. This function, is conceptually at the end of the file, 
- although it is not part of the globals list. Use <a href="Cil.html#VALgetGlobInit"><code class="code">Cil.getGlobInit</code></a> 
- to create/get one.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code>&nbsp;&nbsp;</code></td>
-<td align="left" valign="top" >
-<code><span class="keyword">mutable&nbsp;</span>globinitcalled&nbsp;: <code class="type">bool</code>;</code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>Whether the global initialization function is called in main. This 
- should always be false if there is no global initializer. When you 
- create a global initialization CIL will try to insert code in main 
- to call it. This will not happen if your file does not contain a 
- function called "main"</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr></table>
-}
-
-<div class="info">
-Top-level representation of a C source file<br>
-</div>
-
-<pre><span class="keyword">type</span> <a name="TYPEcomment"></a><code class="type"></code>comment = <code class="type"><a href="Cil.html#TYPElocation">location</a> * string</code> </pre>
-
-<br>
-<b>Globals</b>. The main type for representing global declarations and 
- definitions. A list of these form a CIL file. The order of globals in the 
- file is generally important.<br>
-<br><code><span class="keyword">type</span> <a name="TYPEglobal"></a><code class="type"></code>global = </code><table class="typetable">
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">GType</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEtypeinfo">typeinfo</a> * <a href="Cil.html#TYPElocation">location</a></code></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>A typedef. All uses of type names (through the <code class="code">TNamed</code> constructor) 
-        must be preceded in the file by a definition of the name. The string 
-        is the defined name and always not-empty.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">GCompTag</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEcompinfo">compinfo</a> * <a href="Cil.html#TYPElocation">location</a></code></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>Defines a struct/union tag with some fields. There must be one of 
-        these for each struct/union tag that you use (through the <code class="code">TComp</code> 
-        constructor) since this is the only context in which the fields are 
-        printed. Consequently nested structure tag definitions must be 
-        broken into individual definitions with the innermost structure 
-        defined first.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">GCompTagDecl</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEcompinfo">compinfo</a> * <a href="Cil.html#TYPElocation">location</a></code></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>Declares a struct/union tag. Use as a forward declaration. This is 
- printed without the fields.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">GEnumTag</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEenuminfo">enuminfo</a> * <a href="Cil.html#TYPElocation">location</a></code></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>Declares an enumeration tag with some fields. There must be one of 
-      these for each enumeration tag that you use (through the <code class="code">TEnum</code> 
-      constructor) since this is the only context in which the items are 
-      printed.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">GEnumTagDecl</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEenuminfo">enuminfo</a> * <a href="Cil.html#TYPElocation">location</a></code></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>Declares an enumeration tag. Use as a forward declaration. This is 
- printed without the items.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">GVarDecl</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEvarinfo">varinfo</a> * <a href="Cil.html#TYPElocation">location</a></code></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>A variable declaration (not a definition). If the variable has a 
-       function type then this is a prototype. There can be several 
-       declarations and at most one definition for a given variable. If both 
-       forms appear then they must share the same varinfo structure. A 
-       prototype shares the varinfo with the fundec of the definition. Either 
-       has storage Extern or there must be a definition in this file</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">GVar</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEvarinfo">varinfo</a> * <a href="Cil.html#TYPEinitinfo">initinfo</a> * <a href="Cil.html#TYPElocation">location</a></code></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>A variable definition. Can have an initializer. The initializer is 
- updateable so that you can change it without requiring to recreate 
- the list of globals. There can be at most one definition for a 
- variable in an entire program. Cannot have storage Extern or function 
- type.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">GFun</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEfundec">fundec</a> * <a href="Cil.html#TYPElocation">location</a></code></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>A function definition.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">GAsm</span> <span class="keyword">of</span> <code class="type">string * <a href="Cil.html#TYPElocation">location</a></code></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>Global asm statement. These ones 
-                                            can contain only a template</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">GPragma</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEattribute">attribute</a> * <a href="Cil.html#TYPElocation">location</a></code></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>Pragmas at top level. Use the same 
-                                            syntax as attributes</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">GText</span> <span class="keyword">of</span> <code class="type">string</code></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>Some text (printed verbatim) at 
-                                            top level. E.g., this way you can 
-                                            put comments in the output.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr></table>
-
-<div class="info">
-A global declaration or definition<br>
-</div>
-
-<br>
-<b>Types</b>. A C type is represented in CIL using the type <a href="Cil.html#TYPEtyp"><code class="code">Cil.typ</code></a>. 
- Among types we differentiate the integral types (with different kinds 
- denoting the sign and precision), floating point types, enumeration types, 
- array and pointer types, and function types. Every type is associated with 
- a list of attributes, which are always kept in sorted order. Use 
- <a href="Cil.html#VALaddAttribute"><code class="code">Cil.addAttribute</code></a> and <a href="Cil.html#VALaddAttributes"><code class="code">Cil.addAttributes</code></a> to construct list of 
- attributes. If you want to inspect a type, you should use 
- <a href="Cil.html#VALunrollType"><code class="code">Cil.unrollType</code></a> or <a href="Cil.html#VALunrollTypeDeep"><code class="code">Cil.unrollTypeDeep</code></a> to see through the uses of 
- named types.<br>
-<br>
-CIL is configured at build-time with the sizes and alignments of the 
- underlying compiler (GCC or MSVC). CIL contains functions that can compute 
- the size of a type (in bits) <a href="Cil.html#VALbitsSizeOf"><code class="code">Cil.bitsSizeOf</code></a>, the alignment of a type 
- (in bytes) <a href="Cil.html#VALalignOf_int"><code class="code">Cil.alignOf_int</code></a>, and can convert an offset into a start and 
- width (both in bits) using the function <a href="Cil.html#VALbitsOffset"><code class="code">Cil.bitsOffset</code></a>. At the moment 
- these functions do not take into account the <code class="code">packed</code> attributes and 
- pragmas.<br>
-<br><code><span class="keyword">type</span> <a name="TYPEtyp"></a><code class="type"></code>typ = </code><table class="typetable">
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">TVoid</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEattributes">attributes</a></code></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>Void type. Also predefined as <a href="Cil.html#VALvoidType"><code class="code">Cil.voidType</code></a></code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">TInt</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEikind">ikind</a> * <a href="Cil.html#TYPEattributes">attributes</a></code></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>An integer type. The kind specifies the sign and width. Several 
- useful variants are predefined as <a href="Cil.html#VALintType"><code class="code">Cil.intType</code></a>, <a href="Cil.html#VALuintType"><code class="code">Cil.uintType</code></a>, 
- <a href="Cil.html#VALlongType"><code class="code">Cil.longType</code></a>, <a href="Cil.html#VALcharType"><code class="code">Cil.charType</code></a>.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">TFloat</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEfkind">fkind</a> * <a href="Cil.html#TYPEattributes">attributes</a></code></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>A floating-point type. The kind specifies the precision. You can 
- also use the predefined constant <a href="Cil.html#VALdoubleType"><code class="code">Cil.doubleType</code></a>.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">TPtr</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEtyp">typ</a> * <a href="Cil.html#TYPEattributes">attributes</a></code></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>Pointer type. Several useful variants are predefined as 
- <a href="Cil.html#VALcharPtrType"><code class="code">Cil.charPtrType</code></a>, <a href="Cil.html#VALcharConstPtrType"><code class="code">Cil.charConstPtrType</code></a> (pointer to a 
- constant character), <a href="Cil.html#VALvoidPtrType"><code class="code">Cil.voidPtrType</code></a>, 
- <a href="Cil.html#VALintPtrType"><code class="code">Cil.intPtrType</code></a></code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">TArray</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEtyp">typ</a> * <a href="Cil.html#TYPEexp">exp</a> option * <a href="Cil.html#TYPEattributes">attributes</a></code></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>Array type. It indicates the base type and the array length.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">TFun</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEtyp">typ</a> * (string * <a href="Cil.html#TYPEtyp">typ</a> * <a href="Cil.html#TYPEattributes">attributes</a>) list option * bool<br>        * <a href="Cil.html#TYPEattributes">attributes</a></code></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>Function type. Indicates the type of the result, the name, type 
- and name attributes of the formal arguments (<code class="code">None</code> if no 
- arguments were specified, as in a function whose definition or 
- prototype we have not seen; <code class="code">Some []</code> means void). Use 
- <a href="Cil.html#VALargsToList"><code class="code">Cil.argsToList</code></a> to obtain a list of arguments. The boolean 
- indicates if it is a variable-argument function. If this is the 
- type of a varinfo for which we have a function declaration then 
- the information for the formals must match that in the 
- function's sformals. Use <a href="Cil.html#VALsetFormals"><code class="code">Cil.setFormals</code></a>, or 
- <a href="Cil.html#VALsetFunctionType"><code class="code">Cil.setFunctionType</code></a>, or <a href="Cil.html#VALmakeFormalVar"><code class="code">Cil.makeFormalVar</code></a> for this 
- purpose.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">TNamed</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEtypeinfo">typeinfo</a> * <a href="Cil.html#TYPEattributes">attributes</a></code></code></td>
-
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">TComp</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEcompinfo">compinfo</a> * <a href="Cil.html#TYPEattributes">attributes</a></code></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>The most delicate issue for C types is that recursion that is possible by 
- using structures and pointers. To address this issue we have a more 
- complex representation for structured types (struct and union). Each such 
- type is represented using the <a href="Cil.html#TYPEcompinfo"><code class="code">Cil.compinfo</code></a> type. For each composite 
- type the <a href="Cil.html#TYPEcompinfo"><code class="code">Cil.compinfo</code></a> structure must be declared at top level using 
- <code class="code">GCompTag</code> and all references to it must share the same copy of the 
- structure. The attributes given are those pertaining to this use of the 
- type and are in addition to the attributes that were given at the 
- definition of the type and which are stored in the <a href="Cil.html#TYPEcompinfo"><code class="code">Cil.compinfo</code></a>.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">TEnum</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEenuminfo">enuminfo</a> * <a href="Cil.html#TYPEattributes">attributes</a></code></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>A reference to an enumeration type. All such references must
-               share the enuminfo among them and with a <code class="code">GEnumTag</code> global that 
-               precedes all uses. The attributes refer to this use of the 
-               enumeration and are in addition to the attributes of the 
-               enumeration itself, which are stored inside the enuminfo</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">TBuiltin_va_list</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEattributes">attributes</a></code></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>This is the same as the gcc's type with the same name</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr></table>
-
-
-<br>
-There are a number of functions for querying the kind of a type. These are
- <a href="Cil.html#VALisIntegralType"><code class="code">Cil.isIntegralType</code></a>, 
- <a href="Cil.html#VALisArithmeticType"><code class="code">Cil.isArithmeticType</code></a>, 
- <a href="Cil.html#VALisPointerType"><code class="code">Cil.isPointerType</code></a>, 
- <a href="Cil.html#VALisFunctionType"><code class="code">Cil.isFunctionType</code></a>, 
- <a href="Cil.html#VALisArrayType"><code class="code">Cil.isArrayType</code></a>. 
-<p>
-
- There are two easy ways to scan a type. First, you can use the
-<a href="Cil.html#VALexistsType"><code class="code">Cil.existsType</code></a> to return a boolean answer about a type. This function
-is controlled by a user-provided function that is queried for each type that is
-used to construct the current type. The function can specify whether to
-terminate the scan with a boolean result or to continue the scan for the
-nested types. 
-<p>
-
- The other method for scanning types is provided by the visitor interface (see
- <a href="Cil.cilVisitor.html"><code class="code">Cil.cilVisitor</code></a>).
-<p>
-
- If you want to compare types (or to use them as hash-values) then you should
-use instead type signatures (represented as <a href="Cil.html#TYPEtypsig"><code class="code">Cil.typsig</code></a>). These
-contain the same information as types but canonicalized such that simple Ocaml
-structural equality will tell whether two types are equal. Use
-<a href="Cil.html#VALtypeSig"><code class="code">Cil.typeSig</code></a> to compute the signature of a type. If you want to ignore
-certain type attributes then use <a href="Cil.html#VALtypeSigWithAttrs"><code class="code">Cil.typeSigWithAttrs</code></a>.<br>
-<br><code><span class="keyword">type</span> <a name="TYPEikind"></a><code class="type"></code>ikind = </code><table class="typetable">
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">IChar</span></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code><code class="code">char</code></code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">ISChar</span></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code><code class="code">signed char</code></code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">IUChar</span></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code><code class="code">unsigned char</code></code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">IInt</span></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code><code class="code">int</code></code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">IUInt</span></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code><code class="code">unsigned int</code></code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">IShort</span></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code><code class="code">short</code></code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">IUShort</span></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code><code class="code">unsigned short</code></code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">ILong</span></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code><code class="code">long</code></code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">IULong</span></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code><code class="code">unsigned long</code></code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">ILongLong</span></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code><code class="code">long long</code> (or <code class="code">_int64</code> on Microsoft Visual C)</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">IULongLong</span></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code><code class="code">unsigned long long</code> (or <code class="code">unsigned _int64</code> on Microsoft 
-                    Visual C)</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr></table>
-
-<div class="info">
-Various kinds of integers<br>
-</div>
-
-<br><code><span class="keyword">type</span> <a name="TYPEfkind"></a><code class="type"></code>fkind = </code><table class="typetable">
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">FFloat</span></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code><code class="code">float</code></code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">FDouble</span></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code><code class="code">double</code></code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">FLongDouble</span></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code><code class="code">long double</code></code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr></table>
-
-<div class="info">
-Various kinds of floating-point numbers<br>
-</div>
-
-<br>
-<b>Attributes.</b><br>
-<br><code><span class="keyword">type</span> <a name="TYPEattribute"></a><code class="type"></code>attribute = </code><table class="typetable">
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">Attr</span> <span class="keyword">of</span> <code class="type">string * <a href="Cil.html#TYPEattrparam">attrparam</a> list</code></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>An attribute has a name and some optional parameters. The name should not 
- start or end with underscore. When CIL parses attribute names it will 
- strip leading and ending underscores (to ensure that the multitude of GCC 
- attributes such as const, __const and __const__ all mean the same thing.)</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr></table>
-
-
-<pre><span class="keyword">type</span> <a name="TYPEattributes"></a><code class="type"></code>attributes = <code class="type"><a href="Cil.html#TYPEattribute">attribute</a> list</code> </pre>
-<div class="info">
-Attributes are lists sorted by the attribute name. Use the functions 
- <a href="Cil.html#VALaddAttribute"><code class="code">Cil.addAttribute</code></a> and <a href="Cil.html#VALaddAttributes"><code class="code">Cil.addAttributes</code></a> to insert attributes in an 
- attribute list and maintain the sortedness.<br>
-</div>
-
-<br><code><span class="keyword">type</span> <a name="TYPEattrparam"></a><code class="type"></code>attrparam = </code><table class="typetable">
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">AInt</span> <span class="keyword">of</span> <code class="type">int</code></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>An integer constant</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">AStr</span> <span class="keyword">of</span> <code class="type">string</code></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>A string constant</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">ACons</span> <span class="keyword">of</span> <code class="type">string * <a href="Cil.html#TYPEattrparam">attrparam</a> list</code></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>Constructed attributes. These 
-                                             are printed <code class="code">foo(a1,a2,...,an)</code>. 
-                                             The list of parameters can be 
-                                             empty and in that case the 
-                                             parentheses are not printed.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">ASizeOf</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEtyp">typ</a></code></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>A way to talk about types</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">ASizeOfE</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEattrparam">attrparam</a></code></code></td>
-
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">ASizeOfS</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEtypsig">typsig</a></code></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>Replacement for ASizeOf in type
-                                             signatures.  Only used for
-                                             attributes inside typsigs.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">AAlignOf</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEtyp">typ</a></code></code></td>
-
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">AAlignOfE</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEattrparam">attrparam</a></code></code></td>
-
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">AAlignOfS</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEtypsig">typsig</a></code></code></td>
-
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">AUnOp</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEunop">unop</a> * <a href="Cil.html#TYPEattrparam">attrparam</a></code></code></td>
-
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">ABinOp</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEbinop">binop</a> * <a href="Cil.html#TYPEattrparam">attrparam</a> * <a href="Cil.html#TYPEattrparam">attrparam</a></code></code></td>
-
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">ADot</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEattrparam">attrparam</a> * string</code></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>a.foo *</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr></table>
-
-<div class="info">
-The type of parameters of attributes<br>
-</div>
-
-<br>
-<b>Structures.</b> The <a href="Cil.html#TYPEcompinfo"><code class="code">Cil.compinfo</code></a> describes the definition of a 
- structure or union type. Each such <a href="Cil.html#TYPEcompinfo"><code class="code">Cil.compinfo</code></a> must be defined at the 
- top-level using the <code class="code">GCompTag</code> constructor and must be shared by all 
- references to this type (using either the <code class="code">TComp</code> type constructor or from 
- the definition of the fields. 
-<p>
-
-   If all you need is to scan the definition of each 
- composite type once, you can do that by scanning all top-level <code class="code">GCompTag</code>. 
-<p>
-
- Constructing a <a href="Cil.html#TYPEcompinfo"><code class="code">Cil.compinfo</code></a> can be tricky since it must contain fields 
- that might refer to the host <a href="Cil.html#TYPEcompinfo"><code class="code">Cil.compinfo</code></a> and furthermore the type of 
- the field might need to refer to the <a href="Cil.html#TYPEcompinfo"><code class="code">Cil.compinfo</code></a> for recursive types. 
- Use the <a href="Cil.html#VALmkCompInfo"><code class="code">Cil.mkCompInfo</code></a> function to create a <a href="Cil.html#TYPEcompinfo"><code class="code">Cil.compinfo</code></a>. You can 
- easily fetch the <a href="Cil.html#TYPEfieldinfo"><code class="code">Cil.fieldinfo</code></a> for a given field in a structure with 
- <a href="Cil.html#VALgetCompField"><code class="code">Cil.getCompField</code></a>.<br>
-<br><code><span class="keyword">type</span> <a name="TYPEcompinfo"></a><code class="type"></code>compinfo = {</code><table class="typetable">
-<tr>
-<td align="left" valign="top" >
-<code>&nbsp;&nbsp;</code></td>
-<td align="left" valign="top" >
-<code><span class="keyword">mutable&nbsp;</span>cstruct&nbsp;: <code class="type">bool</code>;</code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>True if struct, False if union</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code>&nbsp;&nbsp;</code></td>
-<td align="left" valign="top" >
-<code><span class="keyword">mutable&nbsp;</span>cname&nbsp;: <code class="type">string</code>;</code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>The name. Always non-empty. Use <a href="Cil.html#VALcompFullName"><code class="code">Cil.compFullName</code></a> to get the full 
- name of a comp (along with the struct or union)</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code>&nbsp;&nbsp;</code></td>
-<td align="left" valign="top" >
-<code><span class="keyword">mutable&nbsp;</span>ckey&nbsp;: <code class="type">int</code>;</code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>A unique integer. This is assigned by <a href="Cil.html#VALmkCompInfo"><code class="code">Cil.mkCompInfo</code></a> using a 
- global variable in the Cil module. Thus two identical structs in two 
- different files might have different keys. Use <a href="Cil.html#VALcopyCompInfo"><code class="code">Cil.copyCompInfo</code></a> to 
- copy structures so that a new key is assigned.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code>&nbsp;&nbsp;</code></td>
-<td align="left" valign="top" >
-<code><span class="keyword">mutable&nbsp;</span>cfields&nbsp;: <code class="type"><a href="Cil.html#TYPEfieldinfo">fieldinfo</a> list</code>;</code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>Information about the fields. Notice that each fieldinfo has a 
- pointer back to the host compinfo. This means that you should not 
- share fieldinfo's between two compinfo's</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code>&nbsp;&nbsp;</code></td>
-<td align="left" valign="top" >
-<code><span class="keyword">mutable&nbsp;</span>cattr&nbsp;: <code class="type"><a href="Cil.html#TYPEattributes">attributes</a></code>;</code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>The attributes that are defined at the same time as the composite 
- type. These attributes can be supplemented individually at each 
- reference to this <code class="code">compinfo</code> using the <code class="code">TComp</code> type constructor.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code>&nbsp;&nbsp;</code></td>
-<td align="left" valign="top" >
-<code><span class="keyword">mutable&nbsp;</span>cdefined&nbsp;: <code class="type">bool</code>;</code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>This boolean flag can be used to distinguish between structures
-     that have not been defined and those that have been defined but have
-     no fields (such things are allowed in gcc).</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code>&nbsp;&nbsp;</code></td>
-<td align="left" valign="top" >
-<code><span class="keyword">mutable&nbsp;</span>creferenced&nbsp;: <code class="type">bool</code>;</code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>True if used. Initially set to false.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr></table>
-}
-
-<div class="info">
-The definition of a structure or union type. Use <a href="Cil.html#VALmkCompInfo"><code class="code">Cil.mkCompInfo</code></a> to 
- make one and use <a href="Cil.html#VALcopyCompInfo"><code class="code">Cil.copyCompInfo</code></a> to copy one (this ensures that a new 
- key is assigned and that the fields have the right pointers to parents.).<br>
-</div>
-
-<br>
-<b>Structure fields.</b> The <a href="Cil.html#TYPEfieldinfo"><code class="code">Cil.fieldinfo</code></a> structure is used to describe 
- a structure or union field. Fields, just like variables, can have 
- attributes associated with the field itself or associated with the type of 
- the field (stored along with the type of the field).<br>
-<br><code><span class="keyword">type</span> <a name="TYPEfieldinfo"></a><code class="type"></code>fieldinfo = {</code><table class="typetable">
-<tr>
-<td align="left" valign="top" >
-<code>&nbsp;&nbsp;</code></td>
-<td align="left" valign="top" >
-<code><span class="keyword">mutable&nbsp;</span>fcomp&nbsp;: <code class="type"><a href="Cil.html#TYPEcompinfo">compinfo</a></code>;</code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>The host structure that contains this field. There can be only one 
- <code class="code">compinfo</code> that contains the field.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code>&nbsp;&nbsp;</code></td>
-<td align="left" valign="top" >
-<code><span class="keyword">mutable&nbsp;</span>fname&nbsp;: <code class="type">string</code>;</code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>The name of the field. Might be the value of <a href="Cil.html#VALmissingFieldName"><code class="code">Cil.missingFieldName</code></a> 
- in which case it must be a bitfield and is not printed and it does not 
- participate in initialization</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code>&nbsp;&nbsp;</code></td>
-<td align="left" valign="top" >
-<code><span class="keyword">mutable&nbsp;</span>ftype&nbsp;: <code class="type"><a href="Cil.html#TYPEtyp">typ</a></code>;</code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>The type</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code>&nbsp;&nbsp;</code></td>
-<td align="left" valign="top" >
-<code><span class="keyword">mutable&nbsp;</span>fbitfield&nbsp;: <code class="type">int option</code>;</code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>If a bitfield then ftype should be an integer type and the width of 
- the bitfield must be 0 or a positive integer smaller or equal to the 
- width of the integer type. A field of width 0 is used in C to control 
- the alignment of fields.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code>&nbsp;&nbsp;</code></td>
-<td align="left" valign="top" >
-<code><span class="keyword">mutable&nbsp;</span>fattr&nbsp;: <code class="type"><a href="Cil.html#TYPEattributes">attributes</a></code>;</code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>The attributes for this field (not for its type)</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code>&nbsp;&nbsp;</code></td>
-<td align="left" valign="top" >
-<code><span class="keyword">mutable&nbsp;</span>floc&nbsp;: <code class="type"><a href="Cil.html#TYPElocation">location</a></code>;</code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>The location where this field is defined</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr></table>
-}
-
-<div class="info">
-Information about a struct/union field<br>
-</div>
-
-<br>
-<b>Enumerations.</b> Information about an enumeration. This is shared by all 
- references to an enumeration. Make sure you have a <code class="code">GEnumTag</code> for each of 
- of these.<br>
-<br><code><span class="keyword">type</span> <a name="TYPEenuminfo"></a><code class="type"></code>enuminfo = {</code><table class="typetable">
-<tr>
-<td align="left" valign="top" >
-<code>&nbsp;&nbsp;</code></td>
-<td align="left" valign="top" >
-<code><span class="keyword">mutable&nbsp;</span>ename&nbsp;: <code class="type">string</code>;</code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>The name. Always non-empty.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code>&nbsp;&nbsp;</code></td>
-<td align="left" valign="top" >
-<code><span class="keyword">mutable&nbsp;</span>eitems&nbsp;: <code class="type">(string * <a href="Cil.html#TYPEexp">exp</a> * <a href="Cil.html#TYPElocation">location</a>) list</code>;</code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>Items with names and values. This list should be non-empty. The item 
- values must be compile-time constants.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code>&nbsp;&nbsp;</code></td>
-<td align="left" valign="top" >
-<code><span class="keyword">mutable&nbsp;</span>eattr&nbsp;: <code class="type"><a href="Cil.html#TYPEattributes">attributes</a></code>;</code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>The attributes that are defined at the same time as the enumeration 
- type. These attributes can be supplemented individually at each 
- reference to this <code class="code">enuminfo</code> using the <code class="code">TEnum</code> type constructor.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code>&nbsp;&nbsp;</code></td>
-<td align="left" valign="top" >
-<code><span class="keyword">mutable&nbsp;</span>ereferenced&nbsp;: <code class="type">bool</code>;</code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>True if used. Initially set to false</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr></table>
-}
-
-<div class="info">
-Information about an enumeration<br>
-</div>
-
-<br>
-<b>Enumerations.</b> Information about an enumeration. This is shared by all 
- references to an enumeration. Make sure you have a <code class="code">GEnumTag</code> for each of 
- of these.<br>
-<br><code><span class="keyword">type</span> <a name="TYPEtypeinfo"></a><code class="type"></code>typeinfo = {</code><table class="typetable">
-<tr>
-<td align="left" valign="top" >
-<code>&nbsp;&nbsp;</code></td>
-<td align="left" valign="top" >
-<code><span class="keyword">mutable&nbsp;</span>tname&nbsp;: <code class="type">string</code>;</code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>The name. Can be empty only in a <code class="code">GType</code> when introducing a composite 
- or enumeration tag. If empty cannot be referred to from the file</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code>&nbsp;&nbsp;</code></td>
-<td align="left" valign="top" >
-<code><span class="keyword">mutable&nbsp;</span>ttype&nbsp;: <code class="type"><a href="Cil.html#TYPEtyp">typ</a></code>;</code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>The actual type. This includes the attributes that were present in 
- the typedef</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code>&nbsp;&nbsp;</code></td>
-<td align="left" valign="top" >
-<code><span class="keyword">mutable&nbsp;</span>treferenced&nbsp;: <code class="type">bool</code>;</code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>True if used. Initially set to false</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr></table>
-}
-
-<div class="info">
-Information about a defined type<br>
-</div>
-
-<br>
-<b>Variables.</b> 
- Each local or global variable is represented by a unique <a href="Cil.html#TYPEvarinfo"><code class="code">Cil.varinfo</code></a>
-structure. A global <a href="Cil.html#TYPEvarinfo"><code class="code">Cil.varinfo</code></a> can be introduced with the <code class="code">GVarDecl</code> or
-<code class="code">GVar</code> or <code class="code">GFun</code> globals. A local varinfo can be introduced as part of a
-function definition <a href="Cil.html#TYPEfundec"><code class="code">Cil.fundec</code></a>. 
-<p>
-
- All references to a given global or local variable must refer to the same
-copy of the <code class="code">varinfo</code>. Each <code class="code">varinfo</code> has a globally unique identifier that 
-can be used to index maps and hashtables (the name can also be used for this 
-purpose, except for locals from different functions). This identifier is 
-constructor using a global counter.
-<p>
-
- It is very important that you construct <code class="code">varinfo</code> structures using only one
- of the following functions:<ul>
-<li><a href="Cil.html#VALmakeGlobalVar"><code class="code">Cil.makeGlobalVar</code></a> : to make a global variable</li>
-<li><a href="Cil.html#VALmakeTempVar"><code class="code">Cil.makeTempVar</code></a> : to make a temporary local variable whose name
-will be generated so that to avoid conflict with other locals. </li>
-<li><a href="Cil.html#VALmakeLocalVar"><code class="code">Cil.makeLocalVar</code></a> : like <a href="Cil.html#VALmakeTempVar"><code class="code">Cil.makeTempVar</code></a> but you can specify the
-exact name to be used. </li>
-<li><a href="Cil.html#VALcopyVarinfo"><code class="code">Cil.copyVarinfo</code></a>: make a shallow copy of a varinfo assigning a new name 
-and a new unique identifier</li>
-</ul>
-
- A <code class="code">varinfo</code> is also used in a function type to denote the list of formals.<br>
-<br><code><span class="keyword">type</span> <a name="TYPEvarinfo"></a><code class="type"></code>varinfo = {</code><table class="typetable">
-<tr>
-<td align="left" valign="top" >
-<code>&nbsp;&nbsp;</code></td>
-<td align="left" valign="top" >
-<code><span class="keyword">mutable&nbsp;</span>vname&nbsp;: <code class="type">string</code>;</code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>The name of the variable. Cannot be empty. It is primarily your 
- responsibility to ensure the uniqueness of a variable name. For local 
- variables <a href="Cil.html#VALmakeTempVar"><code class="code">Cil.makeTempVar</code></a> helps you ensure that the name is unique.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code>&nbsp;&nbsp;</code></td>
-<td align="left" valign="top" >
-<code><span class="keyword">mutable&nbsp;</span>vtype&nbsp;: <code class="type"><a href="Cil.html#TYPEtyp">typ</a></code>;</code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>The declared type of the variable.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code>&nbsp;&nbsp;</code></td>
-<td align="left" valign="top" >
-<code><span class="keyword">mutable&nbsp;</span>vattr&nbsp;: <code class="type"><a href="Cil.html#TYPEattributes">attributes</a></code>;</code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>A list of attributes associated with the variable.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code>&nbsp;&nbsp;</code></td>
-<td align="left" valign="top" >
-<code><span class="keyword">mutable&nbsp;</span>vstorage&nbsp;: <code class="type"><a href="Cil.html#TYPEstorage">storage</a></code>;</code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>The storage-class</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code>&nbsp;&nbsp;</code></td>
-<td align="left" valign="top" >
-<code><span class="keyword">mutable&nbsp;</span>vglob&nbsp;: <code class="type">bool</code>;</code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>True if this is a global variable</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code>&nbsp;&nbsp;</code></td>
-<td align="left" valign="top" >
-<code><span class="keyword">mutable&nbsp;</span>vinline&nbsp;: <code class="type">bool</code>;</code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>Whether this varinfo is for an inline function.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code>&nbsp;&nbsp;</code></td>
-<td align="left" valign="top" >
-<code><span class="keyword">mutable&nbsp;</span>vdecl&nbsp;: <code class="type"><a href="Cil.html#TYPElocation">location</a></code>;</code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>Location of variable declaration.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code>&nbsp;&nbsp;</code></td>
-<td align="left" valign="top" >
-<code><span class="keyword">mutable&nbsp;</span>vid&nbsp;: <code class="type">int</code>;</code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>A unique integer identifier. This field will be 
- set for you if you use one of the <a href="Cil.html#VALmakeFormalVar"><code class="code">Cil.makeFormalVar</code></a>, 
- <a href="Cil.html#VALmakeLocalVar"><code class="code">Cil.makeLocalVar</code></a>, <a href="Cil.html#VALmakeTempVar"><code class="code">Cil.makeTempVar</code></a>, <a href="Cil.html#VALmakeGlobalVar"><code class="code">Cil.makeGlobalVar</code></a>, or 
- <a href="Cil.html#VALcopyVarinfo"><code class="code">Cil.copyVarinfo</code></a>.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code>&nbsp;&nbsp;</code></td>
-<td align="left" valign="top" >
-<code><span class="keyword">mutable&nbsp;</span>vaddrof&nbsp;: <code class="type">bool</code>;</code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>True if the address of this variable is taken. CIL will set these 
- flags when it parses C, but you should make sure to set the flag 
- whenever your transformation create <code class="code">AddrOf</code> expression.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code>&nbsp;&nbsp;</code></td>
-<td align="left" valign="top" >
-<code><span class="keyword">mutable&nbsp;</span>vreferenced&nbsp;: <code class="type">bool</code>;</code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>True if this variable is ever referenced. This is computed by 
- <code class="code">removeUnusedVars</code>. It is safe to just initialize this to False</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr></table>
-}
-
-<div class="info">
-Information about a variable.<br>
-</div>
-
-<br><code><span class="keyword">type</span> <a name="TYPEstorage"></a><code class="type"></code>storage = </code><table class="typetable">
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">NoStorage</span></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>The default storage. Nothing is printed</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">Static</span></code></td>
-
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">Register</span></code></td>
-
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">Extern</span></code></td>
-
-</tr></table>
-
-<div class="info">
-Storage-class information<br>
-</div>
-
-<br>
-<b>Expressions.</b> The CIL expression language contains only the side-effect free expressions of
-C. They are represented as the type <a href="Cil.html#TYPEexp"><code class="code">Cil.exp</code></a>. There are several
-interesting aspects of CIL expressions: 
-<p>
-
- Integer and floating point constants can carry their textual representation.
-This way the integer 15 can be printed as 0xF if that is how it occurred in the
-source. 
-<p>
-
- CIL uses 64 bits to represent the integer constants and also stores the width
-of the integer type. Care must be taken to ensure that the constant is
-representable with the given width. Use the functions <a href="Cil.html#VALkinteger"><code class="code">Cil.kinteger</code></a>,
-<a href="Cil.html#VALkinteger64"><code class="code">Cil.kinteger64</code></a> and <a href="Cil.html#VALinteger"><code class="code">Cil.integer</code></a> to construct constant
-expressions. CIL predefines the constants <a href="Cil.html#VALzero"><code class="code">Cil.zero</code></a>,
-<a href="Cil.html#VALone"><code class="code">Cil.one</code></a> and <a href="Cil.html#VALmone"><code class="code">Cil.mone</code></a> (for -1). 
-<p>
-
- Use the functions <a href="Cil.html#VALisConstant"><code class="code">Cil.isConstant</code></a> and <a href="Cil.html#VALisInteger"><code class="code">Cil.isInteger</code></a> to test if
-an expression is a constant and a constant integer respectively.
-<p>
-
- CIL keeps the type of all unary and binary expressions. You can think of that
-type qualifying the operator. Furthermore there are different operators for
-arithmetic and comparisons on arithmetic types and on pointers. 
-<p>
-
- Another unusual aspect of CIL is that the implicit conversion between an
-expression of array type and one of pointer type is made explicit, using the
-<code class="code">StartOf</code> expression constructor (which is not printed). If you apply the
-<code class="code">AddrOf}</code>constructor to an lvalue of type <code class="code">T</code> then you will be getting an
-expression of type <code class="code">TPtr(T)</code>.
-<p>
-
- You can find the type of an expression with <a href="Cil.html#VALtypeOf"><code class="code">Cil.typeOf</code></a>. 
-<p>
-
- You can perform constant folding on expressions using the function
-<a href="Cil.html#VALconstFold"><code class="code">Cil.constFold</code></a>.<br>
-<br><code><span class="keyword">type</span> <a name="TYPEexp"></a><code class="type"></code>exp = </code><table class="typetable">
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">Const</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEconstant">constant</a></code></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>Constant</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">Lval</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPElval">lval</a></code></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>Lvalue</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">SizeOf</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEtyp">typ</a></code></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>sizeof(&lt;type&gt;). Has <code class="code">unsigned int</code> type (ISO 6.5.3.4). This is not 
- turned into a constant because some transformations might want to 
- change types</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">SizeOfE</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEexp">exp</a></code></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>sizeof(&lt;expression&gt;)</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">SizeOfStr</span> <span class="keyword">of</span> <code class="type">string</code></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>sizeof(string_literal). We separate this case out because this is the 
- only instance in which a string literal should not be treated as 
- having type pointer to character.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">AlignOf</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEtyp">typ</a></code></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>This corresponds to the GCC __alignof_. Has <code class="code">unsigned int</code> type</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">AlignOfE</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEexp">exp</a></code></code></td>
-
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">UnOp</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEunop">unop</a> * <a href="Cil.html#TYPEexp">exp</a> * <a href="Cil.html#TYPEtyp">typ</a></code></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>Unary operation. Includes the type of the result.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">BinOp</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEbinop">binop</a> * <a href="Cil.html#TYPEexp">exp</a> * <a href="Cil.html#TYPEexp">exp</a> * <a href="Cil.html#TYPEtyp">typ</a></code></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>Binary operation. Includes the type of the result. The arithmetic 
- conversions are made explicit for the arguments.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">CastE</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEtyp">typ</a> * <a href="Cil.html#TYPEexp">exp</a></code></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>Use <a href="Cil.html#VALmkCast"><code class="code">Cil.mkCast</code></a> to make casts.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">AddrOf</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPElval">lval</a></code></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>Always use <a href="Cil.html#VALmkAddrOf"><code class="code">Cil.mkAddrOf</code></a> to construct one of these. Apply to an 
- lvalue of type <code class="code">T</code> yields an expression of type <code class="code">TPtr(T)</code></code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">StartOf</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPElval">lval</a></code></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>Conversion from an array to a pointer to the beginning of the array. 
- Given an lval of type <code class="code">TArray(T)</code> produces an expression of type 
- <code class="code">TPtr(T)</code>. In C this operation is implicit, the <code class="code">StartOf</code> operator is 
- not printed. We have it in CIL because it makes the typing rules 
- simpler.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr></table>
-
-<div class="info">
-Expressions (Side-effect free)<br>
-</div>
-
-<br>
-<b>Constants.</b><br>
-<br><code><span class="keyword">type</span> <a name="TYPEconstant"></a><code class="type"></code>constant = </code><table class="typetable">
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">CInt64</span> <span class="keyword">of</span> <code class="type">int64 * <a href="Cil.html#TYPEikind">ikind</a> * string option</code></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>Integer constant. Give the ikind (see ISO9899 6.1.3.2) and the 
- textual representation, if available. (This allows us to print a 
- constant as, for example, 0xF instead of 15.) Use <a href="Cil.html#VALinteger"><code class="code">Cil.integer</code></a> or 
- <a href="Cil.html#VALkinteger"><code class="code">Cil.kinteger</code></a> to create these. Watch out for integers that cannot be 
- represented on 64 bits. OCAML does not give Overflow exceptions.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">CStr</span> <span class="keyword">of</span> <code class="type">string</code></code></td>
-
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">CWStr</span> <span class="keyword">of</span> <code class="type">int64 list</code></code></td>
-
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">CChr</span> <span class="keyword">of</span> <code class="type">char</code></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>Character constant.  This has type int, so use charConstToInt
- to read the value in case sign-extension is needed.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">CReal</span> <span class="keyword">of</span> <code class="type">float * <a href="Cil.html#TYPEfkind">fkind</a> * string option</code></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>Floating point constant. Give the fkind (see ISO 6.4.4.2) and also 
- the textual representation, if available.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">CEnum</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEexp">exp</a> * string * <a href="Cil.html#TYPEenuminfo">enuminfo</a></code></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>An enumeration constant with the given value, name, from the given 
- enuminfo. This is used only if <a href="Cil.html#VALlowerConstants"><code class="code">Cil.lowerConstants</code></a> is true 
- (default). Use <a href="Cil.html#VALconstFoldVisitor"><code class="code">Cil.constFoldVisitor</code></a> to replace these with integer 
- constants.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr></table>
-
-<div class="info">
-Literal constants<br>
-</div>
-
-<br><code><span class="keyword">type</span> <a name="TYPEunop"></a><code class="type"></code>unop = </code><table class="typetable">
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">Neg</span></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>Unary minus</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">BNot</span></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>Bitwise complement (~)</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">LNot</span></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>Logical Not (!)</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr></table>
-
-<div class="info">
-Unary operators<br>
-</div>
-
-<br><code><span class="keyword">type</span> <a name="TYPEbinop"></a><code class="type"></code>binop = </code><table class="typetable">
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">PlusA</span></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>arithmetic +</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">PlusPI</span></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>pointer + integer</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">IndexPI</span></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>pointer + integer but only when 
- it arises from an expression 
- <code class="code">e[i]</code> when <code class="code">e</code> is a pointer and 
- not an array. This is semantically 
- the same as PlusPI but CCured uses 
- this as a hint that the integer is 
- probably positive.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">MinusA</span></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>arithmetic -</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">MinusPI</span></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>pointer - integer</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">MinusPP</span></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>pointer - pointer</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">Mult</span></code></td>
-
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">Div</span></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>/</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">Mod</span></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>%</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">Shiftlt</span></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>shift left</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">Shiftrt</span></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>shift right</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">Lt</span></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>&lt;  (arithmetic comparison)</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">Gt</span></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>&gt;  (arithmetic comparison)</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">Le</span></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>&lt;= (arithmetic comparison)</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">Ge</span></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>&gt;  (arithmetic comparison)</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">Eq</span></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>== (arithmetic comparison)</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">Ne</span></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>!= (arithmetic comparison)</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">BAnd</span></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>bitwise and</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">BXor</span></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>exclusive-or</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">BOr</span></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>inclusive-or</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">LAnd</span></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>logical and. Unlike other 
- expressions this one does not 
- always evaluate both operands. If 
- you want to use these, you must 
- set <a href="Cil.html#VALuseLogicalOperators"><code class="code">Cil.useLogicalOperators</code></a>.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">LOr</span></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>logical or. Unlike other 
- expressions this one does not 
- always evaluate both operands.  If 
- you want to use these, you must 
- set <a href="Cil.html#VALuseLogicalOperators"><code class="code">Cil.useLogicalOperators</code></a>.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr></table>
-
-<div class="info">
-Binary operations<br>
-</div>
-
-<br>
-<b>Lvalues.</b> Lvalues are the sublanguage of expressions that can appear at the left of an assignment or as operand to the address-of operator. 
-In C the syntax for lvalues is not always a good indication of the meaning 
-of the lvalue. For example the C value
-<pre> 
-a[0][1][2]
-</pre>
- might involve 1, 2 or 3 memory reads when used in an expression context,
-depending on the declared type of the variable <code class="code">a</code>. If <code class="code">a</code> has type <code class="code">int
-[4][4][4]</code> then we have one memory read from somewhere inside the area 
-that stores the array <code class="code">a</code>. On the other hand if <code class="code">a</code> has type <code class="code">int ***</code> then
-the expression really means <code class="code">* ( * ( * (a + 0) + 1) + 2)</code>, in which case it is
-clear that it involves three separate memory operations. 
-<p>
-
-An lvalue denotes the contents of a range of memory addresses. This range 
-is denoted as a host object along with an offset within the object. The 
-host object can be of two kinds: a local or global variable, or an object 
-whose address is in a pointer expression. We distinguish the two cases so 
-that we can tell quickly whether we are accessing some component of a 
-variable directly or we are accessing a memory location through a pointer.
-To make it easy to 
-tell what an lvalue means CIL represents lvalues as a host object and an
-offset (see <a href="Cil.html#TYPElval"><code class="code">Cil.lval</code></a>). The host object (represented as
-<a href="Cil.html#TYPElhost"><code class="code">Cil.lhost</code></a>) can be a local or global variable or can be the object
-pointed-to by a pointer expression. The offset (represented as
-<a href="Cil.html#TYPEoffset"><code class="code">Cil.offset</code></a>) is a sequence of field or array index designators.
-<p>
-
- Both the typing rules and the meaning of an lvalue is very precisely
-specified in CIL. 
-<p>
-
- The following are a few useful function for operating on lvalues:<ul>
-<li><a href="Cil.html#VALmkMem"><code class="code">Cil.mkMem</code></a> - makes an lvalue of <code class="code">Mem</code> kind. Use this to ensure
-that certain equivalent forms of lvalues are canonized. 
-For example, <code class="code">*&amp;x = x</code>. </li>
-<li><a href="Cil.html#VALtypeOfLval"><code class="code">Cil.typeOfLval</code></a> - the type of an lvalue</li>
-<li><a href="Cil.html#VALtypeOffset"><code class="code">Cil.typeOffset</code></a> - the type of an offset, given the type of the
-host. </li>
-<li><a href="Cil.html#VALaddOffset"><code class="code">Cil.addOffset</code></a> and <a href="Cil.html#VALaddOffsetLval"><code class="code">Cil.addOffsetLval</code></a> - extend sequences
-of offsets.</li>
-<li><a href="Cil.html#VALremoveOffset"><code class="code">Cil.removeOffset</code></a> and <a href="Cil.html#VALremoveOffsetLval"><code class="code">Cil.removeOffsetLval</code></a> - shrink sequences
-of offsets.</li>
-</ul>
-
-The following equivalences hold <pre>
-Mem(AddrOf(Mem a, aoff)), off   = Mem a, aoff + off 
-Mem(AddrOf(Var v, aoff)), off   = Var v, aoff + off 
-AddrOf (Mem a, NoOffset)        = a                 
-</pre><br>
-<pre><span class="keyword">type</span> <a name="TYPElval"></a><code class="type"></code>lval = <code class="type"><a href="Cil.html#TYPElhost">lhost</a> * <a href="Cil.html#TYPEoffset">offset</a></code> </pre>
-<div class="info">
-An lvalue<br>
-</div>
-
-<br><code><span class="keyword">type</span> <a name="TYPElhost"></a><code class="type"></code>lhost = </code><table class="typetable">
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">Var</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEvarinfo">varinfo</a></code></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>The host is a variable.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">Mem</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEexp">exp</a></code></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>The host is an object of type <code class="code">T</code> when the expression has pointer 
- <code class="code">TPtr(T)</code>.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr></table>
-
-<div class="info">
-The host part of an <a href="Cil.html#TYPElval"><code class="code">Cil.lval</code></a>.<br>
-</div>
-
-<br><code><span class="keyword">type</span> <a name="TYPEoffset"></a><code class="type"></code>offset = </code><table class="typetable">
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">NoOffset</span></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>No offset. Can be applied to any lvalue and does 
- not change either the starting address or the type. 
- This is used when the lval consists of just a host 
- or as a terminator in a list of other kinds of 
- offsets.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">Field</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEfieldinfo">fieldinfo</a> * <a href="Cil.html#TYPEoffset">offset</a></code></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>A field offset. Can be applied only to an lvalue 
- that denotes a structure or a union that contains 
- the mentioned field. This advances the offset to the 
- beginning of the mentioned field and changes the 
- type to the type of the mentioned field.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">Index</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEexp">exp</a> * <a href="Cil.html#TYPEoffset">offset</a></code></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>An array index offset. Can be applied only to an 
- lvalue that denotes an array. This advances the 
- starting address of the lval to the beginning of the 
- mentioned array element and changes the denoted type 
- to be the type of the array element</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr></table>
-
-<div class="info">
-The offset part of an <a href="Cil.html#TYPElval"><code class="code">Cil.lval</code></a>. Each offset can be applied to certain 
- kinds of lvalues and its effect is that it advances the starting address 
- of the lvalue and changes the denoted type, essentially focusing to some 
- smaller lvalue that is contained in the original one.<br>
-</div>
-
-<br>
-<b>Initializers.</b> 
-A special kind of expressions are those that can appear as initializers for
-global variables (initialization of local variables is turned into
-assignments). The initializers are represented as type <a href="Cil.html#TYPEinit"><code class="code">Cil.init</code></a>. You
-can create initializers with <a href="Cil.html#VALmakeZeroInit"><code class="code">Cil.makeZeroInit</code></a> and you can conveniently
-scan compound initializers them with <a href="Cil.html#VALfoldLeftCompound"><code class="code">Cil.foldLeftCompound</code></a> or with <a href="Cil.html#VALfoldLeftCompoundAll"><code class="code">Cil.foldLeftCompoundAll</code></a>.<br>
-<br><code><span class="keyword">type</span> <a name="TYPEinit"></a><code class="type"></code>init = </code><table class="typetable">
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">SingleInit</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEexp">exp</a></code></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>A single initializer</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">CompoundInit</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEtyp">typ</a> * (<a href="Cil.html#TYPEoffset">offset</a> * <a href="Cil.html#TYPEinit">init</a>) list</code></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>Used only for initializers of structures, unions and arrays. The 
- offsets are all of the form <code class="code">Field(f, NoOffset)</code> or <code class="code">Index(i, 
- NoOffset)</code> and specify the field or the index being initialized. For 
- structures all fields must have an initializer (except the unnamed 
- bitfields), in the proper order. This is necessary since the offsets 
- are not printed. For unions there must be exactly one initializer. If 
- the initializer is not for the first field then a field designator is 
- printed, so you better be on GCC since MSVC does not understand this. 
- For arrays, however, we allow you to give only a prefix of the 
- initializers. You can scan an initializer list with 
- <a href="Cil.html#VALfoldLeftCompound"><code class="code">Cil.foldLeftCompound</code></a> or with <a href="Cil.html#VALfoldLeftCompoundAll"><code class="code">Cil.foldLeftCompoundAll</code></a>.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr></table>
-
-<div class="info">
-Initializers for global variables.<br>
-</div>
-
-<br><code><span class="keyword">type</span> <a name="TYPEinitinfo"></a><code class="type"></code>initinfo = {</code><table class="typetable">
-<tr>
-<td align="left" valign="top" >
-<code>&nbsp;&nbsp;</code></td>
-<td align="left" valign="top" >
-<code><span class="keyword">mutable&nbsp;</span>init&nbsp;: <code class="type"><a href="Cil.html#TYPEinit">init</a> option</code>;</code></td>
-
-</tr></table>
-}
-
-<div class="info">
-We want to be able to update an initializer in a global variable, so we 
- define it as a mutable field<br>
-</div>
-
-<br>
-<b>Function definitions.</b> 
-A function definition is always introduced with a <code class="code">GFun</code> constructor at the
-top level. All the information about the function is stored into a
-<a href="Cil.html#TYPEfundec"><code class="code">Cil.fundec</code></a>. Some of the information (e.g. its name, type,
-storage, attributes) is stored as a <a href="Cil.html#TYPEvarinfo"><code class="code">Cil.varinfo</code></a> that is a field of the
-<code class="code">fundec</code>. To refer to the function from the expression language you must use
-the <code class="code">varinfo</code>. 
-<p>
-
- The function definition contains, in addition to the body, a list of all the
-local variables and separately a list of the formals. Both kind of variables
-can be referred to in the body of the function. The formals must also be shared
-with the formals that appear in the function type. For that reason, to
-manipulate formals you should use the provided functions
-<a href="Cil.html#VALmakeFormalVar"><code class="code">Cil.makeFormalVar</code></a> and <a href="Cil.html#VALsetFormals"><code class="code">Cil.setFormals</code></a> and <a href="Cil.html#VALmakeFormalVar"><code class="code">Cil.makeFormalVar</code></a>.<br>
-<br><code><span class="keyword">type</span> <a name="TYPEfundec"></a><code class="type"></code>fundec = {</code><table class="typetable">
-<tr>
-<td align="left" valign="top" >
-<code>&nbsp;&nbsp;</code></td>
-<td align="left" valign="top" >
-<code><span class="keyword">mutable&nbsp;</span>svar&nbsp;: <code class="type"><a href="Cil.html#TYPEvarinfo">varinfo</a></code>;</code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>Holds the name and type as a variable, so we can refer to it 
- easily from the program. All references to this function either 
- in a function call or in a prototype must point to the same 
- <code class="code">varinfo</code>.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code>&nbsp;&nbsp;</code></td>
-<td align="left" valign="top" >
-<code><span class="keyword">mutable&nbsp;</span>sformals&nbsp;: <code class="type"><a href="Cil.html#TYPEvarinfo">varinfo</a> list</code>;</code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>Formals. These must be in the same order and with the same 
- information as the formal information in the type of the function. 
- Use <a href="Cil.html#VALsetFormals"><code class="code">Cil.setFormals</code></a> or 
- <a href="Cil.html#VALsetFunctionType"><code class="code">Cil.setFunctionType</code></a> or <a href="Cil.html#VALmakeFormalVar"><code class="code">Cil.makeFormalVar</code></a> 
- to set these formals and ensure that they 
- are reflected in the function type. Do not make copies of these 
- because the body refers to them.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code>&nbsp;&nbsp;</code></td>
-<td align="left" valign="top" >
-<code><span class="keyword">mutable&nbsp;</span>slocals&nbsp;: <code class="type"><a href="Cil.html#TYPEvarinfo">varinfo</a> list</code>;</code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>Locals. Does NOT include the sformals. Do not make copies of 
- these because the body refers to them.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code>&nbsp;&nbsp;</code></td>
-<td align="left" valign="top" >
-<code><span class="keyword">mutable&nbsp;</span>smaxid&nbsp;: <code class="type">int</code>;</code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>Max local id. Starts at 0. Used for 
- creating the names of new temporary 
- variables. Updated by 
- <a href="Cil.html#VALmakeLocalVar"><code class="code">Cil.makeLocalVar</code></a> and 
- <a href="Cil.html#VALmakeTempVar"><code class="code">Cil.makeTempVar</code></a>. You can also use 
- <a href="Cil.html#VALsetMaxId"><code class="code">Cil.setMaxId</code></a> to set it after you 
- have added the formals and locals.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code>&nbsp;&nbsp;</code></td>
-<td align="left" valign="top" >
-<code><span class="keyword">mutable&nbsp;</span>sbody&nbsp;: <code class="type"><a href="Cil.html#TYPEblock">block</a></code>;</code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>The function body.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code>&nbsp;&nbsp;</code></td>
-<td align="left" valign="top" >
-<code><span class="keyword">mutable&nbsp;</span>smaxstmtid&nbsp;: <code class="type">int option</code>;</code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>max id of a (reachable) statement 
- in this function, if we have 
- computed it. range = 0 ... 
- (smaxstmtid-1). This is computed by 
- <a href="Cil.html#VALcomputeCFGInfo"><code class="code">Cil.computeCFGInfo</code></a>.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code>&nbsp;&nbsp;</code></td>
-<td align="left" valign="top" >
-<code><span class="keyword">mutable&nbsp;</span>sallstmts&nbsp;: <code class="type"><a href="Cil.html#TYPEstmt">stmt</a> list</code>;</code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>After you call <a href="Cil.html#VALcomputeCFGInfo"><code class="code">Cil.computeCFGInfo</code></a> 
- this field is set to contain all 
- statements in the function</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr></table>
-}
-
-<div class="info">
-Function definitions.<br>
-</div>
-
-<br><code><span class="keyword">type</span> <a name="TYPEblock"></a><code class="type"></code>block = {</code><table class="typetable">
-<tr>
-<td align="left" valign="top" >
-<code>&nbsp;&nbsp;</code></td>
-<td align="left" valign="top" >
-<code><span class="keyword">mutable&nbsp;</span>battrs&nbsp;: <code class="type"><a href="Cil.html#TYPEattributes">attributes</a></code>;</code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>Attributes for the block</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code>&nbsp;&nbsp;</code></td>
-<td align="left" valign="top" >
-<code><span class="keyword">mutable&nbsp;</span>bstmts&nbsp;: <code class="type"><a href="Cil.html#TYPEstmt">stmt</a> list</code>;</code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>The statements comprising the block</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr></table>
-}
-
-<div class="info">
-A block is a sequence of statements with the control falling through from 
-    one element to the next<br>
-</div>
-
-<br>
-<b>Statements</b>. 
-CIL statements are the structural elements that make the CFG. They are 
-represented using the type <a href="Cil.html#TYPEstmt"><code class="code">Cil.stmt</code></a>. Every
-statement has a (possibly empty) list of labels. The
-<a href="Cil.html#TYPEstmtkind"><code class="code">Cil.stmtkind</code></a> field of a statement indicates what kind of statement it 
-is.
-<p>
-
- Use <a href="Cil.html#VALmkStmt"><code class="code">Cil.mkStmt</code></a> to make a statement and the fill-in the fields. 
-<p>
-
-CIL also comes with support for control-flow graphs. The <code class="code">sid</code> field in
-<code class="code">stmt</code> can be used to give unique numbers to statements, and the <code class="code">succs</code>
-and <code class="code">preds</code> fields can be used to maintain a list of successors and
-predecessors for every statement. The CFG information is not computed by
-default. Instead you must explicitly use the functions
-<a href="Cil.html#VALprepareCFG"><code class="code">Cil.prepareCFG</code></a> and <a href="Cil.html#VALcomputeCFGInfo"><code class="code">Cil.computeCFGInfo</code></a> to do it.<br>
-<br><code><span class="keyword">type</span> <a name="TYPEstmt"></a><code class="type"></code>stmt = {</code><table class="typetable">
-<tr>
-<td align="left" valign="top" >
-<code>&nbsp;&nbsp;</code></td>
-<td align="left" valign="top" >
-<code><span class="keyword">mutable&nbsp;</span>labels&nbsp;: <code class="type"><a href="Cil.html#TYPElabel">label</a> list</code>;</code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>Whether the statement starts with some labels, case statements or 
- default statements.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code>&nbsp;&nbsp;</code></td>
-<td align="left" valign="top" >
-<code><span class="keyword">mutable&nbsp;</span>skind&nbsp;: <code class="type"><a href="Cil.html#TYPEstmtkind">stmtkind</a></code>;</code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>The kind of statement</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code>&nbsp;&nbsp;</code></td>
-<td align="left" valign="top" >
-<code><span class="keyword">mutable&nbsp;</span>sid&nbsp;: <code class="type">int</code>;</code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>A number (&gt;= 0) that is unique in a function. Filled in only after 
- the CFG is computed.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code>&nbsp;&nbsp;</code></td>
-<td align="left" valign="top" >
-<code><span class="keyword">mutable&nbsp;</span>succs&nbsp;: <code class="type"><a href="Cil.html#TYPEstmt">stmt</a> list</code>;</code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>The successor statements. They can always be computed from the skind 
- and the context in which this statement appears. Filled in only after 
- the CFG is computed.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code>&nbsp;&nbsp;</code></td>
-<td align="left" valign="top" >
-<code><span class="keyword">mutable&nbsp;</span>preds&nbsp;: <code class="type"><a href="Cil.html#TYPEstmt">stmt</a> list</code>;</code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>The inverse of the succs function.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr></table>
-}
-
-<div class="info">
-Statements.<br>
-</div>
-
-<br><code><span class="keyword">type</span> <a name="TYPElabel"></a><code class="type"></code>label = </code><table class="typetable">
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">Label</span> <span class="keyword">of</span> <code class="type">string * <a href="Cil.html#TYPElocation">location</a> * bool</code></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>A real label. If the bool is "true", the label is from the 
- input source program. If the bool is "false", the label was 
- created by CIL or some other transformation</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">Case</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEexp">exp</a> * <a href="Cil.html#TYPElocation">location</a></code></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>A case statement. This expression 
- is lowered into a constant if 
- <a href="Cil.html#VALlowerConstants"><code class="code">Cil.lowerConstants</code></a> is set to 
- true.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">Default</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPElocation">location</a></code></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>A default statement</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr></table>
-
-<div class="info">
-Labels<br>
-</div>
-
-<br><code><span class="keyword">type</span> <a name="TYPEstmtkind"></a><code class="type"></code>stmtkind = </code><table class="typetable">
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">Instr</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEinstr">instr</a> list</code></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>A group of instructions that do not contain control flow. Control 
- implicitly falls through.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">Return</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEexp">exp</a> option * <a href="Cil.html#TYPElocation">location</a></code></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>The return statement. This is a leaf in the CFG.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">Goto</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEstmt">stmt</a> Pervasives.ref * <a href="Cil.html#TYPElocation">location</a></code></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>A goto statement. Appears from actual goto's in the code or from 
- goto's that have been inserted during elaboration. The reference 
- points to the statement that is the target of the Goto. This means that 
- you have to update the reference whenever you replace the target 
- statement. The target statement MUST have at least a label.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">Break</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPElocation">location</a></code></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>A break to the end of the nearest enclosing Loop or Switch</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">Continue</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPElocation">location</a></code></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>A continue to the start of the nearest enclosing <code class="code">Loop</code></code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">If</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEexp">exp</a> * <a href="Cil.html#TYPEblock">block</a> * <a href="Cil.html#TYPEblock">block</a> * <a href="Cil.html#TYPElocation">location</a></code></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>A conditional. Two successors, the "then" and the "else" branches. 
- Both branches fall-through to the successor of the If statement.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">Switch</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEexp">exp</a> * <a href="Cil.html#TYPEblock">block</a> * <a href="Cil.html#TYPEstmt">stmt</a> list * <a href="Cil.html#TYPElocation">location</a></code></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>A switch statement. The statements that implement the cases can be 
- reached through the provided list. For each such target you can find 
- among its labels what cases it implements. The statements that 
- implement the cases are somewhere within the provided <code class="code">block</code>.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">Loop</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEblock">block</a> * <a href="Cil.html#TYPElocation">location</a> * <a href="Cil.html#TYPEstmt">stmt</a> option * <a href="Cil.html#TYPEstmt">stmt</a> option</code></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>A <code class="code">while(1)</code> loop. The termination test is implemented in the body of 
- a loop using a <code class="code">Break</code> statement. If prepareCFG has been called,
- the first stmt option will point to the stmt containing the continue
- label for this loop and the second will point to the stmt containing
- the break label for this loop.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">Block</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEblock">block</a></code></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>Just a block of statements. Use it as a way to keep some block 
- attributes local</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">TryFinally</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEblock">block</a> * <a href="Cil.html#TYPEblock">block</a> * <a href="Cil.html#TYPElocation">location</a></code></code></td>
-
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">TryExcept</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEblock">block</a> * (<a href="Cil.html#TYPEinstr">instr</a> list * <a href="Cil.html#TYPEexp">exp</a>) * <a href="Cil.html#TYPEblock">block</a> * <a href="Cil.html#TYPElocation">location</a></code></code></td>
-
-</tr></table>
-
-<div class="info">
-The various kinds of control-flow statements statements<br>
-</div>
-
-<br>
-<b>Instructions</b>. 
- An instruction <a href="Cil.html#TYPEinstr"><code class="code">Cil.instr</code></a> is a statement that has no local
-(intraprocedural) control flow. It can be either an assignment,
-function call, or an inline assembly instruction.<br>
-<br><code><span class="keyword">type</span> <a name="TYPEinstr"></a><code class="type"></code>instr = </code><table class="typetable">
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">Set</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPElval">lval</a> * <a href="Cil.html#TYPEexp">exp</a> * <a href="Cil.html#TYPElocation">location</a></code></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>An assignment. The type of the expression is guaranteed to be the same 
- with that of the lvalue</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">Call</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPElval">lval</a> option * <a href="Cil.html#TYPEexp">exp</a> * <a href="Cil.html#TYPEexp">exp</a> list * <a href="Cil.html#TYPElocation">location</a></code></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>A function call with the (optional) result placed in an lval. It is 
- possible that the returned type of the function is not identical to 
- that of the lvalue. In that case a cast is printed. The type of the 
- actual arguments are identical to those of the declared formals. The 
- number of arguments is the same as that of the declared formals, except 
- for vararg functions. This construct is also used to encode a call to 
- "__builtin_va_arg". In this case the second argument (which should be a 
- type T) is encoded SizeOf(T)</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">Asm</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEattributes">attributes</a> * string list * (string * <a href="Cil.html#TYPElval">lval</a>) list<br>        * (string * <a href="Cil.html#TYPEexp">exp</a>) list * string list * <a href="Cil.html#TYPElocation">location</a></code></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>There are for storing inline assembly. They follow the GCC 
- specification: 
-<pre>
-  asm [volatile] ("...template..." "..template.."
-                  : "c1" (o1), "c2" (o2), ..., "cN" (oN)
-                  : "d1" (i1), "d2" (i2), ..., "dM" (iM)
-                  : "r1", "r2", ..., "nL" );
-</pre>
-<p>
-
-where the parts are
-<p>
-<ul>
-<li><code class="code">volatile</code> (optional): when present, the assembler instruction
-    cannot be removed, moved, or otherwise optimized</li>
-<li>template: a sequence of strings, with %0, %1, %2, etc. in the string to 
-    refer to the input and output expressions. I think they're numbered
-    consecutively, but the docs don't specify. Each string is printed on 
-    a separate line. This is the only part that is present for MSVC inline
-    assembly.</li>
-<li>"ci" (oi): pairs of constraint-string and output-lval; the 
-    constraint specifies that the register used must have some
-    property, like being a floating-point register; the constraint
-    string for outputs also has "=" to indicate it is written, or
-    "+" to indicate it is both read and written; 'oi' is the
-    name of a C lvalue (probably a variable name) to be used as
-    the output destination</li>
-<li>"dj" (ij): pairs of constraint and input expression; the constraint
-    is similar to the "ci"s.  the 'ij' is an arbitrary C expression
-    to be loaded into the corresponding register</li>
-<li>"rk": registers to be regarded as "clobbered" by the instruction;
-    "memory" may be specified for arbitrary memory effects</li>
-</ul>
-
-an example (from gcc manual):
-<pre>
-  asm volatile ("movc3 %0,%1,%2"
-                : /* no outputs */
-                : "g" (from), "g" (to), "g" (count)
-                : "r0", "r1", "r2", "r3", "r4", "r5");
-</pre></code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr></table>
-
-<div class="info">
-Instructions.<br>
-</div>
-
-<br><code><span class="keyword">type</span> <a name="TYPElocation"></a><code class="type"></code>location = {</code><table class="typetable">
-<tr>
-<td align="left" valign="top" >
-<code>&nbsp;&nbsp;</code></td>
-<td align="left" valign="top" >
-<code>line&nbsp;: <code class="type">int</code>;</code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>The line number. -1 means "do not know"</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code>&nbsp;&nbsp;</code></td>
-<td align="left" valign="top" >
-<code>file&nbsp;: <code class="type">string</code>;</code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>The name of the source file</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code>&nbsp;&nbsp;</code></td>
-<td align="left" valign="top" >
-<code>byte&nbsp;: <code class="type">int</code>;</code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>The byte position in the source file</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr></table>
-}
-
-<div class="info">
-Describes a location in a source file.<br>
-</div>
-
-<br><code><span class="keyword">type</span> <a name="TYPEtypsig"></a><code class="type"></code>typsig = </code><table class="typetable">
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">TSArray</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEtypsig">typsig</a> * int64 option * <a href="Cil.html#TYPEattribute">attribute</a> list</code></code></td>
-
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">TSPtr</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEtypsig">typsig</a> * <a href="Cil.html#TYPEattribute">attribute</a> list</code></code></td>
-
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">TSComp</span> <span class="keyword">of</span> <code class="type">bool * string * <a href="Cil.html#TYPEattribute">attribute</a> list</code></code></td>
-
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">TSFun</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEtypsig">typsig</a> * <a href="Cil.html#TYPEtypsig">typsig</a> list * bool * <a href="Cil.html#TYPEattribute">attribute</a> list</code></code></td>
-
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">TSEnum</span> <span class="keyword">of</span> <code class="type">string * <a href="Cil.html#TYPEattribute">attribute</a> list</code></code></td>
-
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">TSBase</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEtyp">typ</a></code></code></td>
-
-</tr></table>
-
-<div class="info">
-Type signatures. Two types are identical iff they have identical 
- signatures. These contain the same information as types but canonicalized. 
- For example, two function types that are identical except for the name of 
- the formal arguments are given the same signature. Also, <code class="code">TNamed</code> 
- constructors are unrolled.<br>
-</div>
-
-<br>
-<b>Lowering Options</b><br>
-<pre><span class="keyword">val</span> <a name="VALlowerConstants"></a>lowerConstants : <code class="type">bool Pervasives.ref</code></pre><div class="info">
-Do lower constants (default true)<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALinsertImplicitCasts"></a>insertImplicitCasts : <code class="type">bool Pervasives.ref</code></pre><div class="info">
-Do insert implicit casts (default true)<br>
-</div>
-<br><code><span class="keyword">type</span> <a name="TYPEfeatureDescr"></a><code class="type"></code>featureDescr = {</code><table class="typetable">
-<tr>
-<td align="left" valign="top" >
-<code>&nbsp;&nbsp;</code></td>
-<td align="left" valign="top" >
-<code>fd_enabled&nbsp;: <code class="type">bool Pervasives.ref</code>;</code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>The enable flag. Set to default value</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code>&nbsp;&nbsp;</code></td>
-<td align="left" valign="top" >
-<code>fd_name&nbsp;: <code class="type">string</code>;</code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>This is used to construct an option "--doxxx" and "--dontxxx" that 
- enable and disable the feature</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code>&nbsp;&nbsp;</code></td>
-<td align="left" valign="top" >
-<code>fd_description&nbsp;: <code class="type">string</code>;</code></td>
-
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code>&nbsp;&nbsp;</code></td>
-<td align="left" valign="top" >
-<code>fd_extraopt&nbsp;: <code class="type">(string * Arg.spec * string) list</code>;</code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>Additional command line options</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code>&nbsp;&nbsp;</code></td>
-<td align="left" valign="top" >
-<code>fd_doit&nbsp;: <code class="type"><a href="Cil.html#TYPEfile">file</a> -> unit</code>;</code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>This performs the transformation</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code>&nbsp;&nbsp;</code></td>
-<td align="left" valign="top" >
-<code>fd_post_check&nbsp;: <code class="type">bool</code>;</code></td>
-
-</tr></table>
-}
-
-<div class="info">
-To be able to add/remove features easily, each feature should be package 
- as an interface with the following interface. These features should be<br>
-</div>
-
-<pre><span class="keyword">val</span> <a name="VALcompareLoc"></a>compareLoc : <code class="type"><a href="Cil.html#TYPElocation">location</a> -> <a href="Cil.html#TYPElocation">location</a> -> int</code></pre><div class="info">
-Comparison function for locations.
-* Compares first by filename, then line, then byte<br>
-</div>
-<br>
-<b>Values for manipulating globals</b><br>
-<pre><span class="keyword">val</span> <a name="VALemptyFunction"></a>emptyFunction : <code class="type">string -> <a href="Cil.html#TYPEfundec">fundec</a></code></pre><div class="info">
-Make an empty function<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALsetFormals"></a>setFormals : <code class="type"><a href="Cil.html#TYPEfundec">fundec</a> -> <a href="Cil.html#TYPEvarinfo">varinfo</a> list -> unit</code></pre><div class="info">
-Update the formals of a <code class="code">fundec</code> and make sure that the function type 
-    has the same information. Will copy the name as well into the type.<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALsetFunctionType"></a>setFunctionType : <code class="type"><a href="Cil.html#TYPEfundec">fundec</a> -> <a href="Cil.html#TYPEtyp">typ</a> -> unit</code></pre><div class="info">
-Set the types of arguments and results as given by the function type 
- passed as the second argument. Will not copy the names from the function 
- type to the formals<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALsetFunctionTypeMakeFormals"></a>setFunctionTypeMakeFormals : <code class="type"><a href="Cil.html#TYPEfundec">fundec</a> -> <a href="Cil.html#TYPEtyp">typ</a> -> unit</code></pre><div class="info">
-Set the type of the function and make formal arguments for them<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALsetMaxId"></a>setMaxId : <code class="type"><a href="Cil.html#TYPEfundec">fundec</a> -> unit</code></pre><div class="info">
-Update the smaxid after you have populated with locals and formals 
- (unless you constructed those using <a href="Cil.html#VALmakeLocalVar"><code class="code">Cil.makeLocalVar</code></a> or 
- <a href="Cil.html#VALmakeTempVar"><code class="code">Cil.makeTempVar</code></a>.<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALdummyFunDec"></a>dummyFunDec : <code class="type"><a href="Cil.html#TYPEfundec">fundec</a></code></pre><div class="info">
-A dummy function declaration handy when you need one as a placeholder. It 
- contains inside a dummy varinfo.<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALdummyFile"></a>dummyFile : <code class="type"><a href="Cil.html#TYPEfile">file</a></code></pre><div class="info">
-A dummy file<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALsaveBinaryFile"></a>saveBinaryFile : <code class="type"><a href="Cil.html#TYPEfile">file</a> -> string -> unit</code></pre><div class="info">
-Write a <a href="Cil.html#TYPEfile"><code class="code">Cil.file</code></a> in binary form to the filesystem. The file can be
- read back in later using <a href="Cil.html#VALloadBinaryFile"><code class="code">Cil.loadBinaryFile</code></a>, possibly saving parsing
- time. The second argument is the name of the file that should be
- created.<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALsaveBinaryFileChannel"></a>saveBinaryFileChannel : <code class="type"><a href="Cil.html#TYPEfile">file</a> -> Pervasives.out_channel -> unit</code></pre><div class="info">
-Write a <a href="Cil.html#TYPEfile"><code class="code">Cil.file</code></a> in binary form to the filesystem. The file can be
- read back in later using <a href="Cil.html#VALloadBinaryFile"><code class="code">Cil.loadBinaryFile</code></a>, possibly saving parsing
- time. Does not close the channel.<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALloadBinaryFile"></a>loadBinaryFile : <code class="type">string -> <a href="Cil.html#TYPEfile">file</a></code></pre><div class="info">
-Read a <a href="Cil.html#TYPEfile"><code class="code">Cil.file</code></a> in binary form from the filesystem. The first
- argument is the name of a file previously created by
- <a href="Cil.html#VALsaveBinaryFile"><code class="code">Cil.saveBinaryFile</code></a>.<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALgetGlobInit"></a>getGlobInit : <code class="type">?main_name:string -> <a href="Cil.html#TYPEfile">file</a> -> <a href="Cil.html#TYPEfundec">fundec</a></code></pre><div class="info">
-Get the global initializer and create one if it does not already exist. 
- When it creates a global initializer it attempts to place a call to it in 
- the main function named by the optional argument (default "main")<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALiterGlobals"></a>iterGlobals : <code class="type"><a href="Cil.html#TYPEfile">file</a> -> (<a href="Cil.html#TYPEglobal">global</a> -> unit) -> unit</code></pre><div class="info">
-Iterate over all globals, including the global initializer<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALfoldGlobals"></a>foldGlobals : <code class="type"><a href="Cil.html#TYPEfile">file</a> -> ('a -> <a href="Cil.html#TYPEglobal">global</a> -> 'a) -> 'a -> 'a</code></pre><div class="info">
-Fold over all globals, including the global initializer<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALmapGlobals"></a>mapGlobals : <code class="type"><a href="Cil.html#TYPEfile">file</a> -> (<a href="Cil.html#TYPEglobal">global</a> -> <a href="Cil.html#TYPEglobal">global</a>) -> unit</code></pre><div class="info">
-Map over all globals, including the global initializer and change things 
-    in place<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALnew_sid"></a>new_sid : <code class="type">unit -> int</code></pre><pre><span class="keyword">val</span> <a name="VALprepareCFG"></a>prepareCFG : <code class="type"><a href="Cil.html#TYPEfundec">fundec</a> -> unit</code></pre><div class="info">
-Prepare a function for CFG information computation by
- <a href="Cil.html#VALcomputeCFGInfo"><code class="code">Cil.computeCFGInfo</code></a>. This function converts all <code class="code">Break</code>, <code class="code">Switch</code>,
- <code class="code">Default</code> and <code class="code">Continue</code> <a href="Cil.html#TYPEstmtkind"><code class="code">Cil.stmtkind</code></a>s and <a href="Cil.html#TYPElabel"><code class="code">Cil.label</code></a>s into <code class="code">If</code>s
- and <code class="code">Goto</code>s, giving the function body a very CFG-like character. This
- function modifies its argument in place.<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALcomputeCFGInfo"></a>computeCFGInfo : <code class="type"><a href="Cil.html#TYPEfundec">fundec</a> -> bool -> unit</code></pre><div class="info">
-Compute the CFG information for all statements in a fundec and return a 
- list of the statements. The input fundec cannot have <code class="code">Break</code>, <code class="code">Switch</code>, 
- <code class="code">Default</code>, or <code class="code">Continue</code> <a href="Cil.html#TYPEstmtkind"><code class="code">Cil.stmtkind</code></a>s or <a href="Cil.html#TYPElabel"><code class="code">Cil.label</code></a>s. Use
- <a href="Cil.html#VALprepareCFG"><code class="code">Cil.prepareCFG</code></a> to transform them away.  The second argument should
- be <code class="code">true</code> if you wish a global statement number, <code class="code">false</code> if you wish a
- local (per-function) statement numbering. The list of statements is set 
- in the sallstmts field of a fundec. 
-<p>
-
- NOTE: unless you want the simpler control-flow graph provided by
- prepareCFG, or you need the function's smaxstmtid and sallstmt fields
- filled in, we recommend you use <a href="Cfg.html#VALcomputeFileCFG"><code class="code">Cfg.computeFileCFG</code></a> instead of this
- function to compute control-flow information.
- <a href="Cfg.html#VALcomputeFileCFG"><code class="code">Cfg.computeFileCFG</code></a> is newer and will handle switch, break, and
- continue correctly.<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALcopyFunction"></a>copyFunction : <code class="type"><a href="Cil.html#TYPEfundec">fundec</a> -> string -> <a href="Cil.html#TYPEfundec">fundec</a></code></pre><div class="info">
-Create a deep copy of a function. There should be no sharing between the 
- copy and the original function<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALpushGlobal"></a>pushGlobal : <code class="type"><a href="Cil.html#TYPEglobal">global</a> -><br>       types:<a href="Cil.html#TYPEglobal">global</a> list Pervasives.ref -><br>       variables:<a href="Cil.html#TYPEglobal">global</a> list Pervasives.ref -> unit</code></pre><div class="info">
-CIL keeps the types at the beginning of the file and the variables at the 
- end of the file. This function will take a global and add it to the 
- corresponding stack. Its operation is actually more complicated because if 
- the global declares a type that contains references to variables (e.g. in 
- sizeof in an array length) then it will also add declarations for the 
- variables to the types stack<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALinvalidStmt"></a>invalidStmt : <code class="type"><a href="Cil.html#TYPEstmt">stmt</a></code></pre><div class="info">
-An empty statement. Used in pretty printing<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALgccBuiltins"></a>gccBuiltins : <code class="type">(string, <a href="Cil.html#TYPEtyp">typ</a> * <a href="Cil.html#TYPEtyp">typ</a> list * bool) Hashtbl.t</code></pre><div class="info">
-A list of the GCC built-in functions. Maps the name to the result and 
- argument types, and whether it is vararg<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALmsvcBuiltins"></a>msvcBuiltins : <code class="type">(string, <a href="Cil.html#TYPEtyp">typ</a> * <a href="Cil.html#TYPEtyp">typ</a> list * bool) Hashtbl.t</code></pre><div class="info">
-A list of the MSVC built-in functions. Maps the name to the result and 
- argument types, and whether it is vararg<br>
-</div>
-<br>
-<b>Values for manipulating initializers</b><br>
-<pre><span class="keyword">val</span> <a name="VALmakeZeroInit"></a>makeZeroInit : <code class="type"><a href="Cil.html#TYPEtyp">typ</a> -> <a href="Cil.html#TYPEinit">init</a></code></pre><div class="info">
-Make a initializer for zero-ing a data type<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALfoldLeftCompound"></a>foldLeftCompound : <code class="type">doinit:(<a href="Cil.html#TYPEoffset">offset</a> -> <a href="Cil.html#TYPEinit">init</a> -> <a href="Cil.html#TYPEtyp">typ</a> -> 'a -> 'a) -><br>       ct:<a href="Cil.html#TYPEtyp">typ</a> -> initl:(<a href="Cil.html#TYPEoffset">offset</a> * <a href="Cil.html#TYPEinit">init</a>) list -> acc:'a -> 'a</code></pre><div class="info">
-Fold over the list of initializers in a Compound. <code class="code">doinit</code> is called on 
- every present initializer, even if it is of compound type. In the case of 
- arrays there might be missing zero-initializers at the end of the list. 
- These are not scanned. This is much like <code class="code">List.fold_left</code> except we also 
- pass the type of the initializer<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALfoldLeftCompoundAll"></a>foldLeftCompoundAll : <code class="type">doinit:(<a href="Cil.html#TYPEoffset">offset</a> -> <a href="Cil.html#TYPEinit">init</a> -> <a href="Cil.html#TYPEtyp">typ</a> -> 'a -> 'a) -><br>       ct:<a href="Cil.html#TYPEtyp">typ</a> -> initl:(<a href="Cil.html#TYPEoffset">offset</a> * <a href="Cil.html#TYPEinit">init</a>) list -> acc:'a -> 'a</code></pre><div class="info">
-Fold over the list of initializers in a Compound, like 
- <a href="Cil.html#VALfoldLeftCompound"><code class="code">Cil.foldLeftCompound</code></a> but in the case of an array it scans even missing 
- zero initializers at the end of the array<br>
-</div>
-<br>
-<b>Values for manipulating types</b><br>
-<pre><span class="keyword">val</span> <a name="VALvoidType"></a>voidType : <code class="type"><a href="Cil.html#TYPEtyp">typ</a></code></pre><div class="info">
-void<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALisVoidType"></a>isVoidType : <code class="type"><a href="Cil.html#TYPEtyp">typ</a> -> bool</code></pre><pre><span class="keyword">val</span> <a name="VALisVoidPtrType"></a>isVoidPtrType : <code class="type"><a href="Cil.html#TYPEtyp">typ</a> -> bool</code></pre><pre><span class="keyword">val</span> <a name="VALintType"></a>intType : <code class="type"><a href="Cil.html#TYPEtyp">typ</a></code></pre><div class="info">
-int<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALuintType"></a>uintType : <code class="type"><a href="Cil.html#TYPEtyp">typ</a></code></pre><div class="info">
-unsigned int<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALlongType"></a>longType : <code class="type"><a href="Cil.html#TYPEtyp">typ</a></code></pre><div class="info">
-long<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALulongType"></a>ulongType : <code class="type"><a href="Cil.html#TYPEtyp">typ</a></code></pre><div class="info">
-unsigned long<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALcharType"></a>charType : <code class="type"><a href="Cil.html#TYPEtyp">typ</a></code></pre><div class="info">
-char<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALcharPtrType"></a>charPtrType : <code class="type"><a href="Cil.html#TYPEtyp">typ</a></code></pre><div class="info">
-char *<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALwcharKind"></a>wcharKind : <code class="type"><a href="Cil.html#TYPEikind">ikind</a> Pervasives.ref</code></pre><div class="info">
-wchar_t (depends on architecture) and is set when you call 
- <a href="Cil.html#VALinitCIL"><code class="code">Cil.initCIL</code></a>.<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALwcharType"></a>wcharType : <code class="type"><a href="Cil.html#TYPEtyp">typ</a> Pervasives.ref</code></pre><pre><span class="keyword">val</span> <a name="VALcharConstPtrType"></a>charConstPtrType : <code class="type"><a href="Cil.html#TYPEtyp">typ</a></code></pre><div class="info">
-char const *<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALvoidPtrType"></a>voidPtrType : <code class="type"><a href="Cil.html#TYPEtyp">typ</a></code></pre><div class="info">
-void *<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALintPtrType"></a>intPtrType : <code class="type"><a href="Cil.html#TYPEtyp">typ</a></code></pre><div class="info">
-int *<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALuintPtrType"></a>uintPtrType : <code class="type"><a href="Cil.html#TYPEtyp">typ</a></code></pre><div class="info">
-unsigned int *<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALdoubleType"></a>doubleType : <code class="type"><a href="Cil.html#TYPEtyp">typ</a></code></pre><div class="info">
-double<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALupointType"></a>upointType : <code class="type"><a href="Cil.html#TYPEtyp">typ</a> Pervasives.ref</code></pre><pre><span class="keyword">val</span> <a name="VALtypeOfSizeOf"></a>typeOfSizeOf : <code class="type"><a href="Cil.html#TYPEtyp">typ</a> Pervasives.ref</code></pre><pre><span class="keyword">val</span> <a name="VALisSigned"></a>isSigned : <code class="type"><a href="Cil.html#TYPEikind">ikind</a> -> bool</code></pre><div class="info">
-Returns true if and only if the given integer type is signed.<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALmkCompInfo"></a>mkCompInfo : <code class="type">bool -><br>       string -><br>       (<a href="Cil.html#TYPEcompinfo">compinfo</a> -><br>        (string * <a href="Cil.html#TYPEtyp">typ</a> * int option * <a href="Cil.html#TYPEattributes">attributes</a> * <a href="Cil.html#TYPElocation">location</a>) list) -><br>       <a href="Cil.html#TYPEattributes">attributes</a> -> <a href="Cil.html#TYPEcompinfo">compinfo</a></code></pre><div class="info">
-Creates a a (potentially recursive) composite type. The arguments are: 
- (1) a boolean indicating whether it is a struct or a union, (2) the name 
- (always non-empty), (3) a function that when given a representation of the 
- structure type constructs the type of the fields recursive type (the first 
- argument is only useful when some fields need to refer to the type of the 
- structure itself), and (4) a list of attributes to be associated with the 
- composite type. The resulting compinfo has the field "cdefined" only if 
- the list of fields is non-empty.<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALcopyCompInfo"></a>copyCompInfo : <code class="type"><a href="Cil.html#TYPEcompinfo">compinfo</a> -> string -> <a href="Cil.html#TYPEcompinfo">compinfo</a></code></pre><div class="info">
-Makes a shallow copy of a <a href="Cil.html#TYPEcompinfo"><code class="code">Cil.compinfo</code></a> changing the name and the key.<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALmissingFieldName"></a>missingFieldName : <code class="type">string</code></pre><div class="info">
-This is a constant used as the name of an unnamed bitfield. These fields
-    do not participate in initialization and their name is not printed.<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALcompFullName"></a>compFullName : <code class="type"><a href="Cil.html#TYPEcompinfo">compinfo</a> -> string</code></pre><div class="info">
-Get the full name of a comp<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALisCompleteType"></a>isCompleteType : <code class="type"><a href="Cil.html#TYPEtyp">typ</a> -> bool</code></pre><div class="info">
-Returns true if this is a complete type. 
-   This means that sizeof(t) makes sense. 
-   Incomplete types are not yet defined 
-   structures and empty arrays.<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALunrollType"></a>unrollType : <code class="type"><a href="Cil.html#TYPEtyp">typ</a> -> <a href="Cil.html#TYPEtyp">typ</a></code></pre><div class="info">
-Unroll a type until it exposes a non 
- <code class="code">TNamed</code>. Will collect all attributes appearing in <code class="code">TNamed</code>!!!<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALunrollTypeDeep"></a>unrollTypeDeep : <code class="type"><a href="Cil.html#TYPEtyp">typ</a> -> <a href="Cil.html#TYPEtyp">typ</a></code></pre><div class="info">
-Unroll all the TNamed in a type (even under type constructors such as 
- <code class="code">TPtr</code>, <code class="code">TFun</code> or <code class="code">TArray</code>. Does not unroll the types of fields in <code class="code">TComp</code> 
- types. Will collect all attributes<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALseparateStorageModifiers"></a>separateStorageModifiers : <code class="type"><a href="Cil.html#TYPEattribute">attribute</a> list -> <a href="Cil.html#TYPEattribute">attribute</a> list * <a href="Cil.html#TYPEattribute">attribute</a> list</code></pre><div class="info">
-Separate out the storage-modifier name attributes<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALisIntegralType"></a>isIntegralType : <code class="type"><a href="Cil.html#TYPEtyp">typ</a> -> bool</code></pre><div class="info">
-True if the argument is an integral type (i.e. integer or enum)<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALisArithmeticType"></a>isArithmeticType : <code class="type"><a href="Cil.html#TYPEtyp">typ</a> -> bool</code></pre><div class="info">
-True if the argument is an arithmetic type (i.e. integer, enum or 
-    floating point<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALisPointerType"></a>isPointerType : <code class="type"><a href="Cil.html#TYPEtyp">typ</a> -> bool</code></pre><div class="info">
-True if the argument is a pointer type<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALisFunctionType"></a>isFunctionType : <code class="type"><a href="Cil.html#TYPEtyp">typ</a> -> bool</code></pre><div class="info">
-True if the argument is a function type<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALargsToList"></a>argsToList : <code class="type">(string * <a href="Cil.html#TYPEtyp">typ</a> * <a href="Cil.html#TYPEattributes">attributes</a>) list option -><br>       (string * <a href="Cil.html#TYPEtyp">typ</a> * <a href="Cil.html#TYPEattributes">attributes</a>) list</code></pre><div class="info">
-Obtain the argument list ([] if None)<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALisArrayType"></a>isArrayType : <code class="type"><a href="Cil.html#TYPEtyp">typ</a> -> bool</code></pre><div class="info">
-True if the argument is an array type<br>
-</div>
-<pre><span class="keyword">exception</span> <a name="EXCEPTIONLenOfArray"></a>LenOfArray</pre>
-<div class="info">
-Raised when <a href="Cil.html#VALlenOfArray"><code class="code">Cil.lenOfArray</code></a> fails either because the length is <code class="code">None</code> 
- or because it is a non-constant expression<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALlenOfArray"></a>lenOfArray : <code class="type"><a href="Cil.html#TYPEexp">exp</a> option -> int</code></pre><div class="info">
-Call to compute the array length as present in the array type, to an 
- integer. Raises <a href="Cil.html#EXCEPTIONLenOfArray"><code class="code">Cil.LenOfArray</code></a> if not able to compute the length, such 
- as when there is no length or the length is not a constant.<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALgetCompField"></a>getCompField : <code class="type"><a href="Cil.html#TYPEcompinfo">compinfo</a> -> string -> <a href="Cil.html#TYPEfieldinfo">fieldinfo</a></code></pre><div class="info">
-Return a named fieldinfo in compinfo, or raise Not_found<br>
-</div>
-<br><code><span class="keyword">type</span> <a name="TYPEexistsAction"></a><code class="type"></code>existsAction = </code><table class="typetable">
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">ExistsTrue</span></code></td>
-
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">ExistsFalse</span></code></td>
-
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">ExistsMaybe</span></code></td>
-
-</tr></table>
-
-<div class="info">
-A datatype to be used in conjunction with <code class="code">existsType</code><br>
-</div>
-
-<pre><span class="keyword">val</span> <a name="VALexistsType"></a>existsType : <code class="type">(<a href="Cil.html#TYPEtyp">typ</a> -> <a href="Cil.html#TYPEexistsAction">existsAction</a>) -> <a href="Cil.html#TYPEtyp">typ</a> -> bool</code></pre><div class="info">
-Scans a type by applying the function on all elements. 
-    When the function returns ExistsTrue, the scan stops with
-    true. When the function returns ExistsFalse then the current branch is not
-    scanned anymore. Care is taken to 
-    apply the function only once on each composite type, thus avoiding 
-    circularity. When the function returns ExistsMaybe then the types that 
-    construct the current type are scanned (e.g. the base type for TPtr and 
-    TArray, the type of fields for a TComp, etc).<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALsplitFunctionType"></a>splitFunctionType : <code class="type"><a href="Cil.html#TYPEtyp">typ</a> -><br>       <a href="Cil.html#TYPEtyp">typ</a> * (string * <a href="Cil.html#TYPEtyp">typ</a> * <a href="Cil.html#TYPEattributes">attributes</a>) list option * bool *<br>       <a href="Cil.html#TYPEattributes">attributes</a></code></pre><div class="info">
-Given a function type split it into return type, 
- arguments, is_vararg and attributes. An error is raised if the type is not 
- a function type
-<p>
-Same as <a href="Cil.html#VALsplitFunctionType"><code class="code">Cil.splitFunctionType</code></a> but takes a varinfo. Prints a nicer 
- error message if the varinfo is not for a function<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALsplitFunctionTypeVI"></a>splitFunctionTypeVI : <code class="type"><a href="Cil.html#TYPEvarinfo">varinfo</a> -><br>       <a href="Cil.html#TYPEtyp">typ</a> * (string * <a href="Cil.html#TYPEtyp">typ</a> * <a href="Cil.html#TYPEattributes">attributes</a>) list option * bool *<br>       <a href="Cil.html#TYPEattributes">attributes</a></code></pre><br>
-<b>Type signatures</b><br>
-<br>
-Type signatures. Two types are identical iff they have identical 
- signatures. These contain the same information as types but canonicalized. 
- For example, two function types that are identical except for the name of 
- the formal arguments are given the same signature. Also, <code class="code">TNamed</code> 
- constructors are unrolled. You shoud use <code class="code">Util.equals</code> to compare type 
- signatures because they might still contain circular structures (through 
- attributes, and sizeof)<br>
-<pre><span class="keyword">val</span> <a name="VALd_typsig"></a>d_typsig : <code class="type">unit -> <a href="Cil.html#TYPEtypsig">typsig</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
-Print a type signature<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALtypeSig"></a>typeSig : <code class="type"><a href="Cil.html#TYPEtyp">typ</a> -> <a href="Cil.html#TYPEtypsig">typsig</a></code></pre><div class="info">
-Compute a type signature<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALtypeSigWithAttrs"></a>typeSigWithAttrs : <code class="type">?ignoreSign:bool -><br>       (<a href="Cil.html#TYPEattributes">attributes</a> -> <a href="Cil.html#TYPEattributes">attributes</a>) -> <a href="Cil.html#TYPEtyp">typ</a> -> <a href="Cil.html#TYPEtypsig">typsig</a></code></pre><div class="info">
-Like <a href="Cil.html#VALtypeSig"><code class="code">Cil.typeSig</code></a> but customize the incorporation of attributes.
-    Use ~ignoreSign:true to convert all signed integer types to unsigned,
-    so that signed and unsigned will compare the same.<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALsetTypeSigAttrs"></a>setTypeSigAttrs : <code class="type"><a href="Cil.html#TYPEattributes">attributes</a> -> <a href="Cil.html#TYPEtypsig">typsig</a> -> <a href="Cil.html#TYPEtypsig">typsig</a></code></pre><div class="info">
-Replace the attributes of a signature (only at top level)<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALtypeSigAttrs"></a>typeSigAttrs : <code class="type"><a href="Cil.html#TYPEtypsig">typsig</a> -> <a href="Cil.html#TYPEattributes">attributes</a></code></pre><div class="info">
-Get the top-level attributes of a signature<br>
-</div>
-<br>
-LVALUES<br>
-<pre><span class="keyword">val</span> <a name="VALmakeVarinfo"></a>makeVarinfo : <code class="type">bool -> string -> <a href="Cil.html#TYPEtyp">typ</a> -> <a href="Cil.html#TYPEvarinfo">varinfo</a></code></pre><div class="info">
-Make a varinfo. Use this (rarely) to make a raw varinfo. Use other 
- functions to make locals (<a href="Cil.html#VALmakeLocalVar"><code class="code">Cil.makeLocalVar</code></a> or <a href="Cil.html#VALmakeFormalVar"><code class="code">Cil.makeFormalVar</code></a> or 
- <a href="Cil.html#VALmakeTempVar"><code class="code">Cil.makeTempVar</code></a>) and globals (<a href="Cil.html#VALmakeGlobalVar"><code class="code">Cil.makeGlobalVar</code></a>). Note that this 
- function will assign a new identifier. The first argument specifies 
- whether the varinfo is for a global.<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALmakeFormalVar"></a>makeFormalVar : <code class="type"><a href="Cil.html#TYPEfundec">fundec</a> -> ?where:string -> string -> <a href="Cil.html#TYPEtyp">typ</a> -> <a href="Cil.html#TYPEvarinfo">varinfo</a></code></pre><div class="info">
-Make a formal variable for a function. Insert it in both the sformals 
-    and the type of the function. You can optionally specify where to insert 
-    this one. If where = "^" then it is inserted first. If where = "$" then 
-    it is inserted last. Otherwise where must be the name of a formal after 
-    which to insert this. By default it is inserted at the end.<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALmakeLocalVar"></a>makeLocalVar : <code class="type"><a href="Cil.html#TYPEfundec">fundec</a> -> ?insert:bool -> string -> <a href="Cil.html#TYPEtyp">typ</a> -> <a href="Cil.html#TYPEvarinfo">varinfo</a></code></pre><div class="info">
-Make a local variable and add it to a function's slocals (only if insert = 
-    true, which is the default). Make sure you know what you are doing if you 
-    set insert=false.<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALmakeTempVar"></a>makeTempVar : <code class="type"><a href="Cil.html#TYPEfundec">fundec</a> -> ?name:string -> <a href="Cil.html#TYPEtyp">typ</a> -> <a href="Cil.html#TYPEvarinfo">varinfo</a></code></pre><div class="info">
-Make a temporary variable and add it to a function's slocals. The name of 
-    the temporary variable will be generated based on the given name hint so 
-    that to avoid conflicts with other locals.<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALmakeGlobalVar"></a>makeGlobalVar : <code class="type">string -> <a href="Cil.html#TYPEtyp">typ</a> -> <a href="Cil.html#TYPEvarinfo">varinfo</a></code></pre><div class="info">
-Make a global variable. Your responsibility to make sure that the name 
-    is unique<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALcopyVarinfo"></a>copyVarinfo : <code class="type"><a href="Cil.html#TYPEvarinfo">varinfo</a> -> string -> <a href="Cil.html#TYPEvarinfo">varinfo</a></code></pre><div class="info">
-Make a shallow copy of a <code class="code">varinfo</code> and assign a new identifier<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALnewVID"></a>newVID : <code class="type">unit -> int</code></pre><div class="info">
-Generate a new variable ID. This will be different than any variable ID 
- that is generated by <a href="Cil.html#VALmakeLocalVar"><code class="code">Cil.makeLocalVar</code></a> and friends<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALaddOffsetLval"></a>addOffsetLval : <code class="type"><a href="Cil.html#TYPEoffset">offset</a> -> <a href="Cil.html#TYPElval">lval</a> -> <a href="Cil.html#TYPElval">lval</a></code></pre><div class="info">
-Add an offset at the end of an lvalue. Make sure the type of the lvalue 
- and the offset are compatible.<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALaddOffset"></a>addOffset : <code class="type"><a href="Cil.html#TYPEoffset">offset</a> -> <a href="Cil.html#TYPEoffset">offset</a> -> <a href="Cil.html#TYPEoffset">offset</a></code></pre><div class="info">
-<code class="code">addOffset o1 o2</code> adds <code class="code">o1</code> to the end of <code class="code">o2</code>.<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALremoveOffsetLval"></a>removeOffsetLval : <code class="type"><a href="Cil.html#TYPElval">lval</a> -> <a href="Cil.html#TYPElval">lval</a> * <a href="Cil.html#TYPEoffset">offset</a></code></pre><div class="info">
-Remove ONE offset from the end of an lvalue. Returns the lvalue with the 
- trimmed offset and the final offset. If the final offset is <code class="code">NoOffset</code> 
- then the original <code class="code">lval</code> did not have an offset.<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALremoveOffset"></a>removeOffset : <code class="type"><a href="Cil.html#TYPEoffset">offset</a> -> <a href="Cil.html#TYPEoffset">offset</a> * <a href="Cil.html#TYPEoffset">offset</a></code></pre><div class="info">
-Remove ONE offset from the end of an offset sequence. Returns the 
- trimmed offset and the final offset. If the final offset is <code class="code">NoOffset</code> 
- then the original <code class="code">lval</code> did not have an offset.<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALtypeOfLval"></a>typeOfLval : <code class="type"><a href="Cil.html#TYPElval">lval</a> -> <a href="Cil.html#TYPEtyp">typ</a></code></pre><div class="info">
-Compute the type of an lvalue<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALtypeOffset"></a>typeOffset : <code class="type"><a href="Cil.html#TYPEtyp">typ</a> -> <a href="Cil.html#TYPEoffset">offset</a> -> <a href="Cil.html#TYPEtyp">typ</a></code></pre><div class="info">
-Compute the type of an offset from a base type<br>
-</div>
-<br>
-<b>Values for manipulating expressions</b><br>
-<pre><span class="keyword">val</span> <a name="VALzero"></a>zero : <code class="type"><a href="Cil.html#TYPEexp">exp</a></code></pre><div class="info">
-0<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALone"></a>one : <code class="type"><a href="Cil.html#TYPEexp">exp</a></code></pre><div class="info">
-1<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALmone"></a>mone : <code class="type"><a href="Cil.html#TYPEexp">exp</a></code></pre><div class="info">
--1<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALkinteger64"></a>kinteger64 : <code class="type"><a href="Cil.html#TYPEikind">ikind</a> -> int64 -> <a href="Cil.html#TYPEexp">exp</a></code></pre><div class="info">
-Construct an integer of a given kind, using OCaml's int64 type. If needed 
- it will truncate the integer to be within the representable range for the 
- given kind.<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALkinteger"></a>kinteger : <code class="type"><a href="Cil.html#TYPEikind">ikind</a> -> int -> <a href="Cil.html#TYPEexp">exp</a></code></pre><div class="info">
-Construct an integer of a given kind. Converts the integer to int64 and 
- then uses kinteger64. This might truncate the value if you use a kind 
- that cannot represent the given integer. This can only happen for one of 
- the Char or Short kinds<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALinteger"></a>integer : <code class="type">int -> <a href="Cil.html#TYPEexp">exp</a></code></pre><div class="info">
-Construct an integer of kind IInt. You can use this always since the 
-    OCaml integers are 31 bits and are guaranteed to fit in an IInt<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALisInteger"></a>isInteger : <code class="type"><a href="Cil.html#TYPEexp">exp</a> -> int64 option</code></pre><div class="info">
-True if the given expression is a (possibly cast'ed) 
-    character or an integer constant<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALisConstant"></a>isConstant : <code class="type"><a href="Cil.html#TYPEexp">exp</a> -> bool</code></pre><div class="info">
-True if the expression is a compile-time constant<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALisZero"></a>isZero : <code class="type"><a href="Cil.html#TYPEexp">exp</a> -> bool</code></pre><div class="info">
-True if the given expression is a (possibly cast'ed) integer or character 
-    constant with value zero<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALcharConstToInt"></a>charConstToInt : <code class="type">char -> <a href="Cil.html#TYPEconstant">constant</a></code></pre><div class="info">
-Given the character c in a (CChr c), sign-extend it to 32 bits.
-  (This is the official way of interpreting character constants, according to
-  ISO C 6.4.4.4.10, which says that character constants are chars cast to ints)
-  Returns CInt64(sign-extened c, IInt, None)<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALconstFold"></a>constFold : <code class="type">bool -> <a href="Cil.html#TYPEexp">exp</a> -> <a href="Cil.html#TYPEexp">exp</a></code></pre><div class="info">
-Do constant folding on an expression. If the first argument is true then 
-    will also compute compiler-dependent expressions such as sizeof<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALconstFoldBinOp"></a>constFoldBinOp : <code class="type">bool -> <a href="Cil.html#TYPEbinop">binop</a> -> <a href="Cil.html#TYPEexp">exp</a> -> <a href="Cil.html#TYPEexp">exp</a> -> <a href="Cil.html#TYPEtyp">typ</a> -> <a href="Cil.html#TYPEexp">exp</a></code></pre><div class="info">
-Do constant folding on a binary operation. The bulk of the work done by 
-    <code class="code">constFold</code> is done here. If the first argument is true then 
-    will also compute compiler-dependent expressions such as sizeof<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALincrem"></a>increm : <code class="type"><a href="Cil.html#TYPEexp">exp</a> -> int -> <a href="Cil.html#TYPEexp">exp</a></code></pre><div class="info">
-Increment an expression. Can be arithmetic or pointer type<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALvar"></a>var : <code class="type"><a href="Cil.html#TYPEvarinfo">varinfo</a> -> <a href="Cil.html#TYPElval">lval</a></code></pre><div class="info">
-Makes an lvalue out of a given variable<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALmkAddrOf"></a>mkAddrOf : <code class="type"><a href="Cil.html#TYPElval">lval</a> -> <a href="Cil.html#TYPEexp">exp</a></code></pre><div class="info">
-Make an AddrOf. Given an lvalue of type T will give back an expression of 
-    type ptr(T). It optimizes somewhat expressions like "&amp; v" and "&amp; v<code class="code">0</code>"<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALmkAddrOrStartOf"></a>mkAddrOrStartOf : <code class="type"><a href="Cil.html#TYPElval">lval</a> -> <a href="Cil.html#TYPEexp">exp</a></code></pre><div class="info">
-Like mkAddrOf except if the type of lval is an array then it uses 
-    StartOf. This is the right operation for getting a pointer to the start 
-    of the storage denoted by lval.<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALmkMem"></a>mkMem : <code class="type">addr:<a href="Cil.html#TYPEexp">exp</a> -> off:<a href="Cil.html#TYPEoffset">offset</a> -> <a href="Cil.html#TYPElval">lval</a></code></pre><div class="info">
-Make a Mem, while optimizing AddrOf. The type of the addr must be 
-    TPtr(t) and the type of the resulting lval is t. Note that in CIL the 
-    implicit conversion between an array and the pointer to the first 
-    element does not apply. You must do the conversion yourself using 
-    StartOf<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALmkString"></a>mkString : <code class="type">string -> <a href="Cil.html#TYPEexp">exp</a></code></pre><div class="info">
-Make an expression that is a string constant (of pointer type)<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALmkCastT"></a>mkCastT : <code class="type">e:<a href="Cil.html#TYPEexp">exp</a> -> oldt:<a href="Cil.html#TYPEtyp">typ</a> -> newt:<a href="Cil.html#TYPEtyp">typ</a> -> <a href="Cil.html#TYPEexp">exp</a></code></pre><div class="info">
-Construct a cast when having the old type of the expression. If the new 
- type is the same as the old type, then no cast is added.<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALmkCast"></a>mkCast : <code class="type">e:<a href="Cil.html#TYPEexp">exp</a> -> newt:<a href="Cil.html#TYPEtyp">typ</a> -> <a href="Cil.html#TYPEexp">exp</a></code></pre><div class="info">
-Like <a href="Cil.html#VALmkCastT"><code class="code">Cil.mkCastT</code></a> but uses typeOf to get <code class="code">oldt</code><br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALstripCasts"></a>stripCasts : <code class="type"><a href="Cil.html#TYPEexp">exp</a> -> <a href="Cil.html#TYPEexp">exp</a></code></pre><div class="info">
-Removes casts from this expression, but ignores casts within
-  other expression constructs.  So we delete the (A) and (B) casts from 
-  "(A)(B)(x + (C)y)", but leave the (C) cast.<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALtypeOf"></a>typeOf : <code class="type"><a href="Cil.html#TYPEexp">exp</a> -> <a href="Cil.html#TYPEtyp">typ</a></code></pre><div class="info">
-Compute the type of an expression<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALparseInt"></a>parseInt : <code class="type">string -> <a href="Cil.html#TYPEexp">exp</a></code></pre><div class="info">
-Convert a string representing a C integer literal to an expression. 
- Handles the prefixes 0x and 0 and the suffixes L, U, UL, LL, ULL<br>
-</div>
-<br>
-<b>Values for manipulating statements</b><br>
-<pre><span class="keyword">val</span> <a name="VALmkStmt"></a>mkStmt : <code class="type"><a href="Cil.html#TYPEstmtkind">stmtkind</a> -> <a href="Cil.html#TYPEstmt">stmt</a></code></pre><div class="info">
-Construct a statement, given its kind. Initialize the <code class="code">sid</code> field to -1,
-    and <code class="code">labels</code>, <code class="code">succs</code> and <code class="code">preds</code> to the empty list<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALmkBlock"></a>mkBlock : <code class="type"><a href="Cil.html#TYPEstmt">stmt</a> list -> <a href="Cil.html#TYPEblock">block</a></code></pre><div class="info">
-Construct a block with no attributes, given a list of statements<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALmkStmtOneInstr"></a>mkStmtOneInstr : <code class="type"><a href="Cil.html#TYPEinstr">instr</a> -> <a href="Cil.html#TYPEstmt">stmt</a></code></pre><div class="info">
-Construct a statement consisting of just one instruction<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALcompactStmts"></a>compactStmts : <code class="type"><a href="Cil.html#TYPEstmt">stmt</a> list -> <a href="Cil.html#TYPEstmt">stmt</a> list</code></pre><div class="info">
-Try to compress statements so as to get maximal basic blocks<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALmkEmptyStmt"></a>mkEmptyStmt : <code class="type">unit -> <a href="Cil.html#TYPEstmt">stmt</a></code></pre><div class="info">
-Returns an empty statement (of kind <code class="code">Instr</code>)<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALdummyInstr"></a>dummyInstr : <code class="type"><a href="Cil.html#TYPEinstr">instr</a></code></pre><div class="info">
-A instr to serve as a placeholder<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALdummyStmt"></a>dummyStmt : <code class="type"><a href="Cil.html#TYPEstmt">stmt</a></code></pre><div class="info">
-A statement consisting of just <code class="code">dummyInstr</code><br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALmkWhile"></a>mkWhile : <code class="type">guard:<a href="Cil.html#TYPEexp">exp</a> -> body:<a href="Cil.html#TYPEstmt">stmt</a> list -> <a href="Cil.html#TYPEstmt">stmt</a> list</code></pre><div class="info">
-Make a while loop. Can contain Break or Continue<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALmkForIncr"></a>mkForIncr : <code class="type">iter:<a href="Cil.html#TYPEvarinfo">varinfo</a> -><br>       first:<a href="Cil.html#TYPEexp">exp</a> -><br>       stopat:<a href="Cil.html#TYPEexp">exp</a> -> incr:<a href="Cil.html#TYPEexp">exp</a> -> body:<a href="Cil.html#TYPEstmt">stmt</a> list -> <a href="Cil.html#TYPEstmt">stmt</a> list</code></pre><div class="info">
-Make a for loop for(i=start; i&lt;past; i += incr) { ... }. The body 
-    can contain Break but not Continue. Can be used with i a pointer 
-    or an integer. Start and done must have the same type but incr 
-    must be an integer<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALmkFor"></a>mkFor : <code class="type">start:<a href="Cil.html#TYPEstmt">stmt</a> list -><br>       guard:<a href="Cil.html#TYPEexp">exp</a> -> next:<a href="Cil.html#TYPEstmt">stmt</a> list -> body:<a href="Cil.html#TYPEstmt">stmt</a> list -> <a href="Cil.html#TYPEstmt">stmt</a> list</code></pre><div class="info">
-Make a for loop for(start; guard; next) { ... }. The body can 
-    contain Break but not Continue !!!<br>
-</div>
-<br>
-<b>Values for manipulating attributes</b><br>
-<br><code><span class="keyword">type</span> <a name="TYPEattributeClass"></a><code class="type"></code>attributeClass = </code><table class="typetable">
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">AttrName</span> <span class="keyword">of</span> <code class="type">bool</code></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>Attribute of a name. If argument is true and we are on MSVC then 
-            the attribute is printed using __declspec as part of the storage 
-            specifier</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">AttrFunType</span> <span class="keyword">of</span> <code class="type">bool</code></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>Attribute of a function type. If argument is true and we are on 
-            MSVC then the attribute is printed just before the function name</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">AttrType</span></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>Attribute of a type</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr></table>
-
-<div class="info">
-Various classes of attributes<br>
-</div>
-
-<pre><span class="keyword">val</span> <a name="VALattributeHash"></a>attributeHash : <code class="type">(string, <a href="Cil.html#TYPEattributeClass">attributeClass</a>) Hashtbl.t</code></pre><div class="info">
-This table contains the mapping of predefined attributes to classes. 
-    Extend this table with more attributes as you need. This table is used to 
-    determine how to associate attributes with names or types<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALpartitionAttributes"></a>partitionAttributes : <code class="type">default:<a href="Cil.html#TYPEattributeClass">attributeClass</a> -><br>       <a href="Cil.html#TYPEattributes">attributes</a> -><br>       <a href="Cil.html#TYPEattribute">attribute</a> list * <a href="Cil.html#TYPEattribute">attribute</a> list * <a href="Cil.html#TYPEattribute">attribute</a> list</code></pre><div class="info">
-Partition the attributes into classes:name attributes, function type, 
-    and type attributes<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALaddAttribute"></a>addAttribute : <code class="type"><a href="Cil.html#TYPEattribute">attribute</a> -> <a href="Cil.html#TYPEattributes">attributes</a> -> <a href="Cil.html#TYPEattributes">attributes</a></code></pre><div class="info">
-Add an attribute. Maintains the attributes in sorted order of the second 
-    argument<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALaddAttributes"></a>addAttributes : <code class="type"><a href="Cil.html#TYPEattribute">attribute</a> list -> <a href="Cil.html#TYPEattributes">attributes</a> -> <a href="Cil.html#TYPEattributes">attributes</a></code></pre><div class="info">
-Add a list of attributes. Maintains the attributes in sorted order. The 
-    second argument must be sorted, but not necessarily the first<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALdropAttribute"></a>dropAttribute : <code class="type">string -> <a href="Cil.html#TYPEattributes">attributes</a> -> <a href="Cil.html#TYPEattributes">attributes</a></code></pre><div class="info">
-Remove all attributes with the given name. Maintains the attributes in 
-    sorted order.<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALdropAttributes"></a>dropAttributes : <code class="type">string list -> <a href="Cil.html#TYPEattributes">attributes</a> -> <a href="Cil.html#TYPEattributes">attributes</a></code></pre><div class="info">
-Remove all attributes with names appearing in the string list.
-  Maintains the attributes in sorted order<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALfilterAttributes"></a>filterAttributes : <code class="type">string -> <a href="Cil.html#TYPEattributes">attributes</a> -> <a href="Cil.html#TYPEattributes">attributes</a></code></pre><div class="info">
-Retains attributes with the given name<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALhasAttribute"></a>hasAttribute : <code class="type">string -> <a href="Cil.html#TYPEattributes">attributes</a> -> bool</code></pre><div class="info">
-True if the named attribute appears in the attribute list. The list of
-    attributes must be sorted.<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALtypeAttrs"></a>typeAttrs : <code class="type"><a href="Cil.html#TYPEtyp">typ</a> -> <a href="Cil.html#TYPEattribute">attribute</a> list</code></pre><div class="info">
-Returns all the attributes contained in a type. This requires a traversal 
-    of the type structure, in case of composite, enumeration and named types<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALsetTypeAttrs"></a>setTypeAttrs : <code class="type"><a href="Cil.html#TYPEtyp">typ</a> -> <a href="Cil.html#TYPEattributes">attributes</a> -> <a href="Cil.html#TYPEtyp">typ</a></code></pre><pre><span class="keyword">val</span> <a name="VALtypeAddAttributes"></a>typeAddAttributes : <code class="type"><a href="Cil.html#TYPEattribute">attribute</a> list -> <a href="Cil.html#TYPEtyp">typ</a> -> <a href="Cil.html#TYPEtyp">typ</a></code></pre><div class="info">
-Add some attributes to a type<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALtypeRemoveAttributes"></a>typeRemoveAttributes : <code class="type">string list -> <a href="Cil.html#TYPEtyp">typ</a> -> <a href="Cil.html#TYPEtyp">typ</a></code></pre><div class="info">
-Remove all attributes with the given names from a type. Note that this
-    does not remove attributes from typedef and tag definitions, just from 
-    their uses<br>
-</div>
-<br>
-<b>The visitor</b><br>
-<br><code><span class="keyword">type</span> <a name="TYPEvisitAction"></a><code class="type">'a</code> visitAction = </code><table class="typetable">
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">SkipChildren</span></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>Do not visit the children. Return 
-                                            the node as it is.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">DoChildren</span></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>Continue with the children of this 
-                                            node. Rebuild the node on return 
-                                            if any of the children changes 
-                                            (use == test)</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">ChangeTo</span> <span class="keyword">of</span> <code class="type">'a</code></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>Replace the expression with the 
-                                            given one</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">ChangeDoChildrenPost</span> <span class="keyword">of</span> <code class="type">'a * ('a -> 'a)</code></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>First consider that the entire 
-                                           exp is replaced by the first 
-                                           parameter. Then continue with 
-                                           the children. On return rebuild 
-                                           the node if any of the children 
-                                           has changed and then apply the 
-                                           function on the node</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr></table>
-
-<div class="info">
-Different visiting actions. 'a will be instantiated with <code class="code">exp</code>, <code class="code">instr</code>,
-    etc.<br>
-</div>
-
-<pre><span class="keyword">class type</span> <a name="TYPEcilVisitor"></a><a href="Cil.cilVisitor.html">cilVisitor</a> = <code class="code">object</code> <a href="Cil.cilVisitor.html">..</a> <code class="code">end</code></pre><div class="info">
-A visitor interface for traversing CIL trees.
-</div>
-<pre><span class="keyword">class</span> <a name="TYPEnopCilVisitor"></a><a href="Cil.nopCilVisitor.html">nopCilVisitor</a> : <code class="type"></code><code class="type"><a href="Cil.cilVisitor.html">cilVisitor</a></code></pre><div class="info">
-Default Visitor.
-</div>
-<pre><span class="keyword">val</span> <a name="VALvisitCilFile"></a>visitCilFile : <code class="type"><a href="Cil.cilVisitor.html">cilVisitor</a> -> <a href="Cil.html#TYPEfile">file</a> -> unit</code></pre><div class="info">
-Visit a file. This will will re-cons all globals TWICE (so that it is 
- tail-recursive). Use <a href="Cil.html#VALvisitCilFileSameGlobals"><code class="code">Cil.visitCilFileSameGlobals</code></a> if your visitor will 
- not change the list of globals.<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALvisitCilFileSameGlobals"></a>visitCilFileSameGlobals : <code class="type"><a href="Cil.cilVisitor.html">cilVisitor</a> -> <a href="Cil.html#TYPEfile">file</a> -> unit</code></pre><div class="info">
-A visitor for the whole file that does not change the globals (but maybe
- changes things inside the globals). Use this function instead of
- <a href="Cil.html#VALvisitCilFile"><code class="code">Cil.visitCilFile</code></a> whenever appropriate because it is more efficient for
- long files.<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALvisitCilGlobal"></a>visitCilGlobal : <code class="type"><a href="Cil.cilVisitor.html">cilVisitor</a> -> <a href="Cil.html#TYPEglobal">global</a> -> <a href="Cil.html#TYPEglobal">global</a> list</code></pre><div class="info">
-Visit a global<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALvisitCilFunction"></a>visitCilFunction : <code class="type"><a href="Cil.cilVisitor.html">cilVisitor</a> -> <a href="Cil.html#TYPEfundec">fundec</a> -> <a href="Cil.html#TYPEfundec">fundec</a></code></pre><div class="info">
-Visit a function definition<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALvisitCilExpr"></a>visitCilExpr : <code class="type"><a href="Cil.cilVisitor.html">cilVisitor</a> -> <a href="Cil.html#TYPEexp">exp</a> -> <a href="Cil.html#TYPEexp">exp</a></code></pre><pre><span class="keyword">val</span> <a name="VALvisitCilLval"></a>visitCilLval : <code class="type"><a href="Cil.cilVisitor.html">cilVisitor</a> -> <a href="Cil.html#TYPElval">lval</a> -> <a href="Cil.html#TYPElval">lval</a></code></pre><div class="info">
-Visit an lvalue<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALvisitCilOffset"></a>visitCilOffset : <code class="type"><a href="Cil.cilVisitor.html">cilVisitor</a> -> <a href="Cil.html#TYPEoffset">offset</a> -> <a href="Cil.html#TYPEoffset">offset</a></code></pre><div class="info">
-Visit an lvalue or recursive offset<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALvisitCilInitOffset"></a>visitCilInitOffset : <code class="type"><a href="Cil.cilVisitor.html">cilVisitor</a> -> <a href="Cil.html#TYPEoffset">offset</a> -> <a href="Cil.html#TYPEoffset">offset</a></code></pre><div class="info">
-Visit an initializer offset<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALvisitCilInstr"></a>visitCilInstr : <code class="type"><a href="Cil.cilVisitor.html">cilVisitor</a> -> <a href="Cil.html#TYPEinstr">instr</a> -> <a href="Cil.html#TYPEinstr">instr</a> list</code></pre><div class="info">
-Visit an instruction<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALvisitCilStmt"></a>visitCilStmt : <code class="type"><a href="Cil.cilVisitor.html">cilVisitor</a> -> <a href="Cil.html#TYPEstmt">stmt</a> -> <a href="Cil.html#TYPEstmt">stmt</a></code></pre><div class="info">
-Visit a statement<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALvisitCilBlock"></a>visitCilBlock : <code class="type"><a href="Cil.cilVisitor.html">cilVisitor</a> -> <a href="Cil.html#TYPEblock">block</a> -> <a href="Cil.html#TYPEblock">block</a></code></pre><div class="info">
-Visit a block<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALvisitCilType"></a>visitCilType : <code class="type"><a href="Cil.cilVisitor.html">cilVisitor</a> -> <a href="Cil.html#TYPEtyp">typ</a> -> <a href="Cil.html#TYPEtyp">typ</a></code></pre><div class="info">
-Visit a type<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALvisitCilVarDecl"></a>visitCilVarDecl : <code class="type"><a href="Cil.cilVisitor.html">cilVisitor</a> -> <a href="Cil.html#TYPEvarinfo">varinfo</a> -> <a href="Cil.html#TYPEvarinfo">varinfo</a></code></pre><div class="info">
-Visit a variable declaration<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALvisitCilInit"></a>visitCilInit : <code class="type"><a href="Cil.cilVisitor.html">cilVisitor</a> -> <a href="Cil.html#TYPEinit">init</a> -> <a href="Cil.html#TYPEinit">init</a></code></pre><div class="info">
-Visit an initializer<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALvisitCilAttributes"></a>visitCilAttributes : <code class="type"><a href="Cil.cilVisitor.html">cilVisitor</a> -> <a href="Cil.html#TYPEattribute">attribute</a> list -> <a href="Cil.html#TYPEattribute">attribute</a> list</code></pre><div class="info">
-Visit a list of attributes<br>
-</div>
-<br>
-<b>Utility functions</b><br>
-<pre><span class="keyword">val</span> <a name="VALmsvcMode"></a>msvcMode : <code class="type">bool Pervasives.ref</code></pre><div class="info">
-Whether the pretty printer should print output for the MS VC compiler.
-   Default is GCC. After you set this function you should call <a href="Cil.html#VALinitCIL"><code class="code">Cil.initCIL</code></a>.<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALuseLogicalOperators"></a>useLogicalOperators : <code class="type">bool Pervasives.ref</code></pre><div class="info">
-Whether to use the logical operands LAnd and LOr. By default, do not use 
- them because they are unlike other expressions and do not evaluate both of 
- their operands<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALconstFoldVisitor"></a>constFoldVisitor : <code class="type">bool -> <a href="Cil.cilVisitor.html">cilVisitor</a></code></pre><div class="info">
-A visitor that does constant folding. Pass as argument whether you want 
- machine specific simplifications to be done, or not.<br>
-</div>
-<br><code><span class="keyword">type</span> <a name="TYPElineDirectiveStyle"></a><code class="type"></code>lineDirectiveStyle = </code><table class="typetable">
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">LineComment</span></code></td>
-
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">LinePreprocessorInput</span></code></td>
-
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">LinePreprocessorOutput</span></code></td>
-
-</tr></table>
-
-<div class="info">
-Styles of printing line directives<br>
-</div>
-
-<pre><span class="keyword">val</span> <a name="VALlineDirectiveStyle"></a>lineDirectiveStyle : <code class="type"><a href="Cil.html#TYPElineDirectiveStyle">lineDirectiveStyle</a> option Pervasives.ref</code></pre><div class="info">
-How to print line directives<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALprint_CIL_Input"></a>print_CIL_Input : <code class="type">bool Pervasives.ref</code></pre><div class="info">
-Whether we print something that will only be used as input to our own 
- parser. In that case we are a bit more liberal in what we print<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALprintCilAsIs"></a>printCilAsIs : <code class="type">bool Pervasives.ref</code></pre><div class="info">
-Whether to print the CIL as they are, without trying to be smart and 
- print nicer code. Normally this is false, in which case the pretty 
- printer will turn the while(1) loops of CIL into nicer loops, will not 
- print empty "else" blocks, etc. These is one case howewer in which if you 
- turn this on you will get code that does not compile: if you use varargs 
- the __builtin_va_arg function will be printed in its internal form.<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALlineLength"></a>lineLength : <code class="type">int Pervasives.ref</code></pre><div class="info">
-The length used when wrapping output lines.  Setting this variable to
- a large integer will prevent wrapping and make #line directives more
- accurate.<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALforgcc"></a>forgcc : <code class="type">string -> string</code></pre><div class="info">
-Return the string 's' if we're printing output for gcc, suppres
-  it if we're printing for CIL to parse back in.  the purpose is to
-  hide things from gcc that it complains about, but still be able
-  to do lossless transformations when CIL is the consumer<br>
-</div>
-<br>
-<b>Debugging support</b><br>
-<pre><span class="keyword">val</span> <a name="VALcurrentLoc"></a>currentLoc : <code class="type"><a href="Cil.html#TYPElocation">location</a> Pervasives.ref</code></pre><div class="info">
-A reference to the current location. If you are careful to set this to 
- the current location then you can use some built-in logging functions that 
- will print the location.<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALcurrentGlobal"></a>currentGlobal : <code class="type"><a href="Cil.html#TYPEglobal">global</a> Pervasives.ref</code></pre><div class="info">
-A reference to the current global being visited<br>
-</div>
-<br>
-CIL has a fairly easy to use mechanism for printing error messages. This 
- mechanism is built on top of the pretty-printer mechanism (see 
- <a href="Pretty.html#TYPEdoc"><code class="code">Pretty.doc</code></a>) and the error-message modules (see <a href="Errormsg.html#VALerror"><code class="code">Errormsg.error</code></a>). 
-<p>
-
- Here is a typical example for printing a log message: <pre>
-ignore (Errormsg.log "Expression %a is not positive (at %s:%i)\n"
-                        d_exp e loc.file loc.line)
-</pre>
-<p>
-
- and here is an example of how you print a fatal error message that stop the 
- execution: <pre>
-Errormsg.s (Errormsg.bug "Why am I here?")
-</pre>
-<p>
-
- Notice that you can use C format strings with some extension. The most 
-useful extension is "%a" that means to consumer the next two argument from 
-the argument list and to apply the first to <code class="code">unit</code> and then to the second 
-and to print the resulting <a href="Pretty.html#TYPEdoc"><code class="code">Pretty.doc</code></a>. For each major type in CIL there is 
-a corresponding function that pretty-prints an element of that type:<br>
-<pre><span class="keyword">val</span> <a name="VALd_loc"></a>d_loc : <code class="type">unit -> <a href="Cil.html#TYPElocation">location</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
-Pretty-print a location<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALd_thisloc"></a>d_thisloc : <code class="type">unit -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
-Pretty-print the <a href="Cil.html#VALcurrentLoc"><code class="code">Cil.currentLoc</code></a><br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALd_ikind"></a>d_ikind : <code class="type">unit -> <a href="Cil.html#TYPEikind">ikind</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
-Pretty-print an integer of a given kind<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALd_fkind"></a>d_fkind : <code class="type">unit -> <a href="Cil.html#TYPEfkind">fkind</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
-Pretty-print a floating-point kind<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALd_storage"></a>d_storage : <code class="type">unit -> <a href="Cil.html#TYPEstorage">storage</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
-Pretty-print storage-class information<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALd_const"></a>d_const : <code class="type">unit -> <a href="Cil.html#TYPEconstant">constant</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
-Pretty-print a constant<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALderefStarLevel"></a>derefStarLevel : <code class="type">int</code></pre><pre><span class="keyword">val</span> <a name="VALindexLevel"></a>indexLevel : <code class="type">int</code></pre><pre><span class="keyword">val</span> <a name="VALarrowLevel"></a>arrowLevel : <code class="type">int</code></pre><pre><span class="keyword">val</span> <a name="VALaddrOfLevel"></a>addrOfLevel : <code class="type">int</code></pre><pre><span class="keyword">val</span> <a name="VALadditiveLevel"></a>additiveLevel : <code class="type">int</code></pre><pre><span class="keyword">val</span> <a name="VALcomparativeLevel"></a>comparativeLevel : <code class="type">int</code></pre><pre><span class="keyword">val</span> <a name="VALbitwiseLevel"></a>bitwiseLevel : <code class="type">int</code></pre><pre><span class="keyword">val</span> <a name="VALgetParenthLevel"></a>getParenthLevel : <code class="type"><a href="Cil.html#TYPEexp">exp</a> -> int</code></pre><div class="info">
-Parentheses level. An expression "a op b" is printed parenthesized if its 
- parentheses level is &gt;= that that of its context. Identifiers have the 
- lowest level and weakly binding operators (e.g. |) have the largest level. 
- The correctness criterion is that a smaller level MUST correspond to a 
- stronger precedence!<br>
-</div>
-<pre><span class="keyword">class type</span> <a name="TYPEcilPrinter"></a><a href="Cil.cilPrinter.html">cilPrinter</a> = <code class="code">object</code> <a href="Cil.cilPrinter.html">..</a> <code class="code">end</code></pre><div class="info">
-A printer interface for CIL trees.
-</div>
-<pre><span class="keyword">class</span> <a name="TYPEdefaultCilPrinterClass"></a><a href="Cil.defaultCilPrinterClass.html">defaultCilPrinterClass</a> : <code class="type"></code><code class="type"><a href="Cil.cilPrinter.html">cilPrinter</a></code></pre><pre><span class="keyword">val</span> <a name="VALdefaultCilPrinter"></a>defaultCilPrinter : <code class="type"><a href="Cil.cilPrinter.html">cilPrinter</a></code></pre><pre><span class="keyword">class</span> <a name="TYPEplainCilPrinterClass"></a><a href="Cil.plainCilPrinterClass.html">plainCilPrinterClass</a> : <code class="type"></code><code class="type"><a href="Cil.cilPrinter.html">cilPrinter</a></code></pre><div class="info">
-These are pretty-printers that will show you more details on the internal 
- CIL representation, without trying hard to make it look like C
-</div>
-<pre><span class="keyword">val</span> <a name="VALplainCilPrinter"></a>plainCilPrinter : <code class="type"><a href="Cil.cilPrinter.html">cilPrinter</a></code></pre><pre><span class="keyword">val</span> <a name="VALprinterForMaincil"></a>printerForMaincil : <code class="type"><a href="Cil.cilPrinter.html">cilPrinter</a> Pervasives.ref</code></pre><pre><span class="keyword">val</span> <a name="VALprintType"></a>printType : <code class="type"><a href="Cil.cilPrinter.html">cilPrinter</a> -> unit -> <a href="Cil.html#TYPEtyp">typ</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
-Print a type given a pretty printer<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALprintExp"></a>printExp : <code class="type"><a href="Cil.cilPrinter.html">cilPrinter</a> -> unit -> <a href="Cil.html#TYPEexp">exp</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
-Print an expression given a pretty printer<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALprintLval"></a>printLval : <code class="type"><a href="Cil.cilPrinter.html">cilPrinter</a> -> unit -> <a href="Cil.html#TYPElval">lval</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
-Print an lvalue given a pretty printer<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALprintGlobal"></a>printGlobal : <code class="type"><a href="Cil.cilPrinter.html">cilPrinter</a> -> unit -> <a href="Cil.html#TYPEglobal">global</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
-Print a global given a pretty printer<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALprintAttr"></a>printAttr : <code class="type"><a href="Cil.cilPrinter.html">cilPrinter</a> -> unit -> <a href="Cil.html#TYPEattribute">attribute</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
-Print an attribute given a pretty printer<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALprintAttrs"></a>printAttrs : <code class="type"><a href="Cil.cilPrinter.html">cilPrinter</a> -> unit -> <a href="Cil.html#TYPEattributes">attributes</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
-Print a set of attributes given a pretty printer<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALprintInstr"></a>printInstr : <code class="type"><a href="Cil.cilPrinter.html">cilPrinter</a> -> unit -> <a href="Cil.html#TYPEinstr">instr</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
-Print an instruction given a pretty printer<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALprintStmt"></a>printStmt : <code class="type"><a href="Cil.cilPrinter.html">cilPrinter</a> -> unit -> <a href="Cil.html#TYPEstmt">stmt</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
-Print a statement given a pretty printer. This can take very long 
- (or even overflow the stack) for huge statements. Use <a href="Cil.html#VALdumpStmt"><code class="code">Cil.dumpStmt</code></a> 
- instead.<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALprintBlock"></a>printBlock : <code class="type"><a href="Cil.cilPrinter.html">cilPrinter</a> -> unit -> <a href="Cil.html#TYPEblock">block</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
-Print a block given a pretty printer. This can take very long 
- (or even overflow the stack) for huge block. Use <a href="Cil.html#VALdumpBlock"><code class="code">Cil.dumpBlock</code></a> 
- instead.<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALdumpStmt"></a>dumpStmt : <code class="type"><a href="Cil.cilPrinter.html">cilPrinter</a> -> Pervasives.out_channel -> int -> <a href="Cil.html#TYPEstmt">stmt</a> -> unit</code></pre><div class="info">
-Dump a statement to a file using a given indentation. Use this instead of 
- <a href="Cil.html#VALprintStmt"><code class="code">Cil.printStmt</code></a> whenever possible.<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALdumpBlock"></a>dumpBlock : <code class="type"><a href="Cil.cilPrinter.html">cilPrinter</a> -> Pervasives.out_channel -> int -> <a href="Cil.html#TYPEblock">block</a> -> unit</code></pre><div class="info">
-Dump a block to a file using a given indentation. Use this instead of 
- <a href="Cil.html#VALprintBlock"><code class="code">Cil.printBlock</code></a> whenever possible.<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALprintInit"></a>printInit : <code class="type"><a href="Cil.cilPrinter.html">cilPrinter</a> -> unit -> <a href="Cil.html#TYPEinit">init</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
-Print an initializer given a pretty printer. This can take very long 
- (or even overflow the stack) for huge initializers. Use <a href="Cil.html#VALdumpInit"><code class="code">Cil.dumpInit</code></a> 
- instead.<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALdumpInit"></a>dumpInit : <code class="type"><a href="Cil.cilPrinter.html">cilPrinter</a> -> Pervasives.out_channel -> int -> <a href="Cil.html#TYPEinit">init</a> -> unit</code></pre><div class="info">
-Dump an initializer to a file using a given indentation. Use this instead of 
- <a href="Cil.html#VALprintInit"><code class="code">Cil.printInit</code></a> whenever possible.<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALd_type"></a>d_type : <code class="type">unit -> <a href="Cil.html#TYPEtyp">typ</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
-Pretty-print a type using <a href="Cil.html#VALdefaultCilPrinter"><code class="code">Cil.defaultCilPrinter</code></a><br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALd_exp"></a>d_exp : <code class="type">unit -> <a href="Cil.html#TYPEexp">exp</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
-Pretty-print an expression using <a href="Cil.html#VALdefaultCilPrinter"><code class="code">Cil.defaultCilPrinter</code></a><br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALd_lval"></a>d_lval : <code class="type">unit -> <a href="Cil.html#TYPElval">lval</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
-Pretty-print an lvalue using <a href="Cil.html#VALdefaultCilPrinter"><code class="code">Cil.defaultCilPrinter</code></a><br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALd_offset"></a>d_offset : <code class="type"><a href="Pretty.html#TYPEdoc">Pretty.doc</a> -> unit -> <a href="Cil.html#TYPEoffset">offset</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
-Pretty-print an offset using <a href="Cil.html#VALdefaultCilPrinter"><code class="code">Cil.defaultCilPrinter</code></a>, given the pretty 
- printing for the base.<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALd_init"></a>d_init : <code class="type">unit -> <a href="Cil.html#TYPEinit">init</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
-Pretty-print an initializer using <a href="Cil.html#VALdefaultCilPrinter"><code class="code">Cil.defaultCilPrinter</code></a>.  This can be 
- extremely slow (or even overflow the stack) for huge initializers. Use 
- <a href="Cil.html#VALdumpInit"><code class="code">Cil.dumpInit</code></a> instead.<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALd_binop"></a>d_binop : <code class="type">unit -> <a href="Cil.html#TYPEbinop">binop</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
-Pretty-print a binary operator<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALd_unop"></a>d_unop : <code class="type">unit -> <a href="Cil.html#TYPEunop">unop</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
-Pretty-print a unary operator<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALd_attr"></a>d_attr : <code class="type">unit -> <a href="Cil.html#TYPEattribute">attribute</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
-Pretty-print an attribute using <a href="Cil.html#VALdefaultCilPrinter"><code class="code">Cil.defaultCilPrinter</code></a><br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALd_attrparam"></a>d_attrparam : <code class="type">unit -> <a href="Cil.html#TYPEattrparam">attrparam</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
-Pretty-print an argument of an attribute using <a href="Cil.html#VALdefaultCilPrinter"><code class="code">Cil.defaultCilPrinter</code></a><br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALd_attrlist"></a>d_attrlist : <code class="type">unit -> <a href="Cil.html#TYPEattributes">attributes</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
-Pretty-print a list of attributes using <a href="Cil.html#VALdefaultCilPrinter"><code class="code">Cil.defaultCilPrinter</code></a><br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALd_instr"></a>d_instr : <code class="type">unit -> <a href="Cil.html#TYPEinstr">instr</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
-Pretty-print an instruction using <a href="Cil.html#VALdefaultCilPrinter"><code class="code">Cil.defaultCilPrinter</code></a><br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALd_label"></a>d_label : <code class="type">unit -> <a href="Cil.html#TYPElabel">label</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
-Pretty-print a label using <a href="Cil.html#VALdefaultCilPrinter"><code class="code">Cil.defaultCilPrinter</code></a><br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALd_stmt"></a>d_stmt : <code class="type">unit -> <a href="Cil.html#TYPEstmt">stmt</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
-Pretty-print a statement using <a href="Cil.html#VALdefaultCilPrinter"><code class="code">Cil.defaultCilPrinter</code></a>. This can be 
- extremely slow (or even overflow the stack) for huge statements. Use 
- <a href="Cil.html#VALdumpStmt"><code class="code">Cil.dumpStmt</code></a> instead.<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALd_block"></a>d_block : <code class="type">unit -> <a href="Cil.html#TYPEblock">block</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
-Pretty-print a block using <a href="Cil.html#VALdefaultCilPrinter"><code class="code">Cil.defaultCilPrinter</code></a>. This can be 
- extremely slow (or even overflow the stack) for huge blocks. Use 
- <a href="Cil.html#VALdumpBlock"><code class="code">Cil.dumpBlock</code></a> instead.<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALd_global"></a>d_global : <code class="type">unit -> <a href="Cil.html#TYPEglobal">global</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
-Pretty-print the internal representation of a global using 
- <a href="Cil.html#VALdefaultCilPrinter"><code class="code">Cil.defaultCilPrinter</code></a>. This can be extremely slow (or even overflow the 
- stack) for huge globals (such as arrays with lots of initializers). Use 
- <a href="Cil.html#VALdumpGlobal"><code class="code">Cil.dumpGlobal</code></a> instead.<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALdn_exp"></a>dn_exp : <code class="type">unit -> <a href="Cil.html#TYPEexp">exp</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
-Versions of the above pretty printers, that don't print #line directives<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALdn_lval"></a>dn_lval : <code class="type">unit -> <a href="Cil.html#TYPElval">lval</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><pre><span class="keyword">val</span> <a name="VALdn_init"></a>dn_init : <code class="type">unit -> <a href="Cil.html#TYPEinit">init</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><pre><span class="keyword">val</span> <a name="VALdn_type"></a>dn_type : <code class="type">unit -> <a href="Cil.html#TYPEtyp">typ</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><pre><span class="keyword">val</span> <a name="VALdn_global"></a>dn_global : <code class="type">unit -> <a href="Cil.html#TYPEglobal">global</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><pre><span class="keyword">val</span> <a name="VALdn_attrlist"></a>dn_attrlist : <code class="type">unit -> <a href="Cil.html#TYPEattributes">attributes</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><pre><span class="keyword">val</span> <a name="VALdn_attr"></a>dn_attr : <code class="type">unit -> <a href="Cil.html#TYPEattribute">attribute</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><pre><span class="keyword">val</span> <a name="VALdn_attrparam"></a>dn_attrparam : <code class="type">unit -> <a href="Cil.html#TYPEattrparam">attrparam</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><pre><span class="keyword">val</span> <a name="VALdn_stmt"></a>dn_stmt : <code class="type">unit -> <a href="Cil.html#TYPEstmt">stmt</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><pre><span class="keyword">val</span> <a name="VALdn_instr"></a>dn_instr : <code class="type">unit -> <a href="Cil.html#TYPEinstr">instr</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><pre><span class="keyword">val</span> <a name="VALd_shortglobal"></a>d_shortglobal : <code class="type">unit -> <a href="Cil.html#TYPEglobal">global</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
-Pretty-print a short description of the global. This is useful for error 
- messages<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALdumpGlobal"></a>dumpGlobal : <code class="type"><a href="Cil.cilPrinter.html">cilPrinter</a> -> Pervasives.out_channel -> <a href="Cil.html#TYPEglobal">global</a> -> unit</code></pre><div class="info">
-Pretty-print a global. Here you give the channel where the printout
- should be sent.<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALdumpFile"></a>dumpFile : <code class="type"><a href="Cil.cilPrinter.html">cilPrinter</a> -> Pervasives.out_channel -> string -> <a href="Cil.html#TYPEfile">file</a> -> unit</code></pre><div class="info">
-Pretty-print an entire file. Here you give the channel where the printout
- should be sent.<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALbug"></a>bug : <code class="type">('a, unit, <a href="Pretty.html#TYPEdoc">Pretty.doc</a>) Pervasives.format -> 'a</code></pre><div class="info">
-Like <a href="Errormsg.html#VALbug"><code class="code">Errormsg.bug</code></a> except that <a href="Cil.html#VALcurrentLoc"><code class="code">Cil.currentLoc</code></a> is also printed<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALunimp"></a>unimp : <code class="type">('a, unit, <a href="Pretty.html#TYPEdoc">Pretty.doc</a>) Pervasives.format -> 'a</code></pre><div class="info">
-Like <a href="Errormsg.html#VALunimp"><code class="code">Errormsg.unimp</code></a> except that <a href="Cil.html#VALcurrentLoc"><code class="code">Cil.currentLoc</code></a>is also printed<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALerror"></a>error : <code class="type">('a, unit, <a href="Pretty.html#TYPEdoc">Pretty.doc</a>) Pervasives.format -> 'a</code></pre><div class="info">
-Like <a href="Errormsg.html#VALerror"><code class="code">Errormsg.error</code></a> except that <a href="Cil.html#VALcurrentLoc"><code class="code">Cil.currentLoc</code></a> is also printed<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALerrorLoc"></a>errorLoc : <code class="type"><a href="Cil.html#TYPElocation">location</a> -> ('a, unit, <a href="Pretty.html#TYPEdoc">Pretty.doc</a>) Pervasives.format -> 'a</code></pre><div class="info">
-Like <a href="Cil.html#VALerror"><code class="code">Cil.error</code></a> except that it explicitly takes a location argument, 
- instead of using the <a href="Cil.html#VALcurrentLoc"><code class="code">Cil.currentLoc</code></a><br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALwarn"></a>warn : <code class="type">('a, unit, <a href="Pretty.html#TYPEdoc">Pretty.doc</a>) Pervasives.format -> 'a</code></pre><div class="info">
-Like <a href="Errormsg.html#VALwarn"><code class="code">Errormsg.warn</code></a> except that <a href="Cil.html#VALcurrentLoc"><code class="code">Cil.currentLoc</code></a> is also printed<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALwarnOpt"></a>warnOpt : <code class="type">('a, unit, <a href="Pretty.html#TYPEdoc">Pretty.doc</a>) Pervasives.format -> 'a</code></pre><div class="info">
-Like <a href="Errormsg.html#VALwarnOpt"><code class="code">Errormsg.warnOpt</code></a> except that <a href="Cil.html#VALcurrentLoc"><code class="code">Cil.currentLoc</code></a> is also printed. 
- This warning is printed only of <a href="Errormsg.html#VALwarnFlag"><code class="code">Errormsg.warnFlag</code></a> is set.<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALwarnContext"></a>warnContext : <code class="type">('a, unit, <a href="Pretty.html#TYPEdoc">Pretty.doc</a>) Pervasives.format -> 'a</code></pre><div class="info">
-Like <a href="Errormsg.html#VALwarn"><code class="code">Errormsg.warn</code></a> except that <a href="Cil.html#VALcurrentLoc"><code class="code">Cil.currentLoc</code></a> and context 
-    is also printed<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALwarnContextOpt"></a>warnContextOpt : <code class="type">('a, unit, <a href="Pretty.html#TYPEdoc">Pretty.doc</a>) Pervasives.format -> 'a</code></pre><div class="info">
-Like <a href="Errormsg.html#VALwarn"><code class="code">Errormsg.warn</code></a> except that <a href="Cil.html#VALcurrentLoc"><code class="code">Cil.currentLoc</code></a> and context is also 
- printed. This warning is printed only of <a href="Errormsg.html#VALwarnFlag"><code class="code">Errormsg.warnFlag</code></a> is set.<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALwarnLoc"></a>warnLoc : <code class="type"><a href="Cil.html#TYPElocation">location</a> -> ('a, unit, <a href="Pretty.html#TYPEdoc">Pretty.doc</a>) Pervasives.format -> 'a</code></pre><div class="info">
-Like <a href="Cil.html#VALwarn"><code class="code">Cil.warn</code></a> except that it explicitly takes a location argument, 
- instead of using the <a href="Cil.html#VALcurrentLoc"><code class="code">Cil.currentLoc</code></a><br>
-</div>
-<br>
-Sometimes you do not want to see the syntactic sugar that the above 
- pretty-printing functions add. In that case you can use the following 
- pretty-printing functions. But note that the output of these functions is 
- not valid C<br>
-<pre><span class="keyword">val</span> <a name="VALd_plainexp"></a>d_plainexp : <code class="type">unit -> <a href="Cil.html#TYPEexp">exp</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
-Pretty-print the internal representation of an expression<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALd_plaininit"></a>d_plaininit : <code class="type">unit -> <a href="Cil.html#TYPEinit">init</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
-Pretty-print the internal representation of an integer<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALd_plainlval"></a>d_plainlval : <code class="type">unit -> <a href="Cil.html#TYPElval">lval</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
-Pretty-print the internal representation of an lvalue<br>
-</div>
-<br>
-Pretty-print the internal representation of an lvalue offset 
-val d_plainoffset: unit -&gt; offset -&gt; Pretty.doc<br>
-<pre><span class="keyword">val</span> <a name="VALd_plaintype"></a>d_plaintype : <code class="type">unit -> <a href="Cil.html#TYPEtyp">typ</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
-Pretty-print the internal representation of a type<br>
-</div>
-<br>
-<b>ALPHA conversion</b> has been moved to the Alpha module.<br>
-<pre><span class="keyword">val</span> <a name="VALuniqueVarNames"></a>uniqueVarNames : <code class="type"><a href="Cil.html#TYPEfile">file</a> -> unit</code></pre><div class="info">
-Assign unique names to local variables. This might be necessary after you 
- transformed the code and added or renamed some new variables. Names are 
- not used by CIL internally, but once you print the file out the compiler 
- downstream might be confused. You might 
- have added a new global that happens to have the same name as a local in 
- some function. Rename the local to ensure that there would never be 
- confusioin. Or, viceversa, you might have added a local with a name that 
- conflicts with a global<br>
-</div>
-<br>
-<b>Optimization Passes</b><br>
-<pre><span class="keyword">val</span> <a name="VALpeepHole2"></a>peepHole2 : <code class="type">(<a href="Cil.html#TYPEinstr">instr</a> * <a href="Cil.html#TYPEinstr">instr</a> -> <a href="Cil.html#TYPEinstr">instr</a> list option) -> <a href="Cil.html#TYPEstmt">stmt</a> list -> unit</code></pre><div class="info">
-A peephole optimizer that processes two adjacent statements and possibly 
-    replaces them both. If some replacement happens, then the new statements 
-    are themselves subject to optimization<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALpeepHole1"></a>peepHole1 : <code class="type">(<a href="Cil.html#TYPEinstr">instr</a> -> <a href="Cil.html#TYPEinstr">instr</a> list option) -> <a href="Cil.html#TYPEstmt">stmt</a> list -> unit</code></pre><div class="info">
-Similar to <code class="code">peepHole2</code> except that the optimization window consists of 
-    one statement, not two<br>
-</div>
-<br>
-<b>Machine dependency</b><br>
-<pre><span class="keyword">exception</span> <a name="EXCEPTIONSizeOfError"></a>SizeOfError <span class="keyword">of</span> <code class="type">string * <a href="Cil.html#TYPEtyp">typ</a></code></pre>
-<div class="info">
-Raised when one of the bitsSizeOf functions cannot compute the size of a 
- type. This can happen because the type contains array-length expressions 
- that we don't know how to compute or because it is a type whose size is 
- not defined (e.g. TFun or an undefined compinfo). The string is an 
- explanation of the error<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALbitsSizeOf"></a>bitsSizeOf : <code class="type"><a href="Cil.html#TYPEtyp">typ</a> -> int</code></pre><div class="info">
-The size of a type, in bits. Trailing padding is added for structs and 
- arrays. Raises <a href="Cil.html#EXCEPTIONSizeOfError"><code class="code">Cil.SizeOfError</code></a> when it cannot compute the size. This 
- function is architecture dependent, so you should only call this after you 
- call <a href="Cil.html#VALinitCIL"><code class="code">Cil.initCIL</code></a>. Remember that on GCC sizeof(void) is 1!<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALsizeOf"></a>sizeOf : <code class="type"><a href="Cil.html#TYPEtyp">typ</a> -> <a href="Cil.html#TYPEexp">exp</a></code></pre><pre><span class="keyword">val</span> <a name="VALalignOf_int"></a>alignOf_int : <code class="type"><a href="Cil.html#TYPEtyp">typ</a> -> int</code></pre><div class="info">
-The minimum alignment (in bytes) for a type. This function is 
- architecture dependent, so you should only call this after you call 
- <a href="Cil.html#VALinitCIL"><code class="code">Cil.initCIL</code></a>.<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALbitsOffset"></a>bitsOffset : <code class="type"><a href="Cil.html#TYPEtyp">typ</a> -> <a href="Cil.html#TYPEoffset">offset</a> -> int * int</code></pre><div class="info">
-Give a type of a base and an offset, returns the number of bits from the 
- base address and the width (also expressed in bits) for the subobject 
- denoted by the offset. Raises <a href="Cil.html#EXCEPTIONSizeOfError"><code class="code">Cil.SizeOfError</code></a> when it cannot compute 
- the size. This function is architecture dependent, so you should only call 
- this after you call <a href="Cil.html#VALinitCIL"><code class="code">Cil.initCIL</code></a>.<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALchar_is_unsigned"></a>char_is_unsigned : <code class="type">bool Pervasives.ref</code></pre><div class="info">
-Whether "char" is unsigned. Set after you call <a href="Cil.html#VALinitCIL"><code class="code">Cil.initCIL</code></a><br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALlittle_endian"></a>little_endian : <code class="type">bool Pervasives.ref</code></pre><div class="info">
-Whether the machine is little endian. Set after you call <a href="Cil.html#VALinitCIL"><code class="code">Cil.initCIL</code></a><br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALunderscore_name"></a>underscore_name : <code class="type">bool Pervasives.ref</code></pre><div class="info">
-Whether the compiler generates assembly labels by prepending "_" to the 
-    identifier. That is, will function foo() have the label "foo", or "_foo"?
-    Set after you call <a href="Cil.html#VALinitCIL"><code class="code">Cil.initCIL</code></a><br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALlocUnknown"></a>locUnknown : <code class="type"><a href="Cil.html#TYPElocation">location</a></code></pre><div class="info">
-Represents a location that cannot be determined<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALget_instrLoc"></a>get_instrLoc : <code class="type"><a href="Cil.html#TYPEinstr">instr</a> -> <a href="Cil.html#TYPElocation">location</a></code></pre><div class="info">
-Return the location of an instruction<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALget_globalLoc"></a>get_globalLoc : <code class="type"><a href="Cil.html#TYPEglobal">global</a> -> <a href="Cil.html#TYPElocation">location</a></code></pre><div class="info">
-Return the location of a global, or locUnknown<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALget_stmtLoc"></a>get_stmtLoc : <code class="type"><a href="Cil.html#TYPEstmtkind">stmtkind</a> -> <a href="Cil.html#TYPElocation">location</a></code></pre><div class="info">
-Return the location of a statement, or locUnknown<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALdExp"></a>dExp : <code class="type"><a href="Pretty.html#TYPEdoc">Pretty.doc</a> -> <a href="Cil.html#TYPEexp">exp</a></code></pre><div class="info">
-Generate an <a href="Cil.html#TYPEexp"><code class="code">Cil.exp</code></a> to be used in case of errors.<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALdInstr"></a>dInstr : <code class="type"><a href="Pretty.html#TYPEdoc">Pretty.doc</a> -> <a href="Cil.html#TYPElocation">location</a> -> <a href="Cil.html#TYPEinstr">instr</a></code></pre><div class="info">
-Generate an <a href="Cil.html#TYPEinstr"><code class="code">Cil.instr</code></a> to be used in case of errors.<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALdGlobal"></a>dGlobal : <code class="type"><a href="Pretty.html#TYPEdoc">Pretty.doc</a> -> <a href="Cil.html#TYPElocation">location</a> -> <a href="Cil.html#TYPEglobal">global</a></code></pre><div class="info">
-Generate a <a href="Cil.html#TYPEglobal"><code class="code">Cil.global</code></a> to be used in case of errors.<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALmapNoCopy"></a>mapNoCopy : <code class="type">('a -> 'a) -> 'a list -> 'a list</code></pre><div class="info">
-Like map but try not to make a copy of the list<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALmapNoCopyList"></a>mapNoCopyList : <code class="type">('a -> 'a list) -> 'a list -> 'a list</code></pre><div class="info">
-Like map but each call can return a list. Try not to make a copy of the 
-    list<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALstartsWith"></a>startsWith : <code class="type">string -> string -> bool</code></pre><div class="info">
-sm: return true if the first is a prefix of the second string<br>
-</div>
-<br>
-<b>An Interpreter for constructing CIL constructs</b><br>
-<br><code><span class="keyword">type</span> <a name="TYPEformatArg"></a><code class="type"></code>formatArg = </code><table class="typetable">
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">Fe</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEexp">exp</a></code></code></td>
-
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">Feo</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEexp">exp</a> option</code></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>For array lengths</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">Fu</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEunop">unop</a></code></code></td>
-
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">Fb</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEbinop">binop</a></code></code></td>
-
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">Fk</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEikind">ikind</a></code></code></td>
-
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">FE</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEexp">exp</a> list</code></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>For arguments in a function call</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">Ff</span> <span class="keyword">of</span> <code class="type">(string * <a href="Cil.html#TYPEtyp">typ</a> * <a href="Cil.html#TYPEattributes">attributes</a>)</code></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>For a formal argument</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">FF</span> <span class="keyword">of</span> <code class="type">(string * <a href="Cil.html#TYPEtyp">typ</a> * <a href="Cil.html#TYPEattributes">attributes</a>) list</code></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>For formal argument lists</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">Fva</span> <span class="keyword">of</span> <code class="type">bool</code></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>For the ellipsis in a function type</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">Fv</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEvarinfo">varinfo</a></code></code></td>
-
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">Fl</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPElval">lval</a></code></code></td>
-
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">Flo</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPElval">lval</a> option</code></code></td>
-
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">Fo</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEoffset">offset</a></code></code></td>
-
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">Fc</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEcompinfo">compinfo</a></code></code></td>
-
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">Fi</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEinstr">instr</a></code></code></td>
-
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">FI</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEinstr">instr</a> list</code></code></td>
-
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">Ft</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEtyp">typ</a></code></code></td>
-
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">Fd</span> <span class="keyword">of</span> <code class="type">int</code></code></td>
-
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">Fg</span> <span class="keyword">of</span> <code class="type">string</code></code></td>
-
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">Fs</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEstmt">stmt</a></code></code></td>
-
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">FS</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEstmt">stmt</a> list</code></code></td>
-
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">FA</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEattributes">attributes</a></code></code></td>
-
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">Fp</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEattrparam">attrparam</a></code></code></td>
-
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">FP</span> <span class="keyword">of</span> <code class="type"><a href="Cil.html#TYPEattrparam">attrparam</a> list</code></code></td>
-
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">FX</span> <span class="keyword">of</span> <code class="type">string</code></code></td>
-
-</tr></table>
-
-<div class="info">
-The type of argument for the interpreter<br>
-</div>
-
-<pre><span class="keyword">val</span> <a name="VALd_formatarg"></a>d_formatarg : <code class="type">unit -> <a href="Cil.html#TYPEformatArg">formatArg</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
-Pretty-prints a format arg<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALlowerConstants"></a>lowerConstants : <code class="type">bool Pervasives.ref</code></pre><div class="info">
-Do lower constant expressions into constants (default true)<br>
-</div>
-</body></html>
\ No newline at end of file
diff --git a/cil/doc/api/Cil.nopCilVisitor.html b/cil/doc/api/Cil.nopCilVisitor.html
deleted file mode 100644
index 868e79d4b..000000000
--- a/cil/doc/api/Cil.nopCilVisitor.html
+++ /dev/null
@@ -1,35 +0,0 @@
-<html>
-<head>
-<link rel="stylesheet" href="style.css" type="text/css">
-<link rel="Start" href="index.html">
-<link rel="next" href="Cil.defaultCilPrinterClass.html">
-<link rel="Up" href="Cil.html">
-<link title="Index of types" rel=Appendix href="index_types.html">
-<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
-<link title="Index of values" rel=Appendix href="index_values.html">
-<link title="Index of class methods" rel=Appendix href="index_methods.html">
-<link title="Index of classes" rel=Appendix href="index_classes.html">
-<link title="Index of class types" rel=Appendix href="index_class_types.html">
-<link title="Index of modules" rel=Appendix href="index_modules.html">
-<link title="Index of module types" rel=Appendix href="index_module_types.html">
-<link title="Pretty" rel="Chapter" href="Pretty.html">
-<link title="Errormsg" rel="Chapter" href="Errormsg.html">
-<link title="Clist" rel="Chapter" href="Clist.html">
-<link title="Stats" rel="Chapter" href="Stats.html">
-<link title="Cil" rel="Chapter" href="Cil.html">
-<link title="Formatcil" rel="Chapter" href="Formatcil.html">
-<link title="Alpha" rel="Chapter" href="Alpha.html">
-<link title="Cillower" rel="Chapter" href="Cillower.html">
-<link title="Cfg" rel="Chapter" href="Cfg.html">
-<link title="Dataflow" rel="Chapter" href="Dataflow.html">
-<link title="Dominators" rel="Chapter" href="Dominators.html"><title>CIL API Documentation (version 1.3.5) : Cil.nopCilVisitor</title>
-</head>
-<body>
-<div class="navbar">&nbsp;<a href="Cil.html">Up</a>
-&nbsp;<a href="Cil.defaultCilPrinterClass.html">Next</a>
-</div>
-<center><h1>Class <a href="type_Cil.nopCilVisitor.html">Cil.nopCilVisitor</a></h1></center>
-<br>
-<pre><span class="keyword">class</span> <a name="TYPEnopCilVisitor"></a>nopCilVisitor : <code class="type"></code><code class="type"><a href="Cil.cilVisitor.html">cilVisitor</a></code></pre>Default Visitor. Traverses the CIL tree without modifying anything<br>
-<hr width="100%">
-</body></html>
\ No newline at end of file
diff --git a/cil/doc/api/Cil.plainCilPrinterClass.html b/cil/doc/api/Cil.plainCilPrinterClass.html
deleted file mode 100644
index 0d5fca584..000000000
--- a/cil/doc/api/Cil.plainCilPrinterClass.html
+++ /dev/null
@@ -1,36 +0,0 @@
-<html>
-<head>
-<link rel="stylesheet" href="style.css" type="text/css">
-<link rel="Start" href="index.html">
-<link rel="previous" href="Cil.defaultCilPrinterClass.html">
-<link rel="Up" href="Cil.html">
-<link title="Index of types" rel=Appendix href="index_types.html">
-<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
-<link title="Index of values" rel=Appendix href="index_values.html">
-<link title="Index of class methods" rel=Appendix href="index_methods.html">
-<link title="Index of classes" rel=Appendix href="index_classes.html">
-<link title="Index of class types" rel=Appendix href="index_class_types.html">
-<link title="Index of modules" rel=Appendix href="index_modules.html">
-<link title="Index of module types" rel=Appendix href="index_module_types.html">
-<link title="Pretty" rel="Chapter" href="Pretty.html">
-<link title="Errormsg" rel="Chapter" href="Errormsg.html">
-<link title="Clist" rel="Chapter" href="Clist.html">
-<link title="Stats" rel="Chapter" href="Stats.html">
-<link title="Cil" rel="Chapter" href="Cil.html">
-<link title="Formatcil" rel="Chapter" href="Formatcil.html">
-<link title="Alpha" rel="Chapter" href="Alpha.html">
-<link title="Cillower" rel="Chapter" href="Cillower.html">
-<link title="Cfg" rel="Chapter" href="Cfg.html">
-<link title="Dataflow" rel="Chapter" href="Dataflow.html">
-<link title="Dominators" rel="Chapter" href="Dominators.html"><title>CIL API Documentation (version 1.3.5) : Cil.plainCilPrinterClass</title>
-</head>
-<body>
-<div class="navbar"><a href="Cil.defaultCilPrinterClass.html">Previous</a>
-&nbsp;<a href="Cil.html">Up</a>
-&nbsp;</div>
-<center><h1>Class <a href="type_Cil.plainCilPrinterClass.html">Cil.plainCilPrinterClass</a></h1></center>
-<br>
-<pre><span class="keyword">class</span> <a name="TYPEplainCilPrinterClass"></a>plainCilPrinterClass : <code class="type"></code><code class="type"><a href="Cil.cilPrinter.html">cilPrinter</a></code></pre>These are pretty-printers that will show you more details on the internal 
- CIL representation, without trying hard to make it look like C<br>
-<hr width="100%">
-</body></html>
\ No newline at end of file
diff --git a/cil/doc/api/Cillower.html b/cil/doc/api/Cillower.html
deleted file mode 100644
index d8fa8ddd3..000000000
--- a/cil/doc/api/Cillower.html
+++ /dev/null
@@ -1,40 +0,0 @@
-<html>
-<head>
-<link rel="stylesheet" href="style.css" type="text/css">
-<link rel="Start" href="index.html">
-<link rel="previous" href="Alpha.html">
-<link rel="next" href="Cfg.html">
-<link rel="Up" href="index.html">
-<link title="Index of types" rel=Appendix href="index_types.html">
-<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
-<link title="Index of values" rel=Appendix href="index_values.html">
-<link title="Index of class methods" rel=Appendix href="index_methods.html">
-<link title="Index of classes" rel=Appendix href="index_classes.html">
-<link title="Index of class types" rel=Appendix href="index_class_types.html">
-<link title="Index of modules" rel=Appendix href="index_modules.html">
-<link title="Index of module types" rel=Appendix href="index_module_types.html">
-<link title="Pretty" rel="Chapter" href="Pretty.html">
-<link title="Errormsg" rel="Chapter" href="Errormsg.html">
-<link title="Clist" rel="Chapter" href="Clist.html">
-<link title="Stats" rel="Chapter" href="Stats.html">
-<link title="Cil" rel="Chapter" href="Cil.html">
-<link title="Formatcil" rel="Chapter" href="Formatcil.html">
-<link title="Alpha" rel="Chapter" href="Alpha.html">
-<link title="Cillower" rel="Chapter" href="Cillower.html">
-<link title="Cfg" rel="Chapter" href="Cfg.html">
-<link title="Dataflow" rel="Chapter" href="Dataflow.html">
-<link title="Dominators" rel="Chapter" href="Dominators.html"><title>CIL API Documentation (version 1.3.5) : Cillower</title>
-</head>
-<body>
-<div class="navbar"><a href="Alpha.html">Previous</a>
-&nbsp;<a href="index.html">Up</a>
-&nbsp;<a href="Cfg.html">Next</a>
-</div>
-<center><h1>Module <a href="type_Cillower.html">Cillower</a></h1></center>
-<br>
-<pre><span class="keyword">module</span> Cillower: <code class="code">sig</code> <a href="Cillower.html">..</a> <code class="code">end</code></pre>A number of lowering passes over CIL<br>
-<hr width="100%">
-<pre><span class="keyword">val</span> <a name="VALlowerEnumVisitor"></a>lowerEnumVisitor : <code class="type"><a href="Cil.cilVisitor.html">Cil.cilVisitor</a></code></pre><div class="info">
-Replace enumeration constants with integer constants<br>
-</div>
-</body></html>
\ No newline at end of file
diff --git a/cil/doc/api/Clist.html b/cil/doc/api/Clist.html
deleted file mode 100644
index 27f373e50..000000000
--- a/cil/doc/api/Clist.html
+++ /dev/null
@@ -1,118 +0,0 @@
-<html>
-<head>
-<link rel="stylesheet" href="style.css" type="text/css">
-<link rel="Start" href="index.html">
-<link rel="previous" href="Errormsg.html">
-<link rel="next" href="Stats.html">
-<link rel="Up" href="index.html">
-<link title="Index of types" rel=Appendix href="index_types.html">
-<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
-<link title="Index of values" rel=Appendix href="index_values.html">
-<link title="Index of class methods" rel=Appendix href="index_methods.html">
-<link title="Index of classes" rel=Appendix href="index_classes.html">
-<link title="Index of class types" rel=Appendix href="index_class_types.html">
-<link title="Index of modules" rel=Appendix href="index_modules.html">
-<link title="Index of module types" rel=Appendix href="index_module_types.html">
-<link title="Pretty" rel="Chapter" href="Pretty.html">
-<link title="Errormsg" rel="Chapter" href="Errormsg.html">
-<link title="Clist" rel="Chapter" href="Clist.html">
-<link title="Stats" rel="Chapter" href="Stats.html">
-<link title="Cil" rel="Chapter" href="Cil.html">
-<link title="Formatcil" rel="Chapter" href="Formatcil.html">
-<link title="Alpha" rel="Chapter" href="Alpha.html">
-<link title="Cillower" rel="Chapter" href="Cillower.html">
-<link title="Cfg" rel="Chapter" href="Cfg.html">
-<link title="Dataflow" rel="Chapter" href="Dataflow.html">
-<link title="Dominators" rel="Chapter" href="Dominators.html"><title>CIL API Documentation (version 1.3.5) : Clist</title>
-</head>
-<body>
-<div class="navbar"><a href="Errormsg.html">Previous</a>
-&nbsp;<a href="index.html">Up</a>
-&nbsp;<a href="Stats.html">Next</a>
-</div>
-<center><h1>Module <a href="type_Clist.html">Clist</a></h1></center>
-<br>
-<pre><span class="keyword">module</span> Clist: <code class="code">sig</code> <a href="Clist.html">..</a> <code class="code">end</code></pre>Utilities for managing "concatenable lists" (clists). We often need to
-    concatenate sequences, and using lists for this purpose is expensive. This
-    module provides routines to manage such lists more efficiently. In this
-    model, we never do cons or append explicitly. Instead we maintain
-    the elements of the list in a special data structure. Routines are provided
-    to convert to/from ordinary lists, and carry out common list operations.<br>
-<hr width="100%">
-<br><code><span class="keyword">type</span> <a name="TYPEclist"></a><code class="type">'a</code> clist = </code><table class="typetable">
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">CList</span> <span class="keyword">of</span> <code class="type">'a list</code></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>The only representation for the empty 
-                                     list. Try to use sparingly.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">CConsL</span> <span class="keyword">of</span> <code class="type">'a * 'a <a href="Clist.html#TYPEclist">clist</a></code></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>Do not use this a lot because scanning 
- it is not tail recursive</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">CConsR</span> <span class="keyword">of</span> <code class="type">'a <a href="Clist.html#TYPEclist">clist</a> * 'a</code></code></td>
-
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">CSeq</span> <span class="keyword">of</span> <code class="type">'a <a href="Clist.html#TYPEclist">clist</a> * 'a <a href="Clist.html#TYPEclist">clist</a></code></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>We concatenate only two of them at this
-                                    time. Neither is the empty clist. To be
-                                    sure always use append to make these</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr></table>
-
-<div class="info">
-The clist datatype. A clist can be an ordinary list, or a clist preceded 
-    or followed by an element, or two clists implicitly appended together<br>
-</div>
-
-<pre><span class="keyword">val</span> <a name="VALtoList"></a>toList : <code class="type">'a <a href="Clist.html#TYPEclist">clist</a> -> 'a list</code></pre><div class="info">
-Convert a clist to an ordinary list<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALfromList"></a>fromList : <code class="type">'a list -> 'a <a href="Clist.html#TYPEclist">clist</a></code></pre><div class="info">
-Convert an ordinary list to a clist<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALsingle"></a>single : <code class="type">'a -> 'a <a href="Clist.html#TYPEclist">clist</a></code></pre><div class="info">
-Create a clist containing one element<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALempty"></a>empty : <code class="type">'a <a href="Clist.html#TYPEclist">clist</a></code></pre><div class="info">
-The empty clist<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALappend"></a>append : <code class="type">'a <a href="Clist.html#TYPEclist">clist</a> -> 'a <a href="Clist.html#TYPEclist">clist</a> -> 'a <a href="Clist.html#TYPEclist">clist</a></code></pre><div class="info">
-Append two clists<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALcheckBeforeAppend"></a>checkBeforeAppend : <code class="type">'a <a href="Clist.html#TYPEclist">clist</a> -> 'a <a href="Clist.html#TYPEclist">clist</a> -> bool</code></pre><div class="info">
-A useful check to assert before an append. It checks that the two lists 
- are not identically the same (Except if they are both empty)<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALlength"></a>length : <code class="type">'a <a href="Clist.html#TYPEclist">clist</a> -> int</code></pre><div class="info">
-Find the length of a clist<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALmap"></a>map : <code class="type">('a -> 'b) -> 'a <a href="Clist.html#TYPEclist">clist</a> -> 'b <a href="Clist.html#TYPEclist">clist</a></code></pre><div class="info">
-Map a function over a clist. Returns another clist<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALfold_left"></a>fold_left : <code class="type">('a -> 'b -> 'a) -> 'a -> 'b <a href="Clist.html#TYPEclist">clist</a> -> 'a</code></pre><div class="info">
-A version of fold_left that works on clists<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALiter"></a>iter : <code class="type">('a -> unit) -> 'a <a href="Clist.html#TYPEclist">clist</a> -> unit</code></pre><div class="info">
-A version of iter that works on clists<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALrev"></a>rev : <code class="type">('a -> 'a) -> 'a <a href="Clist.html#TYPEclist">clist</a> -> 'a <a href="Clist.html#TYPEclist">clist</a></code></pre><div class="info">
-Reverse a clist. The first function reverses an element.<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALdocCList"></a>docCList : <code class="type"><a href="Pretty.html#TYPEdoc">Pretty.doc</a> -> ('a -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a>) -> unit -> 'a <a href="Clist.html#TYPEclist">clist</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
-A document for printing a clist (similar to <code class="code">docList</code>)<br>
-</div>
-</body></html>
\ No newline at end of file
diff --git a/cil/doc/api/Dataflow.BackwardsDataFlow.html b/cil/doc/api/Dataflow.BackwardsDataFlow.html
deleted file mode 100644
index 782d318c2..000000000
--- a/cil/doc/api/Dataflow.BackwardsDataFlow.html
+++ /dev/null
@@ -1,54 +0,0 @@
-<html>
-<head>
-<link rel="stylesheet" href="style.css" type="text/css">
-<link rel="Start" href="index.html">
-<link rel="previous" href="Dataflow.ForwardsDataFlow.html">
-<link rel="Up" href="Dataflow.html">
-<link title="Index of types" rel=Appendix href="index_types.html">
-<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
-<link title="Index of values" rel=Appendix href="index_values.html">
-<link title="Index of class methods" rel=Appendix href="index_methods.html">
-<link title="Index of classes" rel=Appendix href="index_classes.html">
-<link title="Index of class types" rel=Appendix href="index_class_types.html">
-<link title="Index of modules" rel=Appendix href="index_modules.html">
-<link title="Index of module types" rel=Appendix href="index_module_types.html">
-<link title="Pretty" rel="Chapter" href="Pretty.html">
-<link title="Errormsg" rel="Chapter" href="Errormsg.html">
-<link title="Clist" rel="Chapter" href="Clist.html">
-<link title="Stats" rel="Chapter" href="Stats.html">
-<link title="Cil" rel="Chapter" href="Cil.html">
-<link title="Formatcil" rel="Chapter" href="Formatcil.html">
-<link title="Alpha" rel="Chapter" href="Alpha.html">
-<link title="Cillower" rel="Chapter" href="Cillower.html">
-<link title="Cfg" rel="Chapter" href="Cfg.html">
-<link title="Dataflow" rel="Chapter" href="Dataflow.html">
-<link title="Dominators" rel="Chapter" href="Dominators.html"><title>CIL API Documentation (version 1.3.5) : Dataflow.BackwardsDataFlow</title>
-</head>
-<body>
-<div class="navbar"><a href="Dataflow.ForwardsDataFlow.html">Previous</a>
-&nbsp;<a href="Dataflow.html">Up</a>
-&nbsp;</div>
-<center><h1>Functor <a href="type_Dataflow.BackwardsDataFlow.html">Dataflow.BackwardsDataFlow</a></h1></center>
-<br>
-<pre><span class="keyword">module</span> BackwardsDataFlow: <div class="sig_block"><code class="code">functor (</code><code class="code">T</code><code class="code"> : </code><code class="type"><a href="Dataflow.BackwardsTransfer.html">BackwardsTransfer</a></code><code class="code">) -&gt; </code><code class="code">sig</code> <a href="Dataflow.BackwardsDataFlow.html">..</a> <code class="code">end</code></div></pre><table border="0" cellpadding="3" width="100%">
-<tr>
-<td align="left" valign="top" width="1%%"><b>Parameters: </b></td>
-<td>
-<table class="paramstable">
-<tr>
-<td align="center" valign="top" width="15%">
-<code>T</code></td>
-<td align="center" valign="top">:</td>
-<td><code class="type"><a href="Dataflow.BackwardsTransfer.html">BackwardsTransfer</a></code>
-</table>
-</td>
-</tr>
-</table>
-<hr width="100%">
-<pre><span class="keyword">val</span> <a name="VALcompute"></a>compute : <code class="type"><a href="Cil.html#TYPEstmt">Cil.stmt</a> list -> unit</code></pre><div class="info">
-Fill in the T.stmtStartData, given a number of initial statements to 
- start from (the sinks for the backwards data flow). All of the statements
- (not just the initial ones!) must have some entry in T.stmtStartData 
- (i.e., the initial data should not be bottom)<br>
-</div>
-</body></html>
\ No newline at end of file
diff --git a/cil/doc/api/Dataflow.BackwardsTransfer.html b/cil/doc/api/Dataflow.BackwardsTransfer.html
deleted file mode 100644
index 0ff812dff..000000000
--- a/cil/doc/api/Dataflow.BackwardsTransfer.html
+++ /dev/null
@@ -1,83 +0,0 @@
-<html>
-<head>
-<link rel="stylesheet" href="style.css" type="text/css">
-<link rel="Start" href="index.html">
-<link rel="previous" href="Dataflow.ForwardsTransfer.html">
-<link rel="Up" href="Dataflow.html">
-<link title="Index of types" rel=Appendix href="index_types.html">
-<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
-<link title="Index of values" rel=Appendix href="index_values.html">
-<link title="Index of class methods" rel=Appendix href="index_methods.html">
-<link title="Index of classes" rel=Appendix href="index_classes.html">
-<link title="Index of class types" rel=Appendix href="index_class_types.html">
-<link title="Index of modules" rel=Appendix href="index_modules.html">
-<link title="Index of module types" rel=Appendix href="index_module_types.html">
-<link title="Pretty" rel="Chapter" href="Pretty.html">
-<link title="Errormsg" rel="Chapter" href="Errormsg.html">
-<link title="Clist" rel="Chapter" href="Clist.html">
-<link title="Stats" rel="Chapter" href="Stats.html">
-<link title="Cil" rel="Chapter" href="Cil.html">
-<link title="Formatcil" rel="Chapter" href="Formatcil.html">
-<link title="Alpha" rel="Chapter" href="Alpha.html">
-<link title="Cillower" rel="Chapter" href="Cillower.html">
-<link title="Cfg" rel="Chapter" href="Cfg.html">
-<link title="Dataflow" rel="Chapter" href="Dataflow.html">
-<link title="Dominators" rel="Chapter" href="Dominators.html"><title>CIL API Documentation (version 1.3.5) : Dataflow.BackwardsTransfer</title>
-</head>
-<body>
-<div class="navbar"><a href="Dataflow.ForwardsTransfer.html">Previous</a>
-&nbsp;<a href="Dataflow.html">Up</a>
-&nbsp;</div>
-<center><h1>Module type <a href="type_Dataflow.BackwardsTransfer.html">Dataflow.BackwardsTransfer</a></h1></center>
-<br>
-<pre><span class="keyword">module type</span> BackwardsTransfer = <code class="code">sig</code> <a href="Dataflow.BackwardsTransfer.html">..</a> <code class="code">end</code></pre><hr width="100%">
-<pre><span class="keyword">val</span> <a name="VALname"></a>name : <code class="type">string</code></pre><div class="info">
-For debugging purposes, the name of the analysis<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALdebug"></a>debug : <code class="type">bool Pervasives.ref</code></pre><div class="info">
-Whether to turn on debugging<br>
-</div>
-<pre><span class="keyword">type</span> <a name="TYPEt"></a><code class="type"></code>t </pre>
-<div class="info">
-The type of the data we compute for each block start. In many 
- presentations of backwards data flow analysis we maintain the 
- data at the block end. This is not easy to do with JVML because 
- a block has many exceptional ends. So we maintain the data for 
- the statement start.<br>
-</div>
-
-<pre><span class="keyword">val</span> <a name="VALpretty"></a>pretty : <code class="type">unit -> <a href="Dataflow.BackwardsTransfer.html#TYPEt">t</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
-Pretty-print the state<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALstmtStartData"></a>stmtStartData : <code class="type"><a href="Dataflow.BackwardsTransfer.html#TYPEt">t</a> Inthash.t</code></pre><div class="info">
-For each block id, the data at the start. This data structure must be 
- initialized with the initial data for each block<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALcombineStmtStartData"></a>combineStmtStartData : <code class="type"><a href="Cil.html#TYPEstmt">Cil.stmt</a> -><br>       old:<a href="Dataflow.BackwardsTransfer.html#TYPEt">t</a> -><br>       <a href="Dataflow.BackwardsTransfer.html#TYPEt">t</a> -> <a href="Dataflow.BackwardsTransfer.html#TYPEt">t</a> option</code></pre><div class="info">
-When the analysis reaches the start of a block, combine the old data 
- with the one we have just computed. Return None if the combination is 
- the same as the old data, otherwise return the combination. In the 
- latter case, the predecessors of the statement are put on the working 
- list.<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALcombineSuccessors"></a>combineSuccessors : <code class="type"><a href="Dataflow.BackwardsTransfer.html#TYPEt">t</a> -><br>       <a href="Dataflow.BackwardsTransfer.html#TYPEt">t</a> -> <a href="Dataflow.BackwardsTransfer.html#TYPEt">t</a></code></pre><div class="info">
-Take the data from two successors and combine it<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALdoStmt"></a>doStmt : <code class="type"><a href="Cil.html#TYPEstmt">Cil.stmt</a> -> <a href="Dataflow.BackwardsTransfer.html#TYPEt">t</a> <a href="Dataflow.html#TYPEaction">Dataflow.action</a></code></pre><div class="info">
-The (backwards) transfer function for a branch. The <a href="Cil.html#VALcurrentLoc"><code class="code">Cil.currentLoc</code></a> is 
- set before calling this. If it returns None, then we have some default 
- handling. Otherwise, the returned data is the data before the branch 
- (not considering the exception handlers)<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALdoInstr"></a>doInstr : <code class="type"><a href="Cil.html#TYPEinstr">Cil.instr</a> -><br>       <a href="Dataflow.BackwardsTransfer.html#TYPEt">t</a> -> <a href="Dataflow.BackwardsTransfer.html#TYPEt">t</a> <a href="Dataflow.html#TYPEaction">Dataflow.action</a></code></pre><div class="info">
-The (backwards) transfer function for an instruction. The 
- <a href="Cil.html#VALcurrentLoc"><code class="code">Cil.currentLoc</code></a> is set before calling this. If it returns None, then we 
- have some default handling. Otherwise, the returned data is the data 
- before the branch (not considering the exception handlers)<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALfilterStmt"></a>filterStmt : <code class="type"><a href="Cil.html#TYPEstmt">Cil.stmt</a> -> <a href="Cil.html#TYPEstmt">Cil.stmt</a> -> bool</code></pre><div class="info">
-Whether to put this predecessor block in the worklist. We give the 
- predecessor and the block whose predecessor we are (and whose data has 
- changed)<br>
-</div>
-</body></html>
\ No newline at end of file
diff --git a/cil/doc/api/Dataflow.ForwardsDataFlow.html b/cil/doc/api/Dataflow.ForwardsDataFlow.html
deleted file mode 100644
index 760dc2bee..000000000
--- a/cil/doc/api/Dataflow.ForwardsDataFlow.html
+++ /dev/null
@@ -1,53 +0,0 @@
-<html>
-<head>
-<link rel="stylesheet" href="style.css" type="text/css">
-<link rel="Start" href="index.html">
-<link rel="next" href="Dataflow.BackwardsDataFlow.html">
-<link rel="Up" href="Dataflow.html">
-<link title="Index of types" rel=Appendix href="index_types.html">
-<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
-<link title="Index of values" rel=Appendix href="index_values.html">
-<link title="Index of class methods" rel=Appendix href="index_methods.html">
-<link title="Index of classes" rel=Appendix href="index_classes.html">
-<link title="Index of class types" rel=Appendix href="index_class_types.html">
-<link title="Index of modules" rel=Appendix href="index_modules.html">
-<link title="Index of module types" rel=Appendix href="index_module_types.html">
-<link title="Pretty" rel="Chapter" href="Pretty.html">
-<link title="Errormsg" rel="Chapter" href="Errormsg.html">
-<link title="Clist" rel="Chapter" href="Clist.html">
-<link title="Stats" rel="Chapter" href="Stats.html">
-<link title="Cil" rel="Chapter" href="Cil.html">
-<link title="Formatcil" rel="Chapter" href="Formatcil.html">
-<link title="Alpha" rel="Chapter" href="Alpha.html">
-<link title="Cillower" rel="Chapter" href="Cillower.html">
-<link title="Cfg" rel="Chapter" href="Cfg.html">
-<link title="Dataflow" rel="Chapter" href="Dataflow.html">
-<link title="Dominators" rel="Chapter" href="Dominators.html"><title>CIL API Documentation (version 1.3.5) : Dataflow.ForwardsDataFlow</title>
-</head>
-<body>
-<div class="navbar">&nbsp;<a href="Dataflow.html">Up</a>
-&nbsp;<a href="Dataflow.BackwardsDataFlow.html">Next</a>
-</div>
-<center><h1>Functor <a href="type_Dataflow.ForwardsDataFlow.html">Dataflow.ForwardsDataFlow</a></h1></center>
-<br>
-<pre><span class="keyword">module</span> ForwardsDataFlow: <div class="sig_block"><code class="code">functor (</code><code class="code">T</code><code class="code"> : </code><code class="type"><a href="Dataflow.ForwardsTransfer.html">ForwardsTransfer</a></code><code class="code">) -&gt; </code><code class="code">sig</code> <a href="Dataflow.ForwardsDataFlow.html">..</a> <code class="code">end</code></div></pre><table border="0" cellpadding="3" width="100%">
-<tr>
-<td align="left" valign="top" width="1%%"><b>Parameters: </b></td>
-<td>
-<table class="paramstable">
-<tr>
-<td align="center" valign="top" width="15%">
-<code>T</code></td>
-<td align="center" valign="top">:</td>
-<td><code class="type"><a href="Dataflow.ForwardsTransfer.html">ForwardsTransfer</a></code>
-</table>
-</td>
-</tr>
-</table>
-<hr width="100%">
-<pre><span class="keyword">val</span> <a name="VALcompute"></a>compute : <code class="type"><a href="Cil.html#TYPEstmt">Cil.stmt</a> list -> unit</code></pre><div class="info">
-Fill in the T.stmtStartData, given a number of initial statements to 
- start from. All of the initial statements must have some entry in 
- T.stmtStartData (i.e., the initial data should not be bottom)<br>
-</div>
-</body></html>
\ No newline at end of file
diff --git a/cil/doc/api/Dataflow.ForwardsTransfer.html b/cil/doc/api/Dataflow.ForwardsTransfer.html
deleted file mode 100644
index dbefaa036..000000000
--- a/cil/doc/api/Dataflow.ForwardsTransfer.html
+++ /dev/null
@@ -1,88 +0,0 @@
-<html>
-<head>
-<link rel="stylesheet" href="style.css" type="text/css">
-<link rel="Start" href="index.html">
-<link rel="next" href="Dataflow.BackwardsTransfer.html">
-<link rel="Up" href="Dataflow.html">
-<link title="Index of types" rel=Appendix href="index_types.html">
-<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
-<link title="Index of values" rel=Appendix href="index_values.html">
-<link title="Index of class methods" rel=Appendix href="index_methods.html">
-<link title="Index of classes" rel=Appendix href="index_classes.html">
-<link title="Index of class types" rel=Appendix href="index_class_types.html">
-<link title="Index of modules" rel=Appendix href="index_modules.html">
-<link title="Index of module types" rel=Appendix href="index_module_types.html">
-<link title="Pretty" rel="Chapter" href="Pretty.html">
-<link title="Errormsg" rel="Chapter" href="Errormsg.html">
-<link title="Clist" rel="Chapter" href="Clist.html">
-<link title="Stats" rel="Chapter" href="Stats.html">
-<link title="Cil" rel="Chapter" href="Cil.html">
-<link title="Formatcil" rel="Chapter" href="Formatcil.html">
-<link title="Alpha" rel="Chapter" href="Alpha.html">
-<link title="Cillower" rel="Chapter" href="Cillower.html">
-<link title="Cfg" rel="Chapter" href="Cfg.html">
-<link title="Dataflow" rel="Chapter" href="Dataflow.html">
-<link title="Dominators" rel="Chapter" href="Dominators.html"><title>CIL API Documentation (version 1.3.5) : Dataflow.ForwardsTransfer</title>
-</head>
-<body>
-<div class="navbar">&nbsp;<a href="Dataflow.html">Up</a>
-&nbsp;<a href="Dataflow.BackwardsTransfer.html">Next</a>
-</div>
-<center><h1>Module type <a href="type_Dataflow.ForwardsTransfer.html">Dataflow.ForwardsTransfer</a></h1></center>
-<br>
-<pre><span class="keyword">module type</span> ForwardsTransfer = <code class="code">sig</code> <a href="Dataflow.ForwardsTransfer.html">..</a> <code class="code">end</code></pre><hr width="100%">
-<pre><span class="keyword">val</span> <a name="VALname"></a>name : <code class="type">string</code></pre><div class="info">
-For debugging purposes, the name of the analysis<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALdebug"></a>debug : <code class="type">bool Pervasives.ref</code></pre><div class="info">
-Whether to turn on debugging<br>
-</div>
-<pre><span class="keyword">type</span> <a name="TYPEt"></a><code class="type"></code>t </pre>
-<div class="info">
-The type of the data we compute for each block start. May be 
- imperative.<br>
-</div>
-
-<pre><span class="keyword">val</span> <a name="VALcopy"></a>copy : <code class="type"><a href="Dataflow.ForwardsTransfer.html#TYPEt">t</a> -> <a href="Dataflow.ForwardsTransfer.html#TYPEt">t</a></code></pre><div class="info">
-Make a deep copy of the data<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALstmtStartData"></a>stmtStartData : <code class="type"><a href="Dataflow.ForwardsTransfer.html#TYPEt">t</a> Inthash.t</code></pre><div class="info">
-For each statement id, the data at the start. Not found in the hash 
- table means nothing is known about the state at this point. At the end 
- of the analysis this means that the block is not reachable.<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALpretty"></a>pretty : <code class="type">unit -> <a href="Dataflow.ForwardsTransfer.html#TYPEt">t</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
-Pretty-print the state<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALcomputeFirstPredecessor"></a>computeFirstPredecessor : <code class="type"><a href="Cil.html#TYPEstmt">Cil.stmt</a> -> <a href="Dataflow.ForwardsTransfer.html#TYPEt">t</a> -> <a href="Dataflow.ForwardsTransfer.html#TYPEt">t</a></code></pre><div class="info">
-Give the first value for a predecessors, compute the value to be set 
- for the block<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALcombinePredecessors"></a>combinePredecessors : <code class="type"><a href="Cil.html#TYPEstmt">Cil.stmt</a> -><br>       old:<a href="Dataflow.ForwardsTransfer.html#TYPEt">t</a> -><br>       <a href="Dataflow.ForwardsTransfer.html#TYPEt">t</a> -> <a href="Dataflow.ForwardsTransfer.html#TYPEt">t</a> option</code></pre><div class="info">
-Take some old data for the start of a statement, and some new data for 
- the same point. Return None if the combination is identical to the old 
- data. Otherwise, compute the combination, and return it.<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALdoInstr"></a>doInstr : <code class="type"><a href="Cil.html#TYPEinstr">Cil.instr</a> -><br>       <a href="Dataflow.ForwardsTransfer.html#TYPEt">t</a> -> <a href="Dataflow.ForwardsTransfer.html#TYPEt">t</a> <a href="Dataflow.html#TYPEaction">Dataflow.action</a></code></pre><div class="info">
-The (forwards) transfer function for an instruction. The 
- <a href="Cil.html#VALcurrentLoc"><code class="code">Cil.currentLoc</code></a> is set before calling this. The default action is to 
- continue with the state unchanged.<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALdoStmt"></a>doStmt : <code class="type"><a href="Cil.html#TYPEstmt">Cil.stmt</a> -><br>       <a href="Dataflow.ForwardsTransfer.html#TYPEt">t</a> -><br>       <a href="Dataflow.ForwardsTransfer.html#TYPEt">t</a> <a href="Dataflow.html#TYPEstmtaction">Dataflow.stmtaction</a></code></pre><div class="info">
-The (forwards) transfer function for a statement. The <a href="Cil.html#VALcurrentLoc"><code class="code">Cil.currentLoc</code></a> 
- is set before calling this. The default action is to do the instructions
- in this statement, if applicable, and continue with the successors.<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALdoGuard"></a>doGuard : <code class="type"><a href="Cil.html#TYPEexp">Cil.exp</a> -><br>       <a href="Dataflow.ForwardsTransfer.html#TYPEt">t</a> -><br>       <a href="Dataflow.ForwardsTransfer.html#TYPEt">t</a> <a href="Dataflow.html#TYPEguardaction">Dataflow.guardaction</a></code></pre><div class="info">
-Generate the successor to an If statement assuming the given expression
- is nonzero.  Analyses that don't need guard information can return 
- GDefault; this is equivalent to returning GUse of the input.
- A return value of GUnreachable indicates that this half of the branch
- will not be taken and should not be explored.  This will be called
- twice per If, once for "then" and once for "else".<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALfilterStmt"></a>filterStmt : <code class="type"><a href="Cil.html#TYPEstmt">Cil.stmt</a> -> bool</code></pre><div class="info">
-Whether to put this statement in the worklist. This is called when a 
- block would normally be put in the worklist.<br>
-</div>
-</body></html>
\ No newline at end of file
diff --git a/cil/doc/api/Dataflow.html b/cil/doc/api/Dataflow.html
deleted file mode 100644
index 9f744ea0a..000000000
--- a/cil/doc/api/Dataflow.html
+++ /dev/null
@@ -1,114 +0,0 @@
-<html>
-<head>
-<link rel="stylesheet" href="style.css" type="text/css">
-<link rel="Start" href="index.html">
-<link rel="previous" href="Cfg.html">
-<link rel="next" href="Dominators.html">
-<link rel="Up" href="index.html">
-<link title="Index of types" rel=Appendix href="index_types.html">
-<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
-<link title="Index of values" rel=Appendix href="index_values.html">
-<link title="Index of class methods" rel=Appendix href="index_methods.html">
-<link title="Index of classes" rel=Appendix href="index_classes.html">
-<link title="Index of class types" rel=Appendix href="index_class_types.html">
-<link title="Index of modules" rel=Appendix href="index_modules.html">
-<link title="Index of module types" rel=Appendix href="index_module_types.html">
-<link title="Pretty" rel="Chapter" href="Pretty.html">
-<link title="Errormsg" rel="Chapter" href="Errormsg.html">
-<link title="Clist" rel="Chapter" href="Clist.html">
-<link title="Stats" rel="Chapter" href="Stats.html">
-<link title="Cil" rel="Chapter" href="Cil.html">
-<link title="Formatcil" rel="Chapter" href="Formatcil.html">
-<link title="Alpha" rel="Chapter" href="Alpha.html">
-<link title="Cillower" rel="Chapter" href="Cillower.html">
-<link title="Cfg" rel="Chapter" href="Cfg.html">
-<link title="Dataflow" rel="Chapter" href="Dataflow.html">
-<link title="Dominators" rel="Chapter" href="Dominators.html"><title>CIL API Documentation (version 1.3.5) : Dataflow</title>
-</head>
-<body>
-<div class="navbar"><a href="Cfg.html">Previous</a>
-&nbsp;<a href="index.html">Up</a>
-&nbsp;<a href="Dominators.html">Next</a>
-</div>
-<center><h1>Module <a href="type_Dataflow.html">Dataflow</a></h1></center>
-<br>
-<pre><span class="keyword">module</span> Dataflow: <code class="code">sig</code> <a href="Dataflow.html">..</a> <code class="code">end</code></pre>A framework for data flow analysis for CIL code.  Before using 
-    this framework, you must initialize the Control-flow Graph for your
-    program, e.g using <a href="Cfg.html#VALcomputeFileCFG"><code class="code">Cfg.computeFileCFG</code></a><br>
-<hr width="100%">
-<br><code><span class="keyword">type</span> <a name="TYPEaction"></a><code class="type">'a</code> action = </code><table class="typetable">
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">Default</span></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>The default action</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">Done</span> <span class="keyword">of</span> <code class="type">'a</code></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>Do not do the default action. Use this result</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">Post</span> <span class="keyword">of</span> <code class="type">('a -> 'a)</code></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>The default action, followed by the given 
- transformer</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr></table>
-
-
-<br><code><span class="keyword">type</span> <a name="TYPEstmtaction"></a><code class="type">'a</code> stmtaction = </code><table class="typetable">
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">SDefault</span></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>The default action</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">SDone</span></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>Do not visit this statement or its successors</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">SUse</span> <span class="keyword">of</span> <code class="type">'a</code></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>Visit the instructions and successors of this statement
-                  as usual, but use the specified state instead of the 
-                  one that was passed to doStmt</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr></table>
-
-
-<br><code><span class="keyword">type</span> <a name="TYPEguardaction"></a><code class="type">'a</code> guardaction = </code><table class="typetable">
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">GDefault</span></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>The default state</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">GUse</span> <span class="keyword">of</span> <code class="type">'a</code></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>Use this data for the branch</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code><span class="keyword">|</span></code></td>
-<td align="left" valign="top" >
-<code><span class="constructor">GUnreachable</span></code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>The branch will never be taken.</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr></table>
-
-
-<pre><span class="keyword">module type</span> <a href="Dataflow.ForwardsTransfer.html">ForwardsTransfer</a> = <code class="code">sig</code> <a href="Dataflow.ForwardsTransfer.html">..</a> <code class="code">end</code></pre><pre><span class="keyword">module</span> <a href="Dataflow.ForwardsDataFlow.html">ForwardsDataFlow</a>: <div class="sig_block"><code class="code">functor (</code><code class="code">T</code><code class="code"> : </code><code class="type"><a href="Dataflow.ForwardsTransfer.html">ForwardsTransfer</a></code><code class="code">) -&gt; </code><code class="code">sig</code> <a href="Dataflow.ForwardsDataFlow.html">..</a> <code class="code">end</code></div></pre><pre><span class="keyword">module type</span> <a href="Dataflow.BackwardsTransfer.html">BackwardsTransfer</a> = <code class="code">sig</code> <a href="Dataflow.BackwardsTransfer.html">..</a> <code class="code">end</code></pre><pre><span class="keyword">module</span> <a href="Dataflow.BackwardsDataFlow.html">BackwardsDataFlow</a>: <div class="sig_block"><code class="code">functor (</code><code class="code">T</code><code class="code"> : </code><code class="type"><a href="Dataflow.BackwardsTransfer.html">BackwardsTransfer</a></code><code class="code">) -&gt; </code><code class="code">sig</code> <a href="Dataflow.BackwardsDataFlow.html">..</a> <code class="code">end</code></div></pre></body></html>
\ No newline at end of file
diff --git a/cil/doc/api/Dominators.html b/cil/doc/api/Dominators.html
deleted file mode 100644
index 4d8eaf9e4..000000000
--- a/cil/doc/api/Dominators.html
+++ /dev/null
@@ -1,58 +0,0 @@
-<html>
-<head>
-<link rel="stylesheet" href="style.css" type="text/css">
-<link rel="Start" href="index.html">
-<link rel="previous" href="Dataflow.html">
-<link rel="Up" href="index.html">
-<link title="Index of types" rel=Appendix href="index_types.html">
-<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
-<link title="Index of values" rel=Appendix href="index_values.html">
-<link title="Index of class methods" rel=Appendix href="index_methods.html">
-<link title="Index of classes" rel=Appendix href="index_classes.html">
-<link title="Index of class types" rel=Appendix href="index_class_types.html">
-<link title="Index of modules" rel=Appendix href="index_modules.html">
-<link title="Index of module types" rel=Appendix href="index_module_types.html">
-<link title="Pretty" rel="Chapter" href="Pretty.html">
-<link title="Errormsg" rel="Chapter" href="Errormsg.html">
-<link title="Clist" rel="Chapter" href="Clist.html">
-<link title="Stats" rel="Chapter" href="Stats.html">
-<link title="Cil" rel="Chapter" href="Cil.html">
-<link title="Formatcil" rel="Chapter" href="Formatcil.html">
-<link title="Alpha" rel="Chapter" href="Alpha.html">
-<link title="Cillower" rel="Chapter" href="Cillower.html">
-<link title="Cfg" rel="Chapter" href="Cfg.html">
-<link title="Dataflow" rel="Chapter" href="Dataflow.html">
-<link title="Dominators" rel="Chapter" href="Dominators.html"><title>CIL API Documentation (version 1.3.5) : Dominators</title>
-</head>
-<body>
-<div class="navbar"><a href="Dataflow.html">Previous</a>
-&nbsp;<a href="index.html">Up</a>
-&nbsp;</div>
-<center><h1>Module <a href="type_Dominators.html">Dominators</a></h1></center>
-<br>
-<pre><span class="keyword">module</span> Dominators: <code class="code">sig</code> <a href="Dominators.html">..</a> <code class="code">end</code></pre>Compute dominators using data flow analysis<br>
-<hr width="100%">
-<br>
-Author: George Necula   
-      5/28/2004 
-<br>
-<pre><span class="keyword">val</span> <a name="VALcomputeIDom"></a>computeIDom : <code class="type"><a href="Cil.html#TYPEfundec">Cil.fundec</a> -> <a href="Cil.html#TYPEstmt">Cil.stmt</a> option Inthash.t</code></pre><div class="info">
-Invoke on a code after filling in the CFG info and it computes the 
- immediate dominator information. We map each statement to its immediate 
- dominator (None for the start statement, and for the unreachable 
- statements).<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALgetIdom"></a>getIdom : <code class="type"><a href="Cil.html#TYPEstmt">Cil.stmt</a> option Inthash.t -> <a href="Cil.html#TYPEstmt">Cil.stmt</a> -> <a href="Cil.html#TYPEstmt">Cil.stmt</a> option</code></pre><div class="info">
-This is like Inthash.find but gives an error if the information is 
- Not_found<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALdominates"></a>dominates : <code class="type"><a href="Cil.html#TYPEstmt">Cil.stmt</a> option Inthash.t -> <a href="Cil.html#TYPEstmt">Cil.stmt</a> -> <a href="Cil.html#TYPEstmt">Cil.stmt</a> -> bool</code></pre><div class="info">
-Check whether one statement dominates another.<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALfindNaturalLoops"></a>findNaturalLoops : <code class="type"><a href="Cil.html#TYPEfundec">Cil.fundec</a> -> <a href="Cil.html#TYPEstmt">Cil.stmt</a> option Inthash.t -> (<a href="Cil.html#TYPEstmt">Cil.stmt</a> * <a href="Cil.html#TYPEstmt">Cil.stmt</a> list) list</code></pre><div class="info">
-Compute the start of the natural loops. This assumes that the "idom" 
- field has been computed. For each start, keep a list of origin of a back 
- edge. The loop consists of the loop start and all predecessors of the 
- origins of back edges, up to and including the loop start<br>
-</div>
-</body></html>
\ No newline at end of file
diff --git a/cil/doc/api/Errormsg.html b/cil/doc/api/Errormsg.html
deleted file mode 100644
index bc194728c..000000000
--- a/cil/doc/api/Errormsg.html
+++ /dev/null
@@ -1,141 +0,0 @@
-<html>
-<head>
-<link rel="stylesheet" href="style.css" type="text/css">
-<link rel="Start" href="index.html">
-<link rel="previous" href="Pretty.html">
-<link rel="next" href="Clist.html">
-<link rel="Up" href="index.html">
-<link title="Index of types" rel=Appendix href="index_types.html">
-<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
-<link title="Index of values" rel=Appendix href="index_values.html">
-<link title="Index of class methods" rel=Appendix href="index_methods.html">
-<link title="Index of classes" rel=Appendix href="index_classes.html">
-<link title="Index of class types" rel=Appendix href="index_class_types.html">
-<link title="Index of modules" rel=Appendix href="index_modules.html">
-<link title="Index of module types" rel=Appendix href="index_module_types.html">
-<link title="Pretty" rel="Chapter" href="Pretty.html">
-<link title="Errormsg" rel="Chapter" href="Errormsg.html">
-<link title="Clist" rel="Chapter" href="Clist.html">
-<link title="Stats" rel="Chapter" href="Stats.html">
-<link title="Cil" rel="Chapter" href="Cil.html">
-<link title="Formatcil" rel="Chapter" href="Formatcil.html">
-<link title="Alpha" rel="Chapter" href="Alpha.html">
-<link title="Cillower" rel="Chapter" href="Cillower.html">
-<link title="Cfg" rel="Chapter" href="Cfg.html">
-<link title="Dataflow" rel="Chapter" href="Dataflow.html">
-<link title="Dominators" rel="Chapter" href="Dominators.html"><title>CIL API Documentation (version 1.3.5) : Errormsg</title>
-</head>
-<body>
-<div class="navbar"><a href="Pretty.html">Previous</a>
-&nbsp;<a href="index.html">Up</a>
-&nbsp;<a href="Clist.html">Next</a>
-</div>
-<center><h1>Module <a href="type_Errormsg.html">Errormsg</a></h1></center>
-<br>
-<pre><span class="keyword">module</span> Errormsg: <code class="code">sig</code> <a href="Errormsg.html">..</a> <code class="code">end</code></pre>Utility functions for error-reporting<br>
-<hr width="100%">
-<pre><span class="keyword">val</span> <a name="VALlogChannel"></a>logChannel : <code class="type">Pervasives.out_channel Pervasives.ref</code></pre><div class="info">
-A channel for printing log messages<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALdebugFlag"></a>debugFlag : <code class="type">bool Pervasives.ref</code></pre><div class="info">
-If set then print debugging info<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALverboseFlag"></a>verboseFlag : <code class="type">bool Pervasives.ref</code></pre><pre><span class="keyword">val</span> <a name="VALwarnFlag"></a>warnFlag : <code class="type">bool Pervasives.ref</code></pre><div class="info">
-Set to true if you want to see all warnings.<br>
-</div>
-<pre><span class="keyword">exception</span> <a name="EXCEPTIONError"></a>Error</pre>
-<div class="info">
-Error reporting functions raise this exception<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALerror"></a>error : <code class="type">('a, unit, <a href="Pretty.html#TYPEdoc">Pretty.doc</a>, unit) format4 -> 'a</code></pre><div class="info">
-Prints an error message of the form <code class="code">Error: ...</code>. 
-    Use in conjunction with s, for example: <code class="code">E.s (E.error ... )</code>.<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALbug"></a>bug : <code class="type">('a, unit, <a href="Pretty.html#TYPEdoc">Pretty.doc</a>, unit) format4 -> 'a</code></pre><div class="info">
-Similar to <code class="code">error</code> except that its output has the form <code class="code">Bug: ...</code><br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALunimp"></a>unimp : <code class="type">('a, unit, <a href="Pretty.html#TYPEdoc">Pretty.doc</a>, unit) format4 -> 'a</code></pre><div class="info">
-Similar to <code class="code">error</code> except that its output has the form <code class="code">Unimplemented: ...</code><br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALs"></a>s : <code class="type">'a -> 'b</code></pre><div class="info">
-Stop the execution by raising an Error.<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALhadErrors"></a>hadErrors : <code class="type">bool Pervasives.ref</code></pre><div class="info">
-This is set whenever one of the above error functions are called. It must
-    be cleared manually<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALwarn"></a>warn : <code class="type">('a, unit, <a href="Pretty.html#TYPEdoc">Pretty.doc</a>, unit) format4 -> 'a</code></pre><div class="info">
-Like <a href="Errormsg.html#VALerror"><code class="code">Errormsg.error</code></a> but does not raise the <a href="Errormsg.html#EXCEPTIONError"><code class="code">Errormsg.Error</code></a> 
- exception. Return type is unit.<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALwarnOpt"></a>warnOpt : <code class="type">('a, unit, <a href="Pretty.html#TYPEdoc">Pretty.doc</a>, unit) format4 -> 'a</code></pre><div class="info">
-Like <a href="Errormsg.html#VALwarn"><code class="code">Errormsg.warn</code></a> but optional. Printed only if the 
- <a href="Errormsg.html#VALwarnFlag"><code class="code">Errormsg.warnFlag</code></a> is set<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALlog"></a>log : <code class="type">('a, unit, <a href="Pretty.html#TYPEdoc">Pretty.doc</a>, unit) format4 -> 'a</code></pre><div class="info">
-Print something to <code class="code">logChannel</code><br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALlogg"></a>logg : <code class="type">('a, unit, <a href="Pretty.html#TYPEdoc">Pretty.doc</a>, unit) format4 -> 'a</code></pre><div class="info">
-same as <a href="Errormsg.html#VALlog"><code class="code">Errormsg.log</code></a> but do not wrap lines<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALnull"></a>null : <code class="type">('a, unit, <a href="Pretty.html#TYPEdoc">Pretty.doc</a>, unit) format4 -> 'a</code></pre><div class="info">
-Do not actually print (i.e. print to /dev/null)<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALpushContext"></a>pushContext : <code class="type">(unit -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a>) -> unit</code></pre><div class="info">
-Registers a context printing function<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALpopContext"></a>popContext : <code class="type">unit -> unit</code></pre><div class="info">
-Removes the last registered context printing function<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALshowContext"></a>showContext : <code class="type">unit -> unit</code></pre><div class="info">
-Show the context stack to stderr<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALwithContext"></a>withContext : <code class="type">(unit -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a>) -> ('a -> 'b) -> 'a -> 'b</code></pre><div class="info">
-To ensure that the context is registered and removed properly, use the 
-    function below<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALnewline"></a>newline : <code class="type">unit -> unit</code></pre><pre><span class="keyword">val</span> <a name="VALnewHline"></a>newHline : <code class="type">unit -> unit</code></pre><pre><span class="keyword">val</span> <a name="VALgetPosition"></a>getPosition : <code class="type">unit -> int * string * int</code></pre><pre><span class="keyword">val</span> <a name="VALgetHPosition"></a>getHPosition : <code class="type">unit -> int * string</code></pre><div class="info">
-high-level position<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALsetHLine"></a>setHLine : <code class="type">int -> unit</code></pre><pre><span class="keyword">val</span> <a name="VALsetHFile"></a>setHFile : <code class="type">string -> unit</code></pre><pre><span class="keyword">val</span> <a name="VALsetCurrentLine"></a>setCurrentLine : <code class="type">int -> unit</code></pre><pre><span class="keyword">val</span> <a name="VALsetCurrentFile"></a>setCurrentFile : <code class="type">string -> unit</code></pre><br><code><span class="keyword">type</span> <a name="TYPElocation"></a><code class="type"></code>location = {</code><table class="typetable">
-<tr>
-<td align="left" valign="top" >
-<code>&nbsp;&nbsp;</code></td>
-<td align="left" valign="top" >
-<code>file&nbsp;: <code class="type">string</code>;</code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>The file name</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code>&nbsp;&nbsp;</code></td>
-<td align="left" valign="top" >
-<code>line&nbsp;: <code class="type">int</code>;</code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>The line number</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code>&nbsp;&nbsp;</code></td>
-<td align="left" valign="top" >
-<code>hfile&nbsp;: <code class="type">string</code>;</code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>The high-level file name, or "" if not present</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr>
-<tr>
-<td align="left" valign="top" >
-<code>&nbsp;&nbsp;</code></td>
-<td align="left" valign="top" >
-<code>hline&nbsp;: <code class="type">int</code>;</code></td>
-<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><code>The high-level line number, or 0 if not present</code></td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
-</tr></table>
-}
-
-<div class="info">
-Type for source-file locations<br>
-</div>
-
-<pre><span class="keyword">val</span> <a name="VALd_loc"></a>d_loc : <code class="type">unit -> <a href="Errormsg.html#TYPElocation">location</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><pre><span class="keyword">val</span> <a name="VALd_hloc"></a>d_hloc : <code class="type">unit -> <a href="Errormsg.html#TYPElocation">location</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><pre><span class="keyword">val</span> <a name="VALgetLocation"></a>getLocation : <code class="type">unit -> <a href="Errormsg.html#TYPElocation">location</a></code></pre><pre><span class="keyword">val</span> <a name="VALparse_error"></a>parse_error : <code class="type">string -> 'a</code></pre><pre><span class="keyword">val</span> <a name="VALlocUnknown"></a>locUnknown : <code class="type"><a href="Errormsg.html#TYPElocation">location</a></code></pre><div class="info">
-An unknown location for use when you need one but you don't have one<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALreadingFromStdin"></a>readingFromStdin : <code class="type">bool Pervasives.ref</code></pre><div class="info">
-Records whether the stdin is open for reading the goal *<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALstartParsing"></a>startParsing : <code class="type">?useBasename:bool -> string -> Lexing.lexbuf</code></pre><pre><span class="keyword">val</span> <a name="VALstartParsingFromString"></a>startParsingFromString : <code class="type">?file:string -> ?line:int -> string -> Lexing.lexbuf</code></pre><pre><span class="keyword">val</span> <a name="VALfinishParsing"></a>finishParsing : <code class="type">unit -> unit</code></pre></body></html>
\ No newline at end of file
diff --git a/cil/doc/api/Formatcil.html b/cil/doc/api/Formatcil.html
deleted file mode 100644
index 8dee76d77..000000000
--- a/cil/doc/api/Formatcil.html
+++ /dev/null
@@ -1,84 +0,0 @@
-<html>
-<head>
-<link rel="stylesheet" href="style.css" type="text/css">
-<link rel="Start" href="index.html">
-<link rel="previous" href="Cil.html">
-<link rel="next" href="Alpha.html">
-<link rel="Up" href="index.html">
-<link title="Index of types" rel=Appendix href="index_types.html">
-<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
-<link title="Index of values" rel=Appendix href="index_values.html">
-<link title="Index of class methods" rel=Appendix href="index_methods.html">
-<link title="Index of classes" rel=Appendix href="index_classes.html">
-<link title="Index of class types" rel=Appendix href="index_class_types.html">
-<link title="Index of modules" rel=Appendix href="index_modules.html">
-<link title="Index of module types" rel=Appendix href="index_module_types.html">
-<link title="Pretty" rel="Chapter" href="Pretty.html">
-<link title="Errormsg" rel="Chapter" href="Errormsg.html">
-<link title="Clist" rel="Chapter" href="Clist.html">
-<link title="Stats" rel="Chapter" href="Stats.html">
-<link title="Cil" rel="Chapter" href="Cil.html">
-<link title="Formatcil" rel="Chapter" href="Formatcil.html">
-<link title="Alpha" rel="Chapter" href="Alpha.html">
-<link title="Cillower" rel="Chapter" href="Cillower.html">
-<link title="Cfg" rel="Chapter" href="Cfg.html">
-<link title="Dataflow" rel="Chapter" href="Dataflow.html">
-<link title="Dominators" rel="Chapter" href="Dominators.html"><title>CIL API Documentation (version 1.3.5) : Formatcil</title>
-</head>
-<body>
-<div class="navbar"><a href="Cil.html">Previous</a>
-&nbsp;<a href="index.html">Up</a>
-&nbsp;<a href="Alpha.html">Next</a>
-</div>
-<center><h1>Module <a href="type_Formatcil.html">Formatcil</a></h1></center>
-<br>
-<pre><span class="keyword">module</span> Formatcil: <code class="code">sig</code> <a href="Formatcil.html">..</a> <code class="code">end</code></pre><b>An Interpreter for constructing CIL constructs</b><br>
-<hr width="100%">
-<pre><span class="keyword">val</span> <a name="VALcExp"></a>cExp : <code class="type">string -> (string * <a href="Cil.html#TYPEformatArg">Cil.formatArg</a>) list -> <a href="Cil.html#TYPEexp">Cil.exp</a></code></pre><div class="info">
-Constructs an expression based on the program and the list of arguments. 
- Each argument consists of a name followed by the actual data. This 
- argument will be placed instead of occurrences of "%v:name" in the pattern 
- (where the "v" is dependent on the type of the data). The parsing of the 
- string is memoized. * Only the first expression is parsed.<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALcLval"></a>cLval : <code class="type">string -> (string * <a href="Cil.html#TYPEformatArg">Cil.formatArg</a>) list -> <a href="Cil.html#TYPElval">Cil.lval</a></code></pre><div class="info">
-Constructs an lval based on the program and the list of arguments. 
- Only the first lvalue is parsed. 
- The parsing of the string is memoized.<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALcType"></a>cType : <code class="type">string -> (string * <a href="Cil.html#TYPEformatArg">Cil.formatArg</a>) list -> <a href="Cil.html#TYPEtyp">Cil.typ</a></code></pre><div class="info">
-Constructs a type based on the program and the list of arguments. 
- Only the first type is parsed. 
- The parsing of the string is memoized.<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALcInstr"></a>cInstr : <code class="type">string -> <a href="Cil.html#TYPElocation">Cil.location</a> -> (string * <a href="Cil.html#TYPEformatArg">Cil.formatArg</a>) list -> <a href="Cil.html#TYPEinstr">Cil.instr</a></code></pre><div class="info">
-Constructs an instruction based on the program and the list of arguments. 
- Only the first instruction is parsed. 
- The parsing of the string is memoized.<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALcStmt"></a>cStmt : <code class="type">string -><br>       (string -> <a href="Cil.html#TYPEtyp">Cil.typ</a> -> <a href="Cil.html#TYPEvarinfo">Cil.varinfo</a>) -><br>       <a href="Cil.html#TYPElocation">Cil.location</a> -> (string * <a href="Cil.html#TYPEformatArg">Cil.formatArg</a>) list -> <a href="Cil.html#TYPEstmt">Cil.stmt</a></code></pre><pre><span class="keyword">val</span> <a name="VALcStmts"></a>cStmts : <code class="type">string -><br>       (string -> <a href="Cil.html#TYPEtyp">Cil.typ</a> -> <a href="Cil.html#TYPEvarinfo">Cil.varinfo</a>) -><br>       <a href="Cil.html#TYPElocation">Cil.location</a> -> (string * <a href="Cil.html#TYPEformatArg">Cil.formatArg</a>) list -> <a href="Cil.html#TYPEstmt">Cil.stmt</a> list</code></pre><div class="info">
-Constructs a list of statements<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALdExp"></a>dExp : <code class="type">string -> <a href="Cil.html#TYPEexp">Cil.exp</a> -> <a href="Cil.html#TYPEformatArg">Cil.formatArg</a> list option</code></pre><div class="info">
-Deconstructs an expression based on the program. Produces an optional 
- list of format arguments. The parsing of the string is memoized.<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALdLval"></a>dLval : <code class="type">string -> <a href="Cil.html#TYPElval">Cil.lval</a> -> <a href="Cil.html#TYPEformatArg">Cil.formatArg</a> list option</code></pre><div class="info">
-Deconstructs an lval based on the program. Produces an optional 
- list of format arguments. The parsing of the string is memoized.<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALdType"></a>dType : <code class="type">string -> <a href="Cil.html#TYPEtyp">Cil.typ</a> -> <a href="Cil.html#TYPEformatArg">Cil.formatArg</a> list option</code></pre><div class="info">
-Deconstructs a type based on the program. Produces an optional list of 
- format arguments. The parsing of the string is memoized.<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALdInstr"></a>dInstr : <code class="type">string -> <a href="Cil.html#TYPEinstr">Cil.instr</a> -> <a href="Cil.html#TYPEformatArg">Cil.formatArg</a> list option</code></pre><div class="info">
-Deconstructs an instruction based on the program. Produces an optional 
- list of format arguments. The parsing of the string is memoized.<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALnoMemoize"></a>noMemoize : <code class="type">bool Pervasives.ref</code></pre><div class="info">
-If set then will not memoize the parsed patterns<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALtest"></a>test : <code class="type">unit -> unit</code></pre><div class="info">
-Just a testing function<br>
-</div>
-</body></html>
\ No newline at end of file
diff --git a/cil/doc/api/Pretty.MakeMapPrinter.html b/cil/doc/api/Pretty.MakeMapPrinter.html
deleted file mode 100644
index 9693a68d7..000000000
--- a/cil/doc/api/Pretty.MakeMapPrinter.html
+++ /dev/null
@@ -1,63 +0,0 @@
-<html>
-<head>
-<link rel="stylesheet" href="style.css" type="text/css">
-<link rel="Start" href="index.html">
-<link rel="next" href="Pretty.MakeSetPrinter.html">
-<link rel="Up" href="Pretty.html">
-<link title="Index of types" rel=Appendix href="index_types.html">
-<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
-<link title="Index of values" rel=Appendix href="index_values.html">
-<link title="Index of class methods" rel=Appendix href="index_methods.html">
-<link title="Index of classes" rel=Appendix href="index_classes.html">
-<link title="Index of class types" rel=Appendix href="index_class_types.html">
-<link title="Index of modules" rel=Appendix href="index_modules.html">
-<link title="Index of module types" rel=Appendix href="index_module_types.html">
-<link title="Pretty" rel="Chapter" href="Pretty.html">
-<link title="Errormsg" rel="Chapter" href="Errormsg.html">
-<link title="Clist" rel="Chapter" href="Clist.html">
-<link title="Stats" rel="Chapter" href="Stats.html">
-<link title="Cil" rel="Chapter" href="Cil.html">
-<link title="Formatcil" rel="Chapter" href="Formatcil.html">
-<link title="Alpha" rel="Chapter" href="Alpha.html">
-<link title="Cillower" rel="Chapter" href="Cillower.html">
-<link title="Cfg" rel="Chapter" href="Cfg.html">
-<link title="Dataflow" rel="Chapter" href="Dataflow.html">
-<link title="Dominators" rel="Chapter" href="Dominators.html"><title>CIL API Documentation (version 1.3.5) : Pretty.MakeMapPrinter</title>
-</head>
-<body>
-<div class="navbar">&nbsp;<a href="Pretty.html">Up</a>
-&nbsp;<a href="Pretty.MakeSetPrinter.html">Next</a>
-</div>
-<center><h1>Functor <a href="type_Pretty.MakeMapPrinter.html">Pretty.MakeMapPrinter</a></h1></center>
-<br>
-<pre><span class="keyword">module</span> MakeMapPrinter: <div class="sig_block"><code class="code">functor (</code><code class="code">Map</code><code class="code"> : </code><code class="code">sig</code><div class="sig_block"><pre><span class="keyword">type</span> <a name="TYPEkey"></a><code class="type"></code>key </pre>
-
-<pre><span class="keyword">type</span> <a name="TYPEt"></a><code class="type">'a</code> t </pre>
-
-<pre><span class="keyword">val</span> <a name="VALfold"></a>fold : <code class="type">(key -> 'a -> 'b -> 'b) -><br>       'a t -> 'b -> 'b</code></pre></div><code class="code">end</code><code class="code">) -&gt; </code><code class="code">sig</code> <a href="Pretty.MakeMapPrinter.html">..</a> <code class="code">end</code></div></pre>Format maps.<br>
-<table border="0" cellpadding="3" width="100%">
-<tr>
-<td align="left" valign="top" width="1%%"><b>Parameters: </b></td>
-<td>
-<table class="paramstable">
-<tr>
-<td align="center" valign="top" width="15%">
-<code>Map</code></td>
-<td align="center" valign="top">:</td>
-<td><code class="type">sig
-                  type key
-                  type 'a t
-                  val fold : (key -> 'a -> 'b -> 'b) -> 'a t -> 'b -> 'b
-                end</code>
-</table>
-</td>
-</tr>
-</table>
-<hr width="100%">
-<pre><span class="keyword">val</span> <a name="VALdocMap"></a>docMap : <code class="type">?sep:<a href="Pretty.html#TYPEdoc">Pretty.doc</a> -><br>       (Map.key -> 'a -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a>) -> unit -> 'a Map.t -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
-Format a map, analogous to docList.<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALd_map"></a>d_map : <code class="type">?dmaplet:(<a href="Pretty.html#TYPEdoc">Pretty.doc</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a> -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a>) -><br>       string -><br>       (unit -> Map.key -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a>) -><br>       (unit -> 'a -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a>) -> unit -> 'a Map.t -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
-Format a map, analogous to d_list.<br>
-</div>
-</body></html>
\ No newline at end of file
diff --git a/cil/doc/api/Pretty.MakeSetPrinter.html b/cil/doc/api/Pretty.MakeSetPrinter.html
deleted file mode 100644
index e9343b2f1..000000000
--- a/cil/doc/api/Pretty.MakeSetPrinter.html
+++ /dev/null
@@ -1,63 +0,0 @@
-<html>
-<head>
-<link rel="stylesheet" href="style.css" type="text/css">
-<link rel="Start" href="index.html">
-<link rel="previous" href="Pretty.MakeMapPrinter.html">
-<link rel="Up" href="Pretty.html">
-<link title="Index of types" rel=Appendix href="index_types.html">
-<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
-<link title="Index of values" rel=Appendix href="index_values.html">
-<link title="Index of class methods" rel=Appendix href="index_methods.html">
-<link title="Index of classes" rel=Appendix href="index_classes.html">
-<link title="Index of class types" rel=Appendix href="index_class_types.html">
-<link title="Index of modules" rel=Appendix href="index_modules.html">
-<link title="Index of module types" rel=Appendix href="index_module_types.html">
-<link title="Pretty" rel="Chapter" href="Pretty.html">
-<link title="Errormsg" rel="Chapter" href="Errormsg.html">
-<link title="Clist" rel="Chapter" href="Clist.html">
-<link title="Stats" rel="Chapter" href="Stats.html">
-<link title="Cil" rel="Chapter" href="Cil.html">
-<link title="Formatcil" rel="Chapter" href="Formatcil.html">
-<link title="Alpha" rel="Chapter" href="Alpha.html">
-<link title="Cillower" rel="Chapter" href="Cillower.html">
-<link title="Cfg" rel="Chapter" href="Cfg.html">
-<link title="Dataflow" rel="Chapter" href="Dataflow.html">
-<link title="Dominators" rel="Chapter" href="Dominators.html"><title>CIL API Documentation (version 1.3.5) : Pretty.MakeSetPrinter</title>
-</head>
-<body>
-<div class="navbar"><a href="Pretty.MakeMapPrinter.html">Previous</a>
-&nbsp;<a href="Pretty.html">Up</a>
-&nbsp;</div>
-<center><h1>Functor <a href="type_Pretty.MakeSetPrinter.html">Pretty.MakeSetPrinter</a></h1></center>
-<br>
-<pre><span class="keyword">module</span> MakeSetPrinter: <div class="sig_block"><code class="code">functor (</code><code class="code">Set</code><code class="code"> : </code><code class="code">sig</code><div class="sig_block"><pre><span class="keyword">type</span> <a name="TYPEelt"></a><code class="type"></code>elt </pre>
-
-<pre><span class="keyword">type</span> <a name="TYPEt"></a><code class="type"></code>t </pre>
-
-<pre><span class="keyword">val</span> <a name="VALfold"></a>fold : <code class="type">(elt -> 'a -> 'a) -><br>       t -> 'a -> 'a</code></pre></div><code class="code">end</code><code class="code">) -&gt; </code><code class="code">sig</code> <a href="Pretty.MakeSetPrinter.html">..</a> <code class="code">end</code></div></pre>Format sets.<br>
-<table border="0" cellpadding="3" width="100%">
-<tr>
-<td align="left" valign="top" width="1%%"><b>Parameters: </b></td>
-<td>
-<table class="paramstable">
-<tr>
-<td align="center" valign="top" width="15%">
-<code>Set</code></td>
-<td align="center" valign="top">:</td>
-<td><code class="type">sig 
-                  type elt
-                  type t
-                  val fold : (elt -> 'a -> 'a) -> t -> 'a -> 'a
-                end</code>
-</table>
-</td>
-</tr>
-</table>
-<hr width="100%">
-<pre><span class="keyword">val</span> <a name="VALdocSet"></a>docSet : <code class="type">?sep:<a href="Pretty.html#TYPEdoc">Pretty.doc</a> -> (Set.elt -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a>) -> unit -> Set.t -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
-Format a set, analogous to docList.<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALd_set"></a>d_set : <code class="type">string -> (unit -> Set.elt -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a>) -> unit -> Set.t -> <a href="Pretty.html#TYPEdoc">Pretty.doc</a></code></pre><div class="info">
-Format a set, analogous to d_list.<br>
-</div>
-</body></html>
\ No newline at end of file
diff --git a/cil/doc/api/Pretty.html b/cil/doc/api/Pretty.html
deleted file mode 100644
index c9c48c8ef..000000000
--- a/cil/doc/api/Pretty.html
+++ /dev/null
@@ -1,268 +0,0 @@
-<html>
-<head>
-<link rel="stylesheet" href="style.css" type="text/css">
-<link rel="Start" href="index.html">
-<link rel="next" href="Errormsg.html">
-<link rel="Up" href="index.html">
-<link title="Index of types" rel=Appendix href="index_types.html">
-<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
-<link title="Index of values" rel=Appendix href="index_values.html">
-<link title="Index of class methods" rel=Appendix href="index_methods.html">
-<link title="Index of classes" rel=Appendix href="index_classes.html">
-<link title="Index of class types" rel=Appendix href="index_class_types.html">
-<link title="Index of modules" rel=Appendix href="index_modules.html">
-<link title="Index of module types" rel=Appendix href="index_module_types.html">
-<link title="Pretty" rel="Chapter" href="Pretty.html">
-<link title="Errormsg" rel="Chapter" href="Errormsg.html">
-<link title="Clist" rel="Chapter" href="Clist.html">
-<link title="Stats" rel="Chapter" href="Stats.html">
-<link title="Cil" rel="Chapter" href="Cil.html">
-<link title="Formatcil" rel="Chapter" href="Formatcil.html">
-<link title="Alpha" rel="Chapter" href="Alpha.html">
-<link title="Cillower" rel="Chapter" href="Cillower.html">
-<link title="Cfg" rel="Chapter" href="Cfg.html">
-<link title="Dataflow" rel="Chapter" href="Dataflow.html">
-<link title="Dominators" rel="Chapter" href="Dominators.html"><title>CIL API Documentation (version 1.3.5) : Pretty</title>
-</head>
-<body>
-<div class="navbar">&nbsp;<a href="index.html">Up</a>
-&nbsp;<a href="Errormsg.html">Next</a>
-</div>
-<center><h1>Module <a href="type_Pretty.html">Pretty</a></h1></center>
-<br>
-<pre><span class="keyword">module</span> Pretty: <code class="code">sig</code> <a href="Pretty.html">..</a> <code class="code">end</code></pre>Utility functions for pretty-printing. The major features provided by 
-    this module are <ul>
-<li>An <code class="code">fprintf</code>-style interface with support for user-defined printers</li>
-<li>The printout is fit to a width by selecting some of the optional newlines</li>
-<li>Constructs for alignment and indentation</li>
-<li>Print ellipsis starting at a certain nesting depth</li>
-<li>Constructs for printing lists and arrays</li>
-</ul>
-
- Pretty-printing occurs in two stages:<ul>
-<li>Construct a <a href="Pretty.html#TYPEdoc"><code class="code">Pretty.doc</code></a> object that encodes all of the elements to be 
-  printed 
-  along with alignment specifiers and optional and mandatory newlines</li>
-<li>Format the <a href="Pretty.html#TYPEdoc"><code class="code">Pretty.doc</code></a> to a certain width and emit it as a string, to an 
-  output stream or pass it to a user-defined function</li>
-</ul>
-
- The formatting algorithm is not optimal but it does a pretty good job while 
- still operating in linear time. The original version was based on a pretty 
- printer by Philip Wadler which turned out to not scale to large jobs.<br>
-<hr width="100%">
-<br>
-API<br>
-<pre><span class="keyword">type</span> <a name="TYPEdoc"></a><code class="type"></code>doc </pre>
-<div class="info">
-The type of unformated documents. Elements of this type can be 
- constructed in two ways. Either with a number of constructor shown below, 
- or using the <a href="Pretty.html#VALdprintf"><code class="code">Pretty.dprintf</code></a> function with a <code class="code">printf</code>-like interface. 
- The <a href="Pretty.html#VALdprintf"><code class="code">Pretty.dprintf</code></a> method is slightly slower so we do not use it for 
- large jobs such as the output routines for a compiler. But we use it for 
- small jobs such as logging and error messages.<br>
-</div>
-
-<br>
-Constructors for the doc type.<br>
-<pre><span class="keyword">val</span> <a name="VALnil"></a>nil : <code class="type"><a href="Pretty.html#TYPEdoc">doc</a></code></pre><div class="info">
-Constructs an empty document<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VAL(++)"></a>(++) : <code class="type"><a href="Pretty.html#TYPEdoc">doc</a> -> <a href="Pretty.html#TYPEdoc">doc</a> -> <a href="Pretty.html#TYPEdoc">doc</a></code></pre><div class="info">
-Concatenates two documents. This is an infix operator that associates to 
-    the left.<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALconcat"></a>concat : <code class="type"><a href="Pretty.html#TYPEdoc">doc</a> -> <a href="Pretty.html#TYPEdoc">doc</a> -> <a href="Pretty.html#TYPEdoc">doc</a></code></pre><pre><span class="keyword">val</span> <a name="VALtext"></a>text : <code class="type">string -> <a href="Pretty.html#TYPEdoc">doc</a></code></pre><div class="info">
-A document that prints the given string<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALnum"></a>num : <code class="type">int -> <a href="Pretty.html#TYPEdoc">doc</a></code></pre><div class="info">
-A document that prints an integer in decimal form<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALreal"></a>real : <code class="type">float -> <a href="Pretty.html#TYPEdoc">doc</a></code></pre><div class="info">
-A document that prints a real number<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALchr"></a>chr : <code class="type">char -> <a href="Pretty.html#TYPEdoc">doc</a></code></pre><div class="info">
-A document that prints a character. This is just like <a href="Pretty.html#VALtext"><code class="code">Pretty.text</code></a>
-    with a one-character string.<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALline"></a>line : <code class="type"><a href="Pretty.html#TYPEdoc">doc</a></code></pre><div class="info">
-A document that consists of a mandatory newline. This is just like <code class="code">(text
-    "\n")</code>. The new line will be indented to the current indentation level,
-    unless you use <a href="Pretty.html#VALleftflush"><code class="code">Pretty.leftflush</code></a> right after this.<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALleftflush"></a>leftflush : <code class="type"><a href="Pretty.html#TYPEdoc">doc</a></code></pre><div class="info">
-Use after a <a href="Pretty.html#VALline"><code class="code">Pretty.line</code></a> to prevent the indentation. Whatever follows 
- next will be flushed left. Indentation resumes on the next line.<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALbreak"></a>break : <code class="type"><a href="Pretty.html#TYPEdoc">doc</a></code></pre><div class="info">
-A document that consists of either a space or a line break. Also called
-    an optional line break. Such a break will be
-    taken only if necessary to fit the document in a given width. If the break
-    is not taken a space is printed instead.<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALalign"></a>align : <code class="type"><a href="Pretty.html#TYPEdoc">doc</a></code></pre><div class="info">
-Mark the current column as the current indentation level. Does not print
-    anything. All taken line breaks will align to this column. The previous
-    alignment level is saved on a stack.<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALunalign"></a>unalign : <code class="type"><a href="Pretty.html#TYPEdoc">doc</a></code></pre><div class="info">
-Reverts to the last saved indentation level.<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALmark"></a>mark : <code class="type"><a href="Pretty.html#TYPEdoc">doc</a></code></pre><div class="info">
-Mark the beginning of a markup section. The width of a markup section is 
- considered 0 for the purpose of computing identation<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALunmark"></a>unmark : <code class="type"><a href="Pretty.html#TYPEdoc">doc</a></code></pre><div class="info">
-The end of a markup section<br>
-</div>
-<br>
-Syntactic sugar<br>
-<pre><span class="keyword">val</span> <a name="VALindent"></a>indent : <code class="type">int -> <a href="Pretty.html#TYPEdoc">doc</a> -> <a href="Pretty.html#TYPEdoc">doc</a></code></pre><div class="info">
-Indents the document. Same as <code class="code">((text "  ") ++ align ++ doc ++ unalign)</code>,
-    with the specified number of spaces.<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALmarkup"></a>markup : <code class="type"><a href="Pretty.html#TYPEdoc">doc</a> -> <a href="Pretty.html#TYPEdoc">doc</a></code></pre><div class="info">
-Prints a document as markup. The marked document cannot contain line 
- breaks or alignment constructs.<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALseq"></a>seq : <code class="type">sep:<a href="Pretty.html#TYPEdoc">doc</a> -> doit:('a -> <a href="Pretty.html#TYPEdoc">doc</a>) -> elements:'a list -> <a href="Pretty.html#TYPEdoc">doc</a></code></pre><div class="info">
-Formats a sequence. <code class="code">sep</code> is a separator, <code class="code">doit</code> is a function that 
- converts an element to a document.<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALdocList"></a>docList : <code class="type">?sep:<a href="Pretty.html#TYPEdoc">doc</a> -> ('a -> <a href="Pretty.html#TYPEdoc">doc</a>) -> unit -> 'a list -> <a href="Pretty.html#TYPEdoc">doc</a></code></pre><div class="info">
-An alternative function for printing a list. The <code class="code">unit</code> argument is there 
- to make this function more easily usable with the <a href="Pretty.html#VALdprintf"><code class="code">Pretty.dprintf</code></a> 
- interface. The first argument is a separator, by default a comma.<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALd_list"></a>d_list : <code class="type">string -> (unit -> 'a -> <a href="Pretty.html#TYPEdoc">doc</a>) -> unit -> 'a list -> <a href="Pretty.html#TYPEdoc">doc</a></code></pre><div class="info">
-sm: Yet another list printer.  This one accepts the same kind of
- printing function that <a href="Pretty.html#VALdprintf"><code class="code">Pretty.dprintf</code></a> does, and itself works 
- in the dprintf context.  Also accepts
- a string as the separator since that's by far the most common.<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALdocArray"></a>docArray : <code class="type">?sep:<a href="Pretty.html#TYPEdoc">doc</a> -><br>       (int -> 'a -> <a href="Pretty.html#TYPEdoc">doc</a>) -> unit -> 'a array -> <a href="Pretty.html#TYPEdoc">doc</a></code></pre><div class="info">
-Formats an array. A separator and a function that prints an array
-    element. The default separator is a comma.<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALdocOpt"></a>docOpt : <code class="type">('a -> <a href="Pretty.html#TYPEdoc">doc</a>) -> unit -> 'a option -> <a href="Pretty.html#TYPEdoc">doc</a></code></pre><div class="info">
-Prints an <code class="code">'a option</code> with <code class="code">None</code> or <code class="code">Some</code><br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALd_int32"></a>d_int32 : <code class="type">int32 -> <a href="Pretty.html#TYPEdoc">doc</a></code></pre><div class="info">
-Print an int32<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALf_int32"></a>f_int32 : <code class="type">unit -> int32 -> <a href="Pretty.html#TYPEdoc">doc</a></code></pre><pre><span class="keyword">val</span> <a name="VALd_int64"></a>d_int64 : <code class="type">int64 -> <a href="Pretty.html#TYPEdoc">doc</a></code></pre><pre><span class="keyword">val</span> <a name="VALf_int64"></a>f_int64 : <code class="type">unit -> int64 -> <a href="Pretty.html#TYPEdoc">doc</a></code></pre><pre><span class="keyword">module</span> <a href="Pretty.MakeMapPrinter.html">MakeMapPrinter</a>: <div class="sig_block"><code class="code">functor (</code><code class="code">Map</code><code class="code"> : </code><code class="code">sig</code><div class="sig_block"><pre><span class="keyword">type</span> <a name="TYPEkey"></a><code class="type"></code>key </pre>
-
-<pre><span class="keyword">type</span> <a name="TYPEt"></a><code class="type">'a</code> t </pre>
-
-<pre><span class="keyword">val</span> <a name="VALfold"></a>fold : <code class="type">(key -> 'a -> 'b -> 'b) -><br>       'a t -> 'b -> 'b</code></pre></div><code class="code">end</code><code class="code">) -&gt; </code><code class="code">sig</code> <a href="Pretty.MakeMapPrinter.html">..</a> <code class="code">end</code></div></pre><div class="info">
-Format maps.
-</div>
-<pre><span class="keyword">module</span> <a href="Pretty.MakeSetPrinter.html">MakeSetPrinter</a>: <div class="sig_block"><code class="code">functor (</code><code class="code">Set</code><code class="code"> : </code><code class="code">sig</code><div class="sig_block"><pre><span class="keyword">type</span> <a name="TYPEelt"></a><code class="type"></code>elt </pre>
-
-<pre><span class="keyword">type</span> <a name="TYPEt"></a><code class="type"></code>t </pre>
-
-<pre><span class="keyword">val</span> <a name="VALfold"></a>fold : <code class="type">(elt -> 'a -> 'a) -><br>       t -> 'a -> 'a</code></pre></div><code class="code">end</code><code class="code">) -&gt; </code><code class="code">sig</code> <a href="Pretty.MakeSetPrinter.html">..</a> <code class="code">end</code></div></pre><div class="info">
-Format sets.
-</div>
-<pre><span class="keyword">val</span> <a name="VALinsert"></a>insert : <code class="type">unit -> <a href="Pretty.html#TYPEdoc">doc</a> -> <a href="Pretty.html#TYPEdoc">doc</a></code></pre><div class="info">
-A function that is useful with the <code class="code">printf</code>-like interface<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALdprintf"></a>dprintf : <code class="type">('a, unit, <a href="Pretty.html#TYPEdoc">doc</a>, <a href="Pretty.html#TYPEdoc">doc</a>) format4 -> 'a</code></pre><div class="info">
-This function provides an alternative method for constructing 
-    <code class="code">doc</code> objects. The first argument for this function is a format string 
-    argument (of type <code class="code">('a, unit, doc) format</code>; if you insist on 
-    understanding what that means see the module <code class="code">Printf</code>). The format string 
-    is like that for the <code class="code">printf</code> function in C, except that it understands a 
-    few more formatting controls, all starting with the @ character. 
-<p>
-
-    See the gprintf function if you want to pipe the result of dprintf into 
-    some other functions.
-<p>
-
- The following special formatting characters are understood (these do not 
- correspond to arguments of the function):<ul>
-<li> @[ Inserts an <a href="Pretty.html#VALalign"><code class="code">Pretty.align</code></a>. Every format string must have matching 
-        <a href="Pretty.html#VALalign"><code class="code">Pretty.align</code></a> and <a href="Pretty.html#VALunalign"><code class="code">Pretty.unalign</code></a>. </li>
-<li> @] Inserts an <a href="Pretty.html#VALunalign"><code class="code">Pretty.unalign</code></a>.</li>
-<li> @!  Inserts a <a href="Pretty.html#VALline"><code class="code">Pretty.line</code></a>. Just like "\n"</li>
-<li> @?  Inserts a <a href="Pretty.html#VALbreak"><code class="code">Pretty.break</code></a>.</li>
-<li> @&lt;  Inserts a <a href="Pretty.html#VALmark"><code class="code">Pretty.mark</code></a>. </li>
-<li> @&gt;  Inserts a <a href="Pretty.html#VALunmark"><code class="code">Pretty.unmark</code></a>.</li>
-<li> @^  Inserts a <a href="Pretty.html#VALleftflush"><code class="code">Pretty.leftflush</code></a>
-       Should be used immediately after @! or "\n".</li>
-<li> @@ : inserts a @ character</li>
-</ul>
-
- In addition to the usual <code class="code">printf</code> % formatting characters the following two 
- new characters are supported:<ul>
-<li>%t Corresponds to an argument of type <code class="code">unit -&gt; doc</code>. This argument is 
-     invoked to produce a document</li>
-<li>%a Corresponds to <b>two</b> arguments. The first of type <code class="code">unit -&gt; 'a -&gt; doc</code> 
-     and the second of type <code class="code">'a</code>. (The extra <code class="code">unit</code> is do to the 
-     peculiarities of the built-in support for format strings in Ocaml. It 
-     turns out that it is not a major problem.) Here is an example of how 
-     you use this:</li>
-</ul>
-
-<pre>dprintf "Name=%s, SSN=%7d, Children=@[%a@]\n"
-             pers.name pers.ssn (docList (chr ',' ++ break) text)
-             pers.children</pre>
-<p>
-
- The result of <code class="code">dprintf</code> is a <a href="Pretty.html#TYPEdoc"><code class="code">Pretty.doc</code></a>. You can format the document and 
- emit it using the functions <a href="Pretty.html#VALfprint"><code class="code">Pretty.fprint</code></a> and <a href="Pretty.html#VALsprint"><code class="code">Pretty.sprint</code></a>.<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALgprintf"></a>gprintf : <code class="type">(<a href="Pretty.html#TYPEdoc">doc</a> -> 'a) -> ('b, unit, <a href="Pretty.html#TYPEdoc">doc</a>, 'a) format4 -> 'b</code></pre><div class="info">
-Like <a href="Pretty.html#VALdprintf"><code class="code">Pretty.dprintf</code></a> but more general. It also takes a function that is 
- invoked on the constructed document but before any formatting is done. The 
- type of the format argument means that 'a is the type of the parameters of 
- this function, unit is the type of the first argument to %a and %t 
- formats, doc is the type of the intermediate result, and 'b is the type of 
- the result of gprintf.<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALfprint"></a>fprint : <code class="type">Pervasives.out_channel -> width:int -> <a href="Pretty.html#TYPEdoc">doc</a> -> unit</code></pre><div class="info">
-Format the document to the given width and emit it to the given channel<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALsprint"></a>sprint : <code class="type">width:int -> <a href="Pretty.html#TYPEdoc">doc</a> -> string</code></pre><div class="info">
-Format the document to the given width and emit it as a string<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALfprintf"></a>fprintf : <code class="type">Pervasives.out_channel -> ('a, unit, <a href="Pretty.html#TYPEdoc">doc</a>) Pervasives.format -> 'a</code></pre><div class="info">
-Like <a href="Pretty.html#VALdprintf"><code class="code">Pretty.dprintf</code></a> followed by <a href="Pretty.html#VALfprint"><code class="code">Pretty.fprint</code></a><br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALprintf"></a>printf : <code class="type">('a, unit, <a href="Pretty.html#TYPEdoc">doc</a>) Pervasives.format -> 'a</code></pre><div class="info">
-Like <a href="Pretty.html#VALfprintf"><code class="code">Pretty.fprintf</code></a> applied to <code class="code">stdout</code><br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALeprintf"></a>eprintf : <code class="type">('a, unit, <a href="Pretty.html#TYPEdoc">doc</a>) Pervasives.format -> 'a</code></pre><div class="info">
-Like <a href="Pretty.html#VALfprintf"><code class="code">Pretty.fprintf</code></a> applied to <code class="code">stderr</code><br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALwithPrintDepth"></a>withPrintDepth : <code class="type">int -> (unit -> unit) -> unit</code></pre><div class="info">
-Invokes a thunk, with printDepth temporarily set to the specified value<br>
-</div>
-<br>
-The following variables can be used to control the operation of the printer<br>
-<pre><span class="keyword">val</span> <a name="VALprintDepth"></a>printDepth : <code class="type">int Pervasives.ref</code></pre><div class="info">
-Specifies the nesting depth of the <code class="code">align</code>/<code class="code">unalign</code> pairs at which 
-    everything is replaced with ellipsis<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALprintIndent"></a>printIndent : <code class="type">bool Pervasives.ref</code></pre><div class="info">
-If false then does not indent<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALfastMode"></a>fastMode : <code class="type">bool Pervasives.ref</code></pre><div class="info">
-If set to <code class="code">true</code> then optional breaks are taken only when the document 
-    has exceeded the given width. This means that the printout will looked 
-    more ragged but it will be faster<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALflushOften"></a>flushOften : <code class="type">bool Pervasives.ref</code></pre><div class="info">
-If true the it flushes after every print<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALcountNewLines"></a>countNewLines : <code class="type">int Pervasives.ref</code></pre><div class="info">
-Keep a running count of the taken newlines. You can read and write this 
- from the client code if you want<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALauto_printer"></a>auto_printer : <code class="type">string -> 'a</code></pre><div class="info">
-A function that when used at top-level in a module will direct 
- the pa_prtype module generate automatically the printing functions for a 
- type<br>
-</div>
-</body></html>
\ No newline at end of file
diff --git a/cil/doc/api/Stats.html b/cil/doc/api/Stats.html
deleted file mode 100644
index b3f8aa422..000000000
--- a/cil/doc/api/Stats.html
+++ /dev/null
@@ -1,69 +0,0 @@
-<html>
-<head>
-<link rel="stylesheet" href="style.css" type="text/css">
-<link rel="Start" href="index.html">
-<link rel="previous" href="Clist.html">
-<link rel="next" href="Cil.html">
-<link rel="Up" href="index.html">
-<link title="Index of types" rel=Appendix href="index_types.html">
-<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
-<link title="Index of values" rel=Appendix href="index_values.html">
-<link title="Index of class methods" rel=Appendix href="index_methods.html">
-<link title="Index of classes" rel=Appendix href="index_classes.html">
-<link title="Index of class types" rel=Appendix href="index_class_types.html">
-<link title="Index of modules" rel=Appendix href="index_modules.html">
-<link title="Index of module types" rel=Appendix href="index_module_types.html">
-<link title="Pretty" rel="Chapter" href="Pretty.html">
-<link title="Errormsg" rel="Chapter" href="Errormsg.html">
-<link title="Clist" rel="Chapter" href="Clist.html">
-<link title="Stats" rel="Chapter" href="Stats.html">
-<link title="Cil" rel="Chapter" href="Cil.html">
-<link title="Formatcil" rel="Chapter" href="Formatcil.html">
-<link title="Alpha" rel="Chapter" href="Alpha.html">
-<link title="Cillower" rel="Chapter" href="Cillower.html">
-<link title="Cfg" rel="Chapter" href="Cfg.html">
-<link title="Dataflow" rel="Chapter" href="Dataflow.html">
-<link title="Dominators" rel="Chapter" href="Dominators.html"><title>CIL API Documentation (version 1.3.5) : Stats</title>
-</head>
-<body>
-<div class="navbar"><a href="Clist.html">Previous</a>
-&nbsp;<a href="index.html">Up</a>
-&nbsp;<a href="Cil.html">Next</a>
-</div>
-<center><h1>Module <a href="type_Stats.html">Stats</a></h1></center>
-<br>
-<pre><span class="keyword">module</span> Stats: <code class="code">sig</code> <a href="Stats.html">..</a> <code class="code">end</code></pre>Utilities for maintaining timing statistics<br>
-<hr width="100%">
-<pre><span class="keyword">val</span> <a name="VALreset"></a>reset : <code class="type">bool -> unit</code></pre><div class="info">
-Resets all the timings. Invoke with "true" if you want to switch to using 
- the hardware performance counters from now on. You get an exception if 
- there are not performance counters available<br>
-</div>
-<pre><span class="keyword">exception</span> <a name="EXCEPTIONNoPerfCount"></a>NoPerfCount</pre>
-<pre><span class="keyword">val</span> <a name="VALhas_performance_counters"></a>has_performance_counters : <code class="type">unit -> bool</code></pre><div class="info">
-Check if we have performance counters<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALsample_pentium_perfcount_20"></a>sample_pentium_perfcount_20 : <code class="type">unit -> int</code></pre><div class="info">
-Sample the current cycle count, in megacycles.<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALsample_pentium_perfcount_10"></a>sample_pentium_perfcount_10 : <code class="type">unit -> int</code></pre><div class="info">
-Sample the current cycle count, in kilocycles.<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALtime"></a>time : <code class="type">string -> ('a -> 'b) -> 'a -> 'b</code></pre><div class="info">
-Time a function and associate the time with the given string. If some
-    timing information is already associated with that string, then accumulate
-    the times. If this function is invoked within another timed function then
-    you can have a hierarchy of timings<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALrepeattime"></a>repeattime : <code class="type">float -> string -> ('a -> 'b) -> 'a -> 'b</code></pre><div class="info">
-repeattime is like time but runs the function several times until the total
-    running time is greater or equal to the first argument. The total time is
-    then divided by the number of times the function was run.<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALprint"></a>print : <code class="type">Pervasives.out_channel -> string -> unit</code></pre><div class="info">
-Print the current stats preceeded by a message<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALlastTime"></a>lastTime : <code class="type">float Pervasives.ref</code></pre><div class="info">
-Time a function and set lastTime to the time it took<br>
-</div>
-<pre><span class="keyword">val</span> <a name="VALtimethis"></a>timethis : <code class="type">('a -> 'b) -> 'a -> 'b</code></pre></body></html>
\ No newline at end of file
diff --git a/cil/doc/api/index.html b/cil/doc/api/index.html
deleted file mode 100644
index f9636b27f..000000000
--- a/cil/doc/api/index.html
+++ /dev/null
@@ -1,83 +0,0 @@
-<html>
-<head>
-<link rel="stylesheet" href="style.css" type="text/css">
-<link rel="Start" href="index.html">
-<link title="Index of types" rel=Appendix href="index_types.html">
-<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
-<link title="Index of values" rel=Appendix href="index_values.html">
-<link title="Index of class methods" rel=Appendix href="index_methods.html">
-<link title="Index of classes" rel=Appendix href="index_classes.html">
-<link title="Index of class types" rel=Appendix href="index_class_types.html">
-<link title="Index of modules" rel=Appendix href="index_modules.html">
-<link title="Index of module types" rel=Appendix href="index_module_types.html">
-<link title="Pretty" rel="Chapter" href="Pretty.html">
-<link title="Errormsg" rel="Chapter" href="Errormsg.html">
-<link title="Clist" rel="Chapter" href="Clist.html">
-<link title="Stats" rel="Chapter" href="Stats.html">
-<link title="Cil" rel="Chapter" href="Cil.html">
-<link title="Formatcil" rel="Chapter" href="Formatcil.html">
-<link title="Alpha" rel="Chapter" href="Alpha.html">
-<link title="Cillower" rel="Chapter" href="Cillower.html">
-<link title="Cfg" rel="Chapter" href="Cfg.html">
-<link title="Dataflow" rel="Chapter" href="Dataflow.html">
-<link title="Dominators" rel="Chapter" href="Dominators.html"><title>CIL API Documentation (version 1.3.5)</title>
-</head>
-<body>
-<center><h1>CIL API Documentation (version 1.3.5)</h1></center>
-<a href="index_types.html">Index of types</a><br>
-<a href="index_exceptions.html">Index of exceptions</a><br>
-<a href="index_values.html">Index of values</a><br>
-<a href="index_methods.html">Index of class methods</a><br>
-<a href="index_classes.html">Index of classes</a><br>
-<a href="index_class_types.html">Index of class types</a><br>
-<a href="index_modules.html">Index of modules</a><br>
-<a href="index_module_types.html">Index of module types</a><br>
-<br/><br>
-<table class="indextable">
-<tr><td><a href="Pretty.html">Pretty</a></td><td><div class="info">
-Utility functions for pretty-printing.
-</div>
-</td></tr>
-<tr><td><a href="Errormsg.html">Errormsg</a></td><td><div class="info">
-Utility functions for error-reporting
-</div>
-</td></tr>
-<tr><td><a href="Clist.html">Clist</a></td><td><div class="info">
-Utilities for managing "concatenable lists" (clists).
-</div>
-</td></tr>
-<tr><td><a href="Stats.html">Stats</a></td><td><div class="info">
-Utilities for maintaining timing statistics
-</div>
-</td></tr>
-<tr><td><a href="Cil.html">Cil</a></td><td><div class="info">
-CIL API Documentation.
-</div>
-</td></tr>
-<tr><td><a href="Formatcil.html">Formatcil</a></td><td><div class="info">
-<b>An Interpreter for constructing CIL constructs</b>
-</div>
-</td></tr>
-<tr><td><a href="Alpha.html">Alpha</a></td><td><div class="info">
-<b>ALPHA conversion</b>
-</div>
-</td></tr>
-<tr><td><a href="Cillower.html">Cillower</a></td><td><div class="info">
-A number of lowering passes over CIL
-</div>
-</td></tr>
-<tr><td><a href="Cfg.html">Cfg</a></td><td><div class="info">
-Code to compute the control-flow graph of a function or file.
-</div>
-</td></tr>
-<tr><td><a href="Dataflow.html">Dataflow</a></td><td><div class="info">
-A framework for data flow analysis for CIL code.
-</div>
-</td></tr>
-<tr><td><a href="Dominators.html">Dominators</a></td><td><div class="info">
-Compute dominators using data flow analysis
-</div>
-</td></tr>
-</table>
-</body>
-</html>
\ No newline at end of file
diff --git a/cil/doc/api/index_attributes.html b/cil/doc/api/index_attributes.html
deleted file mode 100644
index 347bfa92a..000000000
--- a/cil/doc/api/index_attributes.html
+++ /dev/null
@@ -1,30 +0,0 @@
-<html>
-<head>
-<link rel="stylesheet" href="style.css" type="text/css">
-<link rel="Start" href="index.html">
-<link title="Index of types" rel=Appendix href="index_types.html">
-<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
-<link title="Index of values" rel=Appendix href="index_values.html">
-<link title="Index of class methods" rel=Appendix href="index_methods.html">
-<link title="Index of classes" rel=Appendix href="index_classes.html">
-<link title="Index of class types" rel=Appendix href="index_class_types.html">
-<link title="Index of modules" rel=Appendix href="index_modules.html">
-<link title="Index of module types" rel=Appendix href="index_module_types.html">
-<link title="Pretty" rel="Chapter" href="Pretty.html">
-<link title="Errormsg" rel="Chapter" href="Errormsg.html">
-<link title="Clist" rel="Chapter" href="Clist.html">
-<link title="Stats" rel="Chapter" href="Stats.html">
-<link title="Cil" rel="Chapter" href="Cil.html">
-<link title="Formatcil" rel="Chapter" href="Formatcil.html">
-<link title="Alpha" rel="Chapter" href="Alpha.html">
-<link title="Cillower" rel="Chapter" href="Cillower.html">
-<link title="Cfg" rel="Chapter" href="Cfg.html">
-<link title="Dataflow" rel="Chapter" href="Dataflow.html">
-<link title="Dominators" rel="Chapter" href="Dominators.html"><title>CIL API Documentation (version 1.3.5) : Index of class attributes</title>
-</head>
-<body>
-<center><h1>Index of class attributes</h1></center>
-<table>
-</table><br>
-</body>
-</html>
\ No newline at end of file
diff --git a/cil/doc/api/index_class_types.html b/cil/doc/api/index_class_types.html
deleted file mode 100644
index 4c7faefef..000000000
--- a/cil/doc/api/index_class_types.html
+++ /dev/null
@@ -1,41 +0,0 @@
-<html>
-<head>
-<link rel="stylesheet" href="style.css" type="text/css">
-<link rel="Start" href="index.html">
-<link title="Index of types" rel=Appendix href="index_types.html">
-<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
-<link title="Index of values" rel=Appendix href="index_values.html">
-<link title="Index of class methods" rel=Appendix href="index_methods.html">
-<link title="Index of classes" rel=Appendix href="index_classes.html">
-<link title="Index of class types" rel=Appendix href="index_class_types.html">
-<link title="Index of modules" rel=Appendix href="index_modules.html">
-<link title="Index of module types" rel=Appendix href="index_module_types.html">
-<link title="Pretty" rel="Chapter" href="Pretty.html">
-<link title="Errormsg" rel="Chapter" href="Errormsg.html">
-<link title="Clist" rel="Chapter" href="Clist.html">
-<link title="Stats" rel="Chapter" href="Stats.html">
-<link title="Cil" rel="Chapter" href="Cil.html">
-<link title="Formatcil" rel="Chapter" href="Formatcil.html">
-<link title="Alpha" rel="Chapter" href="Alpha.html">
-<link title="Cillower" rel="Chapter" href="Cillower.html">
-<link title="Cfg" rel="Chapter" href="Cfg.html">
-<link title="Dataflow" rel="Chapter" href="Dataflow.html">
-<link title="Dominators" rel="Chapter" href="Dominators.html"><title>CIL API Documentation (version 1.3.5) : Index of class types</title>
-</head>
-<body>
-<center><h1>Index of class types</h1></center>
-<table>
-<tr><td align="left"><br>C</td></tr>
-<tr><td><a href="Cil.cilPrinter.html">cilPrinter</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-A printer interface for CIL trees.
-</div>
-</td></tr>
-<tr><td><a href="Cil.cilVisitor.html">cilVisitor</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-A visitor interface for traversing CIL trees.
-</div>
-</td></tr>
-</table><br>
-</body>
-</html>
\ No newline at end of file
diff --git a/cil/doc/api/index_classes.html b/cil/doc/api/index_classes.html
deleted file mode 100644
index 1a5ba7d40..000000000
--- a/cil/doc/api/index_classes.html
+++ /dev/null
@@ -1,46 +0,0 @@
-<html>
-<head>
-<link rel="stylesheet" href="style.css" type="text/css">
-<link rel="Start" href="index.html">
-<link title="Index of types" rel=Appendix href="index_types.html">
-<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
-<link title="Index of values" rel=Appendix href="index_values.html">
-<link title="Index of class methods" rel=Appendix href="index_methods.html">
-<link title="Index of classes" rel=Appendix href="index_classes.html">
-<link title="Index of class types" rel=Appendix href="index_class_types.html">
-<link title="Index of modules" rel=Appendix href="index_modules.html">
-<link title="Index of module types" rel=Appendix href="index_module_types.html">
-<link title="Pretty" rel="Chapter" href="Pretty.html">
-<link title="Errormsg" rel="Chapter" href="Errormsg.html">
-<link title="Clist" rel="Chapter" href="Clist.html">
-<link title="Stats" rel="Chapter" href="Stats.html">
-<link title="Cil" rel="Chapter" href="Cil.html">
-<link title="Formatcil" rel="Chapter" href="Formatcil.html">
-<link title="Alpha" rel="Chapter" href="Alpha.html">
-<link title="Cillower" rel="Chapter" href="Cillower.html">
-<link title="Cfg" rel="Chapter" href="Cfg.html">
-<link title="Dataflow" rel="Chapter" href="Dataflow.html">
-<link title="Dominators" rel="Chapter" href="Dominators.html"><title>CIL API Documentation (version 1.3.5) : Index of classes</title>
-</head>
-<body>
-<center><h1>Index of classes</h1></center>
-<table>
-<tr><td align="left"><br>D</td></tr>
-<tr><td><a href="Cil.defaultCilPrinterClass.html">defaultCilPrinterClass</a> [<a href="Cil.html">Cil</a>]</td>
-<td></td></tr>
-<tr><td align="left"><br>N</td></tr>
-<tr><td><a href="Cil.nopCilVisitor.html">nopCilVisitor</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Default Visitor.
-</div>
-</td></tr>
-<tr><td align="left"><br>P</td></tr>
-<tr><td><a href="Cil.plainCilPrinterClass.html">plainCilPrinterClass</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-These are pretty-printers that will show you more details on the internal 
- CIL representation, without trying hard to make it look like C
-</div>
-</td></tr>
-</table><br>
-</body>
-</html>
\ No newline at end of file
diff --git a/cil/doc/api/index_exceptions.html b/cil/doc/api/index_exceptions.html
deleted file mode 100644
index e774a65a4..000000000
--- a/cil/doc/api/index_exceptions.html
+++ /dev/null
@@ -1,53 +0,0 @@
-<html>
-<head>
-<link rel="stylesheet" href="style.css" type="text/css">
-<link rel="Start" href="index.html">
-<link title="Index of types" rel=Appendix href="index_types.html">
-<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
-<link title="Index of values" rel=Appendix href="index_values.html">
-<link title="Index of class methods" rel=Appendix href="index_methods.html">
-<link title="Index of classes" rel=Appendix href="index_classes.html">
-<link title="Index of class types" rel=Appendix href="index_class_types.html">
-<link title="Index of modules" rel=Appendix href="index_modules.html">
-<link title="Index of module types" rel=Appendix href="index_module_types.html">
-<link title="Pretty" rel="Chapter" href="Pretty.html">
-<link title="Errormsg" rel="Chapter" href="Errormsg.html">
-<link title="Clist" rel="Chapter" href="Clist.html">
-<link title="Stats" rel="Chapter" href="Stats.html">
-<link title="Cil" rel="Chapter" href="Cil.html">
-<link title="Formatcil" rel="Chapter" href="Formatcil.html">
-<link title="Alpha" rel="Chapter" href="Alpha.html">
-<link title="Cillower" rel="Chapter" href="Cillower.html">
-<link title="Cfg" rel="Chapter" href="Cfg.html">
-<link title="Dataflow" rel="Chapter" href="Dataflow.html">
-<link title="Dominators" rel="Chapter" href="Dominators.html"><title>CIL API Documentation (version 1.3.5) : Index of exceptions</title>
-</head>
-<body>
-<center><h1>Index of exceptions</h1></center>
-<table>
-<tr><td align="left"><br>E</td></tr>
-<tr><td><a href="Errormsg.html#EXCEPTIONError">Error</a> [<a href="Errormsg.html">Errormsg</a>]</td>
-<td><div class="info">
-Error reporting functions raise this exception
-</div>
-</td></tr>
-<tr><td align="left"><br>L</td></tr>
-<tr><td><a href="Cil.html#EXCEPTIONLenOfArray">LenOfArray</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Raised when <a href="Cil.html#VALlenOfArray"><code class="code">Cil.lenOfArray</code></a> fails either because the length is <code class="code">None</code> 
- or because it is a non-constant expression
-</div>
-</td></tr>
-<tr><td align="left"><br>N</td></tr>
-<tr><td><a href="Stats.html#EXCEPTIONNoPerfCount">NoPerfCount</a> [<a href="Stats.html">Stats</a>]</td>
-<td></td></tr>
-<tr><td align="left"><br>S</td></tr>
-<tr><td><a href="Cil.html#EXCEPTIONSizeOfError">SizeOfError</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Raised when one of the bitsSizeOf functions cannot compute the size of a 
- type.
-</div>
-</td></tr>
-</table><br>
-</body>
-</html>
\ No newline at end of file
diff --git a/cil/doc/api/index_methods.html b/cil/doc/api/index_methods.html
deleted file mode 100644
index 1558de3ef..000000000
--- a/cil/doc/api/index_methods.html
+++ /dev/null
@@ -1,228 +0,0 @@
-<html>
-<head>
-<link rel="stylesheet" href="style.css" type="text/css">
-<link rel="Start" href="index.html">
-<link title="Index of types" rel=Appendix href="index_types.html">
-<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
-<link title="Index of values" rel=Appendix href="index_values.html">
-<link title="Index of class methods" rel=Appendix href="index_methods.html">
-<link title="Index of classes" rel=Appendix href="index_classes.html">
-<link title="Index of class types" rel=Appendix href="index_class_types.html">
-<link title="Index of modules" rel=Appendix href="index_modules.html">
-<link title="Index of module types" rel=Appendix href="index_module_types.html">
-<link title="Pretty" rel="Chapter" href="Pretty.html">
-<link title="Errormsg" rel="Chapter" href="Errormsg.html">
-<link title="Clist" rel="Chapter" href="Clist.html">
-<link title="Stats" rel="Chapter" href="Stats.html">
-<link title="Cil" rel="Chapter" href="Cil.html">
-<link title="Formatcil" rel="Chapter" href="Formatcil.html">
-<link title="Alpha" rel="Chapter" href="Alpha.html">
-<link title="Cillower" rel="Chapter" href="Cillower.html">
-<link title="Cfg" rel="Chapter" href="Cfg.html">
-<link title="Dataflow" rel="Chapter" href="Dataflow.html">
-<link title="Dominators" rel="Chapter" href="Dominators.html"><title>CIL API Documentation (version 1.3.5) : Index of class methods</title>
-</head>
-<body>
-<center><h1>Index of class methods</h1></center>
-<table>
-<tr><td align="left"><br>D</td></tr>
-<tr><td><a href="Cil.cilPrinter.html#METHODdBlock">dBlock</a> [<a href="Cil.cilPrinter.html">Cil.cilPrinter</a>]</td>
-<td><div class="info">
-Dump a control-flow block to a file with a given indentation.
-</div>
-</td></tr>
-<tr><td><a href="Cil.cilPrinter.html#METHODdGlobal">dGlobal</a> [<a href="Cil.cilPrinter.html">Cil.cilPrinter</a>]</td>
-<td><div class="info">
-Dump a global to a file with a given indentation.
-</div>
-</td></tr>
-<tr><td><a href="Cil.cilPrinter.html#METHODdInit">dInit</a> [<a href="Cil.cilPrinter.html">Cil.cilPrinter</a>]</td>
-<td><div class="info">
-Dump a global to a file with a given indentation.
-</div>
-</td></tr>
-<tr><td><a href="Cil.cilPrinter.html#METHODdStmt">dStmt</a> [<a href="Cil.cilPrinter.html">Cil.cilPrinter</a>]</td>
-<td><div class="info">
-Dump a control-flow statement to a file with a given indentation.
-</div>
-</td></tr>
-<tr><td align="left"><br>P</td></tr>
-<tr><td><a href="Cil.cilPrinter.html#METHODpAttr">pAttr</a> [<a href="Cil.cilPrinter.html">Cil.cilPrinter</a>]</td>
-<td><div class="info">
-Attribute.
-</div>
-</td></tr>
-<tr><td><a href="Cil.cilPrinter.html#METHODpAttrParam">pAttrParam</a> [<a href="Cil.cilPrinter.html">Cil.cilPrinter</a>]</td>
-<td><div class="info">
-Attribute parameter
-</div>
-</td></tr>
-<tr><td><a href="Cil.cilPrinter.html#METHODpAttrs">pAttrs</a> [<a href="Cil.cilPrinter.html">Cil.cilPrinter</a>]</td>
-<td><div class="info">
-Attribute lists
-</div>
-</td></tr>
-<tr><td><a href="Cil.cilPrinter.html#METHODpBlock">pBlock</a> [<a href="Cil.cilPrinter.html">Cil.cilPrinter</a>]</td>
-<td></td></tr>
-<tr><td><a href="Cil.cilPrinter.html#METHODpExp">pExp</a> [<a href="Cil.cilPrinter.html">Cil.cilPrinter</a>]</td>
-<td><div class="info">
-Print expressions
-</div>
-</td></tr>
-<tr><td><a href="Cil.cilPrinter.html#METHODpFieldDecl">pFieldDecl</a> [<a href="Cil.cilPrinter.html">Cil.cilPrinter</a>]</td>
-<td><div class="info">
-A field declaration
-</div>
-</td></tr>
-<tr><td><a href="Cil.cilPrinter.html#METHODpGlobal">pGlobal</a> [<a href="Cil.cilPrinter.html">Cil.cilPrinter</a>]</td>
-<td><div class="info">
-Global (vars, types, etc.).
-</div>
-</td></tr>
-<tr><td><a href="Cil.cilPrinter.html#METHODpInit">pInit</a> [<a href="Cil.cilPrinter.html">Cil.cilPrinter</a>]</td>
-<td><div class="info">
-Print initializers.
-</div>
-</td></tr>
-<tr><td><a href="Cil.cilPrinter.html#METHODpInstr">pInstr</a> [<a href="Cil.cilPrinter.html">Cil.cilPrinter</a>]</td>
-<td><div class="info">
-Invoked on each instruction occurrence.
-</div>
-</td></tr>
-<tr><td><a href="Cil.cilPrinter.html#METHODpLabel">pLabel</a> [<a href="Cil.cilPrinter.html">Cil.cilPrinter</a>]</td>
-<td><div class="info">
-Print a label.
-</div>
-</td></tr>
-<tr><td><a href="Cil.cilPrinter.html#METHODpLineDirective">pLineDirective</a> [<a href="Cil.cilPrinter.html">Cil.cilPrinter</a>]</td>
-<td><div class="info">
-Print a line-number.
-</div>
-</td></tr>
-<tr><td><a href="Cil.cilPrinter.html#METHODpLval">pLval</a> [<a href="Cil.cilPrinter.html">Cil.cilPrinter</a>]</td>
-<td><div class="info">
-Invoked on each lvalue occurrence
-</div>
-</td></tr>
-<tr><td><a href="Cil.cilPrinter.html#METHODpOffset">pOffset</a> [<a href="Cil.cilPrinter.html">Cil.cilPrinter</a>]</td>
-<td><div class="info">
-Invoked on each offset occurrence.
-</div>
-</td></tr>
-<tr><td><a href="Cil.cilPrinter.html#METHODpStmt">pStmt</a> [<a href="Cil.cilPrinter.html">Cil.cilPrinter</a>]</td>
-<td><div class="info">
-Control-flow statement.
-</div>
-</td></tr>
-<tr><td><a href="Cil.cilPrinter.html#METHODpStmtKind">pStmtKind</a> [<a href="Cil.cilPrinter.html">Cil.cilPrinter</a>]</td>
-<td><div class="info">
-Print a statement kind.
-</div>
-</td></tr>
-<tr><td><a href="Cil.cilPrinter.html#METHODpType">pType</a> [<a href="Cil.cilPrinter.html">Cil.cilPrinter</a>]</td>
-<td></td></tr>
-<tr><td><a href="Cil.cilPrinter.html#METHODpVDecl">pVDecl</a> [<a href="Cil.cilPrinter.html">Cil.cilPrinter</a>]</td>
-<td><div class="info">
-Invoked for each variable declaration.
-</div>
-</td></tr>
-<tr><td><a href="Cil.cilPrinter.html#METHODpVar">pVar</a> [<a href="Cil.cilPrinter.html">Cil.cilPrinter</a>]</td>
-<td><div class="info">
-Invoked on each variable use.
-</div>
-</td></tr>
-<tr><td align="left"><br>Q</td></tr>
-<tr><td><a href="Cil.cilVisitor.html#METHODqueueInstr">queueInstr</a> [<a href="Cil.cilVisitor.html">Cil.cilVisitor</a>]</td>
-<td><div class="info">
-Add here instructions while visiting to queue them to preceede the 
- current statement or instruction being processed.
-</div>
-</td></tr>
-<tr><td align="left"><br>U</td></tr>
-<tr><td><a href="Cil.cilVisitor.html#METHODunqueueInstr">unqueueInstr</a> [<a href="Cil.cilVisitor.html">Cil.cilVisitor</a>]</td>
-<td><div class="info">
-Gets the queue of instructions and resets the queue.
-</div>
-</td></tr>
-<tr><td align="left"><br>V</td></tr>
-<tr><td><a href="Cil.cilVisitor.html#METHODvattr">vattr</a> [<a href="Cil.cilVisitor.html">Cil.cilVisitor</a>]</td>
-<td><div class="info">
-Attribute.
-</div>
-</td></tr>
-<tr><td><a href="Cil.cilVisitor.html#METHODvattrparam">vattrparam</a> [<a href="Cil.cilVisitor.html">Cil.cilVisitor</a>]</td>
-<td><div class="info">
-Attribute parameters.
-</div>
-</td></tr>
-<tr><td><a href="Cil.cilVisitor.html#METHODvblock">vblock</a> [<a href="Cil.cilVisitor.html">Cil.cilVisitor</a>]</td>
-<td><div class="info">
-Block.
-</div>
-</td></tr>
-<tr><td><a href="Cil.cilVisitor.html#METHODvexpr">vexpr</a> [<a href="Cil.cilVisitor.html">Cil.cilVisitor</a>]</td>
-<td><div class="info">
-Invoked on each expression occurrence.
-</div>
-</td></tr>
-<tr><td><a href="Cil.cilVisitor.html#METHODvfunc">vfunc</a> [<a href="Cil.cilVisitor.html">Cil.cilVisitor</a>]</td>
-<td><div class="info">
-Function definition.
-</div>
-</td></tr>
-<tr><td><a href="Cil.cilVisitor.html#METHODvglob">vglob</a> [<a href="Cil.cilVisitor.html">Cil.cilVisitor</a>]</td>
-<td><div class="info">
-Global (vars, types,
-                                                      etc.)
-</div>
-</td></tr>
-<tr><td><a href="Cil.cilVisitor.html#METHODvinit">vinit</a> [<a href="Cil.cilVisitor.html">Cil.cilVisitor</a>]</td>
-<td><div class="info">
-Initializers for globals
-</div>
-</td></tr>
-<tr><td><a href="Cil.cilVisitor.html#METHODvinitoffs">vinitoffs</a> [<a href="Cil.cilVisitor.html">Cil.cilVisitor</a>]</td>
-<td><div class="info">
-Invoked on each offset appearing in the list of a 
- CompoundInit initializer.
-</div>
-</td></tr>
-<tr><td><a href="Cil.cilVisitor.html#METHODvinst">vinst</a> [<a href="Cil.cilVisitor.html">Cil.cilVisitor</a>]</td>
-<td><div class="info">
-Invoked on each instruction occurrence.
-</div>
-</td></tr>
-<tr><td><a href="Cil.cilVisitor.html#METHODvlval">vlval</a> [<a href="Cil.cilVisitor.html">Cil.cilVisitor</a>]</td>
-<td><div class="info">
-Invoked on each lvalue occurrence
-</div>
-</td></tr>
-<tr><td><a href="Cil.cilVisitor.html#METHODvoffs">voffs</a> [<a href="Cil.cilVisitor.html">Cil.cilVisitor</a>]</td>
-<td><div class="info">
-Invoked on each offset occurrence that is *not* as part
- of an initializer list specification, i.e.
-</div>
-</td></tr>
-<tr><td><a href="Cil.cilVisitor.html#METHODvstmt">vstmt</a> [<a href="Cil.cilVisitor.html">Cil.cilVisitor</a>]</td>
-<td><div class="info">
-Control-flow statement.
-</div>
-</td></tr>
-<tr><td><a href="Cil.cilVisitor.html#METHODvtype">vtype</a> [<a href="Cil.cilVisitor.html">Cil.cilVisitor</a>]</td>
-<td><div class="info">
-Use of some type.
-</div>
-</td></tr>
-<tr><td><a href="Cil.cilVisitor.html#METHODvvdec">vvdec</a> [<a href="Cil.cilVisitor.html">Cil.cilVisitor</a>]</td>
-<td><div class="info">
-Invoked for each variable declaration.
-</div>
-</td></tr>
-<tr><td><a href="Cil.cilVisitor.html#METHODvvrbl">vvrbl</a> [<a href="Cil.cilVisitor.html">Cil.cilVisitor</a>]</td>
-<td><div class="info">
-Invoked on each variable use.
-</div>
-</td></tr>
-</table><br>
-</body>
-</html>
\ No newline at end of file
diff --git a/cil/doc/api/index_module_types.html b/cil/doc/api/index_module_types.html
deleted file mode 100644
index 244d40277..000000000
--- a/cil/doc/api/index_module_types.html
+++ /dev/null
@@ -1,36 +0,0 @@
-<html>
-<head>
-<link rel="stylesheet" href="style.css" type="text/css">
-<link rel="Start" href="index.html">
-<link title="Index of types" rel=Appendix href="index_types.html">
-<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
-<link title="Index of values" rel=Appendix href="index_values.html">
-<link title="Index of class methods" rel=Appendix href="index_methods.html">
-<link title="Index of classes" rel=Appendix href="index_classes.html">
-<link title="Index of class types" rel=Appendix href="index_class_types.html">
-<link title="Index of modules" rel=Appendix href="index_modules.html">
-<link title="Index of module types" rel=Appendix href="index_module_types.html">
-<link title="Pretty" rel="Chapter" href="Pretty.html">
-<link title="Errormsg" rel="Chapter" href="Errormsg.html">
-<link title="Clist" rel="Chapter" href="Clist.html">
-<link title="Stats" rel="Chapter" href="Stats.html">
-<link title="Cil" rel="Chapter" href="Cil.html">
-<link title="Formatcil" rel="Chapter" href="Formatcil.html">
-<link title="Alpha" rel="Chapter" href="Alpha.html">
-<link title="Cillower" rel="Chapter" href="Cillower.html">
-<link title="Cfg" rel="Chapter" href="Cfg.html">
-<link title="Dataflow" rel="Chapter" href="Dataflow.html">
-<link title="Dominators" rel="Chapter" href="Dominators.html"><title>CIL API Documentation (version 1.3.5) : Index of module types</title>
-</head>
-<body>
-<center><h1>Index of module types</h1></center>
-<table>
-<tr><td align="left"><br>B</td></tr>
-<tr><td><a href="Dataflow.BackwardsTransfer.html">BackwardsTransfer</a> [<a href="Dataflow.html">Dataflow</a>]</td>
-<td></td></tr>
-<tr><td align="left"><br>F</td></tr>
-<tr><td><a href="Dataflow.ForwardsTransfer.html">ForwardsTransfer</a> [<a href="Dataflow.html">Dataflow</a>]</td>
-<td></td></tr>
-</table><br>
-</body>
-</html>
\ No newline at end of file
diff --git a/cil/doc/api/index_modules.html b/cil/doc/api/index_modules.html
deleted file mode 100644
index 090693f57..000000000
--- a/cil/doc/api/index_modules.html
+++ /dev/null
@@ -1,108 +0,0 @@
-<html>
-<head>
-<link rel="stylesheet" href="style.css" type="text/css">
-<link rel="Start" href="index.html">
-<link title="Index of types" rel=Appendix href="index_types.html">
-<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
-<link title="Index of values" rel=Appendix href="index_values.html">
-<link title="Index of class methods" rel=Appendix href="index_methods.html">
-<link title="Index of classes" rel=Appendix href="index_classes.html">
-<link title="Index of class types" rel=Appendix href="index_class_types.html">
-<link title="Index of modules" rel=Appendix href="index_modules.html">
-<link title="Index of module types" rel=Appendix href="index_module_types.html">
-<link title="Pretty" rel="Chapter" href="Pretty.html">
-<link title="Errormsg" rel="Chapter" href="Errormsg.html">
-<link title="Clist" rel="Chapter" href="Clist.html">
-<link title="Stats" rel="Chapter" href="Stats.html">
-<link title="Cil" rel="Chapter" href="Cil.html">
-<link title="Formatcil" rel="Chapter" href="Formatcil.html">
-<link title="Alpha" rel="Chapter" href="Alpha.html">
-<link title="Cillower" rel="Chapter" href="Cillower.html">
-<link title="Cfg" rel="Chapter" href="Cfg.html">
-<link title="Dataflow" rel="Chapter" href="Dataflow.html">
-<link title="Dominators" rel="Chapter" href="Dominators.html"><title>CIL API Documentation (version 1.3.5) : Index of modules</title>
-</head>
-<body>
-<center><h1>Index of modules</h1></center>
-<table>
-<tr><td align="left"><br>A</td></tr>
-<tr><td><a href="Alpha.html">Alpha</a> </td>
-<td><div class="info">
-<b>ALPHA conversion</b>
-</div>
-</td></tr>
-<tr><td align="left"><br>B</td></tr>
-<tr><td><a href="Dataflow.BackwardsDataFlow.html">BackwardsDataFlow</a> [<a href="Dataflow.html">Dataflow</a>]</td>
-<td></td></tr>
-<tr><td align="left"><br>C</td></tr>
-<tr><td><a href="Cfg.html">Cfg</a> </td>
-<td><div class="info">
-Code to compute the control-flow graph of a function or file.
-</div>
-</td></tr>
-<tr><td><a href="Cil.html">Cil</a> </td>
-<td><div class="info">
-CIL API Documentation.
-</div>
-</td></tr>
-<tr><td><a href="Cillower.html">Cillower</a> </td>
-<td><div class="info">
-A number of lowering passes over CIL
-</div>
-</td></tr>
-<tr><td><a href="Clist.html">Clist</a> </td>
-<td><div class="info">
-Utilities for managing "concatenable lists" (clists).
-</div>
-</td></tr>
-<tr><td align="left"><br>D</td></tr>
-<tr><td><a href="Dataflow.html">Dataflow</a> </td>
-<td><div class="info">
-A framework for data flow analysis for CIL code.
-</div>
-</td></tr>
-<tr><td><a href="Dominators.html">Dominators</a> </td>
-<td><div class="info">
-Compute dominators using data flow analysis
-</div>
-</td></tr>
-<tr><td align="left"><br>E</td></tr>
-<tr><td><a href="Errormsg.html">Errormsg</a> </td>
-<td><div class="info">
-Utility functions for error-reporting
-</div>
-</td></tr>
-<tr><td align="left"><br>F</td></tr>
-<tr><td><a href="Formatcil.html">Formatcil</a> </td>
-<td><div class="info">
-<b>An Interpreter for constructing CIL constructs</b>
-</div>
-</td></tr>
-<tr><td><a href="Dataflow.ForwardsDataFlow.html">ForwardsDataFlow</a> [<a href="Dataflow.html">Dataflow</a>]</td>
-<td></td></tr>
-<tr><td align="left"><br>M</td></tr>
-<tr><td><a href="Pretty.MakeMapPrinter.html">MakeMapPrinter</a> [<a href="Pretty.html">Pretty</a>]</td>
-<td><div class="info">
-Format maps.
-</div>
-</td></tr>
-<tr><td><a href="Pretty.MakeSetPrinter.html">MakeSetPrinter</a> [<a href="Pretty.html">Pretty</a>]</td>
-<td><div class="info">
-Format sets.
-</div>
-</td></tr>
-<tr><td align="left"><br>P</td></tr>
-<tr><td><a href="Pretty.html">Pretty</a> </td>
-<td><div class="info">
-Utility functions for pretty-printing.
-</div>
-</td></tr>
-<tr><td align="left"><br>S</td></tr>
-<tr><td><a href="Stats.html">Stats</a> </td>
-<td><div class="info">
-Utilities for maintaining timing statistics
-</div>
-</td></tr>
-</table><br>
-</body>
-</html>
\ No newline at end of file
diff --git a/cil/doc/api/index_types.html b/cil/doc/api/index_types.html
deleted file mode 100644
index 1974acd6a..000000000
--- a/cil/doc/api/index_types.html
+++ /dev/null
@@ -1,271 +0,0 @@
-<html>
-<head>
-<link rel="stylesheet" href="style.css" type="text/css">
-<link rel="Start" href="index.html">
-<link title="Index of types" rel=Appendix href="index_types.html">
-<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
-<link title="Index of values" rel=Appendix href="index_values.html">
-<link title="Index of class methods" rel=Appendix href="index_methods.html">
-<link title="Index of classes" rel=Appendix href="index_classes.html">
-<link title="Index of class types" rel=Appendix href="index_class_types.html">
-<link title="Index of modules" rel=Appendix href="index_modules.html">
-<link title="Index of module types" rel=Appendix href="index_module_types.html">
-<link title="Pretty" rel="Chapter" href="Pretty.html">
-<link title="Errormsg" rel="Chapter" href="Errormsg.html">
-<link title="Clist" rel="Chapter" href="Clist.html">
-<link title="Stats" rel="Chapter" href="Stats.html">
-<link title="Cil" rel="Chapter" href="Cil.html">
-<link title="Formatcil" rel="Chapter" href="Formatcil.html">
-<link title="Alpha" rel="Chapter" href="Alpha.html">
-<link title="Cillower" rel="Chapter" href="Cillower.html">
-<link title="Cfg" rel="Chapter" href="Cfg.html">
-<link title="Dataflow" rel="Chapter" href="Dataflow.html">
-<link title="Dominators" rel="Chapter" href="Dominators.html"><title>CIL API Documentation (version 1.3.5) : Index of types</title>
-</head>
-<body>
-<center><h1>Index of types</h1></center>
-<table>
-<tr><td align="left"><br>A</td></tr>
-<tr><td><a href="Dataflow.html#TYPEaction">action</a> [<a href="Dataflow.html">Dataflow</a>]</td>
-<td></td></tr>
-<tr><td><a href="Alpha.html#TYPEalphaTableData">alphaTableData</a> [<a href="Alpha.html">Alpha</a>]</td>
-<td><div class="info">
-This is the type of the elements of the alpha renaming table.
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#TYPEattribute">attribute</a> [<a href="Cil.html">Cil</a>]</td>
-<td></td></tr>
-<tr><td><a href="Cil.html#TYPEattributeClass">attributeClass</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Various classes of attributes
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#TYPEattributes">attributes</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Attributes are lists sorted by the attribute name.
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#TYPEattrparam">attrparam</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-The type of parameters of attributes
-</div>
-</td></tr>
-<tr><td align="left"><br>B</td></tr>
-<tr><td><a href="Cil.html#TYPEbinop">binop</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Binary operations
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#TYPEblock">block</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-A block is a sequence of statements with the control falling through from 
-    one element to the next
-</div>
-</td></tr>
-<tr><td align="left"><br>C</td></tr>
-<tr><td><a href="Clist.html#TYPEclist">clist</a> [<a href="Clist.html">Clist</a>]</td>
-<td><div class="info">
-The clist datatype.
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#TYPEcomment">comment</a> [<a href="Cil.html">Cil</a>]</td>
-<td></td></tr>
-<tr><td><a href="Cil.html#TYPEcompinfo">compinfo</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-The definition of a structure or union type.
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#TYPEconstant">constant</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Literal constants
-</div>
-</td></tr>
-<tr><td align="left"><br>D</td></tr>
-<tr><td><a href="Pretty.html#TYPEdoc">doc</a> [<a href="Pretty.html">Pretty</a>]</td>
-<td><div class="info">
-The type of unformated documents.
-</div>
-</td></tr>
-<tr><td align="left"><br>E</td></tr>
-<tr><td><a href="Cil.html#TYPEenuminfo">enuminfo</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Information about an enumeration
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#TYPEexistsAction">existsAction</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-A datatype to be used in conjunction with <code class="code">existsType</code>
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#TYPEexp">exp</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Expressions (Side-effect free)
-</div>
-</td></tr>
-<tr><td align="left"><br>F</td></tr>
-<tr><td><a href="Cil.html#TYPEfeatureDescr">featureDescr</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-To be able to add/remove features easily, each feature should be package 
- as an interface with the following interface.
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#TYPEfieldinfo">fieldinfo</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Information about a struct/union field
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#TYPEfile">file</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Top-level representation of a C source file
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#TYPEfkind">fkind</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Various kinds of floating-point numbers
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#TYPEformatArg">formatArg</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-The type of argument for the interpreter
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#TYPEfundec">fundec</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Function definitions.
-</div>
-</td></tr>
-<tr><td align="left"><br>G</td></tr>
-<tr><td><a href="Cil.html#TYPEglobal">global</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-A global declaration or definition
-</div>
-</td></tr>
-<tr><td><a href="Dataflow.html#TYPEguardaction">guardaction</a> [<a href="Dataflow.html">Dataflow</a>]</td>
-<td></td></tr>
-<tr><td align="left"><br>I</td></tr>
-<tr><td><a href="Cil.html#TYPEikind">ikind</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Various kinds of integers
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#TYPEinit">init</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Initializers for global variables.
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#TYPEinitinfo">initinfo</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-We want to be able to update an initializer in a global variable, so we 
- define it as a mutable field
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#TYPEinstr">instr</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Instructions.
-</div>
-</td></tr>
-<tr><td align="left"><br>L</td></tr>
-<tr><td><a href="Cil.html#TYPElabel">label</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Labels
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#TYPElhost">lhost</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-The host part of an <a href="Cil.html#TYPElval"><code class="code">Cil.lval</code></a>.
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#TYPElineDirectiveStyle">lineDirectiveStyle</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Styles of printing line directives
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#TYPElocation">location</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Describes a location in a source file.
-</div>
-</td></tr>
-<tr><td><a href="Errormsg.html#TYPElocation">location</a> [<a href="Errormsg.html">Errormsg</a>]</td>
-<td><div class="info">
-Type for source-file locations
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#TYPElval">lval</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-An lvalue
-</div>
-</td></tr>
-<tr><td align="left"><br>O</td></tr>
-<tr><td><a href="Cil.html#TYPEoffset">offset</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-The offset part of an <a href="Cil.html#TYPElval"><code class="code">Cil.lval</code></a>.
-</div>
-</td></tr>
-<tr><td align="left"><br>S</td></tr>
-<tr><td><a href="Cil.html#TYPEstmt">stmt</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Statements.
-</div>
-</td></tr>
-<tr><td><a href="Dataflow.html#TYPEstmtaction">stmtaction</a> [<a href="Dataflow.html">Dataflow</a>]</td>
-<td></td></tr>
-<tr><td><a href="Cil.html#TYPEstmtkind">stmtkind</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-The various kinds of control-flow statements statements
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#TYPEstorage">storage</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Storage-class information
-</div>
-</td></tr>
-<tr><td align="left"><br>T</td></tr>
-<tr><td><a href="Dataflow.BackwardsTransfer.html#TYPEt">t</a> [<a href="Dataflow.BackwardsTransfer.html">Dataflow.BackwardsTransfer</a>]</td>
-<td><div class="info">
-The type of the data we compute for each block start.
-</div>
-</td></tr>
-<tr><td><a href="Dataflow.ForwardsTransfer.html#TYPEt">t</a> [<a href="Dataflow.ForwardsTransfer.html">Dataflow.ForwardsTransfer</a>]</td>
-<td><div class="info">
-The type of the data we compute for each block start.
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#TYPEtyp">typ</a> [<a href="Cil.html">Cil</a>]</td>
-<td></td></tr>
-<tr><td><a href="Cil.html#TYPEtypeinfo">typeinfo</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Information about a defined type
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#TYPEtypsig">typsig</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Type signatures.
-</div>
-</td></tr>
-<tr><td align="left"><br>U</td></tr>
-<tr><td><a href="Alpha.html#TYPEundoAlphaElement">undoAlphaElement</a> [<a href="Alpha.html">Alpha</a>]</td>
-<td><div class="info">
-This is the type of the elements that are recorded by the alpha 
- conversion functions in order to be able to undo changes to the tables 
- they modify.
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#TYPEunop">unop</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Unary operators
-</div>
-</td></tr>
-<tr><td align="left"><br>V</td></tr>
-<tr><td><a href="Cil.html#TYPEvarinfo">varinfo</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Information about a variable.
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#TYPEvisitAction">visitAction</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Different visiting actions.
-</div>
-</td></tr>
-</table><br>
-</body>
-</html>
\ No newline at end of file
diff --git a/cil/doc/api/index_values.html b/cil/doc/api/index_values.html
deleted file mode 100644
index 799daafde..000000000
--- a/cil/doc/api/index_values.html
+++ /dev/null
@@ -1,1964 +0,0 @@
-<html>
-<head>
-<link rel="stylesheet" href="style.css" type="text/css">
-<link rel="Start" href="index.html">
-<link title="Index of types" rel=Appendix href="index_types.html">
-<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
-<link title="Index of values" rel=Appendix href="index_values.html">
-<link title="Index of class methods" rel=Appendix href="index_methods.html">
-<link title="Index of classes" rel=Appendix href="index_classes.html">
-<link title="Index of class types" rel=Appendix href="index_class_types.html">
-<link title="Index of modules" rel=Appendix href="index_modules.html">
-<link title="Index of module types" rel=Appendix href="index_module_types.html">
-<link title="Pretty" rel="Chapter" href="Pretty.html">
-<link title="Errormsg" rel="Chapter" href="Errormsg.html">
-<link title="Clist" rel="Chapter" href="Clist.html">
-<link title="Stats" rel="Chapter" href="Stats.html">
-<link title="Cil" rel="Chapter" href="Cil.html">
-<link title="Formatcil" rel="Chapter" href="Formatcil.html">
-<link title="Alpha" rel="Chapter" href="Alpha.html">
-<link title="Cillower" rel="Chapter" href="Cillower.html">
-<link title="Cfg" rel="Chapter" href="Cfg.html">
-<link title="Dataflow" rel="Chapter" href="Dataflow.html">
-<link title="Dominators" rel="Chapter" href="Dominators.html"><title>CIL API Documentation (version 1.3.5) : Index of values</title>
-</head>
-<body>
-<center><h1>Index of values</h1></center>
-<table>
-<tr><td align="left"><br></td></tr>
-<tr><td><a href="Pretty.html#VAL(++)">(++)</a> [<a href="Pretty.html">Pretty</a>]</td>
-<td><div class="info">
-Concatenates two documents.
-</div>
-</td></tr>
-<tr><td align="left"><br>A</td></tr>
-<tr><td><a href="Cil.html#VALaddAttribute">addAttribute</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Add an attribute.
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALaddAttributes">addAttributes</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Add a list of attributes.
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALaddOffset">addOffset</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-<code class="code">addOffset o1 o2</code> adds <code class="code">o1</code> to the end of <code class="code">o2</code>.
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALaddOffsetLval">addOffsetLval</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Add an offset at the end of an lvalue.
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALadditiveLevel">additiveLevel</a> [<a href="Cil.html">Cil</a>]</td>
-<td></td></tr>
-<tr><td><a href="Cil.html#VALaddrOfLevel">addrOfLevel</a> [<a href="Cil.html">Cil</a>]</td>
-<td></td></tr>
-<tr><td><a href="Pretty.html#VALalign">align</a> [<a href="Pretty.html">Pretty</a>]</td>
-<td><div class="info">
-Mark the current column as the current indentation level.
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALalignOf_int">alignOf_int</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-The minimum alignment (in bytes) for a type.
-</div>
-</td></tr>
-<tr><td><a href="Clist.html#VALappend">append</a> [<a href="Clist.html">Clist</a>]</td>
-<td><div class="info">
-Append two clists
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALargsToList">argsToList</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Obtain the argument list ([] if None)
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALarrowLevel">arrowLevel</a> [<a href="Cil.html">Cil</a>]</td>
-<td></td></tr>
-<tr><td><a href="Cil.html#VALattributeHash">attributeHash</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-This table contains the mapping of predefined attributes to classes.
-</div>
-</td></tr>
-<tr><td><a href="Pretty.html#VALauto_printer">auto_printer</a> [<a href="Pretty.html">Pretty</a>]</td>
-<td><div class="info">
-A function that when used at top-level in a module will direct 
- the pa_prtype module generate automatically the printing functions for a 
- type
-</div>
-</td></tr>
-<tr><td align="left"><br>B</td></tr>
-<tr><td><a href="Cil.html#VALbitsOffset">bitsOffset</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Give a type of a base and an offset, returns the number of bits from the 
- base address and the width (also expressed in bits) for the subobject 
- denoted by the offset.
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALbitsSizeOf">bitsSizeOf</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-The size of a type, in bits.
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALbitwiseLevel">bitwiseLevel</a> [<a href="Cil.html">Cil</a>]</td>
-<td></td></tr>
-<tr><td><a href="Pretty.html#VALbreak">break</a> [<a href="Pretty.html">Pretty</a>]</td>
-<td><div class="info">
-A document that consists of either a space or a line break.
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALbug">bug</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Like <a href="Errormsg.html#VALbug"><code class="code">Errormsg.bug</code></a> except that <a href="Cil.html#VALcurrentLoc"><code class="code">Cil.currentLoc</code></a> is also printed
-</div>
-</td></tr>
-<tr><td><a href="Errormsg.html#VALbug">bug</a> [<a href="Errormsg.html">Errormsg</a>]</td>
-<td><div class="info">
-Similar to <code class="code">error</code> except that its output has the form <code class="code">Bug: ...</code>
-</div>
-</td></tr>
-<tr><td align="left"><br>C</td></tr>
-<tr><td><a href="Formatcil.html#VALcExp">cExp</a> [<a href="Formatcil.html">Formatcil</a>]</td>
-<td><div class="info">
-Constructs an expression based on the program and the list of arguments.
-</div>
-</td></tr>
-<tr><td><a href="Formatcil.html#VALcInstr">cInstr</a> [<a href="Formatcil.html">Formatcil</a>]</td>
-<td><div class="info">
-Constructs an instruction based on the program and the list of arguments.
-</div>
-</td></tr>
-<tr><td><a href="Formatcil.html#VALcLval">cLval</a> [<a href="Formatcil.html">Formatcil</a>]</td>
-<td><div class="info">
-Constructs an lval based on the program and the list of arguments.
-</div>
-</td></tr>
-<tr><td><a href="Formatcil.html#VALcStmt">cStmt</a> [<a href="Formatcil.html">Formatcil</a>]</td>
-<td></td></tr>
-<tr><td><a href="Formatcil.html#VALcStmts">cStmts</a> [<a href="Formatcil.html">Formatcil</a>]</td>
-<td><div class="info">
-Constructs a list of statements
-</div>
-</td></tr>
-<tr><td><a href="Formatcil.html#VALcType">cType</a> [<a href="Formatcil.html">Formatcil</a>]</td>
-<td><div class="info">
-Constructs a type based on the program and the list of arguments.
-</div>
-</td></tr>
-<tr><td><a href="Cfg.html#VALcfgFun">cfgFun</a> [<a href="Cfg.html">Cfg</a>]</td>
-<td><div class="info">
-Compute a control flow graph for fd.
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALcharConstPtrType">charConstPtrType</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-char const *
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALcharConstToInt">charConstToInt</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Given the character c in a (CChr c), sign-extend it to 32 bits.
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALcharPtrType">charPtrType</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-char *
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALcharType">charType</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-char
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALchar_is_unsigned">char_is_unsigned</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Whether "char" is unsigned.
-</div>
-</td></tr>
-<tr><td><a href="Clist.html#VALcheckBeforeAppend">checkBeforeAppend</a> [<a href="Clist.html">Clist</a>]</td>
-<td><div class="info">
-A useful check to assert before an append.
-</div>
-</td></tr>
-<tr><td><a href="Pretty.html#VALchr">chr</a> [<a href="Pretty.html">Pretty</a>]</td>
-<td><div class="info">
-A document that prints a character.
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALcilVersion">cilVersion</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-This are the CIL version numbers.
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALcilVersionMajor">cilVersionMajor</a> [<a href="Cil.html">Cil</a>]</td>
-<td></td></tr>
-<tr><td><a href="Cil.html#VALcilVersionMinor">cilVersionMinor</a> [<a href="Cil.html">Cil</a>]</td>
-<td></td></tr>
-<tr><td><a href="Cil.html#VALcilVersionRevision">cilVersionRevision</a> [<a href="Cil.html">Cil</a>]</td>
-<td></td></tr>
-<tr><td><a href="Cfg.html#VALclearCFGinfo">clearCFGinfo</a> [<a href="Cfg.html">Cfg</a>]</td>
-<td><div class="info">
-clear the sid, succs, and preds fields of each statment in a function
-</div>
-</td></tr>
-<tr><td><a href="Cfg.html#VALclearFileCFG">clearFileCFG</a> [<a href="Cfg.html">Cfg</a>]</td>
-<td><div class="info">
-clear the sid, succs, and preds fields of each statement.
-</div>
-</td></tr>
-<tr><td><a href="Dataflow.ForwardsTransfer.html#VALcombinePredecessors">combinePredecessors</a> [<a href="Dataflow.ForwardsTransfer.html">Dataflow.ForwardsTransfer</a>]</td>
-<td><div class="info">
-Take some old data for the start of a statement, and some new data for 
- the same point.
-</div>
-</td></tr>
-<tr><td><a href="Dataflow.BackwardsTransfer.html#VALcombineStmtStartData">combineStmtStartData</a> [<a href="Dataflow.BackwardsTransfer.html">Dataflow.BackwardsTransfer</a>]</td>
-<td><div class="info">
-When the analysis reaches the start of a block, combine the old data 
- with the one we have just computed.
-</div>
-</td></tr>
-<tr><td><a href="Dataflow.BackwardsTransfer.html#VALcombineSuccessors">combineSuccessors</a> [<a href="Dataflow.BackwardsTransfer.html">Dataflow.BackwardsTransfer</a>]</td>
-<td><div class="info">
-Take the data from two successors and combine it
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALcompFullName">compFullName</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Get the full name of a comp
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALcompactStmts">compactStmts</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Try to compress statements so as to get maximal basic blocks
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALcomparativeLevel">comparativeLevel</a> [<a href="Cil.html">Cil</a>]</td>
-<td></td></tr>
-<tr><td><a href="Cil.html#VALcompareLoc">compareLoc</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Comparison function for locations.
-</div>
-</td></tr>
-<tr><td><a href="Dataflow.BackwardsDataFlow.html#VALcompute">compute</a> [<a href="Dataflow.BackwardsDataFlow.html">Dataflow.BackwardsDataFlow</a>]</td>
-<td><div class="info">
-Fill in the T.stmtStartData, given a number of initial statements to 
- start from (the sinks for the backwards data flow).
-</div>
-</td></tr>
-<tr><td><a href="Dataflow.ForwardsDataFlow.html#VALcompute">compute</a> [<a href="Dataflow.ForwardsDataFlow.html">Dataflow.ForwardsDataFlow</a>]</td>
-<td><div class="info">
-Fill in the T.stmtStartData, given a number of initial statements to 
- start from.
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALcomputeCFGInfo">computeCFGInfo</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Compute the CFG information for all statements in a fundec and return a 
- list of the statements.
-</div>
-</td></tr>
-<tr><td><a href="Cfg.html#VALcomputeFileCFG">computeFileCFG</a> [<a href="Cfg.html">Cfg</a>]</td>
-<td><div class="info">
-Compute the CFG for an entire file, by calling cfgFun on each function.
-</div>
-</td></tr>
-<tr><td><a href="Dataflow.ForwardsTransfer.html#VALcomputeFirstPredecessor">computeFirstPredecessor</a> [<a href="Dataflow.ForwardsTransfer.html">Dataflow.ForwardsTransfer</a>]</td>
-<td><div class="info">
-Give the first value for a predecessors, compute the value to be set 
- for the block
-</div>
-</td></tr>
-<tr><td><a href="Dominators.html#VALcomputeIDom">computeIDom</a> [<a href="Dominators.html">Dominators</a>]</td>
-<td><div class="info">
-Invoke on a code after filling in the CFG info and it computes the 
- immediate dominator information.
-</div>
-</td></tr>
-<tr><td><a href="Pretty.html#VALconcat">concat</a> [<a href="Pretty.html">Pretty</a>]</td>
-<td></td></tr>
-<tr><td><a href="Cil.html#VALconstFold">constFold</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Do constant folding on an expression.
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALconstFoldBinOp">constFoldBinOp</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Do constant folding on a binary operation.
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALconstFoldVisitor">constFoldVisitor</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-A visitor that does constant folding.
-</div>
-</td></tr>
-<tr><td><a href="Dataflow.ForwardsTransfer.html#VALcopy">copy</a> [<a href="Dataflow.ForwardsTransfer.html">Dataflow.ForwardsTransfer</a>]</td>
-<td><div class="info">
-Make a deep copy of the data
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALcopyCompInfo">copyCompInfo</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Makes a shallow copy of a <a href="Cil.html#TYPEcompinfo"><code class="code">Cil.compinfo</code></a> changing the name and the key.
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALcopyFunction">copyFunction</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Create a deep copy of a function.
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALcopyVarinfo">copyVarinfo</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Make a shallow copy of a <code class="code">varinfo</code> and assign a new identifier
-</div>
-</td></tr>
-<tr><td><a href="Pretty.html#VALcountNewLines">countNewLines</a> [<a href="Pretty.html">Pretty</a>]</td>
-<td><div class="info">
-Keep a running count of the taken newlines.
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALcurrentGlobal">currentGlobal</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-A reference to the current global being visited
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALcurrentLoc">currentLoc</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-A reference to the current location.
-</div>
-</td></tr>
-<tr><td align="left"><br>D</td></tr>
-<tr><td><a href="Formatcil.html#VALdExp">dExp</a> [<a href="Formatcil.html">Formatcil</a>]</td>
-<td><div class="info">
-Deconstructs an expression based on the program.
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALdExp">dExp</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Generate an <a href="Cil.html#TYPEexp"><code class="code">Cil.exp</code></a> to be used in case of errors.
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALdGlobal">dGlobal</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Generate a <a href="Cil.html#TYPEglobal"><code class="code">Cil.global</code></a> to be used in case of errors.
-</div>
-</td></tr>
-<tr><td><a href="Formatcil.html#VALdInstr">dInstr</a> [<a href="Formatcil.html">Formatcil</a>]</td>
-<td><div class="info">
-Deconstructs an instruction based on the program.
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALdInstr">dInstr</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Generate an <a href="Cil.html#TYPEinstr"><code class="code">Cil.instr</code></a> to be used in case of errors.
-</div>
-</td></tr>
-<tr><td><a href="Formatcil.html#VALdLval">dLval</a> [<a href="Formatcil.html">Formatcil</a>]</td>
-<td><div class="info">
-Deconstructs an lval based on the program.
-</div>
-</td></tr>
-<tr><td><a href="Formatcil.html#VALdType">dType</a> [<a href="Formatcil.html">Formatcil</a>]</td>
-<td><div class="info">
-Deconstructs a type based on the program.
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALd_attr">d_attr</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Pretty-print an attribute using <a href="Cil.html#VALdefaultCilPrinter"><code class="code">Cil.defaultCilPrinter</code></a>
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALd_attrlist">d_attrlist</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Pretty-print a list of attributes using <a href="Cil.html#VALdefaultCilPrinter"><code class="code">Cil.defaultCilPrinter</code></a>
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALd_attrparam">d_attrparam</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Pretty-print an argument of an attribute using <a href="Cil.html#VALdefaultCilPrinter"><code class="code">Cil.defaultCilPrinter</code></a>
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALd_binop">d_binop</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Pretty-print a binary operator
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALd_block">d_block</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Pretty-print a block using <a href="Cil.html#VALdefaultCilPrinter"><code class="code">Cil.defaultCilPrinter</code></a>.
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALd_const">d_const</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Pretty-print a constant
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALd_exp">d_exp</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Pretty-print an expression using <a href="Cil.html#VALdefaultCilPrinter"><code class="code">Cil.defaultCilPrinter</code></a>
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALd_fkind">d_fkind</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Pretty-print a floating-point kind
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALd_formatarg">d_formatarg</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Pretty-prints a format arg
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALd_global">d_global</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Pretty-print the internal representation of a global using 
- <a href="Cil.html#VALdefaultCilPrinter"><code class="code">Cil.defaultCilPrinter</code></a>.
-</div>
-</td></tr>
-<tr><td><a href="Errormsg.html#VALd_hloc">d_hloc</a> [<a href="Errormsg.html">Errormsg</a>]</td>
-<td></td></tr>
-<tr><td><a href="Cil.html#VALd_ikind">d_ikind</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Pretty-print an integer of a given kind
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALd_init">d_init</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Pretty-print an initializer using <a href="Cil.html#VALdefaultCilPrinter"><code class="code">Cil.defaultCilPrinter</code></a>.
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALd_instr">d_instr</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Pretty-print an instruction using <a href="Cil.html#VALdefaultCilPrinter"><code class="code">Cil.defaultCilPrinter</code></a>
-</div>
-</td></tr>
-<tr><td><a href="Pretty.html#VALd_int32">d_int32</a> [<a href="Pretty.html">Pretty</a>]</td>
-<td><div class="info">
-Print an int32
-</div>
-</td></tr>
-<tr><td><a href="Pretty.html#VALd_int64">d_int64</a> [<a href="Pretty.html">Pretty</a>]</td>
-<td></td></tr>
-<tr><td><a href="Cil.html#VALd_label">d_label</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Pretty-print a label using <a href="Cil.html#VALdefaultCilPrinter"><code class="code">Cil.defaultCilPrinter</code></a>
-</div>
-</td></tr>
-<tr><td><a href="Pretty.html#VALd_list">d_list</a> [<a href="Pretty.html">Pretty</a>]</td>
-<td><div class="info">
-sm: Yet another list printer.
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALd_loc">d_loc</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Pretty-print a location
-</div>
-</td></tr>
-<tr><td><a href="Errormsg.html#VALd_loc">d_loc</a> [<a href="Errormsg.html">Errormsg</a>]</td>
-<td></td></tr>
-<tr><td><a href="Cil.html#VALd_lval">d_lval</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Pretty-print an lvalue using <a href="Cil.html#VALdefaultCilPrinter"><code class="code">Cil.defaultCilPrinter</code></a>
-</div>
-</td></tr>
-<tr><td><a href="Pretty.MakeMapPrinter.html#VALd_map">d_map</a> [<a href="Pretty.MakeMapPrinter.html">Pretty.MakeMapPrinter</a>]</td>
-<td><div class="info">
-Format a map, analogous to d_list.
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALd_offset">d_offset</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Pretty-print an offset using <a href="Cil.html#VALdefaultCilPrinter"><code class="code">Cil.defaultCilPrinter</code></a>, given the pretty 
- printing for the base.
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALd_plainexp">d_plainexp</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Pretty-print the internal representation of an expression
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALd_plaininit">d_plaininit</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Pretty-print the internal representation of an integer
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALd_plainlval">d_plainlval</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Pretty-print the internal representation of an lvalue
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALd_plaintype">d_plaintype</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Pretty-print the internal representation of a type
-</div>
-</td></tr>
-<tr><td><a href="Pretty.MakeSetPrinter.html#VALd_set">d_set</a> [<a href="Pretty.MakeSetPrinter.html">Pretty.MakeSetPrinter</a>]</td>
-<td><div class="info">
-Format a set, analogous to d_list.
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALd_shortglobal">d_shortglobal</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Pretty-print a short description of the global.
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALd_stmt">d_stmt</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Pretty-print a statement using <a href="Cil.html#VALdefaultCilPrinter"><code class="code">Cil.defaultCilPrinter</code></a>.
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALd_storage">d_storage</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Pretty-print storage-class information
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALd_thisloc">d_thisloc</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Pretty-print the <a href="Cil.html#VALcurrentLoc"><code class="code">Cil.currentLoc</code></a>
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALd_type">d_type</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Pretty-print a type using <a href="Cil.html#VALdefaultCilPrinter"><code class="code">Cil.defaultCilPrinter</code></a>
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALd_typsig">d_typsig</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Print a type signature
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALd_unop">d_unop</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Pretty-print a unary operator
-</div>
-</td></tr>
-<tr><td><a href="Dataflow.BackwardsTransfer.html#VALdebug">debug</a> [<a href="Dataflow.BackwardsTransfer.html">Dataflow.BackwardsTransfer</a>]</td>
-<td><div class="info">
-Whether to turn on debugging
-</div>
-</td></tr>
-<tr><td><a href="Dataflow.ForwardsTransfer.html#VALdebug">debug</a> [<a href="Dataflow.ForwardsTransfer.html">Dataflow.ForwardsTransfer</a>]</td>
-<td><div class="info">
-Whether to turn on debugging
-</div>
-</td></tr>
-<tr><td><a href="Errormsg.html#VALdebugFlag">debugFlag</a> [<a href="Errormsg.html">Errormsg</a>]</td>
-<td><div class="info">
-If set then print debugging info
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALdefaultCilPrinter">defaultCilPrinter</a> [<a href="Cil.html">Cil</a>]</td>
-<td></td></tr>
-<tr><td><a href="Cil.html#VALderefStarLevel">derefStarLevel</a> [<a href="Cil.html">Cil</a>]</td>
-<td></td></tr>
-<tr><td><a href="Cil.html#VALdn_attr">dn_attr</a> [<a href="Cil.html">Cil</a>]</td>
-<td></td></tr>
-<tr><td><a href="Cil.html#VALdn_attrlist">dn_attrlist</a> [<a href="Cil.html">Cil</a>]</td>
-<td></td></tr>
-<tr><td><a href="Cil.html#VALdn_attrparam">dn_attrparam</a> [<a href="Cil.html">Cil</a>]</td>
-<td></td></tr>
-<tr><td><a href="Cil.html#VALdn_exp">dn_exp</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Versions of the above pretty printers, that don't print #line directives
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALdn_global">dn_global</a> [<a href="Cil.html">Cil</a>]</td>
-<td></td></tr>
-<tr><td><a href="Cil.html#VALdn_init">dn_init</a> [<a href="Cil.html">Cil</a>]</td>
-<td></td></tr>
-<tr><td><a href="Cil.html#VALdn_instr">dn_instr</a> [<a href="Cil.html">Cil</a>]</td>
-<td></td></tr>
-<tr><td><a href="Cil.html#VALdn_lval">dn_lval</a> [<a href="Cil.html">Cil</a>]</td>
-<td></td></tr>
-<tr><td><a href="Cil.html#VALdn_stmt">dn_stmt</a> [<a href="Cil.html">Cil</a>]</td>
-<td></td></tr>
-<tr><td><a href="Cil.html#VALdn_type">dn_type</a> [<a href="Cil.html">Cil</a>]</td>
-<td></td></tr>
-<tr><td><a href="Dataflow.ForwardsTransfer.html#VALdoGuard">doGuard</a> [<a href="Dataflow.ForwardsTransfer.html">Dataflow.ForwardsTransfer</a>]</td>
-<td><div class="info">
-Generate the successor to an If statement assuming the given expression
- is nonzero.
-</div>
-</td></tr>
-<tr><td><a href="Dataflow.BackwardsTransfer.html#VALdoInstr">doInstr</a> [<a href="Dataflow.BackwardsTransfer.html">Dataflow.BackwardsTransfer</a>]</td>
-<td><div class="info">
-The (backwards) transfer function for an instruction.
-</div>
-</td></tr>
-<tr><td><a href="Dataflow.ForwardsTransfer.html#VALdoInstr">doInstr</a> [<a href="Dataflow.ForwardsTransfer.html">Dataflow.ForwardsTransfer</a>]</td>
-<td><div class="info">
-The (forwards) transfer function for an instruction.
-</div>
-</td></tr>
-<tr><td><a href="Dataflow.BackwardsTransfer.html#VALdoStmt">doStmt</a> [<a href="Dataflow.BackwardsTransfer.html">Dataflow.BackwardsTransfer</a>]</td>
-<td><div class="info">
-The (backwards) transfer function for a branch.
-</div>
-</td></tr>
-<tr><td><a href="Dataflow.ForwardsTransfer.html#VALdoStmt">doStmt</a> [<a href="Dataflow.ForwardsTransfer.html">Dataflow.ForwardsTransfer</a>]</td>
-<td><div class="info">
-The (forwards) transfer function for a statement.
-</div>
-</td></tr>
-<tr><td><a href="Alpha.html#VALdocAlphaTable">docAlphaTable</a> [<a href="Alpha.html">Alpha</a>]</td>
-<td><div class="info">
-Split the name in preparation for newAlphaName.
-</div>
-</td></tr>
-<tr><td><a href="Pretty.html#VALdocArray">docArray</a> [<a href="Pretty.html">Pretty</a>]</td>
-<td><div class="info">
-Formats an array.
-</div>
-</td></tr>
-<tr><td><a href="Clist.html#VALdocCList">docCList</a> [<a href="Clist.html">Clist</a>]</td>
-<td><div class="info">
-A document for printing a clist (similar to <code class="code">docList</code>)
-</div>
-</td></tr>
-<tr><td><a href="Pretty.html#VALdocList">docList</a> [<a href="Pretty.html">Pretty</a>]</td>
-<td><div class="info">
-An alternative function for printing a list.
-</div>
-</td></tr>
-<tr><td><a href="Pretty.MakeMapPrinter.html#VALdocMap">docMap</a> [<a href="Pretty.MakeMapPrinter.html">Pretty.MakeMapPrinter</a>]</td>
-<td><div class="info">
-Format a map, analogous to docList.
-</div>
-</td></tr>
-<tr><td><a href="Pretty.html#VALdocOpt">docOpt</a> [<a href="Pretty.html">Pretty</a>]</td>
-<td><div class="info">
-Prints an <code class="code">'a option</code> with <code class="code">None</code> or <code class="code">Some</code>
-</div>
-</td></tr>
-<tr><td><a href="Pretty.MakeSetPrinter.html#VALdocSet">docSet</a> [<a href="Pretty.MakeSetPrinter.html">Pretty.MakeSetPrinter</a>]</td>
-<td><div class="info">
-Format a set, analogous to docList.
-</div>
-</td></tr>
-<tr><td><a href="Dominators.html#VALdominates">dominates</a> [<a href="Dominators.html">Dominators</a>]</td>
-<td><div class="info">
-Check whether one statement dominates another.
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALdoubleType">doubleType</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-double
-</div>
-</td></tr>
-<tr><td><a href="Pretty.html#VALdprintf">dprintf</a> [<a href="Pretty.html">Pretty</a>]</td>
-<td><div class="info">
-This function provides an alternative method for constructing 
-    <code class="code">doc</code> objects.
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALdropAttribute">dropAttribute</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Remove all attributes with the given name.
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALdropAttributes">dropAttributes</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Remove all attributes with names appearing in the string list.
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALdummyFile">dummyFile</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-A dummy file
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALdummyFunDec">dummyFunDec</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-A dummy function declaration handy when you need one as a placeholder.
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALdummyInstr">dummyInstr</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-A instr to serve as a placeholder
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALdummyStmt">dummyStmt</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-A statement consisting of just <code class="code">dummyInstr</code>
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALdumpBlock">dumpBlock</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Dump a block to a file using a given indentation.
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALdumpFile">dumpFile</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Pretty-print an entire file.
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALdumpGlobal">dumpGlobal</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Pretty-print a global.
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALdumpInit">dumpInit</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Dump an initializer to a file using a given indentation.
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALdumpStmt">dumpStmt</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Dump a statement to a file using a given indentation.
-</div>
-</td></tr>
-<tr><td align="left"><br>E</td></tr>
-<tr><td><a href="Clist.html#VALempty">empty</a> [<a href="Clist.html">Clist</a>]</td>
-<td><div class="info">
-The empty clist
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALemptyFunction">emptyFunction</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Make an empty function
-</div>
-</td></tr>
-<tr><td><a href="Pretty.html#VALeprintf">eprintf</a> [<a href="Pretty.html">Pretty</a>]</td>
-<td><div class="info">
-Like <a href="Pretty.html#VALfprintf"><code class="code">Pretty.fprintf</code></a> applied to <code class="code">stderr</code>
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALerror">error</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Like <a href="Errormsg.html#VALerror"><code class="code">Errormsg.error</code></a> except that <a href="Cil.html#VALcurrentLoc"><code class="code">Cil.currentLoc</code></a> is also printed
-</div>
-</td></tr>
-<tr><td><a href="Errormsg.html#VALerror">error</a> [<a href="Errormsg.html">Errormsg</a>]</td>
-<td><div class="info">
-Prints an error message of the form <code class="code">Error: ...</code>.
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALerrorLoc">errorLoc</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Like <a href="Cil.html#VALerror"><code class="code">Cil.error</code></a> except that it explicitly takes a location argument, 
- instead of using the <a href="Cil.html#VALcurrentLoc"><code class="code">Cil.currentLoc</code></a>
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALexistsType">existsType</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Scans a type by applying the function on all elements.
-</div>
-</td></tr>
-<tr><td align="left"><br>F</td></tr>
-<tr><td><a href="Pretty.html#VALf_int32">f_int32</a> [<a href="Pretty.html">Pretty</a>]</td>
-<td></td></tr>
-<tr><td><a href="Pretty.html#VALf_int64">f_int64</a> [<a href="Pretty.html">Pretty</a>]</td>
-<td></td></tr>
-<tr><td><a href="Pretty.html#VALfastMode">fastMode</a> [<a href="Pretty.html">Pretty</a>]</td>
-<td><div class="info">
-If set to <code class="code">true</code> then optional breaks are taken only when the document 
-    has exceeded the given width.
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALfilterAttributes">filterAttributes</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Retains attributes with the given name
-</div>
-</td></tr>
-<tr><td><a href="Dataflow.BackwardsTransfer.html#VALfilterStmt">filterStmt</a> [<a href="Dataflow.BackwardsTransfer.html">Dataflow.BackwardsTransfer</a>]</td>
-<td><div class="info">
-Whether to put this predecessor block in the worklist.
-</div>
-</td></tr>
-<tr><td><a href="Dataflow.ForwardsTransfer.html#VALfilterStmt">filterStmt</a> [<a href="Dataflow.ForwardsTransfer.html">Dataflow.ForwardsTransfer</a>]</td>
-<td><div class="info">
-Whether to put this statement in the worklist.
-</div>
-</td></tr>
-<tr><td><a href="Dominators.html#VALfindNaturalLoops">findNaturalLoops</a> [<a href="Dominators.html">Dominators</a>]</td>
-<td><div class="info">
-Compute the start of the natural loops.
-</div>
-</td></tr>
-<tr><td><a href="Errormsg.html#VALfinishParsing">finishParsing</a> [<a href="Errormsg.html">Errormsg</a>]</td>
-<td></td></tr>
-<tr><td><a href="Pretty.html#VALflushOften">flushOften</a> [<a href="Pretty.html">Pretty</a>]</td>
-<td><div class="info">
-If true the it flushes after every print
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALfoldGlobals">foldGlobals</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Fold over all globals, including the global initializer
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALfoldLeftCompound">foldLeftCompound</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Fold over the list of initializers in a Compound.
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALfoldLeftCompoundAll">foldLeftCompoundAll</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Fold over the list of initializers in a Compound, like 
- <a href="Cil.html#VALfoldLeftCompound"><code class="code">Cil.foldLeftCompound</code></a> but in the case of an array it scans even missing 
- zero initializers at the end of the array
-</div>
-</td></tr>
-<tr><td><a href="Clist.html#VALfold_left">fold_left</a> [<a href="Clist.html">Clist</a>]</td>
-<td><div class="info">
-A version of fold_left that works on clists
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALforgcc">forgcc</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Return the string 's' if we're printing output for gcc, suppres
-  it if we're printing for CIL to parse back in.
-</div>
-</td></tr>
-<tr><td><a href="Pretty.html#VALfprint">fprint</a> [<a href="Pretty.html">Pretty</a>]</td>
-<td><div class="info">
-Format the document to the given width and emit it to the given channel
-</div>
-</td></tr>
-<tr><td><a href="Pretty.html#VALfprintf">fprintf</a> [<a href="Pretty.html">Pretty</a>]</td>
-<td><div class="info">
-Like <a href="Pretty.html#VALdprintf"><code class="code">Pretty.dprintf</code></a> followed by <a href="Pretty.html#VALfprint"><code class="code">Pretty.fprint</code></a>
-</div>
-</td></tr>
-<tr><td><a href="Clist.html#VALfromList">fromList</a> [<a href="Clist.html">Clist</a>]</td>
-<td><div class="info">
-Convert an ordinary list to a clist
-</div>
-</td></tr>
-<tr><td align="left"><br>G</td></tr>
-<tr><td><a href="Cil.html#VALgccBuiltins">gccBuiltins</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-A list of the GCC built-in functions.
-</div>
-</td></tr>
-<tr><td><a href="Alpha.html#VALgetAlphaPrefix">getAlphaPrefix</a> [<a href="Alpha.html">Alpha</a>]</td>
-<td></td></tr>
-<tr><td><a href="Cil.html#VALgetCompField">getCompField</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Return a named fieldinfo in compinfo, or raise Not_found
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALgetGlobInit">getGlobInit</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Get the global initializer and create one if it does not already exist.
-</div>
-</td></tr>
-<tr><td><a href="Errormsg.html#VALgetHPosition">getHPosition</a> [<a href="Errormsg.html">Errormsg</a>]</td>
-<td><div class="info">
-high-level position
-</div>
-</td></tr>
-<tr><td><a href="Dominators.html#VALgetIdom">getIdom</a> [<a href="Dominators.html">Dominators</a>]</td>
-<td><div class="info">
-This is like Inthash.find but gives an error if the information is 
- Not_found
-</div>
-</td></tr>
-<tr><td><a href="Errormsg.html#VALgetLocation">getLocation</a> [<a href="Errormsg.html">Errormsg</a>]</td>
-<td></td></tr>
-<tr><td><a href="Cil.html#VALgetParenthLevel">getParenthLevel</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Parentheses level.
-</div>
-</td></tr>
-<tr><td><a href="Errormsg.html#VALgetPosition">getPosition</a> [<a href="Errormsg.html">Errormsg</a>]</td>
-<td></td></tr>
-<tr><td><a href="Cil.html#VALget_globalLoc">get_globalLoc</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Return the location of a global, or locUnknown
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALget_instrLoc">get_instrLoc</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Return the location of an instruction
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALget_stmtLoc">get_stmtLoc</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Return the location of a statement, or locUnknown
-</div>
-</td></tr>
-<tr><td><a href="Pretty.html#VALgprintf">gprintf</a> [<a href="Pretty.html">Pretty</a>]</td>
-<td><div class="info">
-Like <a href="Pretty.html#VALdprintf"><code class="code">Pretty.dprintf</code></a> but more general.
-</div>
-</td></tr>
-<tr><td align="left"><br>H</td></tr>
-<tr><td><a href="Errormsg.html#VALhadErrors">hadErrors</a> [<a href="Errormsg.html">Errormsg</a>]</td>
-<td><div class="info">
-This is set whenever one of the above error functions are called.
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALhasAttribute">hasAttribute</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-True if the named attribute appears in the attribute list.
-</div>
-</td></tr>
-<tr><td><a href="Stats.html#VALhas_performance_counters">has_performance_counters</a> [<a href="Stats.html">Stats</a>]</td>
-<td><div class="info">
-Check if we have performance counters
-</div>
-</td></tr>
-<tr><td align="left"><br>I</td></tr>
-<tr><td><a href="Cil.html#VALincrem">increm</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Increment an expression.
-</div>
-</td></tr>
-<tr><td><a href="Pretty.html#VALindent">indent</a> [<a href="Pretty.html">Pretty</a>]</td>
-<td><div class="info">
-Indents the document.
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALindexLevel">indexLevel</a> [<a href="Cil.html">Cil</a>]</td>
-<td></td></tr>
-<tr><td><a href="Cil.html#VALinitCIL">initCIL</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Call this function to perform some initialization.
-</div>
-</td></tr>
-<tr><td><a href="Pretty.html#VALinsert">insert</a> [<a href="Pretty.html">Pretty</a>]</td>
-<td><div class="info">
-A function that is useful with the <code class="code">printf</code>-like interface
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALinsertImplicitCasts">insertImplicitCasts</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Do insert implicit casts (default true)
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALintPtrType">intPtrType</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-int *
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALintType">intType</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-int
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALinteger">integer</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Construct an integer of kind IInt.
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALinvalidStmt">invalidStmt</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-An empty statement.
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALisArithmeticType">isArithmeticType</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-True if the argument is an arithmetic type (i.e.
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALisArrayType">isArrayType</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-True if the argument is an array type
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALisCompleteType">isCompleteType</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Returns true if this is a complete type.
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALisConstant">isConstant</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-True if the expression is a compile-time constant
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALisFunctionType">isFunctionType</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-True if the argument is a function type
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALisInteger">isInteger</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-True if the given expression is a (possibly cast'ed) 
-    character or an integer constant
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALisIntegralType">isIntegralType</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-True if the argument is an integral type (i.e.
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALisPointerType">isPointerType</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-True if the argument is a pointer type
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALisSigned">isSigned</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Returns true if and only if the given integer type is signed.
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALisVoidPtrType">isVoidPtrType</a> [<a href="Cil.html">Cil</a>]</td>
-<td></td></tr>
-<tr><td><a href="Cil.html#VALisVoidType">isVoidType</a> [<a href="Cil.html">Cil</a>]</td>
-<td></td></tr>
-<tr><td><a href="Cil.html#VALisZero">isZero</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-True if the given expression is a (possibly cast'ed) integer or character 
-    constant with value zero
-</div>
-</td></tr>
-<tr><td><a href="Clist.html#VALiter">iter</a> [<a href="Clist.html">Clist</a>]</td>
-<td><div class="info">
-A version of iter that works on clists
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALiterGlobals">iterGlobals</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Iterate over all globals, including the global initializer
-</div>
-</td></tr>
-<tr><td align="left"><br>K</td></tr>
-<tr><td><a href="Cil.html#VALkinteger">kinteger</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Construct an integer of a given kind.
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALkinteger64">kinteger64</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Construct an integer of a given kind, using OCaml's int64 type.
-</div>
-</td></tr>
-<tr><td align="left"><br>L</td></tr>
-<tr><td><a href="Stats.html#VALlastTime">lastTime</a> [<a href="Stats.html">Stats</a>]</td>
-<td><div class="info">
-Time a function and set lastTime to the time it took
-</div>
-</td></tr>
-<tr><td><a href="Pretty.html#VALleftflush">leftflush</a> [<a href="Pretty.html">Pretty</a>]</td>
-<td><div class="info">
-Use after a <a href="Pretty.html#VALline"><code class="code">Pretty.line</code></a> to prevent the indentation.
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALlenOfArray">lenOfArray</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Call to compute the array length as present in the array type, to an 
- integer.
-</div>
-</td></tr>
-<tr><td><a href="Clist.html#VALlength">length</a> [<a href="Clist.html">Clist</a>]</td>
-<td><div class="info">
-Find the length of a clist
-</div>
-</td></tr>
-<tr><td><a href="Pretty.html#VALline">line</a> [<a href="Pretty.html">Pretty</a>]</td>
-<td><div class="info">
-A document that consists of a mandatory newline.
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALlineDirectiveStyle">lineDirectiveStyle</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-How to print line directives
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALlineLength">lineLength</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-The length used when wrapping output lines.
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALlittle_endian">little_endian</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Whether the machine is little endian.
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALloadBinaryFile">loadBinaryFile</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Read a <a href="Cil.html#TYPEfile"><code class="code">Cil.file</code></a> in binary form from the filesystem.
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALlocUnknown">locUnknown</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Represents a location that cannot be determined
-</div>
-</td></tr>
-<tr><td><a href="Errormsg.html#VALlocUnknown">locUnknown</a> [<a href="Errormsg.html">Errormsg</a>]</td>
-<td><div class="info">
-An unknown location for use when you need one but you don't have one
-</div>
-</td></tr>
-<tr><td><a href="Errormsg.html#VALlog">log</a> [<a href="Errormsg.html">Errormsg</a>]</td>
-<td><div class="info">
-Print something to <code class="code">logChannel</code>
-</div>
-</td></tr>
-<tr><td><a href="Errormsg.html#VALlogChannel">logChannel</a> [<a href="Errormsg.html">Errormsg</a>]</td>
-<td><div class="info">
-A channel for printing log messages
-</div>
-</td></tr>
-<tr><td><a href="Errormsg.html#VALlogg">logg</a> [<a href="Errormsg.html">Errormsg</a>]</td>
-<td><div class="info">
-same as <a href="Errormsg.html#VALlog"><code class="code">Errormsg.log</code></a> but do not wrap lines
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALlongType">longType</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-long
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALlowerConstants">lowerConstants</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Do lower constants (default true)
-</div>
-</td></tr>
-<tr><td><a href="Cillower.html#VALlowerEnumVisitor">lowerEnumVisitor</a> [<a href="Cillower.html">Cillower</a>]</td>
-<td><div class="info">
-Replace enumeration constants with integer constants
-</div>
-</td></tr>
-<tr><td align="left"><br>M</td></tr>
-<tr><td><a href="Cil.html#VALmakeFormalVar">makeFormalVar</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Make a formal variable for a function.
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALmakeGlobalVar">makeGlobalVar</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Make a global variable.
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALmakeLocalVar">makeLocalVar</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Make a local variable and add it to a function's slocals (only if insert = 
-    true, which is the default).
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALmakeTempVar">makeTempVar</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Make a temporary variable and add it to a function's slocals.
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALmakeVarinfo">makeVarinfo</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Make a varinfo.
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALmakeZeroInit">makeZeroInit</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Make a initializer for zero-ing a data type
-</div>
-</td></tr>
-<tr><td><a href="Clist.html#VALmap">map</a> [<a href="Clist.html">Clist</a>]</td>
-<td><div class="info">
-Map a function over a clist.
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALmapGlobals">mapGlobals</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Map over all globals, including the global initializer and change things 
-    in place
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALmapNoCopy">mapNoCopy</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Like map but try not to make a copy of the list
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALmapNoCopyList">mapNoCopyList</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Like map but each call can return a list.
-</div>
-</td></tr>
-<tr><td><a href="Pretty.html#VALmark">mark</a> [<a href="Pretty.html">Pretty</a>]</td>
-<td><div class="info">
-Mark the beginning of a markup section.
-</div>
-</td></tr>
-<tr><td><a href="Pretty.html#VALmarkup">markup</a> [<a href="Pretty.html">Pretty</a>]</td>
-<td><div class="info">
-Prints a document as markup.
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALmissingFieldName">missingFieldName</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-This is a constant used as the name of an unnamed bitfield.
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALmkAddrOf">mkAddrOf</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Make an AddrOf.
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALmkAddrOrStartOf">mkAddrOrStartOf</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Like mkAddrOf except if the type of lval is an array then it uses 
-    StartOf.
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALmkBlock">mkBlock</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Construct a block with no attributes, given a list of statements
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALmkCast">mkCast</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Like <a href="Cil.html#VALmkCastT"><code class="code">Cil.mkCastT</code></a> but uses typeOf to get <code class="code">oldt</code>
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALmkCastT">mkCastT</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Construct a cast when having the old type of the expression.
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALmkCompInfo">mkCompInfo</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Creates a a (potentially recursive) composite type.
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALmkEmptyStmt">mkEmptyStmt</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Returns an empty statement (of kind <code class="code">Instr</code>)
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALmkFor">mkFor</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Make a for loop for(start; guard; next) { ...
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALmkForIncr">mkForIncr</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Make a for loop for(i=start; i&lt;past; i += incr) { ...
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALmkMem">mkMem</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Make a Mem, while optimizing AddrOf.
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALmkStmt">mkStmt</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Construct a statement, given its kind.
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALmkStmtOneInstr">mkStmtOneInstr</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Construct a statement consisting of just one instruction
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALmkString">mkString</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Make an expression that is a string constant (of pointer type)
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALmkWhile">mkWhile</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Make a while loop.
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALmone">mone</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
--1
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALmsvcBuiltins">msvcBuiltins</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-A list of the MSVC built-in functions.
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALmsvcMode">msvcMode</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Whether the pretty printer should print output for the MS VC compiler.
-</div>
-</td></tr>
-<tr><td align="left"><br>N</td></tr>
-<tr><td><a href="Dataflow.BackwardsTransfer.html#VALname">name</a> [<a href="Dataflow.BackwardsTransfer.html">Dataflow.BackwardsTransfer</a>]</td>
-<td><div class="info">
-For debugging purposes, the name of the analysis
-</div>
-</td></tr>
-<tr><td><a href="Dataflow.ForwardsTransfer.html#VALname">name</a> [<a href="Dataflow.ForwardsTransfer.html">Dataflow.ForwardsTransfer</a>]</td>
-<td><div class="info">
-For debugging purposes, the name of the analysis
-</div>
-</td></tr>
-<tr><td><a href="Alpha.html#VALnewAlphaName">newAlphaName</a> [<a href="Alpha.html">Alpha</a>]</td>
-<td><div class="info">
-Create a new name based on a given name.
-</div>
-</td></tr>
-<tr><td><a href="Errormsg.html#VALnewHline">newHline</a> [<a href="Errormsg.html">Errormsg</a>]</td>
-<td></td></tr>
-<tr><td><a href="Cil.html#VALnewVID">newVID</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Generate a new variable ID.
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALnew_sid">new_sid</a> [<a href="Cil.html">Cil</a>]</td>
-<td></td></tr>
-<tr><td><a href="Errormsg.html#VALnewline">newline</a> [<a href="Errormsg.html">Errormsg</a>]</td>
-<td></td></tr>
-<tr><td><a href="Pretty.html#VALnil">nil</a> [<a href="Pretty.html">Pretty</a>]</td>
-<td><div class="info">
-Constructs an empty document
-</div>
-</td></tr>
-<tr><td><a href="Formatcil.html#VALnoMemoize">noMemoize</a> [<a href="Formatcil.html">Formatcil</a>]</td>
-<td><div class="info">
-If set then will not memoize the parsed patterns
-</div>
-</td></tr>
-<tr><td><a href="Cfg.html#VALnodeList">nodeList</a> [<a href="Cfg.html">Cfg</a>]</td>
-<td><div class="info">
-All of the nodes in a file.
-</div>
-</td></tr>
-<tr><td><a href="Errormsg.html#VALnull">null</a> [<a href="Errormsg.html">Errormsg</a>]</td>
-<td><div class="info">
-Do not actually print (i.e.
-</div>
-</td></tr>
-<tr><td><a href="Pretty.html#VALnum">num</a> [<a href="Pretty.html">Pretty</a>]</td>
-<td><div class="info">
-A document that prints an integer in decimal form
-</div>
-</td></tr>
-<tr><td><a href="Cfg.html#VALnumNodes">numNodes</a> [<a href="Cfg.html">Cfg</a>]</td>
-<td><div class="info">
-number of nodes in the CFG
-</div>
-</td></tr>
-<tr><td align="left"><br>O</td></tr>
-<tr><td><a href="Cil.html#VALone">one</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-1
-</div>
-</td></tr>
-<tr><td align="left"><br>P</td></tr>
-<tr><td><a href="Cil.html#VALparseInt">parseInt</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Convert a string representing a C integer literal to an expression.
-</div>
-</td></tr>
-<tr><td><a href="Errormsg.html#VALparse_error">parse_error</a> [<a href="Errormsg.html">Errormsg</a>]</td>
-<td></td></tr>
-<tr><td><a href="Cil.html#VALpartitionAttributes">partitionAttributes</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Partition the attributes into classes:name attributes, function type, 
-    and type attributes
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALpeepHole1">peepHole1</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Similar to <code class="code">peepHole2</code> except that the optimization window consists of 
-    one statement, not two
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALpeepHole2">peepHole2</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-A peephole optimizer that processes two adjacent statements and possibly 
-    replaces them both.
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALplainCilPrinter">plainCilPrinter</a> [<a href="Cil.html">Cil</a>]</td>
-<td></td></tr>
-<tr><td><a href="Errormsg.html#VALpopContext">popContext</a> [<a href="Errormsg.html">Errormsg</a>]</td>
-<td><div class="info">
-Removes the last registered context printing function
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALprepareCFG">prepareCFG</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Prepare a function for CFG information computation by
- <a href="Cil.html#VALcomputeCFGInfo"><code class="code">Cil.computeCFGInfo</code></a>.
-</div>
-</td></tr>
-<tr><td><a href="Dataflow.BackwardsTransfer.html#VALpretty">pretty</a> [<a href="Dataflow.BackwardsTransfer.html">Dataflow.BackwardsTransfer</a>]</td>
-<td><div class="info">
-Pretty-print the state
-</div>
-</td></tr>
-<tr><td><a href="Dataflow.ForwardsTransfer.html#VALpretty">pretty</a> [<a href="Dataflow.ForwardsTransfer.html">Dataflow.ForwardsTransfer</a>]</td>
-<td><div class="info">
-Pretty-print the state
-</div>
-</td></tr>
-<tr><td><a href="Stats.html#VALprint">print</a> [<a href="Stats.html">Stats</a>]</td>
-<td><div class="info">
-Print the current stats preceeded by a message
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALprintAttr">printAttr</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Print an attribute given a pretty printer
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALprintAttrs">printAttrs</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Print a set of attributes given a pretty printer
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALprintBlock">printBlock</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Print a block given a pretty printer.
-</div>
-</td></tr>
-<tr><td><a href="Cfg.html#VALprintCfgChannel">printCfgChannel</a> [<a href="Cfg.html">Cfg</a>]</td>
-<td><div class="info">
-print control flow graph (in dot form) for fundec to channel
-</div>
-</td></tr>
-<tr><td><a href="Cfg.html#VALprintCfgFilename">printCfgFilename</a> [<a href="Cfg.html">Cfg</a>]</td>
-<td><div class="info">
-Print control flow graph (in dot form) for fundec to file
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALprintCilAsIs">printCilAsIs</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Whether to print the CIL as they are, without trying to be smart and 
- print nicer code.
-</div>
-</td></tr>
-<tr><td><a href="Pretty.html#VALprintDepth">printDepth</a> [<a href="Pretty.html">Pretty</a>]</td>
-<td><div class="info">
-Specifies the nesting depth of the <code class="code">align</code>/<code class="code">unalign</code> pairs at which 
-    everything is replaced with ellipsis
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALprintExp">printExp</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Print an expression given a pretty printer
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALprintGlobal">printGlobal</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Print a global given a pretty printer
-</div>
-</td></tr>
-<tr><td><a href="Pretty.html#VALprintIndent">printIndent</a> [<a href="Pretty.html">Pretty</a>]</td>
-<td><div class="info">
-If false then does not indent
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALprintInit">printInit</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Print an initializer given a pretty printer.
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALprintInstr">printInstr</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Print an instruction given a pretty printer
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALprintLval">printLval</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Print an lvalue given a pretty printer
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALprintStmt">printStmt</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Print a statement given a pretty printer.
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALprintType">printType</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Print a type given a pretty printer
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALprint_CIL_Input">print_CIL_Input</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Whether we print something that will only be used as input to our own 
- parser.
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALprinterForMaincil">printerForMaincil</a> [<a href="Cil.html">Cil</a>]</td>
-<td></td></tr>
-<tr><td><a href="Pretty.html#VALprintf">printf</a> [<a href="Pretty.html">Pretty</a>]</td>
-<td><div class="info">
-Like <a href="Pretty.html#VALfprintf"><code class="code">Pretty.fprintf</code></a> applied to <code class="code">stdout</code>
-</div>
-</td></tr>
-<tr><td><a href="Errormsg.html#VALpushContext">pushContext</a> [<a href="Errormsg.html">Errormsg</a>]</td>
-<td><div class="info">
-Registers a context printing function
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALpushGlobal">pushGlobal</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-CIL keeps the types at the beginning of the file and the variables at the 
- end of the file.
-</div>
-</td></tr>
-<tr><td align="left"><br>R</td></tr>
-<tr><td><a href="Errormsg.html#VALreadingFromStdin">readingFromStdin</a> [<a href="Errormsg.html">Errormsg</a>]</td>
-<td><div class="info">
-Records whether the stdin is open for reading the goal *
-</div>
-</td></tr>
-<tr><td><a href="Pretty.html#VALreal">real</a> [<a href="Pretty.html">Pretty</a>]</td>
-<td><div class="info">
-A document that prints a real number
-</div>
-</td></tr>
-<tr><td><a href="Alpha.html#VALregisterAlphaName">registerAlphaName</a> [<a href="Alpha.html">Alpha</a>]</td>
-<td><div class="info">
-Register a name with an alpha conversion table to ensure that when later 
- we call newAlphaName we do not end up generating this one
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALremoveOffset">removeOffset</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Remove ONE offset from the end of an offset sequence.
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALremoveOffsetLval">removeOffsetLval</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Remove ONE offset from the end of an lvalue.
-</div>
-</td></tr>
-<tr><td><a href="Stats.html#VALrepeattime">repeattime</a> [<a href="Stats.html">Stats</a>]</td>
-<td><div class="info">
-repeattime is like time but runs the function several times until the total
-    running time is greater or equal to the first argument.
-</div>
-</td></tr>
-<tr><td><a href="Stats.html#VALreset">reset</a> [<a href="Stats.html">Stats</a>]</td>
-<td><div class="info">
-Resets all the timings.
-</div>
-</td></tr>
-<tr><td><a href="Clist.html#VALrev">rev</a> [<a href="Clist.html">Clist</a>]</td>
-<td><div class="info">
-Reverse a clist.
-</div>
-</td></tr>
-<tr><td align="left"><br>S</td></tr>
-<tr><td><a href="Errormsg.html#VALs">s</a> [<a href="Errormsg.html">Errormsg</a>]</td>
-<td><div class="info">
-Stop the execution by raising an Error.
-</div>
-</td></tr>
-<tr><td><a href="Stats.html#VALsample_pentium_perfcount_10">sample_pentium_perfcount_10</a> [<a href="Stats.html">Stats</a>]</td>
-<td><div class="info">
-Sample the current cycle count, in kilocycles.
-</div>
-</td></tr>
-<tr><td><a href="Stats.html#VALsample_pentium_perfcount_20">sample_pentium_perfcount_20</a> [<a href="Stats.html">Stats</a>]</td>
-<td><div class="info">
-Sample the current cycle count, in megacycles.
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALsaveBinaryFile">saveBinaryFile</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Write a <a href="Cil.html#TYPEfile"><code class="code">Cil.file</code></a> in binary form to the filesystem.
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALsaveBinaryFileChannel">saveBinaryFileChannel</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Write a <a href="Cil.html#TYPEfile"><code class="code">Cil.file</code></a> in binary form to the filesystem.
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALseparateStorageModifiers">separateStorageModifiers</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Separate out the storage-modifier name attributes
-</div>
-</td></tr>
-<tr><td><a href="Pretty.html#VALseq">seq</a> [<a href="Pretty.html">Pretty</a>]</td>
-<td><div class="info">
-Formats a sequence.
-</div>
-</td></tr>
-<tr><td><a href="Errormsg.html#VALsetCurrentFile">setCurrentFile</a> [<a href="Errormsg.html">Errormsg</a>]</td>
-<td></td></tr>
-<tr><td><a href="Errormsg.html#VALsetCurrentLine">setCurrentLine</a> [<a href="Errormsg.html">Errormsg</a>]</td>
-<td></td></tr>
-<tr><td><a href="Cil.html#VALsetFormals">setFormals</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Update the formals of a <code class="code">fundec</code> and make sure that the function type 
-    has the same information.
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALsetFunctionType">setFunctionType</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Set the types of arguments and results as given by the function type 
- passed as the second argument.
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALsetFunctionTypeMakeFormals">setFunctionTypeMakeFormals</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Set the type of the function and make formal arguments for them
-</div>
-</td></tr>
-<tr><td><a href="Errormsg.html#VALsetHFile">setHFile</a> [<a href="Errormsg.html">Errormsg</a>]</td>
-<td></td></tr>
-<tr><td><a href="Errormsg.html#VALsetHLine">setHLine</a> [<a href="Errormsg.html">Errormsg</a>]</td>
-<td></td></tr>
-<tr><td><a href="Cil.html#VALsetMaxId">setMaxId</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Update the smaxid after you have populated with locals and formals 
- (unless you constructed those using <a href="Cil.html#VALmakeLocalVar"><code class="code">Cil.makeLocalVar</code></a> or 
- <a href="Cil.html#VALmakeTempVar"><code class="code">Cil.makeTempVar</code></a>.
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALsetTypeAttrs">setTypeAttrs</a> [<a href="Cil.html">Cil</a>]</td>
-<td></td></tr>
-<tr><td><a href="Cil.html#VALsetTypeSigAttrs">setTypeSigAttrs</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Replace the attributes of a signature (only at top level)
-</div>
-</td></tr>
-<tr><td><a href="Errormsg.html#VALshowContext">showContext</a> [<a href="Errormsg.html">Errormsg</a>]</td>
-<td><div class="info">
-Show the context stack to stderr
-</div>
-</td></tr>
-<tr><td><a href="Clist.html#VALsingle">single</a> [<a href="Clist.html">Clist</a>]</td>
-<td><div class="info">
-Create a clist containing one element
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALsizeOf">sizeOf</a> [<a href="Cil.html">Cil</a>]</td>
-<td></td></tr>
-<tr><td><a href="Cil.html#VALsplitFunctionType">splitFunctionType</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Given a function type split it into return type, 
- arguments, is_vararg and attributes.
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALsplitFunctionTypeVI">splitFunctionTypeVI</a> [<a href="Cil.html">Cil</a>]</td>
-<td></td></tr>
-<tr><td><a href="Pretty.html#VALsprint">sprint</a> [<a href="Pretty.html">Pretty</a>]</td>
-<td><div class="info">
-Format the document to the given width and emit it as a string
-</div>
-</td></tr>
-<tr><td><a href="Errormsg.html#VALstartParsing">startParsing</a> [<a href="Errormsg.html">Errormsg</a>]</td>
-<td></td></tr>
-<tr><td><a href="Errormsg.html#VALstartParsingFromString">startParsingFromString</a> [<a href="Errormsg.html">Errormsg</a>]</td>
-<td></td></tr>
-<tr><td><a href="Cfg.html#VALstart_id">start_id</a> [<a href="Cfg.html">Cfg</a>]</td>
-<td><div class="info">
-Next statement id that will be assigned.
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALstartsWith">startsWith</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-sm: return true if the first is a prefix of the second string
-</div>
-</td></tr>
-<tr><td><a href="Dataflow.BackwardsTransfer.html#VALstmtStartData">stmtStartData</a> [<a href="Dataflow.BackwardsTransfer.html">Dataflow.BackwardsTransfer</a>]</td>
-<td><div class="info">
-For each block id, the data at the start.
-</div>
-</td></tr>
-<tr><td><a href="Dataflow.ForwardsTransfer.html#VALstmtStartData">stmtStartData</a> [<a href="Dataflow.ForwardsTransfer.html">Dataflow.ForwardsTransfer</a>]</td>
-<td><div class="info">
-For each statement id, the data at the start.
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALstripCasts">stripCasts</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Removes casts from this expression, but ignores casts within
-  other expression constructs.
-</div>
-</td></tr>
-<tr><td align="left"><br>T</td></tr>
-<tr><td><a href="Formatcil.html#VALtest">test</a> [<a href="Formatcil.html">Formatcil</a>]</td>
-<td><div class="info">
-Just a testing function
-</div>
-</td></tr>
-<tr><td><a href="Pretty.html#VALtext">text</a> [<a href="Pretty.html">Pretty</a>]</td>
-<td><div class="info">
-A document that prints the given string
-</div>
-</td></tr>
-<tr><td><a href="Stats.html#VALtime">time</a> [<a href="Stats.html">Stats</a>]</td>
-<td><div class="info">
-Time a function and associate the time with the given string.
-</div>
-</td></tr>
-<tr><td><a href="Stats.html#VALtimethis">timethis</a> [<a href="Stats.html">Stats</a>]</td>
-<td></td></tr>
-<tr><td><a href="Clist.html#VALtoList">toList</a> [<a href="Clist.html">Clist</a>]</td>
-<td><div class="info">
-Convert a clist to an ordinary list
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALtypeAddAttributes">typeAddAttributes</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Add some attributes to a type
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALtypeAttrs">typeAttrs</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Returns all the attributes contained in a type.
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALtypeOf">typeOf</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Compute the type of an expression
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALtypeOfLval">typeOfLval</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Compute the type of an lvalue
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALtypeOfSizeOf">typeOfSizeOf</a> [<a href="Cil.html">Cil</a>]</td>
-<td></td></tr>
-<tr><td><a href="Cil.html#VALtypeOffset">typeOffset</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Compute the type of an offset from a base type
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALtypeRemoveAttributes">typeRemoveAttributes</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Remove all attributes with the given names from a type.
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALtypeSig">typeSig</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Compute a type signature
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALtypeSigAttrs">typeSigAttrs</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Get the top-level attributes of a signature
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALtypeSigWithAttrs">typeSigWithAttrs</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Like <a href="Cil.html#VALtypeSig"><code class="code">Cil.typeSig</code></a> but customize the incorporation of attributes.
-</div>
-</td></tr>
-<tr><td align="left"><br>U</td></tr>
-<tr><td><a href="Cil.html#VALuintPtrType">uintPtrType</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-unsigned int *
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALuintType">uintType</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-unsigned int
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALulongType">ulongType</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-unsigned long
-</div>
-</td></tr>
-<tr><td><a href="Pretty.html#VALunalign">unalign</a> [<a href="Pretty.html">Pretty</a>]</td>
-<td><div class="info">
-Reverts to the last saved indentation level.
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALunderscore_name">underscore_name</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Whether the compiler generates assembly labels by prepending "_" to the 
-    identifier.
-</div>
-</td></tr>
-<tr><td><a href="Alpha.html#VALundoAlphaChanges">undoAlphaChanges</a> [<a href="Alpha.html">Alpha</a>]</td>
-<td><div class="info">
-Undo the changes to a table
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALunimp">unimp</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Like <a href="Errormsg.html#VALunimp"><code class="code">Errormsg.unimp</code></a> except that <a href="Cil.html#VALcurrentLoc"><code class="code">Cil.currentLoc</code></a>is also printed
-</div>
-</td></tr>
-<tr><td><a href="Errormsg.html#VALunimp">unimp</a> [<a href="Errormsg.html">Errormsg</a>]</td>
-<td><div class="info">
-Similar to <code class="code">error</code> except that its output has the form <code class="code">Unimplemented: ...</code>
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALuniqueVarNames">uniqueVarNames</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Assign unique names to local variables.
-</div>
-</td></tr>
-<tr><td><a href="Pretty.html#VALunmark">unmark</a> [<a href="Pretty.html">Pretty</a>]</td>
-<td><div class="info">
-The end of a markup section
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALunrollType">unrollType</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Unroll a type until it exposes a non 
- <code class="code">TNamed</code>.
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALunrollTypeDeep">unrollTypeDeep</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Unroll all the TNamed in a type (even under type constructors such as 
- <code class="code">TPtr</code>, <code class="code">TFun</code> or <code class="code">TArray</code>.
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALupointType">upointType</a> [<a href="Cil.html">Cil</a>]</td>
-<td></td></tr>
-<tr><td><a href="Cil.html#VALuseLogicalOperators">useLogicalOperators</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Whether to use the logical operands LAnd and LOr.
-</div>
-</td></tr>
-<tr><td align="left"><br>V</td></tr>
-<tr><td><a href="Cil.html#VALvar">var</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Makes an lvalue out of a given variable
-</div>
-</td></tr>
-<tr><td><a href="Errormsg.html#VALverboseFlag">verboseFlag</a> [<a href="Errormsg.html">Errormsg</a>]</td>
-<td></td></tr>
-<tr><td><a href="Cil.html#VALvisitCilAttributes">visitCilAttributes</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Visit a list of attributes
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALvisitCilBlock">visitCilBlock</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Visit a block
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALvisitCilExpr">visitCilExpr</a> [<a href="Cil.html">Cil</a>]</td>
-<td></td></tr>
-<tr><td><a href="Cil.html#VALvisitCilFile">visitCilFile</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Visit a file.
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALvisitCilFileSameGlobals">visitCilFileSameGlobals</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-A visitor for the whole file that does not change the globals (but maybe
- changes things inside the globals).
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALvisitCilFunction">visitCilFunction</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Visit a function definition
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALvisitCilGlobal">visitCilGlobal</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Visit a global
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALvisitCilInit">visitCilInit</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Visit an initializer
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALvisitCilInitOffset">visitCilInitOffset</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Visit an initializer offset
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALvisitCilInstr">visitCilInstr</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Visit an instruction
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALvisitCilLval">visitCilLval</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Visit an lvalue
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALvisitCilOffset">visitCilOffset</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Visit an lvalue or recursive offset
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALvisitCilStmt">visitCilStmt</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Visit a statement
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALvisitCilType">visitCilType</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Visit a type
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALvisitCilVarDecl">visitCilVarDecl</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Visit a variable declaration
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALvoidPtrType">voidPtrType</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-void *
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALvoidType">voidType</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-void
-</div>
-</td></tr>
-<tr><td align="left"><br>W</td></tr>
-<tr><td><a href="Cil.html#VALwarn">warn</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Like <a href="Errormsg.html#VALwarn"><code class="code">Errormsg.warn</code></a> except that <a href="Cil.html#VALcurrentLoc"><code class="code">Cil.currentLoc</code></a> is also printed
-</div>
-</td></tr>
-<tr><td><a href="Errormsg.html#VALwarn">warn</a> [<a href="Errormsg.html">Errormsg</a>]</td>
-<td><div class="info">
-Like <a href="Errormsg.html#VALerror"><code class="code">Errormsg.error</code></a> but does not raise the <a href="Errormsg.html#EXCEPTIONError"><code class="code">Errormsg.Error</code></a> 
- exception.
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALwarnContext">warnContext</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Like <a href="Errormsg.html#VALwarn"><code class="code">Errormsg.warn</code></a> except that <a href="Cil.html#VALcurrentLoc"><code class="code">Cil.currentLoc</code></a> and context 
-    is also printed
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALwarnContextOpt">warnContextOpt</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Like <a href="Errormsg.html#VALwarn"><code class="code">Errormsg.warn</code></a> except that <a href="Cil.html#VALcurrentLoc"><code class="code">Cil.currentLoc</code></a> and context is also 
- printed.
-</div>
-</td></tr>
-<tr><td><a href="Errormsg.html#VALwarnFlag">warnFlag</a> [<a href="Errormsg.html">Errormsg</a>]</td>
-<td><div class="info">
-Set to true if you want to see all warnings.
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALwarnLoc">warnLoc</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Like <a href="Cil.html#VALwarn"><code class="code">Cil.warn</code></a> except that it explicitly takes a location argument, 
- instead of using the <a href="Cil.html#VALcurrentLoc"><code class="code">Cil.currentLoc</code></a>
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALwarnOpt">warnOpt</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-Like <a href="Errormsg.html#VALwarnOpt"><code class="code">Errormsg.warnOpt</code></a> except that <a href="Cil.html#VALcurrentLoc"><code class="code">Cil.currentLoc</code></a> is also printed.
-</div>
-</td></tr>
-<tr><td><a href="Errormsg.html#VALwarnOpt">warnOpt</a> [<a href="Errormsg.html">Errormsg</a>]</td>
-<td><div class="info">
-Like <a href="Errormsg.html#VALwarn"><code class="code">Errormsg.warn</code></a> but optional.
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALwcharKind">wcharKind</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-wchar_t (depends on architecture) and is set when you call 
- <a href="Cil.html#VALinitCIL"><code class="code">Cil.initCIL</code></a>.
-</div>
-</td></tr>
-<tr><td><a href="Cil.html#VALwcharType">wcharType</a> [<a href="Cil.html">Cil</a>]</td>
-<td></td></tr>
-<tr><td><a href="Errormsg.html#VALwithContext">withContext</a> [<a href="Errormsg.html">Errormsg</a>]</td>
-<td><div class="info">
-To ensure that the context is registered and removed properly, use the 
-    function below
-</div>
-</td></tr>
-<tr><td><a href="Pretty.html#VALwithPrintDepth">withPrintDepth</a> [<a href="Pretty.html">Pretty</a>]</td>
-<td><div class="info">
-Invokes a thunk, with printDepth temporarily set to the specified value
-</div>
-</td></tr>
-<tr><td align="left"><br>Z</td></tr>
-<tr><td><a href="Cil.html#VALzero">zero</a> [<a href="Cil.html">Cil</a>]</td>
-<td><div class="info">
-0
-</div>
-</td></tr>
-</table><br>
-</body>
-</html>
\ No newline at end of file
diff --git a/cil/doc/api/style.css b/cil/doc/api/style.css
deleted file mode 100644
index 11ed40ce5..000000000
--- a/cil/doc/api/style.css
+++ /dev/null
@@ -1,32 +0,0 @@
-a:visited {color : #416DFF; text-decoration : none; }
-a:link {color : #416DFF; text-decoration : none;}
-a:hover {color : Red; text-decoration : none; background-color: #5FFF88}
-a:active {color : Red; text-decoration : underline; }
-.keyword { font-weight : bold ; color : Red }
-.keywordsign { color : #C04600 }
-.superscript { font-size : 4 }
-.subscript { font-size : 4 }
-.comment { color : Green }
-.constructor { color : Blue }
-.type { color : #5C6585 }
-.string { color : Maroon }
-.warning { color : Red ; font-weight : bold }
-.info { margin-left : 3em; margin-right : 3em }
-.code { color : #465F91 ; }
-h1 { font-size : 20pt ; text-align: center; }
-h2 { font-size : 20pt ; border: 1px solid #000000; margin-top: 5px; margin-bottom: 2px;text-align: center; background-color: #90BDFF ;padding: 2px; }
-h3 { font-size : 20pt ; border: 1px solid #000000; margin-top: 5px; margin-bottom: 2px;text-align: center; background-color: #90DDFF ;padding: 2px; }
-h4 { font-size : 20pt ; border: 1px solid #000000; margin-top: 5px; margin-bottom: 2px;text-align: center; background-color: #90EDFF ;padding: 2px; }
-h5 { font-size : 20pt ; border: 1px solid #000000; margin-top: 5px; margin-bottom: 2px;text-align: center; background-color: #90FDFF ;padding: 2px; }
-h6 { font-size : 20pt ; border: 1px solid #000000; margin-top: 5px; margin-bottom: 2px;text-align: center; background-color: #C0FFFF ; padding: 2px; }
-div.h7 { font-size : 20pt ; border: 1px solid #000000; margin-top: 5px; margin-bottom: 2px;text-align: center; background-color: #E0FFFF ; padding: 2px; }
-div.h8 { font-size : 20pt ; border: 1px solid #000000; margin-top: 5px; margin-bottom: 2px;text-align: center; background-color: #F0FFFF ; padding: 2px; }
-div.h9 { font-size : 20pt ; border: 1px solid #000000; margin-top: 5px; margin-bottom: 2px;text-align: center; background-color: #FFFFFF ; padding: 2px; }
-.typetable { border-style : hidden }
-.indextable { border-style : hidden }
-.paramstable { border-style : hidden ; padding: 5pt 5pt}
-body { background-color : White }
-tr { background-color : White }
-td.typefieldcomment { background-color : #FFFFFF }
-pre { margin-bottom: 4px }
-div.sig_block {margin-left: 2em}
\ No newline at end of file
diff --git a/cil/doc/api/type_Alpha.html b/cil/doc/api/type_Alpha.html
deleted file mode 100644
index b97c835fc..000000000
--- a/cil/doc/api/type_Alpha.html
+++ /dev/null
@@ -1,43 +0,0 @@
-<html><head>
-<link rel="stylesheet" href="style.css" type="text/css">
-<link rel="Start" href="index.html">
-<link title="Index of types" rel=Appendix href="index_types.html">
-<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
-<link title="Index of values" rel=Appendix href="index_values.html">
-<link title="Index of class methods" rel=Appendix href="index_methods.html">
-<link title="Index of classes" rel=Appendix href="index_classes.html">
-<link title="Index of class types" rel=Appendix href="index_class_types.html">
-<link title="Index of modules" rel=Appendix href="index_modules.html">
-<link title="Index of module types" rel=Appendix href="index_module_types.html">
-<link title="Pretty" rel="Chapter" href="Pretty.html">
-<link title="Errormsg" rel="Chapter" href="Errormsg.html">
-<link title="Clist" rel="Chapter" href="Clist.html">
-<link title="Stats" rel="Chapter" href="Stats.html">
-<link title="Cil" rel="Chapter" href="Cil.html">
-<link title="Formatcil" rel="Chapter" href="Formatcil.html">
-<link title="Alpha" rel="Chapter" href="Alpha.html">
-<link title="Cillower" rel="Chapter" href="Cillower.html">
-<link title="Cfg" rel="Chapter" href="Cfg.html">
-<link title="Dataflow" rel="Chapter" href="Dataflow.html">
-<link title="Dominators" rel="Chapter" href="Dominators.html"><title>CIL API Documentation (version 1.3.5) : Alpha</title>
-</head>
-<body>
-<code class="code"><span class="keyword">sig</span><br>
-&nbsp;&nbsp;<span class="keyword">type</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;undoAlphaElement<br>
-&nbsp;&nbsp;<span class="keyword">type</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;alphaTableData<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;newAlphaName&nbsp;:<br>
-&nbsp;&nbsp;&nbsp;&nbsp;alphaTable:(string,&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="constructor">Alpha</span>.alphaTableData&nbsp;<span class="constructor">Pervasives</span>.ref)&nbsp;<span class="constructor">Hashtbl</span>.t&nbsp;<span class="keywordsign">-&gt;</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;undolist:<span class="keywordsign">'</span>a&nbsp;<span class="constructor">Alpha</span>.undoAlphaElement&nbsp;list&nbsp;<span class="constructor">Pervasives</span>.ref&nbsp;option&nbsp;<span class="keywordsign">-&gt;</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;lookupname:string&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;data:<span class="keywordsign">'</span>a&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;string&nbsp;*&nbsp;<span class="keywordsign">'</span>a<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;registerAlphaName&nbsp;:<br>
-&nbsp;&nbsp;&nbsp;&nbsp;alphaTable:(string,&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="constructor">Alpha</span>.alphaTableData&nbsp;<span class="constructor">Pervasives</span>.ref)&nbsp;<span class="constructor">Hashtbl</span>.t&nbsp;<span class="keywordsign">-&gt;</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;undolist:<span class="keywordsign">'</span>a&nbsp;<span class="constructor">Alpha</span>.undoAlphaElement&nbsp;list&nbsp;<span class="constructor">Pervasives</span>.ref&nbsp;option&nbsp;<span class="keywordsign">-&gt;</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;lookupname:string&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;data:<span class="keywordsign">'</span>a&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;docAlphaTable&nbsp;:<br>
-&nbsp;&nbsp;&nbsp;&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;(string,&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="constructor">Alpha</span>.alphaTableData&nbsp;<span class="constructor">Pervasives</span>.ref)&nbsp;<span class="constructor">Hashtbl</span>.t&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;getAlphaPrefix&nbsp;:&nbsp;lookupname:string&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;string<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;undoAlphaChanges&nbsp;:<br>
-&nbsp;&nbsp;&nbsp;&nbsp;alphaTable:(string,&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="constructor">Alpha</span>.alphaTableData&nbsp;<span class="constructor">Pervasives</span>.ref)&nbsp;<span class="constructor">Hashtbl</span>.t&nbsp;<span class="keywordsign">-&gt;</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;undolist:<span class="keywordsign">'</span>a&nbsp;<span class="constructor">Alpha</span>.undoAlphaElement&nbsp;list&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
-<span class="keyword">end</span></code></body></html>
\ No newline at end of file
diff --git a/cil/doc/api/type_Cfg.html b/cil/doc/api/type_Cfg.html
deleted file mode 100644
index 996d7739a..000000000
--- a/cil/doc/api/type_Cfg.html
+++ /dev/null
@@ -1,35 +0,0 @@
-<html><head>
-<link rel="stylesheet" href="style.css" type="text/css">
-<link rel="Start" href="index.html">
-<link title="Index of types" rel=Appendix href="index_types.html">
-<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
-<link title="Index of values" rel=Appendix href="index_values.html">
-<link title="Index of class methods" rel=Appendix href="index_methods.html">
-<link title="Index of classes" rel=Appendix href="index_classes.html">
-<link title="Index of class types" rel=Appendix href="index_class_types.html">
-<link title="Index of modules" rel=Appendix href="index_modules.html">
-<link title="Index of module types" rel=Appendix href="index_module_types.html">
-<link title="Pretty" rel="Chapter" href="Pretty.html">
-<link title="Errormsg" rel="Chapter" href="Errormsg.html">
-<link title="Clist" rel="Chapter" href="Clist.html">
-<link title="Stats" rel="Chapter" href="Stats.html">
-<link title="Cil" rel="Chapter" href="Cil.html">
-<link title="Formatcil" rel="Chapter" href="Formatcil.html">
-<link title="Alpha" rel="Chapter" href="Alpha.html">
-<link title="Cillower" rel="Chapter" href="Cillower.html">
-<link title="Cfg" rel="Chapter" href="Cfg.html">
-<link title="Dataflow" rel="Chapter" href="Dataflow.html">
-<link title="Dominators" rel="Chapter" href="Dominators.html"><title>CIL API Documentation (version 1.3.5) : Cfg</title>
-</head>
-<body>
-<code class="code"><span class="keyword">sig</span><br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;computeFileCFG&nbsp;:&nbsp;<span class="constructor">Cil</span>.file&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;clearFileCFG&nbsp;:&nbsp;<span class="constructor">Cil</span>.file&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;cfgFun&nbsp;:&nbsp;<span class="constructor">Cil</span>.fundec&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;int<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;clearCFGinfo&nbsp;:&nbsp;<span class="constructor">Cil</span>.fundec&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;printCfgChannel&nbsp;:&nbsp;<span class="constructor">Pervasives</span>.out_channel&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.fundec&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;printCfgFilename&nbsp;:&nbsp;string&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.fundec&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;start_id&nbsp;:&nbsp;int&nbsp;<span class="constructor">Pervasives</span>.ref<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;nodeList&nbsp;:&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;list&nbsp;<span class="constructor">Pervasives</span>.ref<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;numNodes&nbsp;:&nbsp;int&nbsp;<span class="constructor">Pervasives</span>.ref<br>
-<span class="keyword">end</span></code></body></html>
\ No newline at end of file
diff --git a/cil/doc/api/type_Cil.cilPrinter.html b/cil/doc/api/type_Cil.cilPrinter.html
deleted file mode 100644
index ff117f5d0..000000000
--- a/cil/doc/api/type_Cil.cilPrinter.html
+++ /dev/null
@@ -1,48 +0,0 @@
-<html><head>
-<link rel="stylesheet" href="style.css" type="text/css">
-<link rel="Start" href="index.html">
-<link title="Index of types" rel=Appendix href="index_types.html">
-<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
-<link title="Index of values" rel=Appendix href="index_values.html">
-<link title="Index of class methods" rel=Appendix href="index_methods.html">
-<link title="Index of classes" rel=Appendix href="index_classes.html">
-<link title="Index of class types" rel=Appendix href="index_class_types.html">
-<link title="Index of modules" rel=Appendix href="index_modules.html">
-<link title="Index of module types" rel=Appendix href="index_module_types.html">
-<link title="Pretty" rel="Chapter" href="Pretty.html">
-<link title="Errormsg" rel="Chapter" href="Errormsg.html">
-<link title="Clist" rel="Chapter" href="Clist.html">
-<link title="Stats" rel="Chapter" href="Stats.html">
-<link title="Cil" rel="Chapter" href="Cil.html">
-<link title="Formatcil" rel="Chapter" href="Formatcil.html">
-<link title="Alpha" rel="Chapter" href="Alpha.html">
-<link title="Cillower" rel="Chapter" href="Cillower.html">
-<link title="Cfg" rel="Chapter" href="Cfg.html">
-<link title="Dataflow" rel="Chapter" href="Dataflow.html">
-<link title="Dominators" rel="Chapter" href="Dominators.html"><title>CIL API Documentation (version 1.3.5) : Cil.cilPrinter</title>
-</head>
-<body>
-<code class="code"><span class="keyword">object</span><br>
-&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;dBlock&nbsp;:&nbsp;<span class="constructor">Pervasives</span>.out_channel&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;int&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.block&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
-&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;dGlobal&nbsp;:&nbsp;<span class="constructor">Pervasives</span>.out_channel&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.global&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
-&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;dInit&nbsp;:&nbsp;<span class="constructor">Pervasives</span>.out_channel&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;int&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.init&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
-&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;dStmt&nbsp;:&nbsp;<span class="constructor">Pervasives</span>.out_channel&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;int&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
-&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;pAttr&nbsp;:&nbsp;<span class="constructor">Cil</span>.attribute&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc&nbsp;*&nbsp;bool<br>
-&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;pAttrParam&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.attrparam&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;pAttrs&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.attributes&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;pBlock&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.block&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;pExp&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.exp&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;pFieldDecl&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.fieldinfo&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;pGlobal&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.global&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;pInit&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.init&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;pInstr&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.instr&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;pLabel&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.label&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;pLineDirective&nbsp;:&nbsp;?forcefile:bool&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.location&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;pLval&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.lval&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;pOffset&nbsp;:&nbsp;<span class="constructor">Pretty</span>.doc&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.offset&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;pStmt&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;pStmtKind&nbsp;:&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.stmtkind&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;pType&nbsp;:&nbsp;<span class="constructor">Pretty</span>.doc&nbsp;option&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.typ&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;pVDecl&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.varinfo&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;pVar&nbsp;:&nbsp;<span class="constructor">Cil</span>.varinfo&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-<span class="keyword">end</span></code></body></html>
\ No newline at end of file
diff --git a/cil/doc/api/type_Cil.cilVisitor.html b/cil/doc/api/type_Cil.cilVisitor.html
deleted file mode 100644
index efe3d138d..000000000
--- a/cil/doc/api/type_Cil.cilVisitor.html
+++ /dev/null
@@ -1,43 +0,0 @@
-<html><head>
-<link rel="stylesheet" href="style.css" type="text/css">
-<link rel="Start" href="index.html">
-<link title="Index of types" rel=Appendix href="index_types.html">
-<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
-<link title="Index of values" rel=Appendix href="index_values.html">
-<link title="Index of class methods" rel=Appendix href="index_methods.html">
-<link title="Index of classes" rel=Appendix href="index_classes.html">
-<link title="Index of class types" rel=Appendix href="index_class_types.html">
-<link title="Index of modules" rel=Appendix href="index_modules.html">
-<link title="Index of module types" rel=Appendix href="index_module_types.html">
-<link title="Pretty" rel="Chapter" href="Pretty.html">
-<link title="Errormsg" rel="Chapter" href="Errormsg.html">
-<link title="Clist" rel="Chapter" href="Clist.html">
-<link title="Stats" rel="Chapter" href="Stats.html">
-<link title="Cil" rel="Chapter" href="Cil.html">
-<link title="Formatcil" rel="Chapter" href="Formatcil.html">
-<link title="Alpha" rel="Chapter" href="Alpha.html">
-<link title="Cillower" rel="Chapter" href="Cillower.html">
-<link title="Cfg" rel="Chapter" href="Cfg.html">
-<link title="Dataflow" rel="Chapter" href="Dataflow.html">
-<link title="Dominators" rel="Chapter" href="Dominators.html"><title>CIL API Documentation (version 1.3.5) : Cil.cilVisitor</title>
-</head>
-<body>
-<code class="code"><span class="keyword">object</span><br>
-&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;queueInstr&nbsp;:&nbsp;<span class="constructor">Cil</span>.instr&nbsp;list&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
-&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;unqueueInstr&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.instr&nbsp;list<br>
-&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;vattr&nbsp;:&nbsp;<span class="constructor">Cil</span>.attribute&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.attribute&nbsp;list&nbsp;<span class="constructor">Cil</span>.visitAction<br>
-&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;vattrparam&nbsp;:&nbsp;<span class="constructor">Cil</span>.attrparam&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.attrparam&nbsp;<span class="constructor">Cil</span>.visitAction<br>
-&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;vblock&nbsp;:&nbsp;<span class="constructor">Cil</span>.block&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.block&nbsp;<span class="constructor">Cil</span>.visitAction<br>
-&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;vexpr&nbsp;:&nbsp;<span class="constructor">Cil</span>.exp&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.exp&nbsp;<span class="constructor">Cil</span>.visitAction<br>
-&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;vfunc&nbsp;:&nbsp;<span class="constructor">Cil</span>.fundec&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.fundec&nbsp;<span class="constructor">Cil</span>.visitAction<br>
-&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;vglob&nbsp;:&nbsp;<span class="constructor">Cil</span>.global&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.global&nbsp;list&nbsp;<span class="constructor">Cil</span>.visitAction<br>
-&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;vinit&nbsp;:&nbsp;<span class="constructor">Cil</span>.init&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.init&nbsp;<span class="constructor">Cil</span>.visitAction<br>
-&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;vinitoffs&nbsp;:&nbsp;<span class="constructor">Cil</span>.offset&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.offset&nbsp;<span class="constructor">Cil</span>.visitAction<br>
-&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;vinst&nbsp;:&nbsp;<span class="constructor">Cil</span>.instr&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.instr&nbsp;list&nbsp;<span class="constructor">Cil</span>.visitAction<br>
-&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;vlval&nbsp;:&nbsp;<span class="constructor">Cil</span>.lval&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.lval&nbsp;<span class="constructor">Cil</span>.visitAction<br>
-&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;voffs&nbsp;:&nbsp;<span class="constructor">Cil</span>.offset&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.offset&nbsp;<span class="constructor">Cil</span>.visitAction<br>
-&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;vstmt&nbsp;:&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;<span class="constructor">Cil</span>.visitAction<br>
-&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;vtype&nbsp;:&nbsp;<span class="constructor">Cil</span>.typ&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.typ&nbsp;<span class="constructor">Cil</span>.visitAction<br>
-&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;vvdec&nbsp;:&nbsp;<span class="constructor">Cil</span>.varinfo&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.varinfo&nbsp;<span class="constructor">Cil</span>.visitAction<br>
-&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;vvrbl&nbsp;:&nbsp;<span class="constructor">Cil</span>.varinfo&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.varinfo&nbsp;<span class="constructor">Cil</span>.visitAction<br>
-<span class="keyword">end</span></code></body></html>
\ No newline at end of file
diff --git a/cil/doc/api/type_Cil.defaultCilPrinterClass.html b/cil/doc/api/type_Cil.defaultCilPrinterClass.html
deleted file mode 100644
index 75a36eb77..000000000
--- a/cil/doc/api/type_Cil.defaultCilPrinterClass.html
+++ /dev/null
@@ -1,25 +0,0 @@
-<html><head>
-<link rel="stylesheet" href="style.css" type="text/css">
-<link rel="Start" href="index.html">
-<link title="Index of types" rel=Appendix href="index_types.html">
-<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
-<link title="Index of values" rel=Appendix href="index_values.html">
-<link title="Index of class methods" rel=Appendix href="index_methods.html">
-<link title="Index of classes" rel=Appendix href="index_classes.html">
-<link title="Index of class types" rel=Appendix href="index_class_types.html">
-<link title="Index of modules" rel=Appendix href="index_modules.html">
-<link title="Index of module types" rel=Appendix href="index_module_types.html">
-<link title="Pretty" rel="Chapter" href="Pretty.html">
-<link title="Errormsg" rel="Chapter" href="Errormsg.html">
-<link title="Clist" rel="Chapter" href="Clist.html">
-<link title="Stats" rel="Chapter" href="Stats.html">
-<link title="Cil" rel="Chapter" href="Cil.html">
-<link title="Formatcil" rel="Chapter" href="Formatcil.html">
-<link title="Alpha" rel="Chapter" href="Alpha.html">
-<link title="Cillower" rel="Chapter" href="Cillower.html">
-<link title="Cfg" rel="Chapter" href="Cfg.html">
-<link title="Dataflow" rel="Chapter" href="Dataflow.html">
-<link title="Dominators" rel="Chapter" href="Dominators.html"><title>CIL API Documentation (version 1.3.5) : Cil.defaultCilPrinterClass</title>
-</head>
-<body>
-<code class="code"><span class="constructor">Cil</span>.cilPrinter</code></body></html>
\ No newline at end of file
diff --git a/cil/doc/api/type_Cil.html b/cil/doc/api/type_Cil.html
deleted file mode 100644
index da6f9e967..000000000
--- a/cil/doc/api/type_Cil.html
+++ /dev/null
@@ -1,622 +0,0 @@
-<html><head>
-<link rel="stylesheet" href="style.css" type="text/css">
-<link rel="Start" href="index.html">
-<link title="Index of types" rel=Appendix href="index_types.html">
-<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
-<link title="Index of values" rel=Appendix href="index_values.html">
-<link title="Index of class methods" rel=Appendix href="index_methods.html">
-<link title="Index of classes" rel=Appendix href="index_classes.html">
-<link title="Index of class types" rel=Appendix href="index_class_types.html">
-<link title="Index of modules" rel=Appendix href="index_modules.html">
-<link title="Index of module types" rel=Appendix href="index_module_types.html">
-<link title="Pretty" rel="Chapter" href="Pretty.html">
-<link title="Errormsg" rel="Chapter" href="Errormsg.html">
-<link title="Clist" rel="Chapter" href="Clist.html">
-<link title="Stats" rel="Chapter" href="Stats.html">
-<link title="Cil" rel="Chapter" href="Cil.html">
-<link title="Formatcil" rel="Chapter" href="Formatcil.html">
-<link title="Alpha" rel="Chapter" href="Alpha.html">
-<link title="Cillower" rel="Chapter" href="Cillower.html">
-<link title="Cfg" rel="Chapter" href="Cfg.html">
-<link title="Dataflow" rel="Chapter" href="Dataflow.html">
-<link title="Dominators" rel="Chapter" href="Dominators.html"><title>CIL API Documentation (version 1.3.5) : Cil</title>
-</head>
-<body>
-<code class="code"><span class="keyword">sig</span><br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;initCIL&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;cilVersion&nbsp;:&nbsp;string<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;cilVersionMajor&nbsp;:&nbsp;int<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;cilVersionMinor&nbsp;:&nbsp;int<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;cilVersionRevision&nbsp;:&nbsp;int<br>
-&nbsp;&nbsp;<span class="keyword">type</span>&nbsp;file&nbsp;=&nbsp;{<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">mutable</span>&nbsp;fileName&nbsp;:&nbsp;string;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">mutable</span>&nbsp;globals&nbsp;:&nbsp;<span class="constructor">Cil</span>.global&nbsp;list;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">mutable</span>&nbsp;globinit&nbsp;:&nbsp;<span class="constructor">Cil</span>.fundec&nbsp;option;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">mutable</span>&nbsp;globinitcalled&nbsp;:&nbsp;bool;<br>
-&nbsp;&nbsp;}<br>
-&nbsp;&nbsp;<span class="keyword">and</span>&nbsp;comment&nbsp;=&nbsp;<span class="constructor">Cil</span>.location&nbsp;*&nbsp;string<br>
-&nbsp;&nbsp;<span class="keyword">and</span>&nbsp;global&nbsp;=<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">GType</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.typeinfo&nbsp;*&nbsp;<span class="constructor">Cil</span>.location<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">GCompTag</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.compinfo&nbsp;*&nbsp;<span class="constructor">Cil</span>.location<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">GCompTagDecl</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.compinfo&nbsp;*&nbsp;<span class="constructor">Cil</span>.location<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">GEnumTag</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.enuminfo&nbsp;*&nbsp;<span class="constructor">Cil</span>.location<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">GEnumTagDecl</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.enuminfo&nbsp;*&nbsp;<span class="constructor">Cil</span>.location<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">GVarDecl</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.varinfo&nbsp;*&nbsp;<span class="constructor">Cil</span>.location<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">GVar</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.varinfo&nbsp;*&nbsp;<span class="constructor">Cil</span>.initinfo&nbsp;*&nbsp;<span class="constructor">Cil</span>.location<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">GFun</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.fundec&nbsp;*&nbsp;<span class="constructor">Cil</span>.location<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">GAsm</span>&nbsp;<span class="keyword">of</span>&nbsp;string&nbsp;*&nbsp;<span class="constructor">Cil</span>.location<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">GPragma</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.attribute&nbsp;*&nbsp;<span class="constructor">Cil</span>.location<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">GText</span>&nbsp;<span class="keyword">of</span>&nbsp;string<br>
-&nbsp;&nbsp;<span class="keyword">and</span>&nbsp;typ&nbsp;=<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">TVoid</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.attributes<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">TInt</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.ikind&nbsp;*&nbsp;<span class="constructor">Cil</span>.attributes<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">TFloat</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.fkind&nbsp;*&nbsp;<span class="constructor">Cil</span>.attributes<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">TPtr</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.typ&nbsp;*&nbsp;<span class="constructor">Cil</span>.attributes<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">TArray</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.typ&nbsp;*&nbsp;<span class="constructor">Cil</span>.exp&nbsp;option&nbsp;*&nbsp;<span class="constructor">Cil</span>.attributes<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">TFun</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.typ&nbsp;*&nbsp;(string&nbsp;*&nbsp;<span class="constructor">Cil</span>.typ&nbsp;*&nbsp;<span class="constructor">Cil</span>.attributes)&nbsp;list&nbsp;option&nbsp;*<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bool&nbsp;*&nbsp;<span class="constructor">Cil</span>.attributes<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">TNamed</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.typeinfo&nbsp;*&nbsp;<span class="constructor">Cil</span>.attributes<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">TComp</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.compinfo&nbsp;*&nbsp;<span class="constructor">Cil</span>.attributes<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">TEnum</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.enuminfo&nbsp;*&nbsp;<span class="constructor">Cil</span>.attributes<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">TBuiltin_va_list</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.attributes<br>
-&nbsp;&nbsp;<span class="keyword">and</span>&nbsp;ikind&nbsp;=<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">IChar</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">ISChar</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">IUChar</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">IInt</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">IUInt</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">IShort</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">IUShort</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">ILong</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">IULong</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">ILongLong</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">IULongLong</span><br>
-&nbsp;&nbsp;<span class="keyword">and</span>&nbsp;fkind&nbsp;=&nbsp;<span class="constructor">FFloat</span>&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">FDouble</span>&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">FLongDouble</span><br>
-&nbsp;&nbsp;<span class="keyword">and</span>&nbsp;attribute&nbsp;=&nbsp;<span class="constructor">Attr</span>&nbsp;<span class="keyword">of</span>&nbsp;string&nbsp;*&nbsp;<span class="constructor">Cil</span>.attrparam&nbsp;list<br>
-&nbsp;&nbsp;<span class="keyword">and</span>&nbsp;attributes&nbsp;=&nbsp;<span class="constructor">Cil</span>.attribute&nbsp;list<br>
-&nbsp;&nbsp;<span class="keyword">and</span>&nbsp;attrparam&nbsp;=<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">AInt</span>&nbsp;<span class="keyword">of</span>&nbsp;int<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">AStr</span>&nbsp;<span class="keyword">of</span>&nbsp;string<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">ACons</span>&nbsp;<span class="keyword">of</span>&nbsp;string&nbsp;*&nbsp;<span class="constructor">Cil</span>.attrparam&nbsp;list<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">ASizeOf</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.typ<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">ASizeOfE</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.attrparam<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">ASizeOfS</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.typsig<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">AAlignOf</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.typ<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">AAlignOfE</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.attrparam<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">AAlignOfS</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.typsig<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">AUnOp</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.unop&nbsp;*&nbsp;<span class="constructor">Cil</span>.attrparam<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">ABinOp</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.binop&nbsp;*&nbsp;<span class="constructor">Cil</span>.attrparam&nbsp;*&nbsp;<span class="constructor">Cil</span>.attrparam<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">ADot</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.attrparam&nbsp;*&nbsp;string<br>
-&nbsp;&nbsp;<span class="keyword">and</span>&nbsp;compinfo&nbsp;=&nbsp;{<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">mutable</span>&nbsp;cstruct&nbsp;:&nbsp;bool;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">mutable</span>&nbsp;cname&nbsp;:&nbsp;string;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">mutable</span>&nbsp;ckey&nbsp;:&nbsp;int;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">mutable</span>&nbsp;cfields&nbsp;:&nbsp;<span class="constructor">Cil</span>.fieldinfo&nbsp;list;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">mutable</span>&nbsp;cattr&nbsp;:&nbsp;<span class="constructor">Cil</span>.attributes;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">mutable</span>&nbsp;cdefined&nbsp;:&nbsp;bool;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">mutable</span>&nbsp;creferenced&nbsp;:&nbsp;bool;<br>
-&nbsp;&nbsp;}<br>
-&nbsp;&nbsp;<span class="keyword">and</span>&nbsp;fieldinfo&nbsp;=&nbsp;{<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">mutable</span>&nbsp;fcomp&nbsp;:&nbsp;<span class="constructor">Cil</span>.compinfo;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">mutable</span>&nbsp;fname&nbsp;:&nbsp;string;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">mutable</span>&nbsp;ftype&nbsp;:&nbsp;<span class="constructor">Cil</span>.typ;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">mutable</span>&nbsp;fbitfield&nbsp;:&nbsp;int&nbsp;option;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">mutable</span>&nbsp;fattr&nbsp;:&nbsp;<span class="constructor">Cil</span>.attributes;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">mutable</span>&nbsp;floc&nbsp;:&nbsp;<span class="constructor">Cil</span>.location;<br>
-&nbsp;&nbsp;}<br>
-&nbsp;&nbsp;<span class="keyword">and</span>&nbsp;enuminfo&nbsp;=&nbsp;{<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">mutable</span>&nbsp;ename&nbsp;:&nbsp;string;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">mutable</span>&nbsp;eitems&nbsp;:&nbsp;(string&nbsp;*&nbsp;<span class="constructor">Cil</span>.exp&nbsp;*&nbsp;<span class="constructor">Cil</span>.location)&nbsp;list;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">mutable</span>&nbsp;eattr&nbsp;:&nbsp;<span class="constructor">Cil</span>.attributes;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">mutable</span>&nbsp;ereferenced&nbsp;:&nbsp;bool;<br>
-&nbsp;&nbsp;}<br>
-&nbsp;&nbsp;<span class="keyword">and</span>&nbsp;typeinfo&nbsp;=&nbsp;{<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">mutable</span>&nbsp;tname&nbsp;:&nbsp;string;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">mutable</span>&nbsp;ttype&nbsp;:&nbsp;<span class="constructor">Cil</span>.typ;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">mutable</span>&nbsp;treferenced&nbsp;:&nbsp;bool;<br>
-&nbsp;&nbsp;}<br>
-&nbsp;&nbsp;<span class="keyword">and</span>&nbsp;varinfo&nbsp;=&nbsp;{<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">mutable</span>&nbsp;vname&nbsp;:&nbsp;string;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">mutable</span>&nbsp;vtype&nbsp;:&nbsp;<span class="constructor">Cil</span>.typ;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">mutable</span>&nbsp;vattr&nbsp;:&nbsp;<span class="constructor">Cil</span>.attributes;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">mutable</span>&nbsp;vstorage&nbsp;:&nbsp;<span class="constructor">Cil</span>.storage;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">mutable</span>&nbsp;vglob&nbsp;:&nbsp;bool;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">mutable</span>&nbsp;vinline&nbsp;:&nbsp;bool;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">mutable</span>&nbsp;vdecl&nbsp;:&nbsp;<span class="constructor">Cil</span>.location;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">mutable</span>&nbsp;vid&nbsp;:&nbsp;int;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">mutable</span>&nbsp;vaddrof&nbsp;:&nbsp;bool;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">mutable</span>&nbsp;vreferenced&nbsp;:&nbsp;bool;<br>
-&nbsp;&nbsp;}<br>
-&nbsp;&nbsp;<span class="keyword">and</span>&nbsp;storage&nbsp;=&nbsp;<span class="constructor">NoStorage</span>&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Static</span>&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Register</span>&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Extern</span><br>
-&nbsp;&nbsp;<span class="keyword">and</span>&nbsp;exp&nbsp;=<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Const</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.constant<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Lval</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.lval<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">SizeOf</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.typ<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">SizeOfE</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.exp<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">SizeOfStr</span>&nbsp;<span class="keyword">of</span>&nbsp;string<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">AlignOf</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.typ<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">AlignOfE</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.exp<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">UnOp</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.unop&nbsp;*&nbsp;<span class="constructor">Cil</span>.exp&nbsp;*&nbsp;<span class="constructor">Cil</span>.typ<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">BinOp</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.binop&nbsp;*&nbsp;<span class="constructor">Cil</span>.exp&nbsp;*&nbsp;<span class="constructor">Cil</span>.exp&nbsp;*&nbsp;<span class="constructor">Cil</span>.typ<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">CastE</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.typ&nbsp;*&nbsp;<span class="constructor">Cil</span>.exp<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">AddrOf</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.lval<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">StartOf</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.lval<br>
-&nbsp;&nbsp;<span class="keyword">and</span>&nbsp;constant&nbsp;=<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">CInt64</span>&nbsp;<span class="keyword">of</span>&nbsp;int64&nbsp;*&nbsp;<span class="constructor">Cil</span>.ikind&nbsp;*&nbsp;string&nbsp;option<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">CStr</span>&nbsp;<span class="keyword">of</span>&nbsp;string<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">CWStr</span>&nbsp;<span class="keyword">of</span>&nbsp;int64&nbsp;list<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">CChr</span>&nbsp;<span class="keyword">of</span>&nbsp;char<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">CReal</span>&nbsp;<span class="keyword">of</span>&nbsp;float&nbsp;*&nbsp;<span class="constructor">Cil</span>.fkind&nbsp;*&nbsp;string&nbsp;option<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">CEnum</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.exp&nbsp;*&nbsp;string&nbsp;*&nbsp;<span class="constructor">Cil</span>.enuminfo<br>
-&nbsp;&nbsp;<span class="keyword">and</span>&nbsp;unop&nbsp;=&nbsp;<span class="constructor">Neg</span>&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">BNot</span>&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">LNot</span><br>
-&nbsp;&nbsp;<span class="keyword">and</span>&nbsp;binop&nbsp;=<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">PlusA</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">PlusPI</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">IndexPI</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">MinusA</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">MinusPI</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">MinusPP</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Mult</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Div</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Mod</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Shiftlt</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Shiftrt</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Lt</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Gt</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Le</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Ge</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Eq</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Ne</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">BAnd</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">BXor</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">BOr</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">LAnd</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">LOr</span><br>
-&nbsp;&nbsp;<span class="keyword">and</span>&nbsp;lval&nbsp;=&nbsp;<span class="constructor">Cil</span>.lhost&nbsp;*&nbsp;<span class="constructor">Cil</span>.offset<br>
-&nbsp;&nbsp;<span class="keyword">and</span>&nbsp;lhost&nbsp;=&nbsp;<span class="constructor">Var</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.varinfo&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Mem</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.exp<br>
-&nbsp;&nbsp;<span class="keyword">and</span>&nbsp;offset&nbsp;=<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">NoOffset</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Field</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.fieldinfo&nbsp;*&nbsp;<span class="constructor">Cil</span>.offset<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Index</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.exp&nbsp;*&nbsp;<span class="constructor">Cil</span>.offset<br>
-&nbsp;&nbsp;<span class="keyword">and</span>&nbsp;init&nbsp;=<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">SingleInit</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.exp<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">CompoundInit</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.typ&nbsp;*&nbsp;(<span class="constructor">Cil</span>.offset&nbsp;*&nbsp;<span class="constructor">Cil</span>.init)&nbsp;list<br>
-&nbsp;&nbsp;<span class="keyword">and</span>&nbsp;initinfo&nbsp;=&nbsp;{&nbsp;<span class="keyword">mutable</span>&nbsp;init&nbsp;:&nbsp;<span class="constructor">Cil</span>.init&nbsp;option;&nbsp;}<br>
-&nbsp;&nbsp;<span class="keyword">and</span>&nbsp;fundec&nbsp;=&nbsp;{<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">mutable</span>&nbsp;svar&nbsp;:&nbsp;<span class="constructor">Cil</span>.varinfo;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">mutable</span>&nbsp;sformals&nbsp;:&nbsp;<span class="constructor">Cil</span>.varinfo&nbsp;list;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">mutable</span>&nbsp;slocals&nbsp;:&nbsp;<span class="constructor">Cil</span>.varinfo&nbsp;list;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">mutable</span>&nbsp;smaxid&nbsp;:&nbsp;int;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">mutable</span>&nbsp;sbody&nbsp;:&nbsp;<span class="constructor">Cil</span>.block;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">mutable</span>&nbsp;smaxstmtid&nbsp;:&nbsp;int&nbsp;option;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">mutable</span>&nbsp;sallstmts&nbsp;:&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;list;<br>
-&nbsp;&nbsp;}<br>
-&nbsp;&nbsp;<span class="keyword">and</span>&nbsp;block&nbsp;=&nbsp;{<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">mutable</span>&nbsp;battrs&nbsp;:&nbsp;<span class="constructor">Cil</span>.attributes;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">mutable</span>&nbsp;bstmts&nbsp;:&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;list;<br>
-&nbsp;&nbsp;}<br>
-&nbsp;&nbsp;<span class="keyword">and</span>&nbsp;stmt&nbsp;=&nbsp;{<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">mutable</span>&nbsp;labels&nbsp;:&nbsp;<span class="constructor">Cil</span>.label&nbsp;list;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">mutable</span>&nbsp;skind&nbsp;:&nbsp;<span class="constructor">Cil</span>.stmtkind;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">mutable</span>&nbsp;sid&nbsp;:&nbsp;int;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">mutable</span>&nbsp;succs&nbsp;:&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;list;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">mutable</span>&nbsp;preds&nbsp;:&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;list;<br>
-&nbsp;&nbsp;}<br>
-&nbsp;&nbsp;<span class="keyword">and</span>&nbsp;label&nbsp;=<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Label</span>&nbsp;<span class="keyword">of</span>&nbsp;string&nbsp;*&nbsp;<span class="constructor">Cil</span>.location&nbsp;*&nbsp;bool<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Case</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.exp&nbsp;*&nbsp;<span class="constructor">Cil</span>.location<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Default</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.location<br>
-&nbsp;&nbsp;<span class="keyword">and</span>&nbsp;stmtkind&nbsp;=<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Instr</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.instr&nbsp;list<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Return</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.exp&nbsp;option&nbsp;*&nbsp;<span class="constructor">Cil</span>.location<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Goto</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;<span class="constructor">Pervasives</span>.ref&nbsp;*&nbsp;<span class="constructor">Cil</span>.location<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Break</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.location<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Continue</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.location<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">If</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.exp&nbsp;*&nbsp;<span class="constructor">Cil</span>.block&nbsp;*&nbsp;<span class="constructor">Cil</span>.block&nbsp;*&nbsp;<span class="constructor">Cil</span>.location<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Switch</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.exp&nbsp;*&nbsp;<span class="constructor">Cil</span>.block&nbsp;*&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;list&nbsp;*&nbsp;<span class="constructor">Cil</span>.location<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Loop</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.block&nbsp;*&nbsp;<span class="constructor">Cil</span>.location&nbsp;*&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;option&nbsp;*&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;option<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Block</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.block<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">TryFinally</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.block&nbsp;*&nbsp;<span class="constructor">Cil</span>.block&nbsp;*&nbsp;<span class="constructor">Cil</span>.location<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">TryExcept</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.block&nbsp;*&nbsp;(<span class="constructor">Cil</span>.instr&nbsp;list&nbsp;*&nbsp;<span class="constructor">Cil</span>.exp)&nbsp;*&nbsp;<span class="constructor">Cil</span>.block&nbsp;*<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Cil</span>.location<br>
-&nbsp;&nbsp;<span class="keyword">and</span>&nbsp;instr&nbsp;=<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Set</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.lval&nbsp;*&nbsp;<span class="constructor">Cil</span>.exp&nbsp;*&nbsp;<span class="constructor">Cil</span>.location<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Call</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.lval&nbsp;option&nbsp;*&nbsp;<span class="constructor">Cil</span>.exp&nbsp;*&nbsp;<span class="constructor">Cil</span>.exp&nbsp;list&nbsp;*&nbsp;<span class="constructor">Cil</span>.location<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Asm</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.attributes&nbsp;*&nbsp;string&nbsp;list&nbsp;*&nbsp;(string&nbsp;*&nbsp;<span class="constructor">Cil</span>.lval)&nbsp;list&nbsp;*<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(string&nbsp;*&nbsp;<span class="constructor">Cil</span>.exp)&nbsp;list&nbsp;*&nbsp;string&nbsp;list&nbsp;*&nbsp;<span class="constructor">Cil</span>.location<br>
-&nbsp;&nbsp;<span class="keyword">and</span>&nbsp;location&nbsp;=&nbsp;{&nbsp;line&nbsp;:&nbsp;int;&nbsp;file&nbsp;:&nbsp;string;&nbsp;byte&nbsp;:&nbsp;int;&nbsp;}<br>
-&nbsp;&nbsp;<span class="keyword">and</span>&nbsp;typsig&nbsp;=<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">TSArray</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.typsig&nbsp;*&nbsp;int64&nbsp;option&nbsp;*&nbsp;<span class="constructor">Cil</span>.attribute&nbsp;list<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">TSPtr</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.typsig&nbsp;*&nbsp;<span class="constructor">Cil</span>.attribute&nbsp;list<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">TSComp</span>&nbsp;<span class="keyword">of</span>&nbsp;bool&nbsp;*&nbsp;string&nbsp;*&nbsp;<span class="constructor">Cil</span>.attribute&nbsp;list<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">TSFun</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.typsig&nbsp;*&nbsp;<span class="constructor">Cil</span>.typsig&nbsp;list&nbsp;*&nbsp;bool&nbsp;*&nbsp;<span class="constructor">Cil</span>.attribute&nbsp;list<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">TSEnum</span>&nbsp;<span class="keyword">of</span>&nbsp;string&nbsp;*&nbsp;<span class="constructor">Cil</span>.attribute&nbsp;list<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">TSBase</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.typ<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;lowerConstants&nbsp;:&nbsp;bool&nbsp;ref<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;insertImplicitCasts&nbsp;:&nbsp;bool&nbsp;<span class="constructor">Pervasives</span>.ref<br>
-&nbsp;&nbsp;<span class="keyword">type</span>&nbsp;featureDescr&nbsp;=&nbsp;{<br>
-&nbsp;&nbsp;&nbsp;&nbsp;fd_enabled&nbsp;:&nbsp;bool&nbsp;<span class="constructor">Pervasives</span>.ref;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;fd_name&nbsp;:&nbsp;string;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;fd_description&nbsp;:&nbsp;string;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;fd_extraopt&nbsp;:&nbsp;(string&nbsp;*&nbsp;<span class="constructor">Arg</span>.spec&nbsp;*&nbsp;string)&nbsp;list;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;fd_doit&nbsp;:&nbsp;<span class="constructor">Cil</span>.file&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;fd_post_check&nbsp;:&nbsp;bool;<br>
-&nbsp;&nbsp;}<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;compareLoc&nbsp;:&nbsp;<span class="constructor">Cil</span>.location&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.location&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;int<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;emptyFunction&nbsp;:&nbsp;string&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.fundec<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;setFormals&nbsp;:&nbsp;<span class="constructor">Cil</span>.fundec&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.varinfo&nbsp;list&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;setFunctionType&nbsp;:&nbsp;<span class="constructor">Cil</span>.fundec&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.typ&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;setFunctionTypeMakeFormals&nbsp;:&nbsp;<span class="constructor">Cil</span>.fundec&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.typ&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;setMaxId&nbsp;:&nbsp;<span class="constructor">Cil</span>.fundec&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;dummyFunDec&nbsp;:&nbsp;<span class="constructor">Cil</span>.fundec<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;dummyFile&nbsp;:&nbsp;<span class="constructor">Cil</span>.file<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;saveBinaryFile&nbsp;:&nbsp;<span class="constructor">Cil</span>.file&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;string&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;saveBinaryFileChannel&nbsp;:&nbsp;<span class="constructor">Cil</span>.file&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pervasives</span>.out_channel&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;loadBinaryFile&nbsp;:&nbsp;string&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.file<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;getGlobInit&nbsp;:&nbsp;?main_name:string&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.file&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.fundec<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;iterGlobals&nbsp;:&nbsp;<span class="constructor">Cil</span>.file&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;(<span class="constructor">Cil</span>.global&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit)&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;foldGlobals&nbsp;:&nbsp;<span class="constructor">Cil</span>.file&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;(<span class="keywordsign">'</span>a&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.global&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a)&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;mapGlobals&nbsp;:&nbsp;<span class="constructor">Cil</span>.file&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;(<span class="constructor">Cil</span>.global&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.global)&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;new_sid&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;int<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;prepareCFG&nbsp;:&nbsp;<span class="constructor">Cil</span>.fundec&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;computeCFGInfo&nbsp;:&nbsp;<span class="constructor">Cil</span>.fundec&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;bool&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;copyFunction&nbsp;:&nbsp;<span class="constructor">Cil</span>.fundec&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;string&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.fundec<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;pushGlobal&nbsp;:<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Cil</span>.global&nbsp;<span class="keywordsign">-&gt;</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;types:<span class="constructor">Cil</span>.global&nbsp;list&nbsp;<span class="constructor">Pervasives</span>.ref&nbsp;<span class="keywordsign">-&gt;</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;variables:<span class="constructor">Cil</span>.global&nbsp;list&nbsp;<span class="constructor">Pervasives</span>.ref&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;invalidStmt&nbsp;:&nbsp;<span class="constructor">Cil</span>.stmt<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;gccBuiltins&nbsp;:&nbsp;(string,&nbsp;<span class="constructor">Cil</span>.typ&nbsp;*&nbsp;<span class="constructor">Cil</span>.typ&nbsp;list&nbsp;*&nbsp;bool)&nbsp;<span class="constructor">Hashtbl</span>.t<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;msvcBuiltins&nbsp;:&nbsp;(string,&nbsp;<span class="constructor">Cil</span>.typ&nbsp;*&nbsp;<span class="constructor">Cil</span>.typ&nbsp;list&nbsp;*&nbsp;bool)&nbsp;<span class="constructor">Hashtbl</span>.t<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;makeZeroInit&nbsp;:&nbsp;<span class="constructor">Cil</span>.typ&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.init<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;foldLeftCompound&nbsp;:<br>
-&nbsp;&nbsp;&nbsp;&nbsp;doinit:(<span class="constructor">Cil</span>.offset&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.init&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.typ&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a)&nbsp;<span class="keywordsign">-&gt;</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;ct:<span class="constructor">Cil</span>.typ&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;initl:(<span class="constructor">Cil</span>.offset&nbsp;*&nbsp;<span class="constructor">Cil</span>.init)&nbsp;list&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;acc:<span class="keywordsign">'</span>a&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;foldLeftCompoundAll&nbsp;:<br>
-&nbsp;&nbsp;&nbsp;&nbsp;doinit:(<span class="constructor">Cil</span>.offset&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.init&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.typ&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a)&nbsp;<span class="keywordsign">-&gt;</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;ct:<span class="constructor">Cil</span>.typ&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;initl:(<span class="constructor">Cil</span>.offset&nbsp;*&nbsp;<span class="constructor">Cil</span>.init)&nbsp;list&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;acc:<span class="keywordsign">'</span>a&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;voidType&nbsp;:&nbsp;<span class="constructor">Cil</span>.typ<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;isVoidType&nbsp;:&nbsp;<span class="constructor">Cil</span>.typ&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;bool<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;isVoidPtrType&nbsp;:&nbsp;<span class="constructor">Cil</span>.typ&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;bool<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;intType&nbsp;:&nbsp;<span class="constructor">Cil</span>.typ<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;uintType&nbsp;:&nbsp;<span class="constructor">Cil</span>.typ<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;longType&nbsp;:&nbsp;<span class="constructor">Cil</span>.typ<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;ulongType&nbsp;:&nbsp;<span class="constructor">Cil</span>.typ<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;charType&nbsp;:&nbsp;<span class="constructor">Cil</span>.typ<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;charPtrType&nbsp;:&nbsp;<span class="constructor">Cil</span>.typ<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;wcharKind&nbsp;:&nbsp;<span class="constructor">Cil</span>.ikind&nbsp;<span class="constructor">Pervasives</span>.ref<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;wcharType&nbsp;:&nbsp;<span class="constructor">Cil</span>.typ&nbsp;<span class="constructor">Pervasives</span>.ref<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;charConstPtrType&nbsp;:&nbsp;<span class="constructor">Cil</span>.typ<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;voidPtrType&nbsp;:&nbsp;<span class="constructor">Cil</span>.typ<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;intPtrType&nbsp;:&nbsp;<span class="constructor">Cil</span>.typ<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;uintPtrType&nbsp;:&nbsp;<span class="constructor">Cil</span>.typ<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;doubleType&nbsp;:&nbsp;<span class="constructor">Cil</span>.typ<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;upointType&nbsp;:&nbsp;<span class="constructor">Cil</span>.typ&nbsp;<span class="constructor">Pervasives</span>.ref<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;typeOfSizeOf&nbsp;:&nbsp;<span class="constructor">Cil</span>.typ&nbsp;<span class="constructor">Pervasives</span>.ref<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;isSigned&nbsp;:&nbsp;<span class="constructor">Cil</span>.ikind&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;bool<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;mkCompInfo&nbsp;:<br>
-&nbsp;&nbsp;&nbsp;&nbsp;bool&nbsp;<span class="keywordsign">-&gt;</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;<span class="keywordsign">-&gt;</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;(<span class="constructor">Cil</span>.compinfo&nbsp;<span class="keywordsign">-&gt;</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(string&nbsp;*&nbsp;<span class="constructor">Cil</span>.typ&nbsp;*&nbsp;int&nbsp;option&nbsp;*&nbsp;<span class="constructor">Cil</span>.attributes&nbsp;*&nbsp;<span class="constructor">Cil</span>.location)&nbsp;list)&nbsp;<span class="keywordsign">-&gt;</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Cil</span>.attributes&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.compinfo<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;copyCompInfo&nbsp;:&nbsp;<span class="constructor">Cil</span>.compinfo&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;string&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.compinfo<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;missingFieldName&nbsp;:&nbsp;string<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;compFullName&nbsp;:&nbsp;<span class="constructor">Cil</span>.compinfo&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;string<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;isCompleteType&nbsp;:&nbsp;<span class="constructor">Cil</span>.typ&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;bool<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;unrollType&nbsp;:&nbsp;<span class="constructor">Cil</span>.typ&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.typ<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;unrollTypeDeep&nbsp;:&nbsp;<span class="constructor">Cil</span>.typ&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.typ<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;separateStorageModifiers&nbsp;:<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Cil</span>.attribute&nbsp;list&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.attribute&nbsp;list&nbsp;*&nbsp;<span class="constructor">Cil</span>.attribute&nbsp;list<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;isIntegralType&nbsp;:&nbsp;<span class="constructor">Cil</span>.typ&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;bool<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;isArithmeticType&nbsp;:&nbsp;<span class="constructor">Cil</span>.typ&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;bool<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;isPointerType&nbsp;:&nbsp;<span class="constructor">Cil</span>.typ&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;bool<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;isFunctionType&nbsp;:&nbsp;<span class="constructor">Cil</span>.typ&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;bool<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;argsToList&nbsp;:<br>
-&nbsp;&nbsp;&nbsp;&nbsp;(string&nbsp;*&nbsp;<span class="constructor">Cil</span>.typ&nbsp;*&nbsp;<span class="constructor">Cil</span>.attributes)&nbsp;list&nbsp;option&nbsp;<span class="keywordsign">-&gt;</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;(string&nbsp;*&nbsp;<span class="constructor">Cil</span>.typ&nbsp;*&nbsp;<span class="constructor">Cil</span>.attributes)&nbsp;list<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;isArrayType&nbsp;:&nbsp;<span class="constructor">Cil</span>.typ&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;bool<br>
-&nbsp;&nbsp;<span class="keyword">exception</span>&nbsp;<span class="constructor">LenOfArray</span><br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;lenOfArray&nbsp;:&nbsp;<span class="constructor">Cil</span>.exp&nbsp;option&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;int<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;getCompField&nbsp;:&nbsp;<span class="constructor">Cil</span>.compinfo&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;string&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.fieldinfo<br>
-&nbsp;&nbsp;<span class="keyword">type</span>&nbsp;existsAction&nbsp;=&nbsp;<span class="constructor">ExistsTrue</span>&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">ExistsFalse</span>&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">ExistsMaybe</span><br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;existsType&nbsp;:&nbsp;(<span class="constructor">Cil</span>.typ&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.existsAction)&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.typ&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;bool<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;splitFunctionType&nbsp;:<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Cil</span>.typ&nbsp;<span class="keywordsign">-&gt;</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Cil</span>.typ&nbsp;*&nbsp;(string&nbsp;*&nbsp;<span class="constructor">Cil</span>.typ&nbsp;*&nbsp;<span class="constructor">Cil</span>.attributes)&nbsp;list&nbsp;option&nbsp;*&nbsp;bool&nbsp;*<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Cil</span>.attributes<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;splitFunctionTypeVI&nbsp;:<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Cil</span>.varinfo&nbsp;<span class="keywordsign">-&gt;</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Cil</span>.typ&nbsp;*&nbsp;(string&nbsp;*&nbsp;<span class="constructor">Cil</span>.typ&nbsp;*&nbsp;<span class="constructor">Cil</span>.attributes)&nbsp;list&nbsp;option&nbsp;*&nbsp;bool&nbsp;*<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Cil</span>.attributes<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;d_typsig&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.typsig&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;typeSig&nbsp;:&nbsp;<span class="constructor">Cil</span>.typ&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.typsig<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;typeSigWithAttrs&nbsp;:<br>
-&nbsp;&nbsp;&nbsp;&nbsp;?ignoreSign:bool&nbsp;<span class="keywordsign">-&gt;</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;(<span class="constructor">Cil</span>.attributes&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.attributes)&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.typ&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.typsig<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;setTypeSigAttrs&nbsp;:&nbsp;<span class="constructor">Cil</span>.attributes&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.typsig&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.typsig<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;typeSigAttrs&nbsp;:&nbsp;<span class="constructor">Cil</span>.typsig&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.attributes<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;makeVarinfo&nbsp;:&nbsp;bool&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;string&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.typ&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.varinfo<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;makeFormalVar&nbsp;:<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Cil</span>.fundec&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;?where:string&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;string&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.typ&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.varinfo<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;makeLocalVar&nbsp;:<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Cil</span>.fundec&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;?insert:bool&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;string&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.typ&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.varinfo<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;makeTempVar&nbsp;:&nbsp;<span class="constructor">Cil</span>.fundec&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;?name:string&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.typ&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.varinfo<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;makeGlobalVar&nbsp;:&nbsp;string&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.typ&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.varinfo<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;copyVarinfo&nbsp;:&nbsp;<span class="constructor">Cil</span>.varinfo&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;string&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.varinfo<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;newVID&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;int<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;addOffsetLval&nbsp;:&nbsp;<span class="constructor">Cil</span>.offset&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.lval&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.lval<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;addOffset&nbsp;:&nbsp;<span class="constructor">Cil</span>.offset&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.offset&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.offset<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;removeOffsetLval&nbsp;:&nbsp;<span class="constructor">Cil</span>.lval&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.lval&nbsp;*&nbsp;<span class="constructor">Cil</span>.offset<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;removeOffset&nbsp;:&nbsp;<span class="constructor">Cil</span>.offset&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.offset&nbsp;*&nbsp;<span class="constructor">Cil</span>.offset<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;typeOfLval&nbsp;:&nbsp;<span class="constructor">Cil</span>.lval&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.typ<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;typeOffset&nbsp;:&nbsp;<span class="constructor">Cil</span>.typ&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.offset&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.typ<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;zero&nbsp;:&nbsp;<span class="constructor">Cil</span>.exp<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;one&nbsp;:&nbsp;<span class="constructor">Cil</span>.exp<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;mone&nbsp;:&nbsp;<span class="constructor">Cil</span>.exp<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;kinteger64&nbsp;:&nbsp;<span class="constructor">Cil</span>.ikind&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;int64&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.exp<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;kinteger&nbsp;:&nbsp;<span class="constructor">Cil</span>.ikind&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;int&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.exp<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;integer&nbsp;:&nbsp;int&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.exp<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;isInteger&nbsp;:&nbsp;<span class="constructor">Cil</span>.exp&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;int64&nbsp;option<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;isConstant&nbsp;:&nbsp;<span class="constructor">Cil</span>.exp&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;bool<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;isZero&nbsp;:&nbsp;<span class="constructor">Cil</span>.exp&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;bool<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;charConstToInt&nbsp;:&nbsp;char&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.constant<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;constFold&nbsp;:&nbsp;bool&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.exp&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.exp<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;constFoldBinOp&nbsp;:<br>
-&nbsp;&nbsp;&nbsp;&nbsp;bool&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.binop&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.exp&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.exp&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.typ&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.exp<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;increm&nbsp;:&nbsp;<span class="constructor">Cil</span>.exp&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;int&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.exp<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;var&nbsp;:&nbsp;<span class="constructor">Cil</span>.varinfo&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.lval<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;mkAddrOf&nbsp;:&nbsp;<span class="constructor">Cil</span>.lval&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.exp<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;mkAddrOrStartOf&nbsp;:&nbsp;<span class="constructor">Cil</span>.lval&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.exp<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;mkMem&nbsp;:&nbsp;addr:<span class="constructor">Cil</span>.exp&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;off:<span class="constructor">Cil</span>.offset&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.lval<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;mkString&nbsp;:&nbsp;string&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.exp<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;mkCastT&nbsp;:&nbsp;e:<span class="constructor">Cil</span>.exp&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;oldt:<span class="constructor">Cil</span>.typ&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;newt:<span class="constructor">Cil</span>.typ&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.exp<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;mkCast&nbsp;:&nbsp;e:<span class="constructor">Cil</span>.exp&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;newt:<span class="constructor">Cil</span>.typ&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.exp<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;stripCasts&nbsp;:&nbsp;<span class="constructor">Cil</span>.exp&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.exp<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;typeOf&nbsp;:&nbsp;<span class="constructor">Cil</span>.exp&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.typ<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;parseInt&nbsp;:&nbsp;string&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.exp<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;mkStmt&nbsp;:&nbsp;<span class="constructor">Cil</span>.stmtkind&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.stmt<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;mkBlock&nbsp;:&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;list&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.block<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;mkStmtOneInstr&nbsp;:&nbsp;<span class="constructor">Cil</span>.instr&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.stmt<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;compactStmts&nbsp;:&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;list&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;list<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;mkEmptyStmt&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.stmt<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;dummyInstr&nbsp;:&nbsp;<span class="constructor">Cil</span>.instr<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;dummyStmt&nbsp;:&nbsp;<span class="constructor">Cil</span>.stmt<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;mkWhile&nbsp;:&nbsp;guard:<span class="constructor">Cil</span>.exp&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;body:<span class="constructor">Cil</span>.stmt&nbsp;list&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;list<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;mkForIncr&nbsp;:<br>
-&nbsp;&nbsp;&nbsp;&nbsp;iter:<span class="constructor">Cil</span>.varinfo&nbsp;<span class="keywordsign">-&gt;</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;first:<span class="constructor">Cil</span>.exp&nbsp;<span class="keywordsign">-&gt;</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;stopat:<span class="constructor">Cil</span>.exp&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;incr:<span class="constructor">Cil</span>.exp&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;body:<span class="constructor">Cil</span>.stmt&nbsp;list&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;list<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;mkFor&nbsp;:<br>
-&nbsp;&nbsp;&nbsp;&nbsp;start:<span class="constructor">Cil</span>.stmt&nbsp;list&nbsp;<span class="keywordsign">-&gt;</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;guard:<span class="constructor">Cil</span>.exp&nbsp;<span class="keywordsign">-&gt;</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;next:<span class="constructor">Cil</span>.stmt&nbsp;list&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;body:<span class="constructor">Cil</span>.stmt&nbsp;list&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;list<br>
-&nbsp;&nbsp;<span class="keyword">type</span>&nbsp;attributeClass&nbsp;=&nbsp;<span class="constructor">AttrName</span>&nbsp;<span class="keyword">of</span>&nbsp;bool&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">AttrFunType</span>&nbsp;<span class="keyword">of</span>&nbsp;bool&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">AttrType</span><br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;attributeHash&nbsp;:&nbsp;(string,&nbsp;<span class="constructor">Cil</span>.attributeClass)&nbsp;<span class="constructor">Hashtbl</span>.t<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;partitionAttributes&nbsp;:<br>
-&nbsp;&nbsp;&nbsp;&nbsp;default:<span class="constructor">Cil</span>.attributeClass&nbsp;<span class="keywordsign">-&gt;</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Cil</span>.attributes&nbsp;<span class="keywordsign">-&gt;</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Cil</span>.attribute&nbsp;list&nbsp;*&nbsp;<span class="constructor">Cil</span>.attribute&nbsp;list&nbsp;*&nbsp;<span class="constructor">Cil</span>.attribute&nbsp;list<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;addAttribute&nbsp;:&nbsp;<span class="constructor">Cil</span>.attribute&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.attributes&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.attributes<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;addAttributes&nbsp;:&nbsp;<span class="constructor">Cil</span>.attribute&nbsp;list&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.attributes&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.attributes<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;dropAttribute&nbsp;:&nbsp;string&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.attributes&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.attributes<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;dropAttributes&nbsp;:&nbsp;string&nbsp;list&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.attributes&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.attributes<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;filterAttributes&nbsp;:&nbsp;string&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.attributes&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.attributes<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;hasAttribute&nbsp;:&nbsp;string&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.attributes&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;bool<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;typeAttrs&nbsp;:&nbsp;<span class="constructor">Cil</span>.typ&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.attribute&nbsp;list<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;setTypeAttrs&nbsp;:&nbsp;<span class="constructor">Cil</span>.typ&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.attributes&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.typ<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;typeAddAttributes&nbsp;:&nbsp;<span class="constructor">Cil</span>.attribute&nbsp;list&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.typ&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.typ<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;typeRemoveAttributes&nbsp;:&nbsp;string&nbsp;list&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.typ&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.typ<br>
-&nbsp;&nbsp;<span class="keyword">type</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;visitAction&nbsp;=<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">SkipChildren</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">DoChildren</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">ChangeTo</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="keywordsign">'</span>a<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">ChangeDoChildrenPost</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;*&nbsp;(<span class="keywordsign">'</span>a&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a)<br>
-&nbsp;&nbsp;<span class="keyword">class</span>&nbsp;<span class="keyword">type</span>&nbsp;cilVisitor&nbsp;=<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">object</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;queueInstr&nbsp;:&nbsp;<span class="constructor">Cil</span>.instr&nbsp;list&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;unqueueInstr&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.instr&nbsp;list<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;vattr&nbsp;:&nbsp;<span class="constructor">Cil</span>.attribute&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.attribute&nbsp;list&nbsp;<span class="constructor">Cil</span>.visitAction<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;vattrparam&nbsp;:&nbsp;<span class="constructor">Cil</span>.attrparam&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.attrparam&nbsp;<span class="constructor">Cil</span>.visitAction<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;vblock&nbsp;:&nbsp;<span class="constructor">Cil</span>.block&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.block&nbsp;<span class="constructor">Cil</span>.visitAction<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;vexpr&nbsp;:&nbsp;<span class="constructor">Cil</span>.exp&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.exp&nbsp;<span class="constructor">Cil</span>.visitAction<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;vfunc&nbsp;:&nbsp;<span class="constructor">Cil</span>.fundec&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.fundec&nbsp;<span class="constructor">Cil</span>.visitAction<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;vglob&nbsp;:&nbsp;<span class="constructor">Cil</span>.global&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.global&nbsp;list&nbsp;<span class="constructor">Cil</span>.visitAction<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;vinit&nbsp;:&nbsp;<span class="constructor">Cil</span>.init&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.init&nbsp;<span class="constructor">Cil</span>.visitAction<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;vinitoffs&nbsp;:&nbsp;<span class="constructor">Cil</span>.offset&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.offset&nbsp;<span class="constructor">Cil</span>.visitAction<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;vinst&nbsp;:&nbsp;<span class="constructor">Cil</span>.instr&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.instr&nbsp;list&nbsp;<span class="constructor">Cil</span>.visitAction<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;vlval&nbsp;:&nbsp;<span class="constructor">Cil</span>.lval&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.lval&nbsp;<span class="constructor">Cil</span>.visitAction<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;voffs&nbsp;:&nbsp;<span class="constructor">Cil</span>.offset&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.offset&nbsp;<span class="constructor">Cil</span>.visitAction<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;vstmt&nbsp;:&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;<span class="constructor">Cil</span>.visitAction<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;vtype&nbsp;:&nbsp;<span class="constructor">Cil</span>.typ&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.typ&nbsp;<span class="constructor">Cil</span>.visitAction<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;vvdec&nbsp;:&nbsp;<span class="constructor">Cil</span>.varinfo&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.varinfo&nbsp;<span class="constructor">Cil</span>.visitAction<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;vvrbl&nbsp;:&nbsp;<span class="constructor">Cil</span>.varinfo&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.varinfo&nbsp;<span class="constructor">Cil</span>.visitAction<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">end</span><br>
-&nbsp;&nbsp;<span class="keyword">class</span>&nbsp;nopCilVisitor&nbsp;:&nbsp;cilVisitor<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;visitCilFile&nbsp;:&nbsp;<span class="constructor">Cil</span>.cilVisitor&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.file&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;visitCilFileSameGlobals&nbsp;:&nbsp;<span class="constructor">Cil</span>.cilVisitor&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.file&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;visitCilGlobal&nbsp;:&nbsp;<span class="constructor">Cil</span>.cilVisitor&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.global&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.global&nbsp;list<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;visitCilFunction&nbsp;:&nbsp;<span class="constructor">Cil</span>.cilVisitor&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.fundec&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.fundec<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;visitCilExpr&nbsp;:&nbsp;<span class="constructor">Cil</span>.cilVisitor&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.exp&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.exp<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;visitCilLval&nbsp;:&nbsp;<span class="constructor">Cil</span>.cilVisitor&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.lval&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.lval<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;visitCilOffset&nbsp;:&nbsp;<span class="constructor">Cil</span>.cilVisitor&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.offset&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.offset<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;visitCilInitOffset&nbsp;:&nbsp;<span class="constructor">Cil</span>.cilVisitor&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.offset&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.offset<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;visitCilInstr&nbsp;:&nbsp;<span class="constructor">Cil</span>.cilVisitor&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.instr&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.instr&nbsp;list<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;visitCilStmt&nbsp;:&nbsp;<span class="constructor">Cil</span>.cilVisitor&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.stmt<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;visitCilBlock&nbsp;:&nbsp;<span class="constructor">Cil</span>.cilVisitor&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.block&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.block<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;visitCilType&nbsp;:&nbsp;<span class="constructor">Cil</span>.cilVisitor&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.typ&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.typ<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;visitCilVarDecl&nbsp;:&nbsp;<span class="constructor">Cil</span>.cilVisitor&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.varinfo&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.varinfo<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;visitCilInit&nbsp;:&nbsp;<span class="constructor">Cil</span>.cilVisitor&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.init&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.init<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;visitCilAttributes&nbsp;:<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Cil</span>.cilVisitor&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.attribute&nbsp;list&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.attribute&nbsp;list<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;msvcMode&nbsp;:&nbsp;bool&nbsp;<span class="constructor">Pervasives</span>.ref<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;useLogicalOperators&nbsp;:&nbsp;bool&nbsp;<span class="constructor">Pervasives</span>.ref<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;constFoldVisitor&nbsp;:&nbsp;bool&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.cilVisitor<br>
-&nbsp;&nbsp;<span class="keyword">type</span>&nbsp;lineDirectiveStyle&nbsp;=<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">LineComment</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">LinePreprocessorInput</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">LinePreprocessorOutput</span><br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;lineDirectiveStyle&nbsp;:&nbsp;<span class="constructor">Cil</span>.lineDirectiveStyle&nbsp;option&nbsp;<span class="constructor">Pervasives</span>.ref<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;print_CIL_Input&nbsp;:&nbsp;bool&nbsp;<span class="constructor">Pervasives</span>.ref<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;printCilAsIs&nbsp;:&nbsp;bool&nbsp;<span class="constructor">Pervasives</span>.ref<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;lineLength&nbsp;:&nbsp;int&nbsp;<span class="constructor">Pervasives</span>.ref<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;forgcc&nbsp;:&nbsp;string&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;string<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;currentLoc&nbsp;:&nbsp;<span class="constructor">Cil</span>.location&nbsp;<span class="constructor">Pervasives</span>.ref<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;currentGlobal&nbsp;:&nbsp;<span class="constructor">Cil</span>.global&nbsp;<span class="constructor">Pervasives</span>.ref<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;d_loc&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.location&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;d_thisloc&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;d_ikind&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.ikind&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;d_fkind&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.fkind&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;d_storage&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.storage&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;d_const&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.constant&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;derefStarLevel&nbsp;:&nbsp;int<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;indexLevel&nbsp;:&nbsp;int<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;arrowLevel&nbsp;:&nbsp;int<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;addrOfLevel&nbsp;:&nbsp;int<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;additiveLevel&nbsp;:&nbsp;int<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;comparativeLevel&nbsp;:&nbsp;int<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;bitwiseLevel&nbsp;:&nbsp;int<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;getParenthLevel&nbsp;:&nbsp;<span class="constructor">Cil</span>.exp&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;int<br>
-&nbsp;&nbsp;<span class="keyword">class</span>&nbsp;<span class="keyword">type</span>&nbsp;cilPrinter&nbsp;=<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">object</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;dBlock&nbsp;:&nbsp;<span class="constructor">Pervasives</span>.out_channel&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;int&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.block&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;dGlobal&nbsp;:&nbsp;<span class="constructor">Pervasives</span>.out_channel&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.global&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;dInit&nbsp;:&nbsp;<span class="constructor">Pervasives</span>.out_channel&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;int&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.init&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;dStmt&nbsp;:&nbsp;<span class="constructor">Pervasives</span>.out_channel&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;int&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;pAttr&nbsp;:&nbsp;<span class="constructor">Cil</span>.attribute&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc&nbsp;*&nbsp;bool<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;pAttrParam&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.attrparam&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;pAttrs&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.attributes&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;pBlock&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.block&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;pExp&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.exp&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;pFieldDecl&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.fieldinfo&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;pGlobal&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.global&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;pInit&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.init&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;pInstr&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.instr&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;pLabel&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.label&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;pLineDirective&nbsp;:&nbsp;?forcefile:bool&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.location&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;pLval&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.lval&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;pOffset&nbsp;:&nbsp;<span class="constructor">Pretty</span>.doc&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.offset&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;pStmt&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;pStmtKind&nbsp;:&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.stmtkind&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;pType&nbsp;:&nbsp;<span class="constructor">Pretty</span>.doc&nbsp;option&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.typ&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;pVDecl&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.varinfo&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">method</span>&nbsp;pVar&nbsp;:&nbsp;<span class="constructor">Cil</span>.varinfo&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">end</span><br>
-&nbsp;&nbsp;<span class="keyword">class</span>&nbsp;defaultCilPrinterClass&nbsp;:&nbsp;cilPrinter<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;defaultCilPrinter&nbsp;:&nbsp;<span class="constructor">Cil</span>.cilPrinter<br>
-&nbsp;&nbsp;<span class="keyword">class</span>&nbsp;plainCilPrinterClass&nbsp;:&nbsp;cilPrinter<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;plainCilPrinter&nbsp;:&nbsp;<span class="constructor">Cil</span>.cilPrinter<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;printerForMaincil&nbsp;:&nbsp;<span class="constructor">Cil</span>.cilPrinter&nbsp;<span class="constructor">Pervasives</span>.ref<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;printType&nbsp;:&nbsp;<span class="constructor">Cil</span>.cilPrinter&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.typ&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;printExp&nbsp;:&nbsp;<span class="constructor">Cil</span>.cilPrinter&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.exp&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;printLval&nbsp;:&nbsp;<span class="constructor">Cil</span>.cilPrinter&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.lval&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;printGlobal&nbsp;:&nbsp;<span class="constructor">Cil</span>.cilPrinter&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.global&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;printAttr&nbsp;:&nbsp;<span class="constructor">Cil</span>.cilPrinter&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.attribute&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;printAttrs&nbsp;:&nbsp;<span class="constructor">Cil</span>.cilPrinter&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.attributes&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;printInstr&nbsp;:&nbsp;<span class="constructor">Cil</span>.cilPrinter&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.instr&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;printStmt&nbsp;:&nbsp;<span class="constructor">Cil</span>.cilPrinter&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;printBlock&nbsp;:&nbsp;<span class="constructor">Cil</span>.cilPrinter&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.block&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;dumpStmt&nbsp;:<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Cil</span>.cilPrinter&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pervasives</span>.out_channel&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;int&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;dumpBlock&nbsp;:<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Cil</span>.cilPrinter&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pervasives</span>.out_channel&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;int&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.block&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;printInit&nbsp;:&nbsp;<span class="constructor">Cil</span>.cilPrinter&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.init&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;dumpInit&nbsp;:<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Cil</span>.cilPrinter&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pervasives</span>.out_channel&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;int&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.init&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;d_type&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.typ&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;d_exp&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.exp&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;d_lval&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.lval&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;d_offset&nbsp;:&nbsp;<span class="constructor">Pretty</span>.doc&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.offset&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;d_init&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.init&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;d_binop&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.binop&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;d_unop&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.unop&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;d_attr&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.attribute&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;d_attrparam&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.attrparam&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;d_attrlist&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.attributes&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;d_instr&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.instr&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;d_label&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.label&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;d_stmt&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;d_block&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.block&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;d_global&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.global&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;dn_exp&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.exp&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;dn_lval&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.lval&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;dn_init&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.init&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;dn_type&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.typ&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;dn_global&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.global&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;dn_attrlist&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.attributes&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;dn_attr&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.attribute&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;dn_attrparam&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.attrparam&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;dn_stmt&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;dn_instr&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.instr&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;d_shortglobal&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.global&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;dumpGlobal&nbsp;:<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Cil</span>.cilPrinter&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pervasives</span>.out_channel&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.global&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;dumpFile&nbsp;:<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Cil</span>.cilPrinter&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pervasives</span>.out_channel&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;string&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.file&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;bug&nbsp;:&nbsp;(<span class="keywordsign">'</span>a,&nbsp;unit,&nbsp;<span class="constructor">Pretty</span>.doc)&nbsp;<span class="constructor">Pervasives</span>.format&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;unimp&nbsp;:&nbsp;(<span class="keywordsign">'</span>a,&nbsp;unit,&nbsp;<span class="constructor">Pretty</span>.doc)&nbsp;<span class="constructor">Pervasives</span>.format&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;error&nbsp;:&nbsp;(<span class="keywordsign">'</span>a,&nbsp;unit,&nbsp;<span class="constructor">Pretty</span>.doc)&nbsp;<span class="constructor">Pervasives</span>.format&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;errorLoc&nbsp;:<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Cil</span>.location&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;(<span class="keywordsign">'</span>a,&nbsp;unit,&nbsp;<span class="constructor">Pretty</span>.doc)&nbsp;<span class="constructor">Pervasives</span>.format&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;warn&nbsp;:&nbsp;(<span class="keywordsign">'</span>a,&nbsp;unit,&nbsp;<span class="constructor">Pretty</span>.doc)&nbsp;<span class="constructor">Pervasives</span>.format&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;warnOpt&nbsp;:&nbsp;(<span class="keywordsign">'</span>a,&nbsp;unit,&nbsp;<span class="constructor">Pretty</span>.doc)&nbsp;<span class="constructor">Pervasives</span>.format&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;warnContext&nbsp;:&nbsp;(<span class="keywordsign">'</span>a,&nbsp;unit,&nbsp;<span class="constructor">Pretty</span>.doc)&nbsp;<span class="constructor">Pervasives</span>.format&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;warnContextOpt&nbsp;:&nbsp;(<span class="keywordsign">'</span>a,&nbsp;unit,&nbsp;<span class="constructor">Pretty</span>.doc)&nbsp;<span class="constructor">Pervasives</span>.format&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;warnLoc&nbsp;:<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Cil</span>.location&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;(<span class="keywordsign">'</span>a,&nbsp;unit,&nbsp;<span class="constructor">Pretty</span>.doc)&nbsp;<span class="constructor">Pervasives</span>.format&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;d_plainexp&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.exp&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;d_plaininit&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.init&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;d_plainlval&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.lval&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;d_plaintype&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.typ&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;uniqueVarNames&nbsp;:&nbsp;<span class="constructor">Cil</span>.file&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;peepHole2&nbsp;:<br>
-&nbsp;&nbsp;&nbsp;&nbsp;(<span class="constructor">Cil</span>.instr&nbsp;*&nbsp;<span class="constructor">Cil</span>.instr&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.instr&nbsp;list&nbsp;option)&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;list&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;peepHole1&nbsp;:<br>
-&nbsp;&nbsp;&nbsp;&nbsp;(<span class="constructor">Cil</span>.instr&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.instr&nbsp;list&nbsp;option)&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;list&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
-&nbsp;&nbsp;<span class="keyword">exception</span>&nbsp;<span class="constructor">SizeOfError</span>&nbsp;<span class="keyword">of</span>&nbsp;string&nbsp;*&nbsp;<span class="constructor">Cil</span>.typ<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;bitsSizeOf&nbsp;:&nbsp;<span class="constructor">Cil</span>.typ&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;int<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;sizeOf&nbsp;:&nbsp;<span class="constructor">Cil</span>.typ&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.exp<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;alignOf_int&nbsp;:&nbsp;<span class="constructor">Cil</span>.typ&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;int<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;bitsOffset&nbsp;:&nbsp;<span class="constructor">Cil</span>.typ&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.offset&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;int&nbsp;*&nbsp;int<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;char_is_unsigned&nbsp;:&nbsp;bool&nbsp;<span class="constructor">Pervasives</span>.ref<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;little_endian&nbsp;:&nbsp;bool&nbsp;<span class="constructor">Pervasives</span>.ref<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;underscore_name&nbsp;:&nbsp;bool&nbsp;<span class="constructor">Pervasives</span>.ref<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;locUnknown&nbsp;:&nbsp;<span class="constructor">Cil</span>.location<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;get_instrLoc&nbsp;:&nbsp;<span class="constructor">Cil</span>.instr&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.location<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;get_globalLoc&nbsp;:&nbsp;<span class="constructor">Cil</span>.global&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.location<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;get_stmtLoc&nbsp;:&nbsp;<span class="constructor">Cil</span>.stmtkind&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.location<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;dExp&nbsp;:&nbsp;<span class="constructor">Pretty</span>.doc&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.exp<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;dInstr&nbsp;:&nbsp;<span class="constructor">Pretty</span>.doc&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.location&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.instr<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;dGlobal&nbsp;:&nbsp;<span class="constructor">Pretty</span>.doc&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.location&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.global<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;mapNoCopy&nbsp;:&nbsp;(<span class="keywordsign">'</span>a&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a)&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;list&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;list<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;mapNoCopyList&nbsp;:&nbsp;(<span class="keywordsign">'</span>a&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;list)&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;list&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;list<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;startsWith&nbsp;:&nbsp;string&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;string&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;bool<br>
-&nbsp;&nbsp;<span class="keyword">type</span>&nbsp;formatArg&nbsp;=<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Fe</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.exp<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Feo</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.exp&nbsp;option<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Fu</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.unop<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Fb</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.binop<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Fk</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.ikind<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">FE</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.exp&nbsp;list<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Ff</span>&nbsp;<span class="keyword">of</span>&nbsp;(string&nbsp;*&nbsp;<span class="constructor">Cil</span>.typ&nbsp;*&nbsp;<span class="constructor">Cil</span>.attributes)<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">FF</span>&nbsp;<span class="keyword">of</span>&nbsp;(string&nbsp;*&nbsp;<span class="constructor">Cil</span>.typ&nbsp;*&nbsp;<span class="constructor">Cil</span>.attributes)&nbsp;list<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Fva</span>&nbsp;<span class="keyword">of</span>&nbsp;bool<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Fv</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.varinfo<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Fl</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.lval<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Flo</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.lval&nbsp;option<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Fo</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.offset<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Fc</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.compinfo<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Fi</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.instr<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">FI</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.instr&nbsp;list<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Ft</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.typ<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Fd</span>&nbsp;<span class="keyword">of</span>&nbsp;int<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Fg</span>&nbsp;<span class="keyword">of</span>&nbsp;string<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Fs</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.stmt<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">FS</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;list<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">FA</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.attributes<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Fp</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.attrparam<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">FP</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="constructor">Cil</span>.attrparam&nbsp;list<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">FX</span>&nbsp;<span class="keyword">of</span>&nbsp;string<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;d_formatarg&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.formatArg&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;lowerConstants&nbsp;:&nbsp;bool&nbsp;<span class="constructor">Pervasives</span>.ref<br>
-<span class="keyword">end</span></code></body></html>
\ No newline at end of file
diff --git a/cil/doc/api/type_Cil.nopCilVisitor.html b/cil/doc/api/type_Cil.nopCilVisitor.html
deleted file mode 100644
index 0ac6c96ba..000000000
--- a/cil/doc/api/type_Cil.nopCilVisitor.html
+++ /dev/null
@@ -1,25 +0,0 @@
-<html><head>
-<link rel="stylesheet" href="style.css" type="text/css">
-<link rel="Start" href="index.html">
-<link title="Index of types" rel=Appendix href="index_types.html">
-<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
-<link title="Index of values" rel=Appendix href="index_values.html">
-<link title="Index of class methods" rel=Appendix href="index_methods.html">
-<link title="Index of classes" rel=Appendix href="index_classes.html">
-<link title="Index of class types" rel=Appendix href="index_class_types.html">
-<link title="Index of modules" rel=Appendix href="index_modules.html">
-<link title="Index of module types" rel=Appendix href="index_module_types.html">
-<link title="Pretty" rel="Chapter" href="Pretty.html">
-<link title="Errormsg" rel="Chapter" href="Errormsg.html">
-<link title="Clist" rel="Chapter" href="Clist.html">
-<link title="Stats" rel="Chapter" href="Stats.html">
-<link title="Cil" rel="Chapter" href="Cil.html">
-<link title="Formatcil" rel="Chapter" href="Formatcil.html">
-<link title="Alpha" rel="Chapter" href="Alpha.html">
-<link title="Cillower" rel="Chapter" href="Cillower.html">
-<link title="Cfg" rel="Chapter" href="Cfg.html">
-<link title="Dataflow" rel="Chapter" href="Dataflow.html">
-<link title="Dominators" rel="Chapter" href="Dominators.html"><title>CIL API Documentation (version 1.3.5) : Cil.nopCilVisitor</title>
-</head>
-<body>
-<code class="code"><span class="constructor">Cil</span>.cilVisitor</code></body></html>
\ No newline at end of file
diff --git a/cil/doc/api/type_Cil.plainCilPrinterClass.html b/cil/doc/api/type_Cil.plainCilPrinterClass.html
deleted file mode 100644
index ecd631718..000000000
--- a/cil/doc/api/type_Cil.plainCilPrinterClass.html
+++ /dev/null
@@ -1,25 +0,0 @@
-<html><head>
-<link rel="stylesheet" href="style.css" type="text/css">
-<link rel="Start" href="index.html">
-<link title="Index of types" rel=Appendix href="index_types.html">
-<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
-<link title="Index of values" rel=Appendix href="index_values.html">
-<link title="Index of class methods" rel=Appendix href="index_methods.html">
-<link title="Index of classes" rel=Appendix href="index_classes.html">
-<link title="Index of class types" rel=Appendix href="index_class_types.html">
-<link title="Index of modules" rel=Appendix href="index_modules.html">
-<link title="Index of module types" rel=Appendix href="index_module_types.html">
-<link title="Pretty" rel="Chapter" href="Pretty.html">
-<link title="Errormsg" rel="Chapter" href="Errormsg.html">
-<link title="Clist" rel="Chapter" href="Clist.html">
-<link title="Stats" rel="Chapter" href="Stats.html">
-<link title="Cil" rel="Chapter" href="Cil.html">
-<link title="Formatcil" rel="Chapter" href="Formatcil.html">
-<link title="Alpha" rel="Chapter" href="Alpha.html">
-<link title="Cillower" rel="Chapter" href="Cillower.html">
-<link title="Cfg" rel="Chapter" href="Cfg.html">
-<link title="Dataflow" rel="Chapter" href="Dataflow.html">
-<link title="Dominators" rel="Chapter" href="Dominators.html"><title>CIL API Documentation (version 1.3.5) : Cil.plainCilPrinterClass</title>
-</head>
-<body>
-<code class="code"><span class="constructor">Cil</span>.cilPrinter</code></body></html>
\ No newline at end of file
diff --git a/cil/doc/api/type_Cillower.html b/cil/doc/api/type_Cillower.html
deleted file mode 100644
index a8924ed6c..000000000
--- a/cil/doc/api/type_Cillower.html
+++ /dev/null
@@ -1,25 +0,0 @@
-<html><head>
-<link rel="stylesheet" href="style.css" type="text/css">
-<link rel="Start" href="index.html">
-<link title="Index of types" rel=Appendix href="index_types.html">
-<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
-<link title="Index of values" rel=Appendix href="index_values.html">
-<link title="Index of class methods" rel=Appendix href="index_methods.html">
-<link title="Index of classes" rel=Appendix href="index_classes.html">
-<link title="Index of class types" rel=Appendix href="index_class_types.html">
-<link title="Index of modules" rel=Appendix href="index_modules.html">
-<link title="Index of module types" rel=Appendix href="index_module_types.html">
-<link title="Pretty" rel="Chapter" href="Pretty.html">
-<link title="Errormsg" rel="Chapter" href="Errormsg.html">
-<link title="Clist" rel="Chapter" href="Clist.html">
-<link title="Stats" rel="Chapter" href="Stats.html">
-<link title="Cil" rel="Chapter" href="Cil.html">
-<link title="Formatcil" rel="Chapter" href="Formatcil.html">
-<link title="Alpha" rel="Chapter" href="Alpha.html">
-<link title="Cillower" rel="Chapter" href="Cillower.html">
-<link title="Cfg" rel="Chapter" href="Cfg.html">
-<link title="Dataflow" rel="Chapter" href="Dataflow.html">
-<link title="Dominators" rel="Chapter" href="Dominators.html"><title>CIL API Documentation (version 1.3.5) : Cillower</title>
-</head>
-<body>
-<code class="code"><span class="keyword">sig</span>&nbsp;<span class="keyword">val</span>&nbsp;lowerEnumVisitor&nbsp;:&nbsp;<span class="constructor">Cil</span>.cilVisitor&nbsp;<span class="keyword">end</span></code></body></html>
\ No newline at end of file
diff --git a/cil/doc/api/type_Clist.html b/cil/doc/api/type_Clist.html
deleted file mode 100644
index c7dbd02fb..000000000
--- a/cil/doc/api/type_Clist.html
+++ /dev/null
@@ -1,44 +0,0 @@
-<html><head>
-<link rel="stylesheet" href="style.css" type="text/css">
-<link rel="Start" href="index.html">
-<link title="Index of types" rel=Appendix href="index_types.html">
-<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
-<link title="Index of values" rel=Appendix href="index_values.html">
-<link title="Index of class methods" rel=Appendix href="index_methods.html">
-<link title="Index of classes" rel=Appendix href="index_classes.html">
-<link title="Index of class types" rel=Appendix href="index_class_types.html">
-<link title="Index of modules" rel=Appendix href="index_modules.html">
-<link title="Index of module types" rel=Appendix href="index_module_types.html">
-<link title="Pretty" rel="Chapter" href="Pretty.html">
-<link title="Errormsg" rel="Chapter" href="Errormsg.html">
-<link title="Clist" rel="Chapter" href="Clist.html">
-<link title="Stats" rel="Chapter" href="Stats.html">
-<link title="Cil" rel="Chapter" href="Cil.html">
-<link title="Formatcil" rel="Chapter" href="Formatcil.html">
-<link title="Alpha" rel="Chapter" href="Alpha.html">
-<link title="Cillower" rel="Chapter" href="Cillower.html">
-<link title="Cfg" rel="Chapter" href="Cfg.html">
-<link title="Dataflow" rel="Chapter" href="Dataflow.html">
-<link title="Dominators" rel="Chapter" href="Dominators.html"><title>CIL API Documentation (version 1.3.5) : Clist</title>
-</head>
-<body>
-<code class="code"><span class="keyword">sig</span><br>
-&nbsp;&nbsp;<span class="keyword">type</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;clist&nbsp;=<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">CList</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;list<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">CConsL</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;*&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="constructor">Clist</span>.clist<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">CConsR</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="constructor">Clist</span>.clist&nbsp;*&nbsp;<span class="keywordsign">'</span>a<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">CSeq</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="constructor">Clist</span>.clist&nbsp;*&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="constructor">Clist</span>.clist<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;toList&nbsp;:&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="constructor">Clist</span>.clist&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;list<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;fromList&nbsp;:&nbsp;<span class="keywordsign">'</span>a&nbsp;list&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="constructor">Clist</span>.clist<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;single&nbsp;:&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="constructor">Clist</span>.clist<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;empty&nbsp;:&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="constructor">Clist</span>.clist<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;append&nbsp;:&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="constructor">Clist</span>.clist&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="constructor">Clist</span>.clist&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="constructor">Clist</span>.clist<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;checkBeforeAppend&nbsp;:&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="constructor">Clist</span>.clist&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="constructor">Clist</span>.clist&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;bool<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;length&nbsp;:&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="constructor">Clist</span>.clist&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;int<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;map&nbsp;:&nbsp;(<span class="keywordsign">'</span>a&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>b)&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="constructor">Clist</span>.clist&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>b&nbsp;<span class="constructor">Clist</span>.clist<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;fold_left&nbsp;:&nbsp;(<span class="keywordsign">'</span>a&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>b&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a)&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>b&nbsp;<span class="constructor">Clist</span>.clist&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;iter&nbsp;:&nbsp;(<span class="keywordsign">'</span>a&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit)&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="constructor">Clist</span>.clist&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;rev&nbsp;:&nbsp;(<span class="keywordsign">'</span>a&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a)&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="constructor">Clist</span>.clist&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="constructor">Clist</span>.clist<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;docCList&nbsp;:<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Pretty</span>.doc&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;(<span class="keywordsign">'</span>a&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc)&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="constructor">Clist</span>.clist&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-<span class="keyword">end</span></code></body></html>
\ No newline at end of file
diff --git a/cil/doc/api/type_Dataflow.BackwardsDataFlow.html b/cil/doc/api/type_Dataflow.BackwardsDataFlow.html
deleted file mode 100644
index 78ffeba37..000000000
--- a/cil/doc/api/type_Dataflow.BackwardsDataFlow.html
+++ /dev/null
@@ -1,26 +0,0 @@
-<html><head>
-<link rel="stylesheet" href="style.css" type="text/css">
-<link rel="Start" href="index.html">
-<link title="Index of types" rel=Appendix href="index_types.html">
-<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
-<link title="Index of values" rel=Appendix href="index_values.html">
-<link title="Index of class methods" rel=Appendix href="index_methods.html">
-<link title="Index of classes" rel=Appendix href="index_classes.html">
-<link title="Index of class types" rel=Appendix href="index_class_types.html">
-<link title="Index of modules" rel=Appendix href="index_modules.html">
-<link title="Index of module types" rel=Appendix href="index_module_types.html">
-<link title="Pretty" rel="Chapter" href="Pretty.html">
-<link title="Errormsg" rel="Chapter" href="Errormsg.html">
-<link title="Clist" rel="Chapter" href="Clist.html">
-<link title="Stats" rel="Chapter" href="Stats.html">
-<link title="Cil" rel="Chapter" href="Cil.html">
-<link title="Formatcil" rel="Chapter" href="Formatcil.html">
-<link title="Alpha" rel="Chapter" href="Alpha.html">
-<link title="Cillower" rel="Chapter" href="Cillower.html">
-<link title="Cfg" rel="Chapter" href="Cfg.html">
-<link title="Dataflow" rel="Chapter" href="Dataflow.html">
-<link title="Dominators" rel="Chapter" href="Dominators.html"><title>CIL API Documentation (version 1.3.5) : Dataflow.BackwardsDataFlow</title>
-</head>
-<body>
-<code class="code"><span class="keyword">functor</span>&nbsp;(<span class="constructor">T</span>&nbsp;:&nbsp;<span class="constructor">BackwardsTransfer</span>)&nbsp;<span class="keywordsign">-&gt;</span><br>
-&nbsp;&nbsp;<span class="keyword">sig</span>&nbsp;<span class="keyword">val</span>&nbsp;compute&nbsp;:&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;list&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit&nbsp;<span class="keyword">end</span></code></body></html>
\ No newline at end of file
diff --git a/cil/doc/api/type_Dataflow.BackwardsTransfer.html b/cil/doc/api/type_Dataflow.BackwardsTransfer.html
deleted file mode 100644
index 763df7485..000000000
--- a/cil/doc/api/type_Dataflow.BackwardsTransfer.html
+++ /dev/null
@@ -1,44 +0,0 @@
-<html><head>
-<link rel="stylesheet" href="style.css" type="text/css">
-<link rel="Start" href="index.html">
-<link title="Index of types" rel=Appendix href="index_types.html">
-<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
-<link title="Index of values" rel=Appendix href="index_values.html">
-<link title="Index of class methods" rel=Appendix href="index_methods.html">
-<link title="Index of classes" rel=Appendix href="index_classes.html">
-<link title="Index of class types" rel=Appendix href="index_class_types.html">
-<link title="Index of modules" rel=Appendix href="index_modules.html">
-<link title="Index of module types" rel=Appendix href="index_module_types.html">
-<link title="Pretty" rel="Chapter" href="Pretty.html">
-<link title="Errormsg" rel="Chapter" href="Errormsg.html">
-<link title="Clist" rel="Chapter" href="Clist.html">
-<link title="Stats" rel="Chapter" href="Stats.html">
-<link title="Cil" rel="Chapter" href="Cil.html">
-<link title="Formatcil" rel="Chapter" href="Formatcil.html">
-<link title="Alpha" rel="Chapter" href="Alpha.html">
-<link title="Cillower" rel="Chapter" href="Cillower.html">
-<link title="Cfg" rel="Chapter" href="Cfg.html">
-<link title="Dataflow" rel="Chapter" href="Dataflow.html">
-<link title="Dominators" rel="Chapter" href="Dominators.html"><title>CIL API Documentation (version 1.3.5) : Dataflow.BackwardsTransfer</title>
-</head>
-<body>
-<code class="code"><span class="keyword">sig</span><br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;name&nbsp;:&nbsp;string<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;debug&nbsp;:&nbsp;bool&nbsp;<span class="constructor">Pervasives</span>.ref<br>
-&nbsp;&nbsp;<span class="keyword">type</span>&nbsp;t<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;pretty&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Dataflow</span>.<span class="constructor">BackwardsTransfer</span>.t&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;stmtStartData&nbsp;:&nbsp;<span class="constructor">Dataflow</span>.<span class="constructor">BackwardsTransfer</span>.t&nbsp;<span class="constructor">Inthash</span>.t<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;combineStmtStartData&nbsp;:<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;<span class="keywordsign">-&gt;</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;old:<span class="constructor">Dataflow</span>.<span class="constructor">BackwardsTransfer</span>.t&nbsp;<span class="keywordsign">-&gt;</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Dataflow</span>.<span class="constructor">BackwardsTransfer</span>.t&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Dataflow</span>.<span class="constructor">BackwardsTransfer</span>.t&nbsp;option<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;combineSuccessors&nbsp;:<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Dataflow</span>.<span class="constructor">BackwardsTransfer</span>.t&nbsp;<span class="keywordsign">-&gt;</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Dataflow</span>.<span class="constructor">BackwardsTransfer</span>.t&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Dataflow</span>.<span class="constructor">BackwardsTransfer</span>.t<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;doStmt&nbsp;:&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Dataflow</span>.<span class="constructor">BackwardsTransfer</span>.t&nbsp;<span class="constructor">Dataflow</span>.action<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;doInstr&nbsp;:<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Cil</span>.instr&nbsp;<span class="keywordsign">-&gt;</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Dataflow</span>.<span class="constructor">BackwardsTransfer</span>.t&nbsp;<span class="keywordsign">-&gt;</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Dataflow</span>.<span class="constructor">BackwardsTransfer</span>.t&nbsp;<span class="constructor">Dataflow</span>.action<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;filterStmt&nbsp;:&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;bool<br>
-<span class="keyword">end</span></code></body></html>
\ No newline at end of file
diff --git a/cil/doc/api/type_Dataflow.ForwardsDataFlow.html b/cil/doc/api/type_Dataflow.ForwardsDataFlow.html
deleted file mode 100644
index a042cfcee..000000000
--- a/cil/doc/api/type_Dataflow.ForwardsDataFlow.html
+++ /dev/null
@@ -1,25 +0,0 @@
-<html><head>
-<link rel="stylesheet" href="style.css" type="text/css">
-<link rel="Start" href="index.html">
-<link title="Index of types" rel=Appendix href="index_types.html">
-<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
-<link title="Index of values" rel=Appendix href="index_values.html">
-<link title="Index of class methods" rel=Appendix href="index_methods.html">
-<link title="Index of classes" rel=Appendix href="index_classes.html">
-<link title="Index of class types" rel=Appendix href="index_class_types.html">
-<link title="Index of modules" rel=Appendix href="index_modules.html">
-<link title="Index of module types" rel=Appendix href="index_module_types.html">
-<link title="Pretty" rel="Chapter" href="Pretty.html">
-<link title="Errormsg" rel="Chapter" href="Errormsg.html">
-<link title="Clist" rel="Chapter" href="Clist.html">
-<link title="Stats" rel="Chapter" href="Stats.html">
-<link title="Cil" rel="Chapter" href="Cil.html">
-<link title="Formatcil" rel="Chapter" href="Formatcil.html">
-<link title="Alpha" rel="Chapter" href="Alpha.html">
-<link title="Cillower" rel="Chapter" href="Cillower.html">
-<link title="Cfg" rel="Chapter" href="Cfg.html">
-<link title="Dataflow" rel="Chapter" href="Dataflow.html">
-<link title="Dominators" rel="Chapter" href="Dominators.html"><title>CIL API Documentation (version 1.3.5) : Dataflow.ForwardsDataFlow</title>
-</head>
-<body>
-<code class="code"><span class="keyword">functor</span>&nbsp;(<span class="constructor">T</span>&nbsp;:&nbsp;<span class="constructor">ForwardsTransfer</span>)&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keyword">sig</span>&nbsp;<span class="keyword">val</span>&nbsp;compute&nbsp;:&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;list&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit&nbsp;<span class="keyword">end</span></code></body></html>
\ No newline at end of file
diff --git a/cil/doc/api/type_Dataflow.ForwardsTransfer.html b/cil/doc/api/type_Dataflow.ForwardsTransfer.html
deleted file mode 100644
index 1e4d48b7a..000000000
--- a/cil/doc/api/type_Dataflow.ForwardsTransfer.html
+++ /dev/null
@@ -1,51 +0,0 @@
-<html><head>
-<link rel="stylesheet" href="style.css" type="text/css">
-<link rel="Start" href="index.html">
-<link title="Index of types" rel=Appendix href="index_types.html">
-<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
-<link title="Index of values" rel=Appendix href="index_values.html">
-<link title="Index of class methods" rel=Appendix href="index_methods.html">
-<link title="Index of classes" rel=Appendix href="index_classes.html">
-<link title="Index of class types" rel=Appendix href="index_class_types.html">
-<link title="Index of modules" rel=Appendix href="index_modules.html">
-<link title="Index of module types" rel=Appendix href="index_module_types.html">
-<link title="Pretty" rel="Chapter" href="Pretty.html">
-<link title="Errormsg" rel="Chapter" href="Errormsg.html">
-<link title="Clist" rel="Chapter" href="Clist.html">
-<link title="Stats" rel="Chapter" href="Stats.html">
-<link title="Cil" rel="Chapter" href="Cil.html">
-<link title="Formatcil" rel="Chapter" href="Formatcil.html">
-<link title="Alpha" rel="Chapter" href="Alpha.html">
-<link title="Cillower" rel="Chapter" href="Cillower.html">
-<link title="Cfg" rel="Chapter" href="Cfg.html">
-<link title="Dataflow" rel="Chapter" href="Dataflow.html">
-<link title="Dominators" rel="Chapter" href="Dominators.html"><title>CIL API Documentation (version 1.3.5) : Dataflow.ForwardsTransfer</title>
-</head>
-<body>
-<code class="code"><span class="keyword">sig</span><br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;name&nbsp;:&nbsp;string<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;debug&nbsp;:&nbsp;bool&nbsp;<span class="constructor">Pervasives</span>.ref<br>
-&nbsp;&nbsp;<span class="keyword">type</span>&nbsp;t<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;copy&nbsp;:&nbsp;<span class="constructor">Dataflow</span>.<span class="constructor">ForwardsTransfer</span>.t&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Dataflow</span>.<span class="constructor">ForwardsTransfer</span>.t<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;stmtStartData&nbsp;:&nbsp;<span class="constructor">Dataflow</span>.<span class="constructor">ForwardsTransfer</span>.t&nbsp;<span class="constructor">Inthash</span>.t<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;pretty&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Dataflow</span>.<span class="constructor">ForwardsTransfer</span>.t&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;computeFirstPredecessor&nbsp;:<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Dataflow</span>.<span class="constructor">ForwardsTransfer</span>.t&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Dataflow</span>.<span class="constructor">ForwardsTransfer</span>.t<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;combinePredecessors&nbsp;:<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;<span class="keywordsign">-&gt;</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;old:<span class="constructor">Dataflow</span>.<span class="constructor">ForwardsTransfer</span>.t&nbsp;<span class="keywordsign">-&gt;</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Dataflow</span>.<span class="constructor">ForwardsTransfer</span>.t&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Dataflow</span>.<span class="constructor">ForwardsTransfer</span>.t&nbsp;option<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;doInstr&nbsp;:<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Cil</span>.instr&nbsp;<span class="keywordsign">-&gt;</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Dataflow</span>.<span class="constructor">ForwardsTransfer</span>.t&nbsp;<span class="keywordsign">-&gt;</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Dataflow</span>.<span class="constructor">ForwardsTransfer</span>.t&nbsp;<span class="constructor">Dataflow</span>.action<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;doStmt&nbsp;:<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;<span class="keywordsign">-&gt;</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Dataflow</span>.<span class="constructor">ForwardsTransfer</span>.t&nbsp;<span class="keywordsign">-&gt;</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Dataflow</span>.<span class="constructor">ForwardsTransfer</span>.t&nbsp;<span class="constructor">Dataflow</span>.stmtaction<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;doGuard&nbsp;:<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Cil</span>.exp&nbsp;<span class="keywordsign">-&gt;</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Dataflow</span>.<span class="constructor">ForwardsTransfer</span>.t&nbsp;<span class="keywordsign">-&gt;</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Dataflow</span>.<span class="constructor">ForwardsTransfer</span>.t&nbsp;<span class="constructor">Dataflow</span>.guardaction<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;filterStmt&nbsp;:&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;bool<br>
-<span class="keyword">end</span></code></body></html>
\ No newline at end of file
diff --git a/cil/doc/api/type_Dataflow.html b/cil/doc/api/type_Dataflow.html
deleted file mode 100644
index fa0347640..000000000
--- a/cil/doc/api/type_Dataflow.html
+++ /dev/null
@@ -1,85 +0,0 @@
-<html><head>
-<link rel="stylesheet" href="style.css" type="text/css">
-<link rel="Start" href="index.html">
-<link title="Index of types" rel=Appendix href="index_types.html">
-<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
-<link title="Index of values" rel=Appendix href="index_values.html">
-<link title="Index of class methods" rel=Appendix href="index_methods.html">
-<link title="Index of classes" rel=Appendix href="index_classes.html">
-<link title="Index of class types" rel=Appendix href="index_class_types.html">
-<link title="Index of modules" rel=Appendix href="index_modules.html">
-<link title="Index of module types" rel=Appendix href="index_module_types.html">
-<link title="Pretty" rel="Chapter" href="Pretty.html">
-<link title="Errormsg" rel="Chapter" href="Errormsg.html">
-<link title="Clist" rel="Chapter" href="Clist.html">
-<link title="Stats" rel="Chapter" href="Stats.html">
-<link title="Cil" rel="Chapter" href="Cil.html">
-<link title="Formatcil" rel="Chapter" href="Formatcil.html">
-<link title="Alpha" rel="Chapter" href="Alpha.html">
-<link title="Cillower" rel="Chapter" href="Cillower.html">
-<link title="Cfg" rel="Chapter" href="Cfg.html">
-<link title="Dataflow" rel="Chapter" href="Dataflow.html">
-<link title="Dominators" rel="Chapter" href="Dominators.html"><title>CIL API Documentation (version 1.3.5) : Dataflow</title>
-</head>
-<body>
-<code class="code"><span class="keyword">sig</span><br>
-&nbsp;&nbsp;<span class="keyword">type</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;action&nbsp;=&nbsp;<span class="constructor">Default</span>&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Done</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">Post</span>&nbsp;<span class="keyword">of</span>&nbsp;(<span class="keywordsign">'</span>a&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a)<br>
-&nbsp;&nbsp;<span class="keyword">type</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;stmtaction&nbsp;=&nbsp;<span class="constructor">SDefault</span>&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">SDone</span>&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">SUse</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="keywordsign">'</span>a<br>
-&nbsp;&nbsp;<span class="keyword">type</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;guardaction&nbsp;=&nbsp;<span class="constructor">GDefault</span>&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">GUse</span>&nbsp;<span class="keyword">of</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">GUnreachable</span><br>
-&nbsp;&nbsp;<span class="keyword">module</span>&nbsp;<span class="keyword">type</span>&nbsp;<span class="constructor">ForwardsTransfer</span>&nbsp;=<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">sig</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;name&nbsp;:&nbsp;string<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;debug&nbsp;:&nbsp;bool&nbsp;<span class="constructor">Pervasives</span>.ref<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">type</span>&nbsp;t<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;copy&nbsp;:&nbsp;<span class="constructor">Dataflow</span>.<span class="constructor">ForwardsTransfer</span>.t&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Dataflow</span>.<span class="constructor">ForwardsTransfer</span>.t<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;stmtStartData&nbsp;:&nbsp;<span class="constructor">Dataflow</span>.<span class="constructor">ForwardsTransfer</span>.t&nbsp;<span class="constructor">Inthash</span>.t<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;pretty&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Dataflow</span>.<span class="constructor">ForwardsTransfer</span>.t&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;computeFirstPredecessor&nbsp;:<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;<span class="keywordsign">-&gt;</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Dataflow</span>.<span class="constructor">ForwardsTransfer</span>.t&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Dataflow</span>.<span class="constructor">ForwardsTransfer</span>.t<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;combinePredecessors&nbsp;:<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;<span class="keywordsign">-&gt;</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;old:<span class="constructor">Dataflow</span>.<span class="constructor">ForwardsTransfer</span>.t&nbsp;<span class="keywordsign">-&gt;</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Dataflow</span>.<span class="constructor">ForwardsTransfer</span>.t&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Dataflow</span>.<span class="constructor">ForwardsTransfer</span>.t&nbsp;option<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;doInstr&nbsp;:<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Cil</span>.instr&nbsp;<span class="keywordsign">-&gt;</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Dataflow</span>.<span class="constructor">ForwardsTransfer</span>.t&nbsp;<span class="keywordsign">-&gt;</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Dataflow</span>.<span class="constructor">ForwardsTransfer</span>.t&nbsp;<span class="constructor">Dataflow</span>.action<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;doStmt&nbsp;:<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;<span class="keywordsign">-&gt;</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Dataflow</span>.<span class="constructor">ForwardsTransfer</span>.t&nbsp;<span class="keywordsign">-&gt;</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Dataflow</span>.<span class="constructor">ForwardsTransfer</span>.t&nbsp;<span class="constructor">Dataflow</span>.stmtaction<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;doGuard&nbsp;:<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Cil</span>.exp&nbsp;<span class="keywordsign">-&gt;</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Dataflow</span>.<span class="constructor">ForwardsTransfer</span>.t&nbsp;<span class="keywordsign">-&gt;</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Dataflow</span>.<span class="constructor">ForwardsTransfer</span>.t&nbsp;<span class="constructor">Dataflow</span>.guardaction<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;filterStmt&nbsp;:&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;bool<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">end</span><br>
-&nbsp;&nbsp;<span class="keyword">module</span>&nbsp;<span class="constructor">ForwardsDataFlow</span>&nbsp;:<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">functor</span>&nbsp;(<span class="constructor">T</span>&nbsp;:&nbsp;<span class="constructor">ForwardsTransfer</span>)&nbsp;<span class="keywordsign">-&gt;</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">sig</span>&nbsp;<span class="keyword">val</span>&nbsp;compute&nbsp;:&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;list&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit&nbsp;<span class="keyword">end</span><br>
-&nbsp;&nbsp;<span class="keyword">module</span>&nbsp;<span class="keyword">type</span>&nbsp;<span class="constructor">BackwardsTransfer</span>&nbsp;=<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">sig</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;name&nbsp;:&nbsp;string<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;debug&nbsp;:&nbsp;bool&nbsp;<span class="constructor">Pervasives</span>.ref<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">type</span>&nbsp;t<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;pretty&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Dataflow</span>.<span class="constructor">BackwardsTransfer</span>.t&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;stmtStartData&nbsp;:&nbsp;<span class="constructor">Dataflow</span>.<span class="constructor">BackwardsTransfer</span>.t&nbsp;<span class="constructor">Inthash</span>.t<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;combineStmtStartData&nbsp;:<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;<span class="keywordsign">-&gt;</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;old:<span class="constructor">Dataflow</span>.<span class="constructor">BackwardsTransfer</span>.t&nbsp;<span class="keywordsign">-&gt;</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Dataflow</span>.<span class="constructor">BackwardsTransfer</span>.t&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Dataflow</span>.<span class="constructor">BackwardsTransfer</span>.t&nbsp;option<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;combineSuccessors&nbsp;:<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Dataflow</span>.<span class="constructor">BackwardsTransfer</span>.t&nbsp;<span class="keywordsign">-&gt;</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Dataflow</span>.<span class="constructor">BackwardsTransfer</span>.t&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Dataflow</span>.<span class="constructor">BackwardsTransfer</span>.t<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;doStmt&nbsp;:&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Dataflow</span>.<span class="constructor">BackwardsTransfer</span>.t&nbsp;<span class="constructor">Dataflow</span>.action<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;doInstr&nbsp;:<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Cil</span>.instr&nbsp;<span class="keywordsign">-&gt;</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Dataflow</span>.<span class="constructor">BackwardsTransfer</span>.t&nbsp;<span class="keywordsign">-&gt;</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Dataflow</span>.<span class="constructor">BackwardsTransfer</span>.t&nbsp;<span class="constructor">Dataflow</span>.action<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;filterStmt&nbsp;:&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;bool<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">end</span><br>
-&nbsp;&nbsp;<span class="keyword">module</span>&nbsp;<span class="constructor">BackwardsDataFlow</span>&nbsp;:<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">functor</span>&nbsp;(<span class="constructor">T</span>&nbsp;:&nbsp;<span class="constructor">BackwardsTransfer</span>)&nbsp;<span class="keywordsign">-&gt;</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">sig</span>&nbsp;<span class="keyword">val</span>&nbsp;compute&nbsp;:&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;list&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit&nbsp;<span class="keyword">end</span><br>
-<span class="keyword">end</span></code></body></html>
\ No newline at end of file
diff --git a/cil/doc/api/type_Dominators.html b/cil/doc/api/type_Dominators.html
deleted file mode 100644
index a9fef53e5..000000000
--- a/cil/doc/api/type_Dominators.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<html><head>
-<link rel="stylesheet" href="style.css" type="text/css">
-<link rel="Start" href="index.html">
-<link title="Index of types" rel=Appendix href="index_types.html">
-<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
-<link title="Index of values" rel=Appendix href="index_values.html">
-<link title="Index of class methods" rel=Appendix href="index_methods.html">
-<link title="Index of classes" rel=Appendix href="index_classes.html">
-<link title="Index of class types" rel=Appendix href="index_class_types.html">
-<link title="Index of modules" rel=Appendix href="index_modules.html">
-<link title="Index of module types" rel=Appendix href="index_module_types.html">
-<link title="Pretty" rel="Chapter" href="Pretty.html">
-<link title="Errormsg" rel="Chapter" href="Errormsg.html">
-<link title="Clist" rel="Chapter" href="Clist.html">
-<link title="Stats" rel="Chapter" href="Stats.html">
-<link title="Cil" rel="Chapter" href="Cil.html">
-<link title="Formatcil" rel="Chapter" href="Formatcil.html">
-<link title="Alpha" rel="Chapter" href="Alpha.html">
-<link title="Cillower" rel="Chapter" href="Cillower.html">
-<link title="Cfg" rel="Chapter" href="Cfg.html">
-<link title="Dataflow" rel="Chapter" href="Dataflow.html">
-<link title="Dominators" rel="Chapter" href="Dominators.html"><title>CIL API Documentation (version 1.3.5) : Dominators</title>
-</head>
-<body>
-<code class="code"><span class="keyword">sig</span><br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;computeIDom&nbsp;:&nbsp;<span class="constructor">Cil</span>.fundec&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;option&nbsp;<span class="constructor">Inthash</span>.t<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;getIdom&nbsp;:&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;option&nbsp;<span class="constructor">Inthash</span>.t&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;option<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;dominates&nbsp;:&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;option&nbsp;<span class="constructor">Inthash</span>.t&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;bool<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;findNaturalLoops&nbsp;:<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Cil</span>.fundec&nbsp;<span class="keywordsign">-&gt;</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;option&nbsp;<span class="constructor">Inthash</span>.t&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;(<span class="constructor">Cil</span>.stmt&nbsp;*&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;list)&nbsp;list<br>
-<span class="keyword">end</span></code></body></html>
\ No newline at end of file
diff --git a/cil/doc/api/type_Errormsg.html b/cil/doc/api/type_Errormsg.html
deleted file mode 100644
index 3ad0a8602..000000000
--- a/cil/doc/api/type_Errormsg.html
+++ /dev/null
@@ -1,64 +0,0 @@
-<html><head>
-<link rel="stylesheet" href="style.css" type="text/css">
-<link rel="Start" href="index.html">
-<link title="Index of types" rel=Appendix href="index_types.html">
-<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
-<link title="Index of values" rel=Appendix href="index_values.html">
-<link title="Index of class methods" rel=Appendix href="index_methods.html">
-<link title="Index of classes" rel=Appendix href="index_classes.html">
-<link title="Index of class types" rel=Appendix href="index_class_types.html">
-<link title="Index of modules" rel=Appendix href="index_modules.html">
-<link title="Index of module types" rel=Appendix href="index_module_types.html">
-<link title="Pretty" rel="Chapter" href="Pretty.html">
-<link title="Errormsg" rel="Chapter" href="Errormsg.html">
-<link title="Clist" rel="Chapter" href="Clist.html">
-<link title="Stats" rel="Chapter" href="Stats.html">
-<link title="Cil" rel="Chapter" href="Cil.html">
-<link title="Formatcil" rel="Chapter" href="Formatcil.html">
-<link title="Alpha" rel="Chapter" href="Alpha.html">
-<link title="Cillower" rel="Chapter" href="Cillower.html">
-<link title="Cfg" rel="Chapter" href="Cfg.html">
-<link title="Dataflow" rel="Chapter" href="Dataflow.html">
-<link title="Dominators" rel="Chapter" href="Dominators.html"><title>CIL API Documentation (version 1.3.5) : Errormsg</title>
-</head>
-<body>
-<code class="code"><span class="keyword">sig</span><br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;logChannel&nbsp;:&nbsp;<span class="constructor">Pervasives</span>.out_channel&nbsp;<span class="constructor">Pervasives</span>.ref<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;debugFlag&nbsp;:&nbsp;bool&nbsp;<span class="constructor">Pervasives</span>.ref<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;verboseFlag&nbsp;:&nbsp;bool&nbsp;<span class="constructor">Pervasives</span>.ref<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;warnFlag&nbsp;:&nbsp;bool&nbsp;<span class="constructor">Pervasives</span>.ref<br>
-&nbsp;&nbsp;<span class="keyword">exception</span>&nbsp;<span class="constructor">Error</span><br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;error&nbsp;:&nbsp;(<span class="keywordsign">'</span>a,&nbsp;unit,&nbsp;<span class="constructor">Pretty</span>.doc,&nbsp;unit)&nbsp;format4&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;bug&nbsp;:&nbsp;(<span class="keywordsign">'</span>a,&nbsp;unit,&nbsp;<span class="constructor">Pretty</span>.doc,&nbsp;unit)&nbsp;format4&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;unimp&nbsp;:&nbsp;(<span class="keywordsign">'</span>a,&nbsp;unit,&nbsp;<span class="constructor">Pretty</span>.doc,&nbsp;unit)&nbsp;format4&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;s&nbsp;:&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>b<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;hadErrors&nbsp;:&nbsp;bool&nbsp;<span class="constructor">Pervasives</span>.ref<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;warn&nbsp;:&nbsp;(<span class="keywordsign">'</span>a,&nbsp;unit,&nbsp;<span class="constructor">Pretty</span>.doc,&nbsp;unit)&nbsp;format4&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;warnOpt&nbsp;:&nbsp;(<span class="keywordsign">'</span>a,&nbsp;unit,&nbsp;<span class="constructor">Pretty</span>.doc,&nbsp;unit)&nbsp;format4&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;log&nbsp;:&nbsp;(<span class="keywordsign">'</span>a,&nbsp;unit,&nbsp;<span class="constructor">Pretty</span>.doc,&nbsp;unit)&nbsp;format4&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;logg&nbsp;:&nbsp;(<span class="keywordsign">'</span>a,&nbsp;unit,&nbsp;<span class="constructor">Pretty</span>.doc,&nbsp;unit)&nbsp;format4&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;null&nbsp;:&nbsp;(<span class="keywordsign">'</span>a,&nbsp;unit,&nbsp;<span class="constructor">Pretty</span>.doc,&nbsp;unit)&nbsp;format4&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;pushContext&nbsp;:&nbsp;(unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc)&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;popContext&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;showContext&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;withContext&nbsp;:&nbsp;(unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc)&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;(<span class="keywordsign">'</span>a&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>b)&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>b<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;newline&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;newHline&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;getPosition&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;int&nbsp;*&nbsp;string&nbsp;*&nbsp;int<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;getHPosition&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;int&nbsp;*&nbsp;string<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;setHLine&nbsp;:&nbsp;int&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;setHFile&nbsp;:&nbsp;string&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;setCurrentLine&nbsp;:&nbsp;int&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;setCurrentFile&nbsp;:&nbsp;string&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
-&nbsp;&nbsp;<span class="keyword">type</span>&nbsp;location&nbsp;=&nbsp;{&nbsp;file&nbsp;:&nbsp;string;&nbsp;line&nbsp;:&nbsp;int;&nbsp;hfile&nbsp;:&nbsp;string;&nbsp;hline&nbsp;:&nbsp;int;&nbsp;}<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;d_loc&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Errormsg</span>.location&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;d_hloc&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Errormsg</span>.location&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;getLocation&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Errormsg</span>.location<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;parse_error&nbsp;:&nbsp;string&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;locUnknown&nbsp;:&nbsp;<span class="constructor">Errormsg</span>.location<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;readingFromStdin&nbsp;:&nbsp;bool&nbsp;<span class="constructor">Pervasives</span>.ref<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;startParsing&nbsp;:&nbsp;?useBasename:bool&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;string&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Lexing</span>.lexbuf<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;startParsingFromString&nbsp;:<br>
-&nbsp;&nbsp;&nbsp;&nbsp;?file:string&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;?line:int&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;string&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Lexing</span>.lexbuf<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;finishParsing&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
-<span class="keyword">end</span></code></body></html>
\ No newline at end of file
diff --git a/cil/doc/api/type_Formatcil.html b/cil/doc/api/type_Formatcil.html
deleted file mode 100644
index 7c5139b92..000000000
--- a/cil/doc/api/type_Formatcil.html
+++ /dev/null
@@ -1,45 +0,0 @@
-<html><head>
-<link rel="stylesheet" href="style.css" type="text/css">
-<link rel="Start" href="index.html">
-<link title="Index of types" rel=Appendix href="index_types.html">
-<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
-<link title="Index of values" rel=Appendix href="index_values.html">
-<link title="Index of class methods" rel=Appendix href="index_methods.html">
-<link title="Index of classes" rel=Appendix href="index_classes.html">
-<link title="Index of class types" rel=Appendix href="index_class_types.html">
-<link title="Index of modules" rel=Appendix href="index_modules.html">
-<link title="Index of module types" rel=Appendix href="index_module_types.html">
-<link title="Pretty" rel="Chapter" href="Pretty.html">
-<link title="Errormsg" rel="Chapter" href="Errormsg.html">
-<link title="Clist" rel="Chapter" href="Clist.html">
-<link title="Stats" rel="Chapter" href="Stats.html">
-<link title="Cil" rel="Chapter" href="Cil.html">
-<link title="Formatcil" rel="Chapter" href="Formatcil.html">
-<link title="Alpha" rel="Chapter" href="Alpha.html">
-<link title="Cillower" rel="Chapter" href="Cillower.html">
-<link title="Cfg" rel="Chapter" href="Cfg.html">
-<link title="Dataflow" rel="Chapter" href="Dataflow.html">
-<link title="Dominators" rel="Chapter" href="Dominators.html"><title>CIL API Documentation (version 1.3.5) : Formatcil</title>
-</head>
-<body>
-<code class="code"><span class="keyword">sig</span><br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;cExp&nbsp;:&nbsp;string&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;(string&nbsp;*&nbsp;<span class="constructor">Cil</span>.formatArg)&nbsp;list&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.exp<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;cLval&nbsp;:&nbsp;string&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;(string&nbsp;*&nbsp;<span class="constructor">Cil</span>.formatArg)&nbsp;list&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.lval<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;cType&nbsp;:&nbsp;string&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;(string&nbsp;*&nbsp;<span class="constructor">Cil</span>.formatArg)&nbsp;list&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.typ<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;cInstr&nbsp;:<br>
-&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.location&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;(string&nbsp;*&nbsp;<span class="constructor">Cil</span>.formatArg)&nbsp;list&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.instr<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;cStmt&nbsp;:<br>
-&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;<span class="keywordsign">-&gt;</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;(string&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.typ&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.varinfo)&nbsp;<span class="keywordsign">-&gt;</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Cil</span>.location&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;(string&nbsp;*&nbsp;<span class="constructor">Cil</span>.formatArg)&nbsp;list&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.stmt<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;cStmts&nbsp;:<br>
-&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;<span class="keywordsign">-&gt;</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;(string&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.typ&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.varinfo)&nbsp;<span class="keywordsign">-&gt;</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Cil</span>.location&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;(string&nbsp;*&nbsp;<span class="constructor">Cil</span>.formatArg)&nbsp;list&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.stmt&nbsp;list<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;dExp&nbsp;:&nbsp;string&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.exp&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.formatArg&nbsp;list&nbsp;option<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;dLval&nbsp;:&nbsp;string&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.lval&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.formatArg&nbsp;list&nbsp;option<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;dType&nbsp;:&nbsp;string&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.typ&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.formatArg&nbsp;list&nbsp;option<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;dInstr&nbsp;:&nbsp;string&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.instr&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Cil</span>.formatArg&nbsp;list&nbsp;option<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;noMemoize&nbsp;:&nbsp;bool&nbsp;<span class="constructor">Pervasives</span>.ref<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;test&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
-<span class="keyword">end</span></code></body></html>
\ No newline at end of file
diff --git a/cil/doc/api/type_Pretty.MakeMapPrinter.html b/cil/doc/api/type_Pretty.MakeMapPrinter.html
deleted file mode 100644
index 0b9d35ee2..000000000
--- a/cil/doc/api/type_Pretty.MakeMapPrinter.html
+++ /dev/null
@@ -1,42 +0,0 @@
-<html><head>
-<link rel="stylesheet" href="style.css" type="text/css">
-<link rel="Start" href="index.html">
-<link title="Index of types" rel=Appendix href="index_types.html">
-<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
-<link title="Index of values" rel=Appendix href="index_values.html">
-<link title="Index of class methods" rel=Appendix href="index_methods.html">
-<link title="Index of classes" rel=Appendix href="index_classes.html">
-<link title="Index of class types" rel=Appendix href="index_class_types.html">
-<link title="Index of modules" rel=Appendix href="index_modules.html">
-<link title="Index of module types" rel=Appendix href="index_module_types.html">
-<link title="Pretty" rel="Chapter" href="Pretty.html">
-<link title="Errormsg" rel="Chapter" href="Errormsg.html">
-<link title="Clist" rel="Chapter" href="Clist.html">
-<link title="Stats" rel="Chapter" href="Stats.html">
-<link title="Cil" rel="Chapter" href="Cil.html">
-<link title="Formatcil" rel="Chapter" href="Formatcil.html">
-<link title="Alpha" rel="Chapter" href="Alpha.html">
-<link title="Cillower" rel="Chapter" href="Cillower.html">
-<link title="Cfg" rel="Chapter" href="Cfg.html">
-<link title="Dataflow" rel="Chapter" href="Dataflow.html">
-<link title="Dominators" rel="Chapter" href="Dominators.html"><title>CIL API Documentation (version 1.3.5) : Pretty.MakeMapPrinter</title>
-</head>
-<body>
-<code class="code"><span class="keyword">functor</span><br>
-&nbsp;&nbsp;(<span class="constructor">Map</span>&nbsp;:&nbsp;<span class="keyword">sig</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">type</span>&nbsp;key<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">type</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;t<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;fold&nbsp;:<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(<span class="constructor">Pretty</span>.<span class="constructor">MakeMapPrinter</span>.key&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>b&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>b)&nbsp;<span class="keywordsign">-&gt;</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="constructor">Pretty</span>.<span class="constructor">MakeMapPrinter</span>.t&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>b&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>b<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">end</span>)&nbsp;<span class="keywordsign">-&gt;</span><br>
-&nbsp;&nbsp;<span class="keyword">sig</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;docMap&nbsp;:<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;?sep:<span class="constructor">Pretty</span>.doc&nbsp;<span class="keywordsign">-&gt;</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(<span class="constructor">Map</span>.key&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc)&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="constructor">Map</span>.t&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;d_map&nbsp;:<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;?dmaplet:(<span class="constructor">Pretty</span>.doc&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc)&nbsp;<span class="keywordsign">-&gt;</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;<span class="keywordsign">-&gt;</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Map</span>.key&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc)&nbsp;<span class="keywordsign">-&gt;</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc)&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="constructor">Map</span>.t&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;<span class="keyword">end</span></code></body></html>
\ No newline at end of file
diff --git a/cil/doc/api/type_Pretty.MakeSetPrinter.html b/cil/doc/api/type_Pretty.MakeSetPrinter.html
deleted file mode 100644
index c5e04661a..000000000
--- a/cil/doc/api/type_Pretty.MakeSetPrinter.html
+++ /dev/null
@@ -1,40 +0,0 @@
-<html><head>
-<link rel="stylesheet" href="style.css" type="text/css">
-<link rel="Start" href="index.html">
-<link title="Index of types" rel=Appendix href="index_types.html">
-<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
-<link title="Index of values" rel=Appendix href="index_values.html">
-<link title="Index of class methods" rel=Appendix href="index_methods.html">
-<link title="Index of classes" rel=Appendix href="index_classes.html">
-<link title="Index of class types" rel=Appendix href="index_class_types.html">
-<link title="Index of modules" rel=Appendix href="index_modules.html">
-<link title="Index of module types" rel=Appendix href="index_module_types.html">
-<link title="Pretty" rel="Chapter" href="Pretty.html">
-<link title="Errormsg" rel="Chapter" href="Errormsg.html">
-<link title="Clist" rel="Chapter" href="Clist.html">
-<link title="Stats" rel="Chapter" href="Stats.html">
-<link title="Cil" rel="Chapter" href="Cil.html">
-<link title="Formatcil" rel="Chapter" href="Formatcil.html">
-<link title="Alpha" rel="Chapter" href="Alpha.html">
-<link title="Cillower" rel="Chapter" href="Cillower.html">
-<link title="Cfg" rel="Chapter" href="Cfg.html">
-<link title="Dataflow" rel="Chapter" href="Dataflow.html">
-<link title="Dominators" rel="Chapter" href="Dominators.html"><title>CIL API Documentation (version 1.3.5) : Pretty.MakeSetPrinter</title>
-</head>
-<body>
-<code class="code"><span class="keyword">functor</span><br>
-&nbsp;&nbsp;(<span class="constructor">Set</span>&nbsp;:&nbsp;<span class="keyword">sig</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">type</span>&nbsp;elt<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">type</span>&nbsp;t<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;fold&nbsp;:<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(<span class="constructor">Pretty</span>.<span class="constructor">MakeSetPrinter</span>.elt&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a)&nbsp;<span class="keywordsign">-&gt;</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Pretty</span>.<span class="constructor">MakeSetPrinter</span>.t&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">end</span>)&nbsp;<span class="keywordsign">-&gt;</span><br>
-&nbsp;&nbsp;<span class="keyword">sig</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;docSet&nbsp;:<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;?sep:<span class="constructor">Pretty</span>.doc&nbsp;<span class="keywordsign">-&gt;</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(<span class="constructor">Set</span>.elt&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc)&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Set</span>.t&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;d_set&nbsp;:<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;<span class="keywordsign">-&gt;</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Set</span>.elt&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc)&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Set</span>.t&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;<span class="keyword">end</span></code></body></html>
\ No newline at end of file
diff --git a/cil/doc/api/type_Pretty.html b/cil/doc/api/type_Pretty.html
deleted file mode 100644
index fc70f65b2..000000000
--- a/cil/doc/api/type_Pretty.html
+++ /dev/null
@@ -1,111 +0,0 @@
-<html><head>
-<link rel="stylesheet" href="style.css" type="text/css">
-<link rel="Start" href="index.html">
-<link title="Index of types" rel=Appendix href="index_types.html">
-<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
-<link title="Index of values" rel=Appendix href="index_values.html">
-<link title="Index of class methods" rel=Appendix href="index_methods.html">
-<link title="Index of classes" rel=Appendix href="index_classes.html">
-<link title="Index of class types" rel=Appendix href="index_class_types.html">
-<link title="Index of modules" rel=Appendix href="index_modules.html">
-<link title="Index of module types" rel=Appendix href="index_module_types.html">
-<link title="Pretty" rel="Chapter" href="Pretty.html">
-<link title="Errormsg" rel="Chapter" href="Errormsg.html">
-<link title="Clist" rel="Chapter" href="Clist.html">
-<link title="Stats" rel="Chapter" href="Stats.html">
-<link title="Cil" rel="Chapter" href="Cil.html">
-<link title="Formatcil" rel="Chapter" href="Formatcil.html">
-<link title="Alpha" rel="Chapter" href="Alpha.html">
-<link title="Cillower" rel="Chapter" href="Cillower.html">
-<link title="Cfg" rel="Chapter" href="Cfg.html">
-<link title="Dataflow" rel="Chapter" href="Dataflow.html">
-<link title="Dominators" rel="Chapter" href="Dominators.html"><title>CIL API Documentation (version 1.3.5) : Pretty</title>
-</head>
-<body>
-<code class="code"><span class="keyword">sig</span><br>
-&nbsp;&nbsp;<span class="keyword">type</span>&nbsp;doc<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;nil&nbsp;:&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;(&nbsp;++&nbsp;)&nbsp;:&nbsp;<span class="constructor">Pretty</span>.doc&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;concat&nbsp;:&nbsp;<span class="constructor">Pretty</span>.doc&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;text&nbsp;:&nbsp;string&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;num&nbsp;:&nbsp;int&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;real&nbsp;:&nbsp;float&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;chr&nbsp;:&nbsp;char&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;line&nbsp;:&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;leftflush&nbsp;:&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;break&nbsp;:&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;align&nbsp;:&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;unalign&nbsp;:&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;mark&nbsp;:&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;unmark&nbsp;:&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;indent&nbsp;:&nbsp;int&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;markup&nbsp;:&nbsp;<span class="constructor">Pretty</span>.doc&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;seq&nbsp;:<br>
-&nbsp;&nbsp;&nbsp;&nbsp;sep:<span class="constructor">Pretty</span>.doc&nbsp;<span class="keywordsign">-&gt;</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;doit:(<span class="keywordsign">'</span>a&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc)&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;elements:<span class="keywordsign">'</span>a&nbsp;list&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;docList&nbsp;:<br>
-&nbsp;&nbsp;&nbsp;&nbsp;?sep:<span class="constructor">Pretty</span>.doc&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;(<span class="keywordsign">'</span>a&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc)&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;list&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;d_list&nbsp;:<br>
-&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;(unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc)&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;list&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;docArray&nbsp;:<br>
-&nbsp;&nbsp;&nbsp;&nbsp;?sep:<span class="constructor">Pretty</span>.doc&nbsp;<span class="keywordsign">-&gt;</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;(int&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc)&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;array&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;docOpt&nbsp;:&nbsp;(<span class="keywordsign">'</span>a&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc)&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;option&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;d_int32&nbsp;:&nbsp;int32&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;f_int32&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;int32&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;d_int64&nbsp;:&nbsp;int64&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;f_int64&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;int64&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;<span class="keyword">module</span>&nbsp;<span class="constructor">MakeMapPrinter</span>&nbsp;:<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">functor</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(<span class="constructor">Map</span>&nbsp;:&nbsp;<span class="keyword">sig</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">type</span>&nbsp;key<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">type</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;t<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;fold&nbsp;:<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(<span class="constructor">Pretty</span>.<span class="constructor">MakeMapPrinter</span>.key&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>b&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>b)&nbsp;<span class="keywordsign">-&gt;</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="constructor">Pretty</span>.<span class="constructor">MakeMapPrinter</span>.t&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>b&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>b<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">end</span>)&nbsp;<span class="keywordsign">-&gt;</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">sig</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;docMap&nbsp;:<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;?sep:<span class="constructor">Pretty</span>.doc&nbsp;<span class="keywordsign">-&gt;</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(<span class="constructor">Map</span>.key&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc)&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="constructor">Map</span>.t&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;d_map&nbsp;:<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;?dmaplet:(<span class="constructor">Pretty</span>.doc&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc)&nbsp;<span class="keywordsign">-&gt;</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;<span class="keywordsign">-&gt;</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Map</span>.key&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc)&nbsp;<span class="keywordsign">-&gt;</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc)&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="constructor">Map</span>.t&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">end</span><br>
-&nbsp;&nbsp;<span class="keyword">module</span>&nbsp;<span class="constructor">MakeSetPrinter</span>&nbsp;:<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">functor</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(<span class="constructor">Set</span>&nbsp;:&nbsp;<span class="keyword">sig</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">type</span>&nbsp;elt<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">type</span>&nbsp;t<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;fold&nbsp;:<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(<span class="constructor">Pretty</span>.<span class="constructor">MakeSetPrinter</span>.elt&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a)&nbsp;<span class="keywordsign">-&gt;</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Pretty</span>.<span class="constructor">MakeSetPrinter</span>.t&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">end</span>)&nbsp;<span class="keywordsign">-&gt;</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">sig</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;docSet&nbsp;:<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;?sep:<span class="constructor">Pretty</span>.doc&nbsp;<span class="keywordsign">-&gt;</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(<span class="constructor">Set</span>.elt&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc)&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Set</span>.t&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;d_set&nbsp;:<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;<span class="keywordsign">-&gt;</span><br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Set</span>.elt&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc)&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Set</span>.t&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">end</span><br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;insert&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;dprintf&nbsp;:&nbsp;(<span class="keywordsign">'</span>a,&nbsp;unit,&nbsp;<span class="constructor">Pretty</span>.doc,&nbsp;<span class="constructor">Pretty</span>.doc)&nbsp;format4&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;gprintf&nbsp;:<br>
-&nbsp;&nbsp;&nbsp;&nbsp;(<span class="constructor">Pretty</span>.doc&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a)&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;(<span class="keywordsign">'</span>b,&nbsp;unit,&nbsp;<span class="constructor">Pretty</span>.doc,&nbsp;<span class="keywordsign">'</span>a)&nbsp;format4&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>b<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;fprint&nbsp;:&nbsp;<span class="constructor">Pervasives</span>.out_channel&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;width:int&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;sprint&nbsp;:&nbsp;width:int&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="constructor">Pretty</span>.doc&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;string<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;fprintf&nbsp;:<br>
-&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Pervasives</span>.out_channel&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;(<span class="keywordsign">'</span>a,&nbsp;unit,&nbsp;<span class="constructor">Pretty</span>.doc)&nbsp;<span class="constructor">Pervasives</span>.format&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;printf&nbsp;:&nbsp;(<span class="keywordsign">'</span>a,&nbsp;unit,&nbsp;<span class="constructor">Pretty</span>.doc)&nbsp;<span class="constructor">Pervasives</span>.format&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;eprintf&nbsp;:&nbsp;(<span class="keywordsign">'</span>a,&nbsp;unit,&nbsp;<span class="constructor">Pretty</span>.doc)&nbsp;<span class="constructor">Pervasives</span>.format&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;withPrintDepth&nbsp;:&nbsp;int&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;(unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit)&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;printDepth&nbsp;:&nbsp;int&nbsp;<span class="constructor">Pervasives</span>.ref<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;printIndent&nbsp;:&nbsp;bool&nbsp;<span class="constructor">Pervasives</span>.ref<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;fastMode&nbsp;:&nbsp;bool&nbsp;<span class="constructor">Pervasives</span>.ref<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;flushOften&nbsp;:&nbsp;bool&nbsp;<span class="constructor">Pervasives</span>.ref<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;countNewLines&nbsp;:&nbsp;int&nbsp;<span class="constructor">Pervasives</span>.ref<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;auto_printer&nbsp;:&nbsp;string&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a<br>
-<span class="keyword">end</span></code></body></html>
\ No newline at end of file
diff --git a/cil/doc/api/type_Stats.html b/cil/doc/api/type_Stats.html
deleted file mode 100644
index 77cd21813..000000000
--- a/cil/doc/api/type_Stats.html
+++ /dev/null
@@ -1,36 +0,0 @@
-<html><head>
-<link rel="stylesheet" href="style.css" type="text/css">
-<link rel="Start" href="index.html">
-<link title="Index of types" rel=Appendix href="index_types.html">
-<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
-<link title="Index of values" rel=Appendix href="index_values.html">
-<link title="Index of class methods" rel=Appendix href="index_methods.html">
-<link title="Index of classes" rel=Appendix href="index_classes.html">
-<link title="Index of class types" rel=Appendix href="index_class_types.html">
-<link title="Index of modules" rel=Appendix href="index_modules.html">
-<link title="Index of module types" rel=Appendix href="index_module_types.html">
-<link title="Pretty" rel="Chapter" href="Pretty.html">
-<link title="Errormsg" rel="Chapter" href="Errormsg.html">
-<link title="Clist" rel="Chapter" href="Clist.html">
-<link title="Stats" rel="Chapter" href="Stats.html">
-<link title="Cil" rel="Chapter" href="Cil.html">
-<link title="Formatcil" rel="Chapter" href="Formatcil.html">
-<link title="Alpha" rel="Chapter" href="Alpha.html">
-<link title="Cillower" rel="Chapter" href="Cillower.html">
-<link title="Cfg" rel="Chapter" href="Cfg.html">
-<link title="Dataflow" rel="Chapter" href="Dataflow.html">
-<link title="Dominators" rel="Chapter" href="Dominators.html"><title>CIL API Documentation (version 1.3.5) : Stats</title>
-</head>
-<body>
-<code class="code"><span class="keyword">sig</span><br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;reset&nbsp;:&nbsp;bool&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
-&nbsp;&nbsp;<span class="keyword">exception</span>&nbsp;<span class="constructor">NoPerfCount</span><br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;has_performance_counters&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;bool<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;sample_pentium_perfcount_20&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;int<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;sample_pentium_perfcount_10&nbsp;:&nbsp;unit&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;int<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;time&nbsp;:&nbsp;string&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;(<span class="keywordsign">'</span>a&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>b)&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>b<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;repeattime&nbsp;:&nbsp;float&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;string&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;(<span class="keywordsign">'</span>a&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>b)&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>b<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;print&nbsp;:&nbsp;<span class="constructor">Pervasives</span>.out_channel&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;string&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;unit<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;lastTime&nbsp;:&nbsp;float&nbsp;<span class="constructor">Pervasives</span>.ref<br>
-&nbsp;&nbsp;<span class="keyword">val</span>&nbsp;timethis&nbsp;:&nbsp;(<span class="keywordsign">'</span>a&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>b)&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>a&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;<span class="keywordsign">'</span>b<br>
-<span class="keyword">end</span></code></body></html>
\ No newline at end of file
diff --git a/cil/doc/changes.html b/cil/doc/changes.html
deleted file mode 100644
index 17ffdf717..000000000
--- a/cil/doc/changes.html
+++ /dev/null
@@ -1,486 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
-            "http://www.w3.org/TR/REC-html40/loose.dtd">
-<HTML>
-<HEAD>
-
-
-
-<META http-equiv="Content-Type" content="text/html; charset=ANSI_X3.4-1968">
-<META name="GENERATOR" content="hevea 1.08">
-
-<base target="main">
-<script language="JavaScript">
-<!-- Begin
-function loadTop(url) {
-  parent.location.href= url;
-}
-// -->
-</script>
-<LINK rel="stylesheet" type="text/css" href="cil.css">
-<TITLE>
-Changes
-</TITLE>
-</HEAD>
-<BODY >
-<A HREF="cil019.html"><IMG SRC ="previous_motif.gif" ALT="Previous"></A>
-<A HREF="ciltoc.html"><IMG SRC ="contents_motif.gif" ALT="Up"></A>
-<HR>
-
-<H2 CLASS="section"><A NAME="htoc49">20</A>&nbsp;&nbsp;Changes</H2><A NAME="sec-changes"></A>
-<UL CLASS="itemize"><LI CLASS="li-itemize">
-<B>May 20, 2006</B>: <B>Released version 1.3.5</B>
-<LI CLASS="li-itemize"><B>May 19, 2006</B>: <TT>Makefile.cil.in</TT>/<TT>Makefile.cil</TT> have
- been renamed <TT>Makefile.in</TT>/<TT>Makefile</TT>. And <TT>maincil.ml</TT> has
- been renamed <TT>main.ml</TT>.
-<LI CLASS="li-itemize"><B>May 18, 2006</B>: Added a new module <A HREF="api/Cfg.html">Cfg</A> to compute the
- control-flow graph. Unlike the older <A HREF="api/Cil.html#VALcomputeCFGInfo">Cil.computeCFGInfo</A>,
- the new version does not modify the code. 
-<LI CLASS="li-itemize"><B>May 18, 2006</B>: Added several new analyses: reaching
- definitions, available expressions, liveness analysis, and dead code
- elimination. See Section&nbsp;<A HREF="ext.html#sec-Extension">8</A>.
-<LI CLASS="li-itemize"><B>May 2, 2006</B>: Added a flag <TT>--noInsertImplicitCasts</TT>.
- When this flag is used, CIL code will only include casts inserted by
- the programmer. Implicit coercions are not changed to explicit casts.
-<LI CLASS="li-itemize"><B>April 16, 2006</B>: Minor improvements to the <TT>--stats</TT>
- flag (Section&nbsp;<A HREF="cil007.html#sec-cilly-asm-options">7.2</A>). We now use Pentium performance
- counters by default, if your processor supports them.
-<LI CLASS="li-itemize"><B>April 10, 2006</B>: Extended <TT>machdep.c</TT> to support
- microcontroller compilers where the struct alignment of integer
- types does not match the size of the type. Thanks to Nathan
- Cooprider for the patch.
-<LI CLASS="li-itemize"><B>April 6, 2006</B>: Fix for global initializers of unions when
- the union field being initialized is not the first one, and for
- missing initializers of unions when the first field is not the
- largest field.
-<LI CLASS="li-itemize"><B>April 6, 2006</B>: Fix for bitfields in the SFI module.
-<LI CLASS="li-itemize"><B>April 6, 2006</B>: Various fixes for gcc attributes.
- <TT>packed</TT>, <TT>section</TT>, and <TT>always_inline</TT> attributes are now
- parsed correctly. Also fixed printing of attributes on enum types.
-<LI CLASS="li-itemize"><B>March 30, 2006</B>: Fix for <TT>rmtemps.ml</TT>, which deletes
- unused inline functions. When in <TT>gcc</TT> mode CIL now leaves all
- inline functions in place, since <TT>gcc</TT> treats these as externally
- visible. 
-<LI CLASS="li-itemize"><B>March 15, 2006</B>: Fix for <TT>typeof(<I>e</I>)</TT> when <I>e</I> has type
- <TT>void</TT>.
-<LI CLASS="li-itemize"><B>March 3, 2006</B>: Assume inline assembly instructions can
- fall through for the purposes of adding return statements. Thanks to
- Nathan Cooprider for the patch.
-<LI CLASS="li-itemize"><B>February 27, 2006</B>: Fix for extern inline functions when
- the output of CIL is fed back into CIL.
-<LI CLASS="li-itemize"><B>January 30, 2006</B>: Fix parsing of <TT>switch</TT> without braces.
-<LI CLASS="li-itemize"><B>January 30, 2006</B>: Allow `$' to appear in identifiers.
-<LI CLASS="li-itemize"><B>January 13, 2006</B>: Added support for gcc's alias attribute
- on functions. See Section&nbsp;<A HREF="cil016.html#sec-ugly-gcc">16.2</A>, item 8. 
-<LI CLASS="li-itemize"><B>December 9, 2005</B>: Christoph Spiel fixed the Golf and
- Olf modules so that Golf can be used with the points-to analysis.
- He also added performance fixes and cleaned up the documentation.
-<LI CLASS="li-itemize"><B>December 1, 2005</B>: Major rewrite of the ext/callgraph module. 
-<LI CLASS="li-itemize"><B>December 1, 2005</B>: Preserve enumeration constants in CIL. Default
-is the old behavior to replace them with integers.
-<LI CLASS="li-itemize"><B>November 30, 2005</B>: Added support for many GCC <TT>__builtin</TT>
- functions. 
-<LI CLASS="li-itemize"><B>November 30, 2005</B>: Added the EXTRAFEATURES configure
- option, making it easier to add Features to the build process.
-<LI CLASS="li-itemize"><B>November 23, 2005</B>: In MSVC mode do not remove any locals whose name
- appears as a substring in an inline assembly. 
-<LI CLASS="li-itemize"><B>November 23, 2005</B>: Do not add a return to functions that have the
- noreturn attribute. 
-<LI CLASS="li-itemize"><B>November 22, 2005</B>: <B>Released version 1.3.4</B>
-<LI CLASS="li-itemize"><B>November 21, 2005</B>: Performance and correctness fixes for
- the Points-to Analysis module. Thanks to Christoph Spiel for the
- patches.
-<LI CLASS="li-itemize"><B>October 5, 2005</B>: CIL now builds on SPARC/Solaris. Thanks
- to Nick Petroni and Remco van Engelen for the patches.
-<LI CLASS="li-itemize"><B>September 26, 2005</B>: CIL no longer uses the `<TT>-I-</TT>' flag
- by default when preprocessing with gcc.
-<LI CLASS="li-itemize"><B>August 24, 2005</B>: Added a command-line option
- &#8220;--forceRLArgEval&#8221; that forces function arguments to be evaluated
- right-to-left. This is the default behavior in unoptimized gcc and
- MSVC, but the order of evaluation is undefined when using
- optimizations, unless you apply this CIL transformation. This flag
- does not affect the order of evaluation of e.g. binary operators,
- which remains undefined. Thanks to Nathan Cooprider for the patch.
-<LI CLASS="li-itemize"><B>August 9, 2005</B>: Fixed merging when there are more than 20
- input files.
-<LI CLASS="li-itemize"><B>August 3, 2005</B>: When merging, it is now an error to
- declare the same global variable twice with different initializers.
-<LI CLASS="li-itemize"><B>July 27, 2005</B>: Fixed bug in transparent unions.
-<LI CLASS="li-itemize"><B>July 27, 2005</B>: Fixed bug in collectInitializer. Thanks to
- Benjamin Monate for the patch.
-<LI CLASS="li-itemize"><B>July 26, 2005</B>: Better support for extended inline assembly
- in gcc.
-<LI CLASS="li-itemize"><B>July 26, 2005</B>: Added many more gcc __builtin* functions
- to CIL. Most are treated as Call instructions, but a few are
- translated into expressions so that they can be used in global
- initializers. For example, &#8220;<TT>__builtin_offsetof(t, field)</TT>&#8221; is
- rewritten as &#8220;<TT>&amp;((t*)0)-&gt;field</TT>&#8221;, the traditional way of calculating
- an offset.
-<LI CLASS="li-itemize"><B>July 18, 2005</B>: Fixed bug in the constant folding of shifts
- when the second argument was negative or too large.
-<LI CLASS="li-itemize"><B>July 18, 2005</B>: Fixed bug where casts were not always
- inserted in function calls.
-<LI CLASS="li-itemize"><B>June 10, 2005</B>: Fixed bug in the code that makes implicit
- returns explicit. We weren't handling switch blocks correctly.
-<LI CLASS="li-itemize"><B>June 1, 2005</B>: <B>Released version 1.3.3</B>
-<LI CLASS="li-itemize"><B>May 31, 2005</B>: Fixed handling of noreturn attribute for function
- pointers. 
-<LI CLASS="li-itemize"><B>May 30, 2005</B>: Fixed bugs in the handling of constructors in gcc.
-<LI CLASS="li-itemize"><B>May 30, 2005</B>: Fixed bugs in the generation of global variable IDs.
-<LI CLASS="li-itemize"><B>May 27, 2005</B>: Reimplemented the translation of function calls so
- that we can intercept some builtins. This is important for the uses of
- __builtin_constant_p in constants. 
-<LI CLASS="li-itemize"><B>May 27, 2005</B>: Export the plainCilPrinter, for debugging.
-<LI CLASS="li-itemize"><B>May 27, 2005</B>: Fixed bug with printing of const attribute for
- arrays. 
-<LI CLASS="li-itemize"><B>May 27, 2005</B>: Fixed bug in generation of type signatures. Now they
- should not contain expressions anymore, so you can use structural equality.
- This used to lead to Out_of_Memory exceptions.
-<LI CLASS="li-itemize"><B>May 27, 2005</B>: Fixed bug in type comparisons using
- TBuiltin_va_list.
-<LI CLASS="li-itemize"><B>May 27, 2005</B>: Improved the constant folding in array lengths and
- case expressions. 
-<LI CLASS="li-itemize"><B>May 27, 2005</B>: Added the <TT>__builtin_frame_address</TT> to the set
- of gcc builtins.
-<LI CLASS="li-itemize"><B>May 27, 2005</B>: Added the CIL project to SourceForge.
-<LI CLASS="li-itemize"><B>April 23, 2005</B>: The cattr field was not visited.
-<LI CLASS="li-itemize"><B>March 6, 2005</B>: Debian packaging support
-<LI CLASS="li-itemize"><B>February 16, 2005</B>: Merger fixes.
-<LI CLASS="li-itemize"><B>February 11, 2005</B>: Fixed a bug in <TT>--dopartial</TT>. Thanks to
-Nathan Cooprider for this fix. 
-<LI CLASS="li-itemize"><B>January 31, 2005</B>: Make sure the input file is closed even if a
- parsing error is encountered. 
-<LI CLASS="li-itemize"><B>January 11, 2005</B>: <B>Released version 1.3.2</B>
-<LI CLASS="li-itemize"><B>January 11, 2005</B>: Fixed printing of integer constants whose
- integer kind is shorter than an int. 
-<LI CLASS="li-itemize"><B>January 11, 2005</B>: Added checks for negative size arrays and arrays
- too big. 
-<LI CLASS="li-itemize"><B>January 10, 2005</B>: Added support for GCC attribute &#8220;volatile&#8221; for
- tunctions (as a synonim for noreturn). 
-<LI CLASS="li-itemize"><B>January 10, 2005</B>: Improved the comparison of array sizes when
- comparing array types. 
-<LI CLASS="li-itemize"><B>January 10, 2005</B>: Fixed handling of shell metacharacters in the
- cilly command lione.
-<LI CLASS="li-itemize"><B>January 10, 2005</B>: Fixed dropping of cast in initialization of
- local variable with the result of a function call.
-<LI CLASS="li-itemize"><B>January 10, 2005</B>: Fixed some structural comparisons that were
- broken in the Ocaml 3.08.
-<LI CLASS="li-itemize"><B>January 10, 2005</B>: Fixed the <TT>unrollType</TT> function to not forget
- attributes. 
-<LI CLASS="li-itemize"><B>January 10, 2005</B>: Better keeping track of locations of function
- prototypes and definitions. 
-<LI CLASS="li-itemize"><B>January 10, 2005</B>: Fixed bug with the expansion of enumeration
- constants in attributes.
-<LI CLASS="li-itemize"><B>October 18, 2004</B>: Fixed a bug in cabsvisit.ml. CIl would wrap a
- BLOCK around a single atom unnecessarily. 
-<LI CLASS="li-itemize"><B>August 7, 2004</B>: <B>Released version 1.3.1</B>
-<LI CLASS="li-itemize"><B>August 4, 2004</B>: Fixed a bug in splitting of structs using 
- <TT>--dosimplify</TT>
-<LI CLASS="li-itemize"><B>July 29, 2004</B>: Minor changes to the type typeSig (type signatures)
- to ensure that they do not contain types, so that you can do structural
- comparison without danger of nontermination. 
-<LI CLASS="li-itemize"><B>July 28, 2004</B>: Ocaml version 3.08 is required. Numerous small 
- changes while porting to Ocaml 3.08. 
-<LI CLASS="li-itemize"><B>July 7, 2004</B>: <B>Released version 1.2.6</B>
-<LI CLASS="li-itemize"><B>July 2, 2004</B>: Character constants such as <TT>'c'</TT> should
- have type <TT>int</TT>, not <TT>char</TT>. Added a utility function
- <TT>Cil.charConstToInt</TT> that sign-extends chars greater than 128, if needed.
-<LI CLASS="li-itemize"><B>July 2, 2004</B>: Fixed a bug that was casting values to int
- before applying the logical negation operator !. This caused
- problems for floats, and for integer types bigger than <TT>int</TT>.
-<LI CLASS="li-itemize"><B>June 13, 2004</B>: Added the field <TT>sallstmts</TT> to a function
- description, to hold all statements in the function.
-<LI CLASS="li-itemize"><B>June 13, 2004</B>: Added new extensions for data flow analyses, and
- for computing dominators.
-<LI CLASS="li-itemize"><B>June 10, 2004</B>: Force initialization of CIL at the start of
-Cabs2cil. 
-<LI CLASS="li-itemize"><B>June 9, 2004</B>: Added support for GCC <TT>__attribute_used__</TT>
-<LI CLASS="li-itemize"><B>April 7, 2004</B>: <B>Released version 1.2.5</B>
-<LI CLASS="li-itemize"><B>April 7, 2004</B>: Allow now to run ./configure CC=cl and set the MSVC
-compiler to be the default. The MSVC driver will now select the default name
-of the .exe file like the CL compiler. 
-<LI CLASS="li-itemize"><B>April 7, 2004</B>: Fixed a bug in the driver. The temporary files are
-deleted by the Perl script before the CL compiler gets to them?
-<LI CLASS="li-itemize"><B>April 7, 2004</B>: Added the - form of arguments to the MSVC driver.
-<LI CLASS="li-itemize"><B>April 7, 2004</B>: Added a few more GCC-specific string escapes, (, [,
-{, %, E. 
-<LI CLASS="li-itemize"><B>April 7, 2004</B>: Fixed bug with continuation lines in MSVC.
-<LI CLASS="li-itemize"><B>April 6, 2004</B>: Fixed embarassing bug in the parser: the precedence
- of casts and unary operators was switched. 
-<LI CLASS="li-itemize"><B>April 5, 2004</B>: Fixed a bug involving statements mixed between
-declarations containing initializers. Now we make sure that the initializers
-are run in the proper order with respect to the statements.
-<LI CLASS="li-itemize"><B>April 5, 2004</B>: Fixed a bug in the merger. The merger was keeping
-separate alpha renaming talbes (namespaces) for variables and types. This
-means that it might end up with a type and a variable named the same way, if
-they come from different files, which breaks an important CIL invariant.
-<LI CLASS="li-itemize"><B>March 11, 2004</B> : Fixed a bug in the Cil.copyFunction function. The
-new local variables were not getting fresh IDs. 
-<LI CLASS="li-itemize"><B>March 5, 2004</B>: Fixed a bug in the handling of static function
- prototypes in a block scope. They used to be renamed. Now we just consider
- them global. 
-<LI CLASS="li-itemize"><B>February 20, 2004</B>: <B>Released version 1.2.4</B>
-<LI CLASS="li-itemize"><B>February 15, 2004</B>: Changed the parser to allow extra semicolons
- after field declarations.
-<LI CLASS="li-itemize"><B>February 14, 2004</B>: Changed the Errormsg functions: error, unimp,
-bug to not raise an exception. Instead they just set Errormsg.hadErrors. 
-<LI CLASS="li-itemize"><B>February 13, 2004</B>: Change the parsing of attributes to recognize
- enumeration constants.
-<LI CLASS="li-itemize"><B>February 10, 2004</B>: In some versions of <TT>gcc</TT> the identifier
- _{thread is an identifier and in others it is a keyword. Added code
- during configuration to detect which is the case. 
-<LI CLASS="li-itemize"><B>January 7, 2004</B>: <B>Released version 1.2.3</B>
-<LI CLASS="li-itemize"><B>January 7, 2004</B>: Changed the alpha renamer to be less
-conservative. It will remember all versions of a name that were seen and will
-only create a new name if we have not seen one. 
-<LI CLASS="li-itemize"><B>December 30, 2003</B> : Extended the <TT>cilly</TT> command to understand
- better linker command options <TT>-lfoo</TT>. 
-<LI CLASS="li-itemize"><B>December 5, 2003</B>: Added markup commands to the pretty-printer
-module. Also, changed the &#8220;@&lt;&#8221; left-flush command into &#8220;@''.
-<LI CLASS="li-itemize"><B>December 4, 2003</B>: Wide string literals are now handled
-directly by Cil (rather than being exploded into arrays). This is
-apparently handy for Microsoft Device Driver APIs that use intrinsic
-functions that require literal constant wide-string arguments. 
-<LI CLASS="li-itemize"><B>December 3, 2003</B>: Added support for structured exception handling
- extensions for the Microsoft compilers.
-<LI CLASS="li-itemize"><B>December 1, 2003</B>: Fixed a Makefile bug in the generation of the 
-Cil library (e.g., <TT>cil.cma</TT>) that was causing it to be unusable. Thanks
-to KEvin Millikin for pointing out this bug. 
-<LI CLASS="li-itemize"><B>November 26, 2003</B>: Added support for linkage specifications
- (extern &#8220;C&#8221;). 
-<LI CLASS="li-itemize"><B>November 26, 2003</B>: Added the ocamlutil directory to contain some
-utilities shared with other projects. 
-<LI CLASS="li-itemize"><B>November 25, 2003</B>: <B>Released version 1.2.2</B>
-<LI CLASS="li-itemize"><B>November 24, 2003</B>: Fixed a bug that allowed a static local to
- conflict with a global with the same name that is declared later in the
- file. 
-<LI CLASS="li-itemize"><B>November 24, 2003</B>: Removed the <TT>--keep</TT> option of the <TT>cilly</TT>
- driver and replaced it with <TT>--save-temps</TT>.
-<LI CLASS="li-itemize"><B>November 24, 2003</B>: Added printing of what CIL features are being
- run.
-<LI CLASS="li-itemize"><B>November 24, 2003</B>: Fixed a bug that resulted in attributes being
- dropped for integer types. 
-<LI CLASS="li-itemize"><B>November 11, 2003</B>: Fixed a bug in the visitor for enumeration
- definitions. 
-<LI CLASS="li-itemize"><B>October 24, 2003</B>: Fixed a problem in the configuration script. It
- was not recognizing the Ocaml version number for beta versions. 
-<LI CLASS="li-itemize"><B>October 15, 2003</B>: Fixed a problem in version 1.2.1 that was
- preventing compilation on OCaml 3.04.
-<LI CLASS="li-itemize"><B>September 17, 2003: Released version 1.2.1.</B>
-<LI CLASS="li-itemize"><B>September 7, 2003</B>: Redesigned the interface for choosing
- <TT>#line</TT> directive printing styles. Cil.printLn and
- Cil.printLnComment have been merged into Cil.lineDirectiveStyle.
-<LI CLASS="li-itemize"><B>August 8, 2003</B>: Do not silently pad out functions calls with
-arguments to match the prototype. 
-<LI CLASS="li-itemize"><B>August 1, 2003</B>: A variety of fixes suggested by Steve Chamberlain:
-initializers for externs, prohibit float literals in enum, initializers for
-unsized arrays were not working always, an overflow problem in Ocaml, changed
-the processing of attributes before struct specifiers<BR>
-<BR>
-<LI CLASS="li-itemize"><B>July 14, 2003</B>: Add basic support for GCC's "__thread" storage
-qualifier. If given, it will appear as a "thread" attribute at the top of the
-type of the declared object. Treatment is very similar to "__declspec(...)"
-in MSVC<BR>
-<BR>
-<LI CLASS="li-itemize"><B>July 8, 2003</B>: Fixed some of the __alignof computations. Fixed
- bug in the designated initializers for arrays (Array.get error).
-<LI CLASS="li-itemize"><B>July 8, 2003</B>: Fixed infinite loop bug (Stack Overflow) in the
- visitor for __alignof.
-<LI CLASS="li-itemize"><B>July 8, 2003</B>: Fixed bug in the conversion to CIL. A function or
- array argument of
- the GCC __typeof() was being converted to pointer type. Instead, it should
- be left alone, just like for sizeof. 
-<LI CLASS="li-itemize"><B>July 7, 2003</B>: New Escape module provides utility functions
- for escaping characters and strings in accordance with C lexical
- rules.<BR>
-<BR>
-<LI CLASS="li-itemize"><B>July 2, 2003</B>: Relax CIL's rules for when two enumeration types are
-considered compatible. Previously CIL considered two enums to be compatible if
-they were the same enum. Now we follow the C99 standard.<BR>
-<BR>
-<LI CLASS="li-itemize"><B>June 28, 2003</B>: In the Formatparse module, Eric Haugh found and
- fixed a bug in the handling of lvalues of the form &#8220;lv-&gt;field.more&#8221;.<BR>
-<BR>
-<LI CLASS="li-itemize"><B>June 28, 2003</B>: Extended the handling of gcc command lines
-arguments in the Perl scripts. <BR>
-<BR>
-<LI CLASS="li-itemize"><B>June 23, 2003</B>: In Rmtmps module, simplified the API for
- customizing the root set. Clients may supply a predicate that
- returns true for each root global. Modifying various
- &#8220;<TT>referenced</TT>&#8221; fields directly is no longer supported.<BR>
-<BR>
-<LI CLASS="li-itemize"><B>June 17, 2003</B>: Reimplement internal utility routine
- <TT>Cil.escape_char</TT>. Faster and better. <BR>
-<BR>
-<LI CLASS="li-itemize"><B>June 14, 2003</B>: Implemented support for <TT>__attribute__s</TT>
-appearing between "struct" and the struct tag name (also for unions and
-enums), since gcc supports this as documented in section 4.30 of the gcc
-(2.95.3) manual<BR>
-<BR>
-<LI CLASS="li-itemize"><B>May 30, 2003</B>: Released the regression tests. 
-<LI CLASS="li-itemize"><B>May 28, 2003</B>: <B>Released version 1.1.2</B>
-<LI CLASS="li-itemize"><B>May 26, 2003</B>: Add the <TT>simplify</TT> module that compiles CIL
-expressions into simpler expressions, similar to those that appear in a
-3-address intermediate language.
-<LI CLASS="li-itemize"><B>May 26, 2003</B>: Various fixes and improvements to the pointer
-analysis modules. 
-<LI CLASS="li-itemize"><B>May 26, 2003</B>: Added optional consistency checking for
-transformations.
-<LI CLASS="li-itemize"><B>May 25, 2003</B>: Added configuration support for big endian machines.
-Now <A HREF="api/Cil.html#VALlittle_endian">Cil.little_endian</A> can be used to test whether the machine is
-little endian or not. 
-<LI CLASS="li-itemize"><B>May 22, 2003</B>: Fixed a bug in the handling of inline functions. The
-CIL merger used to turn these functions into &#8220;static&#8221;, which is incorrect. 
-<LI CLASS="li-itemize"><B>May 22, 2003</B>: Expanded the CIL consistency checker to verify
-undesired sharing relationships between data structures. 
-<LI CLASS="li-itemize"><B>May 22, 2003</B>: Fixed bug in the <TT>oneret</TT> CIL module: it was
-mishandling certain labeled return statements. 
-<LI CLASS="li-itemize"><B>May 5, 2003</B>: <B>Released version 1.0.11</B>
-<LI CLASS="li-itemize"><B>May 5, 2003</B>: OS X (powerpc/darwin) support for CIL. Special 
-thanks to Jeff Foster, Andy Begel and Tim Leek. 
-<LI CLASS="li-itemize"><B>April 30, 2003</B>: Better description of how to use CIL for your
-analysis. 
-<LI CLASS="li-itemize"><B>April 28, 2003</B>: Fixed a bug with <TT>--dooneRet</TT> and
-<TT>--doheapify</TT>. Thanks, Manos Renieris.
-<LI CLASS="li-itemize"><B>April 16, 2003</B>: Reworked management of
- temporary/intermediate output files in Perl driver scripts. Default
- behavior is now to remove all such files. To keep intermediate
- files, use one of the following existing flags:
- <UL CLASS="itemize"><LI CLASS="li-itemize">
- <TT>--keepmerged</TT> for the single-file merge of all sources
- <LI CLASS="li-itemize"><TT>--keep=&lt;<I>dir</I></TT><TT>&gt;</TT> for various other CIL and
- CCured output files
- <LI CLASS="li-itemize"><TT>--save-temps</TT> for various gcc intermediate files; MSVC
- has no equivalent option
- </UL>
- As part of this change, some intermediate files have changed their
- names slightly so that new suffixes are always preceded by a
- period. For example, CCured output that used to appear in
- &#8220;<TT>foocured.c</TT>&#8221; now appears in &#8220;<TT>foo.cured.c</TT>&#8221;.
-<LI CLASS="li-itemize"><B>April 7, 2003</B>: Changed the representation of the <A HREF="api/Cil.html#VALGVar">Cil.GVar</A>
-global constructor. Now it is possible to update the initializer without
-reconstructing the global (which in turn it would require reconstructing the
-list of globals that make up a program). We did this because it is often
-tempting to use <A HREF="api/Cil.html#VALvisitCilFileSameGlobals">Cil.visitCilFileSameGlobals</A> and the <A HREF="api/Cil.html#VALGVar">Cil.GVar</A>
-was the only global that could not be updated in place. 
-<LI CLASS="li-itemize"><B>April 6, 2003</B>: Reimplemented parts of the cilly.pl script to make
-it more robust in the presence of complex compiler arguments. 
-<LI CLASS="li-itemize"><B>March 10, 2003</B>: <B>Released version 1.0.9</B>
-<LI CLASS="li-itemize"><B>March 10, 2003</B>: Unified and documented a large number of CIL
-Library Modules: oneret, simplemem, makecfg, heapify, stackguard, partial.
-Also documented the main client interface for the pointer analysis. 
-<LI CLASS="li-itemize"><B>February 18, 2003</B>: Fixed a bug in logwrites that was causing it
-to produce invalid C code on writes to bitfields. Thanks, David Park. 
-<LI CLASS="li-itemize"><B>February 15, 2003</B>: <B>Released version 1.0.8</B>
-<LI CLASS="li-itemize"><B>February 15, 2003</B>: PDF versions of the manual and API are
-available for those who would like to print them out. 
-<LI CLASS="li-itemize"><B>February 14, 2003</B>: CIL now comes bundled with alias analyses. 
-<LI CLASS="li-itemize"><B>February 11, 2003</B>: Added support for adding/removing options from
- <TT>./configure</TT>. 
-<LI CLASS="li-itemize"><B>February 3, 2003</B>: <B>Released version 1.0.7</B>
-<LI CLASS="li-itemize"><B>February 1, 2003</B>: Some bug fixes in the handling of variable
-argument functions in new versions of <TT>gcc</TT> And <TT>glibc</TT>. 
-<LI CLASS="li-itemize"><B>January 29, 2003</B>: Added the logical AND and OR operators.
-Exapanded the translation to CIL to handle more complicated initializers
-(including those that contain logical operators).
-<LI CLASS="li-itemize"><B>January 28, 2003</B>: <B>Released version 1.0.6</B>
-<LI CLASS="li-itemize"><B>January 28, 2003</B>: Added support for the new handling of
-variable-argument functions in new versions of <TT>glibc</TT>. 
-<LI CLASS="li-itemize"><B>January 19, 2003</B>: Added support for declarations in interpreted
- constructors. Relaxed the semantics of the patterns for variables. 
-<LI CLASS="li-itemize"><B>January 17, 2003</B>: Added built-in prototypes for the gcc built-in
- functions. Changed the <TT>pGlobal</TT> method in the printers to print the
- carriage return as well.
-<LI CLASS="li-itemize"><B>January 9, 2003</B>: Reworked lexer and parser's strategy for
- tracking source file names and line numbers to more closely match
- typical native compiler behavior. The visible CIL interface is
- unchanged.
-<LI CLASS="li-itemize"><B>January 9, 2003</B>: Changed the interface to the alpha convertor. Now
-you can pass a list where it will record undo information that you can use to
-revert the changes that it makes to the scope tables.
-<LI CLASS="li-itemize"><B>January 6, 2003</B>: <B>Released version 1.0.5</B>
-<LI CLASS="li-itemize"><B>January 4, 2003</B>: Changed the interface for the Formatcil module.
- Now the placeholders in the pattern have names. Also expanded the
- documentation of the Formatcil module.
- Now the placeholders in the pattern have names.
-<LI CLASS="li-itemize"><B>January 3, 2003</B>: Extended the <TT>rmtmps</TT> module to also remove
- unused labels that are generated in the conversion to CIL. This reduces the
- number of warnings that you get from <TT>cgcc</TT> afterwards.
-<LI CLASS="li-itemize"><B>December 17, 2002</B>: Fixed a few bugs in CIL related to the
- representation of string literals. The standard says that a string literal
- is an array. In CIL, a string literal has type pointer to character. This is
- Ok, except as an argument of sizeof. To support this exception, we have
- added to CIL the expression constructor SizeOfStr. This allowed us to fix
- bugs with computing <TT>sizeof("foo bar")</TT> and <TT>sizeof((char*)"foo bar")</TT>
- (the former is 8 and the latter is 4).<BR>
-<BR>
-<LI CLASS="li-itemize"><B>December 8, 2002</B>: Fixed a few bugs in the lexer and parser
- relating to hex and octal escapes in string literals. Also fixed
- the dependencies between the lexer and parser.
-<LI CLASS="li-itemize"><B>December 5, 2002</B>: Fixed visitor bugs that were causing
- some attributes not to be visited and some queued instructions to be
- dropped.
-<LI CLASS="li-itemize"><B>December 3, 2002</B>: Added a transformation to catch stack
- overflows. Fixed the heapify transformation.
-<LI CLASS="li-itemize"><B>October 14, 2002</B>: CIL is now available under the BSD license
-(see the License section or the file LICENSE). <B>Released version 1.0.4</B>
-<LI CLASS="li-itemize"><B>October 9, 2002</B>: More FreeBSD configuration changes, support
-for the GCC-ims <TT>__signed</TT> and <TT>__volatile</TT>. Thanks to Axel
-Simon for pointing out these problems. <B>Released version 1.0.3</B>
-<LI CLASS="li-itemize"><B>October 8, 2002</B>: FreeBSD configuration and porting fixes.
-Thanks to Axel Simon for pointing out these problems. 
-<LI CLASS="li-itemize"><B>September 10, 2002</B>: Fixed bug in conversion to CIL. Now we drop
-all &#8220;const&#8221; qualifiers from the types of locals, even from the fields of
-local structures or elements of arrays.
-<LI CLASS="li-itemize"><B>September 7, 2002</B>: Extended visitor interface to distinguish visitng
- offsets inside lvalues from offsets inside initializer lists.
-<LI CLASS="li-itemize"><B>September 7, 2002</B>: <B>Released version 1.0.1</B>
-<LI CLASS="li-itemize"><B>September 6, 2002</B>: Extended the patcher with the <TT>ateof</TT> flag.
-<LI CLASS="li-itemize"><B>September 4, 2002</B>: Fixed bug in the elaboration to CIL. In some
-cases constant folding of <TT>||</TT> and <TT>&amp;&amp;</TT> was computed wrong.
-<LI CLASS="li-itemize"><B>September 3, 2002</B>: Fixed the merger documentation. 
-<LI CLASS="li-itemize"><B>August 29, 2002</B>: <B>Released version 1.0.0.</B>
-<LI CLASS="li-itemize"><B>August 29, 2002</B>: Started numbering versions with a major nubmer,
-minor and revisions. Released version 1.0.0.
-<LI CLASS="li-itemize"><B>August 25, 2002</B>: Fixed the implementation of the unique
-identifiers for global variables and composites. Now those identifiers are
-globally unique.
-<LI CLASS="li-itemize"><B>August 24, 2002</B>: Added to the machine-dependent configuration the
-<TT>sizeofvoid</TT>. It is 1 on gcc and 0 on MSVC. Extended the implementation of
-<TT>Cil.bitsSizeOf</TT> to handle this (it was previously returning an error when
-trying to compute the size of <TT>void</TT>).
-<LI CLASS="li-itemize"><B>August 24, 2002</B>: Changed the representation of structure and
-unions to distinguish between undefined structures and those that are defined
-to be empty (allowed on gcc). The sizeof operator is undefined for the former
-and returns 0 for the latter.
-<LI CLASS="li-itemize"><B>August 22, 2002</B>: Apply a patch from Richard H. Y. to support
-FreeBSD installations. Thanks, Richard!
-<LI CLASS="li-itemize"><B>August 12, 2002</B>: Fixed a bug in the translation of wide-character
-strings. Now this translation matches that of the underlying compiler. Changed
-the implementation of the compiler dependencies.
-<LI CLASS="li-itemize"><B>May 25, 2002</B>: Added interpreted constructors and destructors.
-<LI CLASS="li-itemize"><B>May 17, 2002</B>: Changed the representation of functions to move the
-&#8220;inline&#8221; information to the varinfo. This way we can print the &#8220;inline&#8221;
-even in declarations which is what gcc does. 
-<LI CLASS="li-itemize"><B>May 15, 2002</B>: Changed the visitor for initializers to make two
-tail-recursive passes (the second is a <TT>List.rev</TT> and only done if one of
-the initializers change). This prevents <TT>Stack_Overflow</TT> for large
-initializers. Also improved the processing of initializers when converting to
-CIL. 
-<LI CLASS="li-itemize"><B>May 15, 2002</B>: Changed the front-end to allow the use of <TT>MSVC</TT>
-mode even on machines that do not have MSVC. The machine-dependent parameters
-for GCC will be used in that case. 
-<LI CLASS="li-itemize"><B>May 11, 2002</B>: Changed the representation of formals in function
-types. Now the function type is purely functional. 
-<LI CLASS="li-itemize"><B>May 4, 2002</B>: Added the function
-<A HREF="api/Cil.html#VALvisitCilFileSameGlobals">Cil.visitCilFileSameGlobals</A> and changed <A HREF="api/Cil.html#VALvisitCilFile">Cil.visitCilFile</A> to be
-tail recursive. This prevents stack overflow on huge files.
-<LI CLASS="li-itemize"><B>February 28, 2002</B>: Changed the significance of the
-<TT>CompoundInit</TT> in <A HREF="api/Cil.html#TYPEinit">Cil.init</A> to allow for missing initializers at the
-end of an array initializer. Added the API function
-<A HREF="api/Cil.html#VALfoldLeftCompoundAll">Cil.foldLeftCompoundAll</A>.
-</UL>
-<HR>
-<A HREF="cil019.html"><IMG SRC ="previous_motif.gif" ALT="Previous"></A>
-<A HREF="ciltoc.html"><IMG SRC ="contents_motif.gif" ALT="Up"></A>
-</BODY>
-</HTML>
diff --git a/cil/doc/cil.css b/cil/doc/cil.css
deleted file mode 100644
index 7466cf4d9..000000000
--- a/cil/doc/cil.css
+++ /dev/null
@@ -1,10 +0,0 @@
-
-.toc{list-style:none;}
-.title{margin:auto;text-align:center}
-.center{text-align:center;margin-left:auto;margin-right:auto;}
-.flushleft{text-align:left;margin-left:0ex;margin-right:auto;}
-.flushright{text-align:right;margin-left:auto;margin-right:0ex;}
-DIV TABLE{margin-left:inherit;margin-right:inherit;}
-PRE{text-align:left;margin-left:0ex;margin-right:auto;}
-BLOCKQUOTE{margin-left:4ex;margin-right:4ex;text-align:left;}
-.part{margin:auto;text-align:center}
diff --git a/cil/doc/cil.html b/cil/doc/cil.html
deleted file mode 100644
index 4d912d331..000000000
--- a/cil/doc/cil.html
+++ /dev/null
@@ -1,3532 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
-            "http://www.w3.org/TR/REC-html40/loose.dtd">
-<HTML>
-
-<HEAD>
-
-
-<META http-equiv="Content-Type" content="text/html; charset=ANSI_X3.4-1968">
-<META name="GENERATOR" content="hevea 1.08">
-<STYLE type="text/css">
-.toc{list-style:none;}
-.title{margin:auto;text-align:center}
-.center{text-align:center;margin-left:auto;margin-right:auto;}
-.flushleft{text-align:left;margin-left:0ex;margin-right:auto;}
-.flushright{text-align:right;margin-left:auto;margin-right:0ex;}
-DIV TABLE{margin-left:inherit;margin-right:inherit;}
-PRE{text-align:left;margin-left:0ex;margin-right:auto;}
-BLOCKQUOTE{margin-left:4ex;margin-right:4ex;text-align:left;}
-.part{margin:auto;text-align:center}
-</STYLE>
-
-<base target="main">
-<script language="JavaScript">
-<!-- Begin
-function loadTop(url) {
-  parent.location.href= url;
-}
-// -->
-</script>
-</HEAD>
-
-<BODY >
-<!--HEVEA command line is: /usr/bin/hevea -exec xxdate.exe ../../cilpp -->
-<!--HTMLHEAD-->
-<!--ENDHTML-->
-<!--PREFIX <ARG ></ARG>-->
-<!--CUT DEF section 1 -->
-
-
-
-<TABLE CLASS="title">
-<TR><TD></TD>
-</TR></TABLE><BR>
-<!--TOC section Introduction-->
-
-<H2 CLASS="section"><A NAME="htoc1">1</A>&nbsp;&nbsp;Introduction</H2><!--SEC END -->
-
-New: CIL now has a Source Forge page: 
- <A HREF="javascript:loadTop('http://sourceforge.net/projects/cil')">http://sourceforge.net/projects/cil</A>. <BR>
-<BR>
-CIL (<B>C</B> <B>I</B>ntermediate <B>L</B>anguage) is a high-level representation
-along with a set of tools that permit easy analysis and source-to-source
-transformation of C programs.<BR>
-<BR>
-CIL is both lower-level than abstract-syntax trees, by clarifying ambiguous
-constructs and removing redundant ones, and also higher-level than typical
-intermediate languages designed for compilation, by maintaining types and a
-close relationship with the source program. The main advantage of CIL is that
-it compiles all valid C programs into a few core constructs with a very clean
-semantics. Also CIL has a syntax-directed type system that makes it easy to
-analyze and manipulate C programs. Furthermore, the CIL front-end is able to
-process not only ANSI-C programs but also those using Microsoft C or GNU C
-extensions. If you do not use CIL and want instead to use just a C parser and
-analyze programs expressed as abstract-syntax trees then your analysis will
-have to handle a lot of ugly corners of the language (let alone the fact that
-parsing C itself is not a trivial task). See Section&nbsp;<A HREF="#sec-simplec">16</A> for some
-examples of such extreme programs that CIL simplifies for you.<BR>
-<BR>
-In essence, CIL is a highly-structured, &#8220;clean&#8221; subset of C. CIL features a
-reduced number of syntactic and conceptual forms. For example, all looping
-constructs are reduced to a single form, all function bodies are given
-explicit <TT>return</TT> statements, syntactic sugar like <TT>"-&gt;"</TT> is
-eliminated and function arguments with array types become pointers. (For an
-extensive list of how CIL simplifies C programs, see Section&nbsp;<A HREF="#sec-cabs2cil">4</A>.)
-This reduces the number of cases that must be considered when manipulating a C
-program. CIL also separates type declarations from code and flattens scopes
-within function bodies. This structures the program in a manner more amenable
-to rapid analysis and transformation. CIL computes the types of all program
-expressions, and makes all type promotions and casts explicit. CIL supports
-all GCC and MSVC extensions except for nested functions and complex numbers.
-Finally, CIL organizes C's imperative features into expressions, instructions
-and statements based on the presence and absence of side-effects and
-control-flow. Every statement can be annotated with successor and predecessor
-information. Thus CIL provides an integrated program representation that can
-be used with routines that require an AST (e.g. type-based analyses and
-pretty-printers), as well as with routines that require a CFG (e.g., dataflow
-analyses). CIL also supports even lower-level representations (e.g.,
-three-address code), see Section&nbsp;<A HREF="#sec-Extension">8</A>. <BR>
-<BR>
-CIL comes accompanied by a number of Perl scripts that perform generally
-useful operations on code:
-<UL CLASS="itemize"><LI CLASS="li-itemize">
-A <A HREF="#sec-driver">driver</A> which behaves as either the <TT>gcc</TT> or
-Microsoft VC compiler and can invoke the preprocessor followed by the CIL
-application. The advantage of this script is that you can easily use CIL and
-the analyses written for CIL with existing make files.
-<LI CLASS="li-itemize">A <A HREF="#sec-merger">whole-program merger</A> that you can use as a
-replacement for your compiler and it learns all the files you compile when you
-make a project and merges all of the preprocessed source files into a single
-one. This makes it easy to do whole-program analysis.
-<LI CLASS="li-itemize">A <A HREF="#sec-patcher">patcher</A> makes it easy to create modified
-copies of the system include files. The CIL driver can then be told to use
-these patched copies instead of the standard ones.
-</UL>
-CIL has been tested very extensively. It is able to process the SPECINT95
-benchmarks, the Linux kernel, GIMP and other open-source projects. All of
-these programs are compiled to the simple CIL and then passed to <TT>gcc</TT> and
-they still run! We consider the compilation of Linux a major feat especially
-since Linux contains many of the ugly GCC extensions (see Section&nbsp;<A HREF="#sec-ugly-gcc">16.2</A>).
-This adds to about 1,000,000 lines of code that we tested it on. It is also
-able to process the few Microsoft NT device drivers that we have had access
-to. CIL was tested against GCC's c-torture testsuite and (except for the tests
-involving complex numbers and inner functions, which CIL does not currently
-implement) CIL passes most of the tests. Specifically CIL fails 23 tests out
-of the 904 c-torture tests that it should pass. GCC itself fails 19 tests. A
-total of 1400 regression test cases are run automatically on each change to
-the CIL sources.<BR>
-<BR>
-CIL is relatively independent on the underlying machine and compiler. When
-you build it CIL will configure itself according to the underlying compiler.
-However, CIL has only been tested on Intel x86 using the gcc compiler on Linux
-and cygwin and using the MS Visual C compiler. (See below for specific
-versions of these compilers that we have used CIL for.)<BR>
-<BR>
-The largest application we have used CIL for is
-<A HREF="javascript:loadTop('../ccured/index.html')">CCured</A>, a compiler that compiles C code into
-type-safe code by analyzing your pointer usage and inserting runtime checks in
-the places that cannot be guaranteed statically to be type safe. <BR>
-<BR>
-You can also use CIL to &#8220;compile&#8221; code that uses GCC extensions (e.g. the
-Linux kernel) into standard C code.<BR>
-<BR>
-CIL also comes accompanies by a growing library of extensions (see
-Section&nbsp;<A HREF="#sec-Extension">8</A>). You can use these for your projects or as examples of
-using CIL. <BR>
-<BR>
-<TT>PDF</TT> versions of <A HREF="CIL.pdf">this manual</A> and the
-<A HREF="CIL-API.pdf">CIL API</A> are available. However, we recommend the
-<TT>HTML</TT> versions because the postprocessed code examples are easier to
-view. <BR>
-<BR>
-If you use CIL in your project, we would appreciate letting us know. If you
-want to cite CIL in your research writings, please refer to the paper &#8220;CIL:
-Intermediate Language and Tools for Analysis and Transformation of C
-Programs&#8221; by George C. Necula, Scott McPeak, S.P. Rahul and Westley Weimer,
-in &#8220;Proceedings of Conference on Compilier Construction&#8221;, 2002.<BR>
-<BR>
-<!--TOC section Installation-->
-
-<H2 CLASS="section"><A NAME="htoc2">2</A>&nbsp;&nbsp;Installation</H2><!--SEC END -->
-
-You will need OCaml release 3.08 or higher to build CIL. CIL has been tested
-on Linux and on Windows (where it can behave at either Microsoft Visual C or
-gcc).<BR>
-<BR>
-If you want to use CIL on Windows then you must get a complete installation
-of <TT>cygwin</TT> and the source-code OCaml distribution and compile it yourself
-using the cygwin tools (as opposed to getting the Win32 native-code version of
-OCaml). If you have not done this before then take a look
-<A HREF="../ccured/setup.html">here</A>. (Don't need to worry about <TT>cvs</TT> and
-<TT>ssh</TT> unless you will need to use the master CVS repository for CIL.)
-<OL CLASS="enumerate" type=1><LI CLASS="li-enumerate">
-Download the CIL <A HREF="distrib">distribution</A> (latest version is
-<A HREF="distrib/cil-1.3.5.tar.gz"><TT>distrib/cil-1.3.5.tar.gz</TT></A>). See the Section&nbsp;<A HREF="#sec-changes">20</A> for recent changes to the CIL distribution.
-<LI CLASS="li-enumerate">Unzip and untar the source distribution. This will create a directory
- called <TT>cil</TT> whose structure is explained below.<BR>
-<TT>tar xvfz cil-1.3.5.tar.gz</TT>
-<LI CLASS="li-enumerate">Enter the <TT>cil</TT> directory and run the <TT>configure</TT> script and then 
- GNU make to build the distribution. If you are on Windows, at least the
- <TT>configure</TT> step must be run from within <TT>bash</TT>.<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;<CODE>cd cil</CODE><BR>
-&nbsp;&nbsp;&nbsp;&nbsp;<CODE>./configure</CODE><BR>
-&nbsp;&nbsp;&nbsp;&nbsp;<CODE>make</CODE><BR>
-&nbsp;&nbsp;&nbsp;&nbsp;<CODE>make quicktest</CODE><BR>
-<LI CLASS="li-enumerate">You should now find <TT>cilly.asm.exe</TT> in a
-subdirectory of <TT>obj</TT>. The name of the subdirectory is either <TT>x86_WIN32</TT>
-if you are using <TT>cygwin</TT> on Windows or <TT>x86_LINUX</TT> if you are using
-Linux (although you should be using instead the Perl wrapper <TT>bin/cilly</TT>).
-Note that we do not have an <TT>install</TT> make target and you should use Cil
-from the development directory. 
-<LI CLASS="li-enumerate">If you decide to use CIL, <B>please</B>
-<A HREF="mailto:necula@cs.berkeley.edu">send us a note</A>. This will help recharge
-our batteries after more than a year of development. And of course, do send us
-your bug reports as well.</OL>
-The <TT>configure</TT> script tries to find appropriate defaults for your system.
-You can control its actions by passing the following arguments:
-<UL CLASS="itemize"><LI CLASS="li-itemize">
-<TT>CC=foo</TT> Specifies the path for the <TT>gcc</TT> executable. By default
-whichever version is in the PATH is used. If <TT>CC</TT> specifies the Microsoft
-<TT>cl</TT> compiler, then that compiler will be set as the default one. Otherwise,
-the <TT>gcc</TT> compiler will be the default.
-</UL>
-CIL requires an underlying C compiler and preprocessor. CIL depends on the
-underlying compiler and machine for the sizes and alignment of types.The
-installation procedure for CIL queries the underlying compiler for
-architecture and compiler dependent configuration parameters, such as the size
-of a pointer or the particular alignment rules for structure fields. (This
-means, of course, that you should re-run <TT>./configure</TT> when you move CIL to
-another machine.)<BR>
-<BR>
-We have tested CIL on the following compilers:
-<UL CLASS="itemize"><LI CLASS="li-itemize">
-On Windows, <TT>cl</TT> compiler version 12.00.8168 (MSVC 6),
- 13.00.9466 (MSVC .Net), and 13.10.3077 (MSVC .Net 2003). Run <TT>cl</TT>
- with no arguments to get the compiler version. 
-<LI CLASS="li-itemize">On Windows, using <TT>cygwin</TT> and <TT>gcc</TT> version 2.95.3, 3.0,
- 3.2, 3.3, and 3.4.
-<LI CLASS="li-itemize">On Linux, using <TT>gcc</TT> version 2.95.3, 3.0, 3.2, 3.3, and 4.0.
-</UL>
-Others have successfully used CIL with Mac OS X (on both PowerPC and
-x86), Solaris, and *BSD. If you make any changes to the build
-system in order to run CIL on your platform, please send us a patch.<BR>
-<BR>
- <!--TOC section Distribution Contents-->
-
-<H2 CLASS="section"><A NAME="htoc3">3</A>&nbsp;&nbsp;Distribution Contents</H2><!--SEC END -->
-
-The file <A HREF="distrib/cil-1.3.5.tar.gz"><TT>distrib/cil-1.3.5.tar.gz</TT></A> 
-contains the complete source CIL distribution, 
-consisting of the following files:<BR>
-<TABLE CELLSPACING=2 CELLPADDING=0>
-<TR><TD ALIGN=left NOWRAP>Filename</TD>
-<TD ALIGN=left NOWRAP>Description</TD>
-</TR>
-<TR><TD ALIGN=left NOWRAP><TT>Makefile.in</TT></TD>
-<TD ALIGN=left NOWRAP><TT>configure</TT> source for the 
- Makefile that builds CIL</TD>
-</TR>
-<TR><TD ALIGN=left NOWRAP><TT>configure</TT></TD>
-<TD ALIGN=left NOWRAP>The configure script</TD>
-</TR>
-<TR><TD ALIGN=left NOWRAP><TT>configure.in</TT></TD>
-<TD ALIGN=left NOWRAP>The <TT>autoconf</TT> source for <TT>configure</TT></TD>
-</TR>
-<TR><TD ALIGN=left NOWRAP><TT>config.guess</TT>, <TT>config.sub</TT>, <TT>install-sh</TT></TD>
-<TD ALIGN=left NOWRAP>stuff required by
- <TT>configure</TT></TD>
-</TR>
-<TR><TD ALIGN=left NOWRAP>&nbsp;</TD>
-</TR>
-<TR><TD ALIGN=left NOWRAP><TT>doc/</TT></TD>
-<TD ALIGN=left NOWRAP>HTML documentation of the CIL API</TD>
-</TR>
-<TR><TD ALIGN=left NOWRAP><TT>obj/</TT></TD>
-<TD ALIGN=left NOWRAP>Directory that will contain the compiled
- CIL modules and executables</TD>
-</TR>
-<TR><TD ALIGN=left NOWRAP><TT>bin/cilly.in</TT></TD>
-<TD ALIGN=left NOWRAP>The <TT>configure</TT> source for a Perl script 
- that can be invoked with the 
- same arguments as either <TT>gcc</TT> or
- Microsoft Visual C and will convert the
- program to CIL, perform some simple
- transformations, emit it and compile it as
- usual.</TD>
-</TR>
-<TR><TD ALIGN=left NOWRAP><TT>lib/CompilerStub.pm</TT></TD>
-<TD ALIGN=left NOWRAP>A Perl class that can be used to write code
- that impersonates a compiler. <TT>cilly</TT>
- uses it.</TD>
-</TR>
-<TR><TD ALIGN=left NOWRAP><TT>lib/Merger.pm</TT></TD>
-<TD ALIGN=left NOWRAP>A subclass of <TT>CompilerStub.pm</TT> that can
- be used to merge source files into a single
- source file.<TT>cilly</TT>
- uses it.</TD>
-</TR>
-<TR><TD ALIGN=left NOWRAP><TT>bin/patcher.in</TT></TD>
-<TD ALIGN=left NOWRAP>A Perl script that applies specified patches
- to standard include files.</TD>
-</TR>
-<TR><TD ALIGN=left NOWRAP>&nbsp;</TD>
-</TR>
-<TR><TD ALIGN=left NOWRAP><TT>src/check.ml,mli</TT></TD>
-<TD ALIGN=left NOWRAP>Checks the well-formedness of a CIL file</TD>
-</TR>
-<TR><TD ALIGN=left NOWRAP><TT>src/cil.ml,mli</TT></TD>
-<TD ALIGN=left NOWRAP>Definition of CIL abstract syntax and
- utilities for manipulating it</TD>
-</TR>
-<TR><TD ALIGN=left NOWRAP><TT>src/clist.ml,mli</TT></TD>
-<TD ALIGN=left NOWRAP>Utilities for efficiently managing lists
- that need to be concatenated often</TD>
-</TR>
-<TR><TD ALIGN=left NOWRAP><TT>src/errormsg.ml,mli</TT></TD>
-<TD ALIGN=left NOWRAP>Utilities for error reporting</TD>
-</TR>
-<TR><TD ALIGN=left NOWRAP><TT>src/ext/heapify.ml</TT></TD>
-<TD ALIGN=left NOWRAP>A CIL transformation that moves array local
- variables from the stack to the heap</TD>
-</TR>
-<TR><TD ALIGN=left NOWRAP><TT>src/ext/logcalls.ml,mli</TT></TD>
-<TD ALIGN=left NOWRAP>A CIL transformation that logs every
- function call</TD>
-</TR>
-<TR><TD ALIGN=left NOWRAP><TT>src/ext/sfi.ml</TT></TD>
-<TD ALIGN=left NOWRAP>A CIL transformation that can log every
- memory read and write</TD>
-</TR>
-<TR><TD ALIGN=left NOWRAP><TT>src/frontc/clexer.mll</TT></TD>
-<TD ALIGN=left NOWRAP>The lexer</TD>
-</TR>
-<TR><TD ALIGN=left NOWRAP><TT>src/frontc/cparser.mly</TT></TD>
-<TD ALIGN=left NOWRAP>The parser</TD>
-</TR>
-<TR><TD ALIGN=left NOWRAP><TT>src/frontc/cabs.ml</TT></TD>
-<TD ALIGN=left NOWRAP>The abstract syntax</TD>
-</TR>
-<TR><TD ALIGN=left NOWRAP><TT>src/frontc/cprint.ml</TT></TD>
-<TD ALIGN=left NOWRAP>The pretty printer for CABS</TD>
-</TR>
-<TR><TD ALIGN=left NOWRAP><TT>src/frontc/cabs2cil.ml</TT></TD>
-<TD ALIGN=left NOWRAP>The elaborator to CIL</TD>
-</TR>
-<TR><TD ALIGN=left NOWRAP><TT>src/main.ml</TT></TD>
-<TD ALIGN=left NOWRAP>The <TT>cilly</TT> application</TD>
-</TR>
-<TR><TD ALIGN=left NOWRAP><TT>src/pretty.ml,mli</TT></TD>
-<TD ALIGN=left NOWRAP>Utilities for pretty printing</TD>
-</TR>
-<TR><TD ALIGN=left NOWRAP><TT>src/rmtmps.ml,mli</TT></TD>
-<TD ALIGN=left NOWRAP>A CIL tranformation that removes unused
- types, variables and inlined functions</TD>
-</TR>
-<TR><TD ALIGN=left NOWRAP><TT>src/stats.ml,mli</TT></TD>
-<TD ALIGN=left NOWRAP>Utilities for maintaining timing statistics</TD>
-</TR>
-<TR><TD ALIGN=left NOWRAP><TT>src/testcil.ml</TT></TD>
-<TD ALIGN=left NOWRAP>A random test of CIL (against the resident 
- C compiler)</TD>
-</TR>
-<TR><TD ALIGN=left NOWRAP><TT>src/trace.ml,mli</TT></TD>
-<TD ALIGN=left NOWRAP>Utilities useful for printing debugging
- information</TD>
-</TR>
-<TR><TD ALIGN=left NOWRAP>&nbsp;</TD>
-</TR>
-<TR><TD ALIGN=left NOWRAP><TT>ocamlutil/</TT></TD>
-<TD ALIGN=left NOWRAP>Miscellaneous libraries that are not
- specific to CIL.</TD>
-</TR>
-<TR><TD ALIGN=left NOWRAP><TT>ocamlutil/Makefile.ocaml</TT></TD>
-<TD ALIGN=left NOWRAP>A file that is included by <TT>Makefile</TT></TD>
-</TR>
-<TR><TD ALIGN=left NOWRAP><TT>ocamlutil/Makefile.ocaml.build</TT></TD>
-<TD ALIGN=left NOWRAP>A file that is included by <TT>Makefile</TT></TD>
-</TR>
-<TR><TD ALIGN=left NOWRAP><TT>ocamlutil/perfcount.c</TT></TD>
-<TD ALIGN=left NOWRAP>C code that links with src/stats.ml
- and reads Intel performance
- counters.</TD>
-</TR>
-<TR><TD ALIGN=left NOWRAP>&nbsp;</TD>
-</TR>
-<TR><TD ALIGN=left NOWRAP><TT>obj/@ARCHOS@/feature_config.ml</TT></TD>
-<TD ALIGN=left NOWRAP>File generated by the Makefile
- describing which extra &#8220;features&#8221;
- to compile. See Section&nbsp;<A HREF="#sec-cil">5</A></TD>
-</TR>
-<TR><TD ALIGN=left NOWRAP><TT>obj/@ARCHOS@/machdep.ml</TT></TD>
-<TD ALIGN=left NOWRAP>File generated by the Makefile containing
- information about your architecture,
- such as the size of a pointer</TD>
-</TR>
-<TR><TD ALIGN=left NOWRAP><TT>src/machdep.c</TT></TD>
-<TD ALIGN=left NOWRAP>C program that generates
- <TT>machdep.ml</TT> files</TD>
-</TR></TABLE><BR>
-<!--TOC section Compiling C to CIL-->
-
-<H2 CLASS="section"><A NAME="htoc4">4</A>&nbsp;&nbsp;Compiling C to CIL</H2><!--SEC END -->
-<A NAME="sec-cabs2cil"></A>
-In this section we try to describe a few of the many transformations that are
-applied to a C program to convert it to CIL. The module that implements this
-conversion is about 5000 lines of OCaml code. In contrast a simple program
-transformation that instruments all functions to keep a shadow stack of the
-true return address (thus preventing stack smashing) is only 70 lines of code.
-This example shows that the analysis is so much simpler because it has to
-handle only a few simple C constructs and also because it can leverage on CIL
-infrastructure such as visitors and pretty-printers.<BR>
-<BR>
-In no particular order these are a few of the most significant ways in which
-C programs are compiled into CIL:
-<OL CLASS="enumerate" type=1><LI CLASS="li-enumerate">
-CIL will eliminate all declarations for unused entities. This means that
-just because your hello world program includes <TT>stdio.h</TT> it does not mean
-that your analysis has to handle all the ugly stuff from <TT>stdio.h</TT>.<BR>
-<BR>
-<LI CLASS="li-enumerate">Type specifiers are interpreted and normalized:
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-int long signed x;
-signed long extern x;
-long static int long y;
-
-// Some code that uses these declaration, so that CIL does not remove them
-int main() { return x + y; }
-</FONT></PRE>
-See the <A HREF="examples/ex1.txt">CIL output</A> for this
-code fragment<BR>
-<BR>
-<LI CLASS="li-enumerate">Anonymous structure and union declarations are given a name. 
-<PRE CLASS="verbatim"><FONT COLOR=blue>
- struct { int x; } s;
-</FONT></PRE>
-See the <A HREF="examples/ex2.txt">CIL output</A> for this
-code fragment<BR>
-<BR>
-<LI CLASS="li-enumerate">Nested structure tag definitions are pulled apart. This means that all
-structure tag definitions can be found by a simple scan of the globals.
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-struct foo {
-   struct bar {
-      union baz { 
-          int x1; 
-          double x2;
-      } u1;
-      int y;
-   } s1;
-   int z;
-} f;
-</FONT></PRE>
-See the <A HREF="examples/ex3.txt">CIL output</A> for this
-code fragment<BR>
-<BR>
-<LI CLASS="li-enumerate">All structure, union, enumeration definitions and the type definitions
-from inners scopes are moved to global scope (with appropriate renaming). This
-facilitates moving around of the references to these entities.
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-int main() {
-  struct foo { 
-        int x; } foo; 
-  {
-     struct foo { 
-        double d;
-     };
-     return foo.x;
-  }      
-}
-</FONT></PRE>
-See the <A HREF="examples/ex4.txt">CIL output</A> for this
-code fragment<BR>
-<BR>
-<LI CLASS="li-enumerate">Prototypes are added for those functions that are called before being
-defined. Furthermore, if a prototype exists but does not specify the type of
-parameters that is fixed. But CIL will not be able to add prototypes for those
-functions that are neither declared nor defined (but are used!).
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-  int f();  // Prototype without arguments
-  int f(double x) {
-      return g(x);
-  }
-  int g(double x) {
-     return x;
-  } 
-</FONT></PRE>
-See the <A HREF="examples/ex5.txt">CIL output</A> for this
-code fragment<BR>
-<BR>
-<LI CLASS="li-enumerate">Array lengths are computed based on the initializers or by constant
-folding.
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-  int a1[] = {1,2,3};
-  int a2[sizeof(int) &gt;= 4 ? 8 : 16];
-</FONT></PRE>
-See the <A HREF="examples/ex6.txt">CIL output</A> for this
-code fragment<BR>
-<BR>
-<LI CLASS="li-enumerate">Enumeration tags are computed using constant folding:
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-int main() {
-  enum { 
-     FIVE = 5, 
-     SIX, SEVEN, 
-     FOUR = FIVE - 1, 
-     EIGHT = sizeof(double)
-  } x = FIVE;
- return x;
-}
-
-</FONT></PRE>
-See the <A HREF="examples/ex7.txt">CIL output</A> for this
-code fragment<BR>
-<BR>
-<LI CLASS="li-enumerate">Initializers are normalized to include specific initialization for the
-missing elements:
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-  int a1[5] = {1,2,3};
-  struct foo { int x, y; } s1 = { 4 };
-</FONT></PRE>
-See the <A HREF="examples/ex8.txt">CIL output</A> for this
-code fragment<BR>
-<BR>
-<LI CLASS="li-enumerate">Initializer designators are interpreted and eliminated. Subobjects are
-properly marked with braces. CIL implements
-the whole ISO C99 specification for initializer (neither GCC nor MSVC do) and
-a few GCC extensions. 
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-  struct foo { 
-     int x, y; 
-     int a[5];
-     struct inner {
-        int z;
-     } inner;
-  } s = { 0, .inner.z = 3, .a[1 ... 2] = 5, 4, y : 8 };
-</FONT></PRE>
-See the <A HREF="examples/ex9.txt">CIL output</A> for this
-code fragment<BR>
-<BR>
-<LI CLASS="li-enumerate">String initializers for arrays of characters are processed
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-char foo[] = "foo plus bar";
-</FONT></PRE>
-See the <A HREF="examples/ex10.txt">CIL output</A> for this
-code fragment<BR>
-<BR>
-<LI CLASS="li-enumerate">String constants are concatenated
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-char *foo = "foo " " plus " " bar ";
-</FONT></PRE>
-See the <A HREF="examples/ex11.txt">CIL output</A> for this
-code fragment<BR>
-<BR>
-<LI CLASS="li-enumerate">Initializers for local variables are turned into assignments. This is in
-order to separate completely the declarative part of a function body from the
-statements. This has the unfortunate effect that we have to drop the <TT>const</TT>
-qualifier from local variables !
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-  int x = 5; 
-  struct foo { int f1, f2; } a [] = {1, 2, 3, 4, 5 };
-</FONT></PRE>
-See the <A HREF="examples/ex12.txt">CIL output</A> for this
-code fragment<BR>
-<BR>
-<LI CLASS="li-enumerate">Local variables in inner scopes are pulled to function scope (with
-appropriate renaming). Local scopes thus disappear. This makes it easy to find
-and operate on all local variables in a function.
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-  int x = 5; 
-  int main() {
-    int x = 6;
-    { 
-      int x = 7;
-      return x;
-    }
-    return x;
-  } 
-</FONT></PRE>
-See the <A HREF="examples/ex13.txt">CIL output</A> for this
-code fragment<BR>
-<BR>
-<LI CLASS="li-enumerate">Global declarations in local scopes are moved to global scope:
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-  int x = 5; 
-  int main() {
-    int x = 6;
-    { 
-      static int x = 7;
-      return x;
-    }
-    return x;
-  } 
-</FONT></PRE>
-See the <A HREF="examples/ex14.txt">CIL output</A> for this
-code fragment<BR>
-<BR>
-<LI CLASS="li-enumerate">Return statements are added for functions that are missing them. If the
-return type is not a base type then a <TT>return</TT> without a value is added.
-The guaranteed presence of return statements makes it easy to implement a
-transformation that inserts some code to be executed immediately before
-returning from a function.
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-  int foo() {
-    int x = 5;
-  } 
-</FONT></PRE>
-See the <A HREF="examples/ex15.txt">CIL output</A> for this
-code fragment<BR>
-<BR>
-<LI CLASS="li-enumerate">One of the most significant transformations is that expressions that
-contain side-effects are separated into statements. 
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-   int x, f(int);
-   return (x ++ + f(x));
-</FONT></PRE>
-See the <A HREF="examples/ex16.txt">CIL output</A> for this
-code fragment<BR>
-<BR>
-Internally, the <TT>x ++</TT> statement is turned into an assignment which the
-pretty-printer prints like the original. CIL has only three forms of basic
-statements: assignments, function calls and inline assembly.<BR>
-<BR>
-<LI CLASS="li-enumerate">Shortcut evaluation of boolean expressions and the <TT>?:</TT> operator are
-compiled into explicit conditionals:
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-  int x;
-  int y = x ? 2 : 4;
-  int z = x || y;
-  // Here we duplicate the return statement
-  if(x &amp;&amp; y) { return 0; } else { return 1; }
-  // To avoid excessive duplication, CIL uses goto's for 
-  // statement that have more than 5 instructions
-  if(x &amp;&amp; y || z) { x ++; y ++; z ++; x ++; y ++; return z; }
-</FONT></PRE>
-See the <A HREF="examples/ex17.txt">CIL output</A> for this
-code fragment<BR>
-<BR>
-<LI CLASS="li-enumerate">GCC's conditional expression with missing operands are also compiled
-into conditionals:
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-  int f();;
-  return f() ? : 4;
-</FONT></PRE>
-See the <A HREF="examples/ex18.txt">CIL output</A> for this
-code fragment<BR>
-<BR>
-<LI CLASS="li-enumerate">All forms of loops (<TT>while</TT>, <TT>for</TT> and <TT>do</TT>) are compiled
-internally as a single <TT>while(1)</TT> looping construct with explicit <TT>break</TT>
-statement for termination. For simple <TT>while</TT> loops the pretty printer is
-able to print back the original:
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-   int x, y;
-   for(int i = 0; i&lt;5; i++) {
-      if(i == 5) continue;
-      if(i == 4) break;
-      i += 2;
-   } 
-   while(x &lt; 5) {
-     if(x == 3) continue;
-     x ++;
-   }
-</FONT></PRE>
-See the <A HREF="examples/ex19.txt">CIL output</A> for this
-code fragment<BR>
-<BR>
-<LI CLASS="li-enumerate">GCC's block expressions are compiled away. (That's right there is an
-infinite loop in this code.)
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-   int x = 5, y = x;
-   int z = ({ x++; L: y -= x; y;});
-   return ({ goto L; 0; });
-</FONT></PRE>
-See the <A HREF="examples/ex20.txt">CIL output</A> for this
-code fragment<BR>
-<BR>
-<LI CLASS="li-enumerate">CIL contains support for both MSVC and GCC inline assembly (both in one
-internal construct)<BR>
-<BR>
-<LI CLASS="li-enumerate">CIL compiles away the GCC extension that allows many kinds of constructs
-to be used as lvalues:
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-   int x, y, z;
-   return &amp;(x ? y : z) - &amp; (x ++, x);
-</FONT></PRE>
-See the <A HREF="examples/ex21.txt">CIL output</A> for this
-code fragment<BR>
-<BR>
-<LI CLASS="li-enumerate">All types are computed and explicit casts are inserted for all
-promotions and conversions that a compiler must insert:<BR>
-<BR>
-<LI CLASS="li-enumerate">CIL will turn old-style function definition (without prototype) into
-new-style definitions. This will make the compiler less forgiving when
-checking function calls, and will catch for example cases when a function is
-called with too few arguments. This happens in old-style code for the purpose
-of implementing variable argument functions.<BR>
-<BR>
-<LI CLASS="li-enumerate">Since CIL sees the source after preprocessing the code after CIL does
-not contain the comments and the preprocessing directives.<BR>
-<BR>
-<LI CLASS="li-enumerate">CIL will remove from the source file those type declarations, local
-variables and inline functions that are not used in the file. This means that
-your analysis does not have to see all the ugly stuff that comes from the
-header files: 
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-#include &lt;stdio.h&gt;
-
-typedef int unused_type;
-
-static char unused_static (void) { return 0; }
-
-int main() {
-  int unused_local;
-  printf("Hello world\n"); // Only printf will be kept from stdio.h     
-}
-</FONT></PRE>
-See the <A HREF="examples/ex22.txt">CIL output</A> for this
-code fragment</OL>
-<!--TOC section How to Use CIL-->
-
-<H2 CLASS="section"><A NAME="htoc5">5</A>&nbsp;&nbsp;How to Use CIL</H2><!--SEC END -->
-<A NAME="sec-cil"></A><!--NAME cilly.html-->
-<BR>
-<BR>
-There are two predominant ways to use CIL to write a program analysis or
-transformation. The first is to phrase your analysis as a module that is
-called by our existing driver. The second is to use CIL as a stand-alone
-library. We highly recommend that you use <TT>cilly</TT>, our driver. <BR>
-<BR>
-<!--TOC subsection Using <TT>cilly</TT>, the CIL driver-->
-
-<H3 CLASS="subsection"><A NAME="htoc6">5.1</A>&nbsp;&nbsp;Using <TT>cilly</TT>, the CIL driver</H3><!--SEC END -->
-
-The most common way to use CIL is to write an Ocaml module containing your
-analysis and transformation, which you then link into our boilerplate
-driver application called <TT>cilly</TT>. <TT>cilly</TT> is a Perl script that
-processes and mimics <TT>GCC</TT> and <TT>MSVC</TT> command-line arguments and then
-calls <TT>cilly.byte.exe</TT> or <TT>cilly.asm.exe</TT> (CIL's Ocaml executable). <BR>
-<BR>
-An example of such module is <TT>logwrites.ml</TT>, a transformation that is
-distributed with CIL and whose purpose is to instrument code to print the
-addresses of memory locations being written. (We plan to release a
-C-language interface to CIL so that you can write your analyses in C
-instead of Ocaml.) See Section&nbsp;<A HREF="#sec-Extension">8</A> for a survey of other example
-modules. <BR>
-<BR>
-Assuming that you have written <TT>/home/necula/logwrites.ml</TT>, 
-here is how you use it: 
-<OL CLASS="enumerate" type=1><LI CLASS="li-enumerate">Modify <TT>logwrites.ml</TT> so that it includes a CIL &#8220;feature
- descriptor&#8221; like this: 
-<PRE CLASS="verbatim">
-let feature : featureDescr = 
-  { fd_name = "logwrites";              
-    fd_enabled = ref false;
-    fd_description = "generation of code to log memory writes";
-    fd_extraopt = [];
-    fd_doit = 
-    (function (f: file) -&gt; 
-      let lwVisitor = new logWriteVisitor in
-      visitCilFileSameGlobals lwVisitor f)
-  } 
-</PRE>The <TT>fd_name</TT> field names the feature and its associated
- command-line arguments. The <TT>fd_enabled</TT> field is a <TT>bool ref</TT>.
- &#8220;<TT>fd_doit</TT>&#8221; will be invoked if <TT>!fd_enabled</TT> is true after
- argument parsing, so initialize the ref cell to true if you want
- this feature to be enabled by default.<BR>
-<BR>
-When the user passes the <TT>--dologwrites</TT>
- command-line option to <TT>cilly</TT>, the variable associated with the
- <TT>fd_enabled</TT> flag is set and the <TT>fd_doit</TT> function is called
- on the <TT>Cil.file</TT> that represents the merger (see Section&nbsp;<A HREF="#sec-merger">13</A>) of
- all C files listed as arguments. <BR>
-<BR>
-<LI CLASS="li-enumerate">Invoke <TT>configure</TT> with the arguments
-<PRE CLASS="verbatim">
-./configure EXTRASRCDIRS=/home/necula EXTRAFEATURES=logwrites
-</PRE>
- This step works if each feature is packaged into its own ML file, and the
-name of the entry point in the file is <TT>feature</TT>.<BR>
-<BR>
-An alternative way to specify the new features is to change the build files
-yourself, as explained below. You'll need to use this method if a single
-feature is split across multiple files.
-<OL CLASS="enumerate" type=a><LI CLASS="li-enumerate">
- Put <TT>logwrites.ml</TT> in the <TT>src</TT> or <TT>src/ext</TT> directory. This
- will make sure that <TT>make</TT> can find it. If you want to put it in some
- other directory, modify <TT>Makefile.in</TT> and add to <TT>SOURCEDIRS</TT> your
- directory. Alternately, you can create a symlink from <TT>src</TT> or
- <TT>src/ext</TT> to your file.<BR>
-<BR>
-<LI CLASS="li-enumerate">Modify the <TT>Makefile.in</TT> and add your module to the 
- <TT>CILLY_MODULES</TT> or
- <TT>CILLY_LIBRARY_MODULES</TT> variables. The order of the modules matters. Add
- your modules somewhere after <TT>cil</TT> and before <TT>main</TT>.<BR>
-<BR>
-<LI CLASS="li-enumerate">If you have any helper files for your module, add those to
- the makefile in the same way. e.g.:
-<PRE CLASS="verbatim">
-CILLY_MODULES = $(CILLY_LIBRARY_MODULES) \
-                myutilities1 myutilities2 logwrites \
-                main
-</PRE>
- Again, order is important: <TT>myutilities2.ml</TT> will be able to refer
- to Myutilities1 but not Logwrites. If you have any ocamllex or ocamlyacc
- files, add them to both <TT>CILLY_MODULES</TT> and either <TT>MLLS</TT> or
- <TT>MLYS</TT>.<BR>
-<BR>
-<LI CLASS="li-enumerate">Modify <TT>main.ml</TT> so that your new feature descriptor appears in
- the global list of CIL features. 
-<PRE CLASS="verbatim">
-let features : C.featureDescr list = 
-  [ Logcalls.feature;
-    Oneret.feature;    
-    Heapify.feature1;  
-    Heapify.feature2;
-    makeCFGFeature; 
-    Partial.feature;
-    Simplemem.feature;
-    Logwrites.feature;  (* add this line to include the logwrites feature! *)
-  ] 
-  @ Feature_config.features 
-</PRE>
- Features are processed in the order they appear on this list. Put
- your feature last on the list if you plan to run any of CIL's
- built-in features (such as makeCFGfeature) before your own.</OL><BR>
-Standard code in <TT>cilly</TT> takes care of adding command-line arguments,
- printing the description, and calling your function automatically. 
- Note: do not worry about introducing new bugs into CIL by adding a single
- line to the feature list. <BR>
-<BR>
-<LI CLASS="li-enumerate">Now you can invoke the <TT>cilly</TT> application on a preprocessed file, or
- instead use the <TT>cilly</TT> driver which provides a convenient compiler-like
- interface to <TT>cilly</TT>. See Section&nbsp;<A HREF="#sec-driver">7</A> for details using <TT>cilly</TT>.
- Remember to enable your analysis by passing the right argument (e.g.,
- <TT>--dologwrites</TT>). </OL>
-<!--TOC subsection Using CIL as a library-->
-
-<H3 CLASS="subsection"><A NAME="htoc7">5.2</A>&nbsp;&nbsp;Using CIL as a library</H3><!--SEC END -->
-
-CIL can also be built as a library that is called from your stand-alone
-application. Add <TT>cil/src</TT>, <TT>cil/src/frontc</TT>, <TT>cil/obj/x86_LINUX</TT>
-(or <TT>cil/obj/x86_WIN32</TT>) to your Ocaml project <TT>-I</TT> include paths.
-Building CIL will also build the library <TT>cil/obj/*/cil.cma</TT> (or
-<TT>cil/obj/*/cil.cmxa</TT>). You can then link your application against that
-library. <BR>
-<BR>
-You can call the <TT>Frontc.parse: string -&gt; unit -&gt; Cil.file</TT> function with
-the name of a file containing the output of the C preprocessor.
-The <TT>Mergecil.merge: Cil.file list -&gt; string -&gt; Cil.file</TT> function merges
-multiple files. You can then invoke your analysis function on the resulting
-<TT>Cil.file</TT> data structure. You might want to call
-<TT>Rmtmps.removeUnusedTemps</TT> first to clean up the prototypes and variables
-that are not used. Then you can call the function <TT>Cil.dumpFile:
-cilPrinter -&gt; out_channel -&gt; Cil.file -&gt; unit</TT> to print the file to a
-given output channel. A good <TT>cilPrinter</TT> to use is
-<TT>defaultCilPrinter</TT>. <BR>
-<BR>
-Check out <TT>src/main.ml</TT> and <TT>bin/cilly</TT> for other good ideas
-about high-level file processing. Again, we highly recommend that you just
-our <TT>cilly</TT> driver so that you can avoid spending time re-inventing the
-wheel to provide drop-in support for standard <TT>makefile</TT>s. <BR>
-<BR>
-Here is a concrete example of compiling and linking your project against
-CIL. Imagine that your program analysis or transformation is contained in
-the single file <TT>main.ml</TT>. 
-<PRE CLASS="verbatim">
-$ ocamlopt -c -I $(CIL)/obj/x86_LINUX/ main.ml
-$ ocamlopt -ccopt -L$(CIL)/obj/x86_LINUX/ -o main unix.cmxa str.cmxa \ 
-        $(CIL)/obj/x86_LINUX/cil.cmxa main.cmx
-</PRE>
-The first line compiles your analysis, the second line links it against CIL
-(as a library) and the Ocaml Unix library. For more information about
-compiling and linking Ocaml programs, see the Ocaml home page
-at <A HREF="javascript:loadTop('http://caml.inria.fr/ocaml/')">http://caml.inria.fr/ocaml/</A>. <BR>
-<BR>
-In the next section we give an overview of the API that you can use
-to write your analysis and transformation. <BR>
-<BR>
-<!--TOC section CIL API Documentation-->
-
-<H2 CLASS="section"><A NAME="htoc8">6</A>&nbsp;&nbsp;CIL API Documentation</H2><!--SEC END -->
-<A NAME="sec-api"></A> 
-The CIL API is documented in the file <TT>src/cil.mli</TT>. We also have an
-<A HREF="api/index.html">online documentation</A> extracted from <TT>cil.mli</TT>. We
-index below the main types that are used to represent C programs in CIL: 
-<UL CLASS="itemize"><LI CLASS="li-itemize">
-<A HREF="api/index_types.html">An index of all types</A>
-<LI CLASS="li-itemize"><A HREF="api/index_values.html">An index of all values</A>
-<LI CLASS="li-itemize"><A HREF="api/Cil.html#TYPEfile">Cil.file</A> is the representation of a file.
-<LI CLASS="li-itemize"><A HREF="api/Cil.html#TYPEglobal">Cil.global</A> is the representation of a global declaration or
-definitions. Values for <A HREF="api/Cil.html#VALemptyFunction">operating on globals</A>.
-<LI CLASS="li-itemize"><A HREF="api/Cil.html#TYPEtyp">Cil.typ</A> is the representation of a type. 
-Values for <A HREF="api/Cil.html#VALvoidType">operating on types</A>.
-<LI CLASS="li-itemize"><A HREF="api/Cil.html#TYPEcompinfo">Cil.compinfo</A> is the representation of a structure or a union
-type
-<LI CLASS="li-itemize"><A HREF="api/Cil.html#TYPEfieldinfo">Cil.fieldinfo</A> is the representation of a field in a structure
-or a union
-<LI CLASS="li-itemize"><A HREF="api/Cil.html#TYPEenuminfo">Cil.enuminfo</A> is the representation of an enumeration type. 
-<LI CLASS="li-itemize"><A HREF="api/Cil.html#TYPEvarinfo">Cil.varinfo</A> is the representation of a variable 
-<LI CLASS="li-itemize"><A HREF="api/Cil.html#TYPEfundec">Cil.fundec</A> is the representation of a function
-<LI CLASS="li-itemize"><A HREF="api/Cil.html#TYPElval">Cil.lval</A> is the representation of an lvalue.
-Values for <A HREF="api/Cil.html#VALmakeVarInfo">operating on lvalues</A>.
-<LI CLASS="li-itemize"><A HREF="api/Cil.html#TYPEexp">Cil.exp</A> is the representation of an expression without
-side-effects. 
-Values for <A HREF="api/Cil.html#VALzero">operating on expressions</A>.
-<LI CLASS="li-itemize"><A HREF="api/Cil.html#TYPEinstr">Cil.instr</A> is the representation of an instruction (with
-side-effects but without control-flow)
-<LI CLASS="li-itemize"><A HREF="api/Cil.html#TYPEstmt">Cil.stmt</A> is the representation of a control-flow statements. 
-Values for <A HREF="api/Cil.html#VALmkStmt">operating on statements</A>.
-<LI CLASS="li-itemize"><A HREF="api/Cil.html#TYPEattribute">Cil.attribute</A> is the representation of attributes. 
-Values for <A HREF="api/Cil.html#TYPEattributeClass">operating on attributes</A>.
-</UL>
-<!--TOC subsection Using the visitor-->
-
-<H3 CLASS="subsection"><A NAME="htoc9">6.1</A>&nbsp;&nbsp;Using the visitor</H3><!--SEC END -->
-<A NAME="sec-visitor"></A>
-One of the most useful tools exported by the CIL API is an implementation of
-the visitor pattern for CIL programs. The visiting engine scans depth-first
-the structure of a CIL program and at each node is queries a user-provided
-visitor structure whether it should do one of the following operations: 
-<UL CLASS="itemize"><LI CLASS="li-itemize">
-Ignore this node and all its descendants
-<LI CLASS="li-itemize">Descend into all of the children and when done rebuild the node if any
-of the children have changed. 
-<LI CLASS="li-itemize">Replace the subtree rooted at the node with another tree.
-<LI CLASS="li-itemize">Replace the subtree with another tree, then descend into the children
-and rebuild the node if necessary and then invoke a user-specified function. 
-<LI CLASS="li-itemize">In addition to all of the above actions then visitor can specify that
-some instructions should be queued to be inserted before the current
-instruction or statement being visited. 
-</UL>
-By writing visitors you can customize the program traversal and
-transformation. One major limitation of the visiting engine is that it does
-not propagate information from one node to another. Each visitor must use its
-own private data to achieve this effect if necessary. <BR>
-<BR>
-Each visitor is an object that is an instance of a class of type <A HREF="api/Cil.cilVisitor.html#.">Cil.cilVisitor..</A>
-The most convenient way to obtain such classes is to specialize the
-<A HREF="api/Cil.nopCilVisitor.html#c">Cil.nopCilVisitor.c</A>lass (which just traverses the tree doing
-nothing). Any given specialization typically overrides only a few of the
-methods. Take a look for example at the visitor defined in the module
-<TT>logwrites.ml</TT>. Another, more elaborate example of a visitor is the
-[copyFunctionVisitor] defined in <TT>cil.ml</TT>.<BR>
-<BR>
-Once you have defined a visitor you can invoke it with one of the functions:
-<UL CLASS="itemize"><LI CLASS="li-itemize">
-<A HREF="api/Cil.html#VALvisitCilFile">Cil.visitCilFile</A> or <A HREF="api/Cil.html#VALvisitCilFileSameGlobals">Cil.visitCilFileSameGlobals</A> - visit a file
-<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALvisitCilGlobal">Cil.visitCilGlobal</A> - visit a global
-<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALvisitCilFunction">Cil.visitCilFunction</A> - visit a function definition
-<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALvisitCilExp">Cil.visitCilExp</A> - visit an expression
-<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALvisitCilLval">Cil.visitCilLval</A> - visit an lvalue
-<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALvisitCilInstr">Cil.visitCilInstr</A> - visit an instruction
-<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALvisitCilStmt">Cil.visitCilStmt</A> - visit a statement
-<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALvisitCilType">Cil.visitCilType</A> - visit a type. Note that this does not visit
-the files of a composite type. use visitGlobal to visit the [GCompTag] that
-defines the fields.
-</UL>
-Some transformations may want to use visitors to insert additional
-instructions before statements and instructions. To do so, pass a list of
-instructions to the <A HREF="api/Cil.html#VALqueueInstr">Cil.queueInstr</A> method of the specialized
-object. The instructions will automatically be inserted before that
-instruction in the transformed code. The <A HREF="api/Cil.html#VALunqueueInstr">Cil.unqueueInstr</A> method
-should not normally be called by the user. <BR>
-<BR>
-<!--TOC subsection Interpreted Constructors and Deconstructors-->
-
-<H3 CLASS="subsection"><A NAME="htoc10">6.2</A>&nbsp;&nbsp;Interpreted Constructors and Deconstructors</H3><!--SEC END -->
-
-Interpreted constructors and deconstructors are a facility for constructing
-and deconstructing CIL constructs using a pattern with holes that can be
-filled with a variety of kinds of elements. The pattern is a string that uses
-the C syntax to represent C language elements. For example, the following
-code:
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-Formatcil.cType "void * const (*)(int x)"
-</FONT></PRE>
-is an alternative way to construct the internal representation of the type of pointer to function
-with an integer argument and a void * const as result: 
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-TPtr(TFun(TVoid [Attr("const", [])],
-          [ ("x", TInt(IInt, []), []) ], false, []), [])
-</FONT></PRE>
-The advantage of the interpreted constructors is that you can use familiar C
-syntax to construct CIL abstract-syntax trees. <BR>
-<BR>
-You can construct this way types, lvalues, expressions, instructions and
-statements. The pattern string can also contain a number of placeholders that
-are replaced during construction with CIL items passed as additional argument
-to the construction function. For example, the <TT>%e:id</TT> placeholder means
-that the argument labeled &#8220;id&#8221; (expected to be of form <TT>Fe exp</TT>) will
-supply the expression to replace the placeholder. For example, the following
-code constructs an increment instruction at location <TT>loc</TT>:
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-Formatcil.cInstr "%v:x = %v:x + %e:something"
-        loc
-        [ ("something", Fe some_exp);
-          ("x", Fv some_varinfo) ]
-</FONT></PRE>
-An alternative way to construct the same CIL instruction is:
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-Set((Var some_varinfo, NoOffset),
-    BinOp(PlusA, Lval (Var some_varinfo, NoOffset),
-          some_exp, intType), 
-    loc)
-</FONT></PRE>
-See <A HREF="api/Cil.html#TYPEformatArg">Cil.formatArg</A> for a definition of the placeholders that are
-understood.<BR>
-<BR>
-A dual feature is the interpreted deconstructors. This can be used to test
-whether a CIL construct has a certain form:
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-Formatcil.dType "void * const (*)(int x)" t
-</FONT></PRE>
-will test whether the actual argument <TT>t</TT> is indeed a function pointer of
-the required type. If it is then the result is <TT>Some []</TT> otherwise it is
-<TT>None</TT>. Furthermore, for the purpose of the interpreted deconstructors
-placeholders in patterns match anything of the right type. For example, 
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-Formatcil.dType "void * (*)(%F:t)" t
-</FONT></PRE>
-will match any function pointer type, independent of the type and number of
-the formals. If the match succeeds the result is <TT>Some [ FF forms ]</TT> where
-<TT>forms</TT> is a list of names and types of the formals. Note that each member
-in the resulting list corresponds positionally to a placeholder in the
-pattern.<BR>
-<BR>
-The interpreted constructors and deconstructors do not support the complete C
-syntax, but only a substantial fragment chosen to simplify the parsing. The
-following is the syntax that is supported:
-<PRE CLASS="verbatim">
-Expressions:
-  E ::= %e:ID | %d:ID | %g:ID | n | L | ( E ) | Unop E | E Binop E 
-        | sizeof E | sizeof ( T ) | alignof E  | alignof ( T ) 
-        | &amp; L | ( T ) E 
-
-Unary operators:
-  Unop ::= + | - | ~ | %u:ID
-
-Binary operators:
-  Binop ::= + | - | * | / | &lt;&lt; | &gt;&gt; | &amp; | ``|'' | ^ 
-          | == | != | &lt; | &gt; | &lt;= | &gt;= | %b:ID
-
-Lvalues:
-  L ::= %l:ID | %v:ID Offset | * E | (* E) Offset | E -&gt; ident Offset 
-
-Offsets:
-  Offset ::= empty | %o:ID | . ident Offset | [ E ] Offset
-
-Types:
-  T ::= Type_spec Attrs Decl
-
-Type specifiers:
-  Type_spec ::= void | char | unsigned char | short | unsigned short
-            | int | unsigned int | long | unsigned long | %k:ID | float 
-            | double | struct %c:ID | union %c:ID 
-
-
-Declarators:
-  Decl ::= * Attrs Decl | Direct_decl
-
-
-Direct declarators:
-  Direct_decl ::= empty | ident | ( Attrs Decl ) 
-                 | Direct_decl [ Exp_opt ]
-                 | ( Attrs Decl )( Parameters )
-
-Optional expressions
-  Exp_opt ::= empty | E | %eo:ID
-
-Formal parameters
-  Parameters ::= empty | ... | %va:ID | %f:ID | T | T , Parameters
-
-List of attributes
-  Attrs ::= empty | %A:ID | Attrib Attrs
-
-Attributes
-  Attrib ::= const | restrict | volatile | __attribute__ ( ( GAttr ) )
-
-GCC Attributes
-  GAttr ::= ident | ident ( AttrArg_List )
-
-Lists of GCC Attribute arguments:
-  AttrArg_List ::= AttrArg | %P:ID | AttrArg , AttrArg_List
-
-GCC Attribute arguments  
-  AttrArg ::= %p:ID | ident | ident ( AttrArg_List )
-
-Instructions
-  Instr ::= %i:ID ; | L = E ; | L Binop= E | Callres L ( Args )
-
-Actual arguments
-   Args ::= empty | %E:ID | E | E , Args
-
-Call destination
-   Callres ::= empty | L = | %lo:ID
-
-Statements
-  Stmt ::= %s:ID | if ( E ) then Stmt ; | if ( E ) then Stmt else Stmt ;
-       | return Exp_opt | break ; | continue ; | { Stmt_list } 
-       | while (E ) Stmt | Instr_list 
-
-Lists of statements
-   Stmt_list ::= empty | %S:ID | Stmt Stmt_list  
-                | Type_spec Attrs Decl ; Stmt_list
-                | Type_spec Attrs Decl = E ; Stmt_list
-                | Type_spec Attrs Decl = L (Args) ; Stmt_list
-
-List of instructions
-   Instr_list ::= Instr | %I:ID | Instr Instr_list
-</PRE>
-Notes regarding the syntax:
-<UL CLASS="itemize"><LI CLASS="li-itemize">
-In the grammar description above non-terminals are written with
-uppercase initial<BR>
-<BR>
-<LI CLASS="li-itemize">All of the patterns consist of the <TT>%</TT> character followed by one or
-two letters, followed by &#8220;:&#8221; and an indentifier. For each such
-pattern there is a corresponding constructor of the <A HREF="api/Cil.html#TYPEformatArg">Cil.formatArg</A>
-type, whose name is the letter 'F' followed by the same one or two letters as
-in the pattern. That constructor is used by the user code to pass a
-<A HREF="api/Cil.html#TYPEformatArg">Cil.formatArg</A> actual argument to the interpreted constructor and by
-the interpreted deconstructor to return what was matched for a pattern.<BR>
-<BR>
-<LI CLASS="li-itemize">If the pattern name is uppercase, it designates a list of the elements
-designated by the corresponding lowercase pattern. E.g. %E designated lists
-of expressions (as in the actual arguments of a call).<BR>
-<BR>
-<LI CLASS="li-itemize">The two-letter patterns whose second letter is &#8220;o&#8221; designate an
-optional element. E.g. %eo designates an optional expression (as in the
-length of an array). <BR>
-<BR>
-<LI CLASS="li-itemize">Unlike in calls to <TT>printf</TT>, the pattern %g is used for strings. <BR>
-<BR>
-<LI CLASS="li-itemize">The usual precedence and associativity rules as in C apply <BR>
-<BR>
-<LI CLASS="li-itemize">The pattern string can contain newlines and comments, using both the
-<TT>/* ... */</TT> style as well as the <TT>//</TT> one. <BR>
-<BR>
-<LI CLASS="li-itemize">When matching a &#8220;cast&#8221; pattern of the form <TT>( T ) E</TT>, the
-deconstructor will match even expressions that do not have the actual cast but
-in that case the type is matched against the type of the expression. E.g. the
-patters <TT>"(int)%e"</TT> will match any expression of type <TT>int</TT> whether it
-has an explicit cast or not. <BR>
-<BR>
-<LI CLASS="li-itemize">The %k pattern is used to construct and deconstruct an integer type of
-any kind. <BR>
-<BR>
-<LI CLASS="li-itemize">Notice that the syntax of types and declaration are the same (in order
-to simplify the parser). This means that technically you can write a whole
-declaration instead of a type in the cast. In this case the name that you
-declare is ignored.<BR>
-<BR>
-<LI CLASS="li-itemize">In lists of formal parameters and lists of attributes, an empty list in
-the pattern matches any formal parameters or attributes. <BR>
-<BR>
-<LI CLASS="li-itemize">When matching types, uses of named types are unrolled to expose a real
-type before matching. <BR>
-<BR>
-<LI CLASS="li-itemize">The order of the attributes is ignored during matching. The the pattern
-for a list of attributes contains %A then the resulting <TT>formatArg</TT> will be
-bound to <B>all</B> attributes in the list. For example, the pattern <TT>"const
-%A"</TT> matches any list of attributes that contains <TT>const</TT> and binds the
-corresponding placeholder to the entire list of attributes, including
-<TT>const</TT>. <BR>
-<BR>
-<LI CLASS="li-itemize">All instruction-patterns must be terminated by semicolon<BR>
-<BR>
-<LI CLASS="li-itemize">The autoincrement and autodecrement instructions are not supported. Also
-not supported are complex expressions, the <TT>&amp;&amp;</TT> and <TT>||</TT> shortcut
-operators, and a number of other more complex instructions or statements. In
-general, the patterns support only constructs that can be represented directly
-in CIL.<BR>
-<BR>
-<LI CLASS="li-itemize">The pattern argument identifiers are not used during deconstruction.
-Instead, the result contains a sequence of values in the same order as the
-appearance of pattern arguments in the pattern.<BR>
-<BR>
-<LI CLASS="li-itemize">You can mix statements with declarations. For each declaration a new
- temporary will be constructed (using a function you provive). You can then
- refer to that temporary by name in the rest of the pattern.<BR>
-<BR>
-<LI CLASS="li-itemize">The <TT>%v:</TT> pattern specifier is optional.
-</UL>
-The following function are defined in the <TT>Formatcil</TT> module for
-constructing and deconstructing:
-<UL CLASS="itemize"><LI CLASS="li-itemize">
-<A HREF="api/Formatcil.html#VALcExp">Formatcil.cExp</A> constructs <A HREF="api/Cil.html#TYPEexp">Cil.exp</A>.
-<LI CLASS="li-itemize"><A HREF="api/Formatcil.html#VALcType">Formatcil.cType</A> constructs <A HREF="api/Cil.html#TYPEtyp">Cil.typ</A>.
-<LI CLASS="li-itemize"><A HREF="api/Formatcil.html#VALcLval">Formatcil.cLval</A> constructs <A HREF="api/Cil.html#TYPElval">Cil.lval</A>.
-<LI CLASS="li-itemize"><A HREF="api/Formatcil.html#VALcInstr">Formatcil.cInstr</A> constructs <A HREF="api/Cil.html#TYPEinstr">Cil.instr</A>.
-<LI CLASS="li-itemize"><A HREF="api/Formatcil.html#VALcStmt">Formatcil.cStmt</A> and <A HREF="api/Formatcil.html#VALcStmts">Formatcil.cStmts</A> construct <A HREF="api/Cil.html#TYPEstmt">Cil.stmt</A>.
-<LI CLASS="li-itemize"><A HREF="api/Formatcil.html#VALdExp">Formatcil.dExp</A> deconstructs <A HREF="api/Cil.html#TYPEexp">Cil.exp</A>.
-<LI CLASS="li-itemize"><A HREF="api/Formatcil.html#VALdType">Formatcil.dType</A> deconstructs <A HREF="api/Cil.html#TYPEtyp">Cil.typ</A>.
-<LI CLASS="li-itemize"><A HREF="api/Formatcil.html#VALdLval">Formatcil.dLval</A> deconstructs <A HREF="api/Cil.html#TYPElval">Cil.lval</A>.
-<LI CLASS="li-itemize"><A HREF="api/Formatcil.html#VALdInstr">Formatcil.dInstr</A> deconstructs <A HREF="api/Cil.html#TYPElval">Cil.lval</A>.
-</UL>
-Below is an example using interpreted constructors. This example generates
-the CIL representation of code that scans an array backwards and initializes
-every even-index element with an expression:
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-Formatcil.cStmts
-  loc
-  "int idx = sizeof(array) / sizeof(array[0]) - 1;
-   while(idx &gt;= 0) {
-     // Some statements to be run for all the elements of the array
-     %S:init
-     if(! (idx &amp; 1)) 
-       array[idx] = %e:init_even;
-     /* Do not forget to decrement the index variable */
-     idx = idx - 1;
-   }"
-  (fun n t -&gt; makeTempVar myfunc ~name:n t)
-  [ ("array", Fv myarray); 
-    ("init", FS [stmt1; stmt2; stmt3]);
-    ("init_even", Fe init_expr_for_even_elements) ]
-</FONT></PRE>
-To write the same CIL statement directly in CIL would take much more effort.
-Note that the pattern is parsed only once and the result (a function that
-takes the arguments and constructs the statement) is memoized. <BR>
-<BR>
-<!--TOC subsubsection Performance considerations for interpreted constructors-->
-
-<H4 CLASS="subsubsection"><A NAME="htoc11">6.2.1</A>&nbsp;&nbsp;Performance considerations for interpreted constructors</H4><!--SEC END -->
-
-Parsing the patterns is done with a LALR parser and it takes some time. To
-improve performance the constructors and deconstructors memoize the parsed
-patterns and will only compile a pattern once. Also all construction and
-deconstruction functions can be applied partially to the pattern string to
-produce a function that can be later used directly to construct or
-deconstruct. This function appears to be about two times slower than if the
-construction is done using the CIL constructors (without memoization the
-process would be one order of magnitude slower.) However, the convenience of
-interpreted constructor might make them a viable choice in many situations
-when performance is not paramount (e.g. prototyping).<BR>
-<BR>
-<!--TOC subsection Printing and Debugging support-->
-
-<H3 CLASS="subsection"><A NAME="htoc12">6.3</A>&nbsp;&nbsp;Printing and Debugging support</H3><!--SEC END -->
-
-The Modules <A HREF="api/Pretty.html">Pretty</A> and <A HREF="api/Errormsg.html">Errormsg</A> contain respectively
-utilities for pretty printing and reporting errors and provide a convenient
-<TT>printf</TT>-like interface. <BR>
-<BR>
-Additionally, CIL defines for each major type a pretty-printing function that
-you can use in conjunction with the <A HREF="api/Pretty.html">Pretty</A> interface. The
-following are some of the pretty-printing functions:
-<UL CLASS="itemize"><LI CLASS="li-itemize">
-<A HREF="api/Cil.html#VALd_exp">Cil.d_exp</A> - print an expression
-<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALd_type">Cil.d_type</A> - print a type
-<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALd_lval">Cil.d_lval</A> - print an lvalue
-<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALd_global">Cil.d_global</A> - print a global
-<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALd_stmt">Cil.d_stmt</A> - print a statment
-<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALd_instr">Cil.d_instr</A> - print an instruction
-<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALd_init">Cil.d_init</A> - print an initializer
-<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALd_attr">Cil.d_attr</A> - print an attribute
-<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALd_attrlist">Cil.d_attrlist</A> - print a set of attributes
-<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALd_loc">Cil.d_loc</A> - print a location
-<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALd_ikind">Cil.d_ikind</A> - print an integer kind
-<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALd_fkind">Cil.d_fkind</A> - print a floating point kind
-<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALd_const">Cil.d_const</A> - print a constant
-<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALd_storage">Cil.d_storage</A> - print a storage specifier
-</UL>
-You can even customize the pretty-printer by creating instances of
-<A HREF="api/Cil.cilPrinter.html#.">Cil.cilPrinter..</A> Typically such an instance extends
-<A HREF="api/Cil.html#VALdefaultCilPrinter">Cil.defaultCilPrinter</A>. Once you have a customized pretty-printer you
-can use the following printing functions:
-<UL CLASS="itemize"><LI CLASS="li-itemize">
-<A HREF="api/Cil.html#VALprintExp">Cil.printExp</A> - print an expression
-<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALprintType">Cil.printType</A> - print a type
-<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALprintLval">Cil.printLval</A> - print an lvalue
-<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALprintGlobal">Cil.printGlobal</A> - print a global
-<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALprintStmt">Cil.printStmt</A> - print a statment
-<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALprintInstr">Cil.printInstr</A> - print an instruction
-<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALprintInit">Cil.printInit</A> - print an initializer
-<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALprintAttr">Cil.printAttr</A> - print an attribute
-<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALprintAttrs">Cil.printAttrs</A> - print a set of attributes
-</UL>
-CIL has certain internal consistency invariants. For example, all references
-to a global variable must point to the same <TT>varinfo</TT> structure. This
-ensures that one can rename the variable by changing the name in the
-<TT>varinfo</TT>. These constraints are mentioned in the API documentation. There
-is also a consistency checker in file <TT>src/check.ml</TT>. If you suspect that
-your transformation is breaking these constraints then you can pass the
-<TT>--check</TT> option to cilly and this will ensure that the consistency checker
-is run after each transformation. <BR>
-<BR>
-<!--TOC subsection Attributes-->
-
-<H3 CLASS="subsection"><A NAME="htoc13">6.4</A>&nbsp;&nbsp;Attributes</H3><!--SEC END -->
-<A NAME="sec-attrib"></A>
-In CIL you can attach attributes to types and to names (variables, functions
-and fields). Attributes are represented using the type <A HREF="api/Cil.html#TYPEattribute">Cil.attribute</A>.
-An attribute consists of a name and a number of arguments (represented using
-the type <A HREF="api/Cil.html#TYPEattrparam">Cil.attrparam</A>). Almost any expression can be used as an
-attribute argument. Attributes are stored in lists sorted by the name of the
-attribute. To maintain list ordering, use the functions
-<A HREF="api/Cil.html#VALtypeAttrs">Cil.typeAttrs</A> to retrieve the attributes of a type and the functions
-<A HREF="api/Cil.html#VALaddAttribute">Cil.addAttribute</A> and <A HREF="api/Cil.html#VALaddAttributes">Cil.addAttributes</A> to add attributes.
-Alternatively you can use <A HREF="api/Cil.html#VALtypeAddAttributes">Cil.typeAddAttributes</A> to add an attribute to
-a type (and return the new type).<BR>
-<BR>
-GCC already has extensive support for attributes, and CIL extends this
-support to user-defined attributes. A GCC attribute has the syntax:
-<PRE CLASS="verbatim">
- gccattribute ::= __attribute__((attribute))    (Note the double parentheses)
-</PRE>
- Since GCC and MSVC both support various flavors of each attribute (with or
-without leading or trailing _) we first strip ALL leading and trailing _
-from the attribute name (but not the identified in [ACons] parameters in
-<A HREF="api/Cil.html#TYPEattrparam">Cil.attrparam</A>). When we print attributes, for GCC we add two leading
-and two trailing _; for MSVC we add just two leading _.<BR>
-<BR>
-There is support in CIL so that you can control the printing of attributes
-(see <A HREF="api/Cil.html#VALsetCustomPrintAttribute">Cil.setCustomPrintAttribute</A> and
-<A HREF="api/Cil.html#VALsetCustomPrintAttributeScope">Cil.setCustomPrintAttributeScope</A>). This custom-printing support is now
-used to print the "const" qualifier as "<TT>const</TT>" and not as
-"<TT>__attribute__((const))</TT>".<BR>
-<BR>
-The attributes are specified in declarations. This is unfortunate since the C
-syntax for declarations is already quite complicated and after writing the
-parser and elaborator for declarations I am convinced that few C programmers
-understand it completely. Anyway, this seems to be the easiest way to support
-attributes. <BR>
-<BR>
-Name attributes must be specified at the very end of the declaration, just
-before the <TT>=</TT> for the initializer or before the <TT>,</TT> the separates a
-declaration in a group of declarations or just before the <TT>;</TT> that
-terminates the declaration. A name attribute for a function being defined can
-be specified just before the brace that starts the function body.<BR>
-<BR>
-For example (in the following examples <TT>A1</TT>,...,<TT>An</TT> are type attributes
-and <TT>N</TT> is a name attribute (each of these uses the <TT>__attribute__</TT> syntax):
-<PRE CLASS="verbatim"><FONT COLOR=blue>
- int x N;
- int x N, * y N = 0, z[] N;
- extern void exit() N;
- int fact(int x) N { ... }
-</FONT></PRE>
-Type attributes can be specified along with the type using the following
- rules: 
-<OL CLASS="enumerate" type=1><LI CLASS="li-enumerate">
- The type attributes for a base type (int, float, named type, reference
- to struct or union or enum) must be specified immediately following the
- type (actually it is Ok to mix attributes with the specification of the
- type, in between unsigned and int for example).<BR>
-<BR>
-For example:
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-  int A1 x N;  /* A1 applies to the type int. An example is an attribute
-                   "even" restricting the type int to even values. */
-  struct foo A1 A2 x; // Both A1 and A2 apply to the struct foo type
-</FONT></PRE><BR>
-<BR>
-<LI CLASS="li-enumerate">The type attributes for a pointer type must be specified immediately
- after the * symbol.
-<PRE CLASS="verbatim"><FONT COLOR=blue>
- /* A pointer (A1) to an int (A2) */
- int A2 * A1 x;
- /* A pointer (A1) to a pointer (A2) to a float (A3) */
- float A3 * A2 * A1 x;
-</FONT></PRE>
-Note: The attributes for base types and for pointer types are a strict
- extension of the ANSI C type qualifiers (const, volatile and restrict). In
- fact CIL treats these qualifiers as attributes. <BR>
-<BR>
-<LI CLASS="li-enumerate">The attributes for a function type or for an array type can be
- specified using parenthesized declarators.<BR>
-<BR>
-For example:
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-   /* A function (A1) from int (A2) to float (A3) */
-   float A3 (A1 f)(int A2);
-
-   /* A pointer (A1) to a function (A2) that returns an int (A3) */
-   int A3 (A2 * A1 pfun)(void);
-
-   /* An array (A1) of int (A2) */
-   int A2 (A1 x0)[]
-
-   /* Array (A1) of pointers (A2) to functions (A3) that take an int (A4) and 
-    * return a pointer (A5) to int (A6)  */
-   int A6 * A5 (A3 * A2 (A1 x1)[5])(int A4);
-
-
-   /* A function (A4) that takes a float (A5) and returns a pointer (A6) to an 
-    * int (A7) */
-   extern int A7 * A6 (A4 x2)(float A5 x);
-
-   /* A function (A1) that takes a int (A2) and that returns a pointer (A3) to 
-    * a function (A4) that takes a float (A5) and returns a pointer (A6) to an 
-    * int (A7) */
-   int A7 * A6 (A4 * A3 (A1 x3)(int A2 x))(float A5) {
-      return &amp; x2;
-   }
-</FONT></PRE></OL>
-Note: ANSI C does not allow the specification of type qualifiers for function
-and array types, although it allows for the parenthesized declarator. With
-just a bit of thought (looking at the first few examples above) I hope that
-the placement of attributes for function and array types will seem intuitive.<BR>
-<BR>
-This extension is not without problems however. If you want to refer just to
-a type (in a cast for example) then you leave the name out. But this leads to
-strange conflicts due to the parentheses that we introduce to scope the
-attributes. Take for example the type of x0 from above. It should be written
-as: 
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-        int A2 (A1 )[]
-</FONT></PRE>
-But this will lead most C parsers into deep confusion because the parentheses
-around A1 will be confused for parentheses of a function designator. To push
-this problem around (I don't know a solution) whenever we are about to print a
-parenthesized declarator with no name but with attributes, we comment out the
-attributes so you can see them (for whatever is worth) without confusing the
-compiler. For example, here is how we would print the above type:
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-        int A2 /*(A1 )*/[]
-</FONT></PRE>
-<!--TOC paragraph Handling of predefined GCC attributes-->
-
-<H5 CLASS="paragraph">Handling of predefined GCC attributes</H5><!--SEC END -->
-
-GCC already supports attributes in a lot of places in declarations. The only
-place where we support attributes and GCC does not is right before the { that
-starts a function body. <BR>
-<BR>
-GCC classifies its attributes in attributes for functions, for variables and
-for types, although the latter category is only usable in definition of struct
-or union types and is not nearly as powerful as the CIL type attributes. We
-have made an effort to reclassify GCC attributes as name and type attributes
-(they only apply for function types). Here is what we came up with:
-<UL CLASS="itemize"><LI CLASS="li-itemize">
- GCC name attributes:<BR>
-<BR>
-section, constructor, destructor, unused, weak, no_instrument_function,
- noreturn, alias, no_check_memory_usage, dllinport, dllexport, exception,
- model<BR>
-<BR>
-Note: the "noreturn" attribute would be more appropriately qualified as a
- function type attribute. But we classify it as a name attribute to make
- it easier to support a similarly named MSVC attribute. <BR>
-<BR>
-<LI CLASS="li-itemize">GCC function type attributes:<BR>
-<BR>
-fconst (printed as "const"), format, regparm, stdcall,
- cdecl, longcall<BR>
-<BR>
-I was not able to completely decipher the position in which these attributes
- must go. So, the CIL elaborator knows these names and applies the following
- rules: 
- <UL CLASS="itemize"><LI CLASS="li-itemize">
- All of the name attributes that appear in the specifier part (i.e. at
- the beginning) of a declaration are associated with all declared names. <BR>
-<BR>
-<LI CLASS="li-itemize">All of the name attributes that appear at the end of a declarator are
- associated with the particular name being declared.<BR>
-<BR>
-<LI CLASS="li-itemize">More complicated is the handling of the function type attributes, since
- there can be more than one function in a single declaration (a function
- returning a pointer to a function). Lacking any real understanding of how
- GCC handles this, I attach the function type attribute to the "nearest"
- function. This means that if a pointer to a function is "nearby" the
- attribute will be correctly associated with the function. In truth I pray
- that nobody uses declarations as that of x3 above. 
- </UL>
-</UL>
-<!--TOC paragraph Handling of predefined MSVC attributes-->
-
-<H5 CLASS="paragraph">Handling of predefined MSVC attributes</H5><!--SEC END -->
-
-MSVC has two kinds of attributes, declaration modifiers to be printed before
- the storage specifier using the notation "<TT>__declspec(...)</TT>" and a few
- function type attributes, printed almost as our CIL function type
- attributes. <BR>
-<BR>
-The following are the name attributes that are printed using
- <TT>__declspec</TT> right before the storage designator of the declaration:
- thread, naked, dllimport, dllexport, noreturn<BR>
-<BR>
-The following are the function type attributes supported by MSVC: 
- fastcall, cdecl, stdcall<BR>
-<BR>
-It is not worth going into the obscure details of where MSVC accepts these
- type attributes. The parser thinks it knows these details and it pulls
- these attributes from wherever they might be placed. The important thing
- is that MSVC will accept if we print them according to the rules of the CIL
- attributes ! <BR>
-<BR>
-<!--TOC section The CIL Driver-->
-
-<H2 CLASS="section"><A NAME="htoc14">7</A>&nbsp;&nbsp;The CIL Driver</H2><!--SEC END -->
-<A NAME="sec-driver"></A>
-We have packaged CIL as an application <TT>cilly</TT> that contains certain
-example modules, such as <TT>logwrites.ml</TT> (a module
-that instruments code to print the addresses of memory locations being
-written). Normally, you write another module like that, add command-line
-options and an invocation of your module in <TT>src/main.ml</TT>. Once you compile
-CIL you will obtain the file <TT>obj/cilly.asm.exe</TT>. <BR>
-<BR>
-We wrote a driver for this executable that makes it easy to invoke your
-analysis on existing C code with very little manual intervention. This driver
-is <TT>bin/cilly</TT> and is quite powerful. Note that the <TT>cilly</TT> script
-is configured during installation with the path where CIL resides. This means
-that you can move it to any place you want. <BR>
-<BR>
-A simple use of the driver is:
-<PRE CLASS="verbatim">
-bin/cilly --save-temps -D HAPPY_MOOD -I myincludes hello.c -o hello
-</PRE>
-<FONT COLOR=blue>--save-temps</FONT> tells CIL to save the resulting output files in the
-current directory. Otherwise, they'll be put in <TT>/tmp</TT> and deleted
-automatically. Not that this is the only CIL-specific flag in the
-list &ndash; the other flags use <TT>gcc</TT>'s syntax.<BR>
-<BR>
-This performs the following actions: 
-<UL CLASS="itemize"><LI CLASS="li-itemize">
-preprocessing using the -D and -I arguments with the resulting 
- file left in <TT>hello.i</TT>, 
-<LI CLASS="li-itemize">the invocation of the <TT>cilly.asm</TT> application which parses <TT>hello.i</TT>
- converts it to CIL and the pretty-prints it to <TT>hello.cil.c</TT>
-<LI CLASS="li-itemize">another round of preprocessing with the result placed in <TT>hello.cil.i</TT>
-<LI CLASS="li-itemize">the true compilation with the result in <TT>hello.cil.o</TT>
-<LI CLASS="li-itemize">a linking phase with the result in <TT>hello</TT>
-</UL>
-Note that <TT>cilly</TT> behaves like the <TT>gcc</TT> compiler. This makes it
-easy to use it with existing <TT>Makefiles</TT>:
-<PRE CLASS="verbatim">
-make CC="bin/cilly" LD="bin/cilly"
-</PRE>
- <TT>cilly</TT> can also behave as the Microsoft Visual C compiler, if the first
- argument is <TT>--mode=MSVC</TT>:
-<PRE CLASS="verbatim">
-bin/cilly --mode=MSVC /D HAPPY_MOOD /I myincludes hello.c /Fe hello.exe
-</PRE>
- (This in turn will pass a <TT>--MSVC</TT> flag to the underlying <TT>cilly.asm</TT>
- process which will make it understand the Microsoft Visual C extensions)<BR>
-<BR>
-<TT>cilly</TT> can also behave as the archiver <TT>ar</TT>, if it is passed an
-argument <TT>--mode=AR</TT>. Note that only the <TT>cr</TT> mode is supported (create a
-new archive and replace all files in there). Therefore the previous version of
-the archive is lost. <BR>
-<BR>
-Furthermore, <TT>cilly</TT> allows you to pass some arguments on to the
-underlying <TT>cilly.asm</TT> process. As a general rule all arguments that start
-with <TT>--</TT> and that <TT>cilly</TT> itself does not process, are passed on. For
-example, 
-<PRE CLASS="verbatim">
-bin/cilly --dologwrites -D HAPPY_MOOD -I myincludes hello.c -o hello.exe
-</PRE>
- will produce a file <TT>hello.cil.c</TT> that prints all the memory addresses
-written by the application. <BR>
-<BR>
-The most powerful feature of <TT>cilly</TT> is that it can collect all the
-sources in your project, merge them into one file and then apply CIL. This
-makes it a breeze to do whole-program analysis and transformation. All you
-have to do is to pass the <TT>--merge</TT> flag to <TT>cilly</TT>:
-<PRE CLASS="verbatim">
-make CC="bin/cilly --save-temps --dologwrites --merge"
-</PRE>
- You can even leave some files untouched:
-<PRE CLASS="verbatim">
-make CC="bin/cilly --save-temps --dologwrites --merge --leavealone=foo --leavealone=bar"
-</PRE>
- This will merge all the files except those with the basename <TT>foo</TT> and
-<TT>bar</TT>. Those files will be compiled as usual and then linked in at the very
-end. <BR>
-<BR>
-The sequence of actions performed by <TT>cilly</TT> depends on whether merging
-is turned on or not:
-<UL CLASS="itemize"><LI CLASS="li-itemize">
-If merging is off
- <OL CLASS="enumerate" type=1><LI CLASS="li-enumerate">
- For every file <TT>file.c</TT> to compile
- <OL CLASS="enumerate" type=a><LI CLASS="li-enumerate">
- Preprocess the file with the given arguments to 
- produce <TT>file.i</TT>
- <LI CLASS="li-enumerate">Invoke <TT>cilly.asm</TT> to produce a <TT>file.cil.c</TT>
- <LI CLASS="li-enumerate">Preprocess to <TT>file.cil.i</TT>
- <LI CLASS="li-enumerate">Invoke the underlying compiler to produce <TT>file.cil.o</TT>
- </OL>
- <LI CLASS="li-enumerate">Link the resulting objects
- </OL>
-<LI CLASS="li-itemize">If merging is on
- <OL CLASS="enumerate" type=1><LI CLASS="li-enumerate">
- For every file <TT>file.c</TT> to compile
- <OL CLASS="enumerate" type=a><LI CLASS="li-enumerate">
- Preprocess the file with the given arguments to 
- produce <TT>file.i</TT>
- <LI CLASS="li-enumerate">Save the preprocessed source as <TT>file.o</TT>
- </OL>
- <LI CLASS="li-enumerate">When linking executable <TT>hello.exe</TT>, look at every object 
- file that must be linked and see if it actually 
- contains preprocessed source. Pass all those files to a 
- special merging application (described in
- Section&nbsp;<A HREF="#sec-merger">13</A>) to produce <TT>hello.exe_comb.c</TT>
- <LI CLASS="li-enumerate">Invoke <TT>cilly.asm</TT> to produce a <TT>hello.exe_comb.cil.c</TT>
- <LI CLASS="li-enumerate">Preprocess to <TT>hello.exe_comb.cil.i</TT>
- <LI CLASS="li-enumerate">Invoke the underlying compiler to produce <TT>hello.exe_comb.cil.o</TT>
- <LI CLASS="li-enumerate">Invoke the actual linker to produce <TT>hello.exe</TT>
- </OL>
-</UL>
-Note that files that you specify with <TT>--leavealone</TT> are not merged and
-never presented to CIL. They are compiled as usual and then are linked in at
-the end. <BR>
-<BR>
-And a final feature of <TT>cilly</TT> is that it can substitute copies of the
-system's include files:
-<PRE CLASS="verbatim">
-make CC="bin/cilly --includedir=myinclude"
-</PRE>
- This will force the preprocessor to use the file <TT>myinclude/xxx/stdio.h</TT>
-(if it exists) whenever it encounters <TT>#include &lt;stdio.h&gt;</TT>. The <TT>xxx</TT> is
-a string that identifies the compiler version you are using. This modified
-include files should be produced with the patcher script (see
-Section&nbsp;<A HREF="#sec-patcher">14</A>).<BR>
-<BR>
-<!--TOC subsection <TT>cilly</TT> Options-->
-
-<H3 CLASS="subsection"><A NAME="htoc15">7.1</A>&nbsp;&nbsp;<TT>cilly</TT> Options</H3><!--SEC END -->
-
-Among the options for the <TT>cilly</TT> you can put anything that can normally
-go in the command line of the compiler that <TT>cilly</TT> is impersonating.
-<TT>cilly</TT> will do its best to pass those options along to the appropriate
-subprocess. In addition, the following options are supported (a complete and
-up-to-date list can always be obtained by running <TT>cilly --help</TT>):
-<UL CLASS="itemize"><LI CLASS="li-itemize">
-<TT>--mode=mode</TT> This must be the first argument if present. It makes
-<TT>cilly</TT> behave as a given compiled. The following modes are recognized: 
- <UL CLASS="itemize"><LI CLASS="li-itemize">
- GNUCC - the GNU C Compiler. This is the default.
- <LI CLASS="li-itemize">MSVC - the Microsoft Visual C compiler. Of course, you should
- pass only MSVC valid options in this case. 
- <LI CLASS="li-itemize">AR - the archiver <TT>ar</TT>. Only the mode <TT>cr</TT> is supported and
- the original version of the archive is lost. 
- </UL>
-<LI CLASS="li-itemize"><TT>--help</TT> Prints a list of the options supported.
-<LI CLASS="li-itemize"><TT>--verbose</TT> Prints lots of messages about what is going on.
-<LI CLASS="li-itemize"><TT>--stages</TT> Less than <TT>--verbose</TT> but lets you see what <TT>cilly</TT>
- is doing. 
-<LI CLASS="li-itemize"><TT>--merge</TT> This tells <TT>cilly</TT> to first attempt to collect into one
-source file all of the sources that make your application, and then to apply
-<TT>cilly.asm</TT> on the resulting source. The sequence of actions in this case is
-described above and the merger itself is described in Section&nbsp;<A HREF="#sec-merger">13</A>.<BR>
-<BR>
-<LI CLASS="li-itemize"><TT>--leavealone=xxx</TT>. Do not merge and do not present to CIL the files
-whose basename is "xxx". These files are compiled as usual and linked in at
-the end. 
-<LI CLASS="li-itemize"><TT>--includedir=xxx</TT>. Override the include files with those in the given
-directory. The given directory is the same name that was given an an argument
-to the patcher (see Section&nbsp;<A HREF="#sec-patcher">14</A>). In particular this means that
-that directory contains subdirectories named based on the current compiler
-version. The patcher creates those directories. 
-<LI CLASS="li-itemize"><TT>--usecabs</TT>. Do not CIL, but instead just parse the source and print
-its AST out. This should looked like the preprocessed file. This is useful
-when you suspect that the conversion to CIL phase changes the meaning of the
-program. 
-<LI CLASS="li-itemize"><TT>--save-temps=xxx</TT>. Temporary files are preserved in the xxx
- directory. For example, the output of CIL will be put in a file
- named <TT>*.cil.c</TT>.
-<LI CLASS="li-itemize"><TT>--save-temps</TT>. Temporay files are preserved in the current directory.
-</UL>
-<!--TOC subsection <TT>cilly.asm</TT> Options-->
-
-<H3 CLASS="subsection"><A NAME="htoc16">7.2</A>&nbsp;&nbsp;<TT>cilly.asm</TT> Options</H3><!--SEC END -->
-
- <A NAME="sec-cilly-asm-options"></A>
-All of the options that start with <TT>--</TT> and are not understood by
-<TT>cilly</TT> are passed on to <TT>cilly.asm</TT>. <TT>cilly</TT> also passes along to
-<TT>cilly.asm</TT> flags such as <TT>--MSVC</TT> that both need to know
-about. The following options are supported:<BR>
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <B>General Options:</B>
-<UL CLASS="itemize"><LI CLASS="li-itemize">
- <TT>--version</TT> output version information and exit
- <LI CLASS="li-itemize"><TT>--verbose</TT> Print lots of random stuff. This is passed on from cilly
- <LI CLASS="li-itemize"><TT>--warnall</TT> Show all warnings.
- <LI CLASS="li-itemize"><TT>--debug=xxx</TT> turns on debugging flag xxx
- <LI CLASS="li-itemize"><TT>--nodebug=xxx</TT> turns off debugging flag xxx
- <LI CLASS="li-itemize"><TT>--flush</TT> Flush the output streams often (aids debugging).
- <LI CLASS="li-itemize"><TT>--check</TT> Run a consistency check over the CIL after every operation.
- <LI CLASS="li-itemize"><TT>--nocheck</TT> turns off consistency checking of CIL.
- <LI CLASS="li-itemize"><TT>--noPrintLn</TT> Don't output #line directives in the output.
- <LI CLASS="li-itemize"><TT>--commPrintLn</TT> Print #line directives in the output, but
- put them in comments.
- <LI CLASS="li-itemize"><TT>--log=xxx</TT> Set the name of the log file. By default stderr is used
- <LI CLASS="li-itemize"><TT>--MSVC</TT> Enable MSVC compatibility. Default is GNU.
- <LI CLASS="li-itemize"><TT>--ignore-merge-conflicts</TT> ignore merging conflicts.
- <LI CLASS="li-itemize"><TT>--extrafiles=filename</TT>: the name of a file that contains
- a list of additional files to process, separated by whitespace.
- <LI CLASS="li-itemize"><TT>--stats</TT> Print statistics about the running time of the
- parser, conversion to CIL, etc. Also prints memory-usage
- statistics. You can time parts of your own code as well. Calling
- (<TT>Stats.time &#8220;label&#8221; func arg</TT>) will evaluate <TT>(func arg)</TT>
- and remember how long this takes. If you call <TT>Stats.time</TT>
- repeatedly with the same label, CIL will report the aggregate
- time.<BR>
-<BR>
-If available, CIL uses the x86 performance counters for these
- stats. This is very precise, but results in &#8220;wall-clock time.&#8221;
- To report only user-mode time, find the call to <TT>Stats.reset</TT> in
- <TT>main.ml</TT>, and change it to <TT>Stats.reset false</TT>.<BR>
-<BR>
-<B>Lowering Options</B>
- <LI CLASS="li-itemize"><TT>--noLowerConstants</TT> do not lower constant expressions.
- <LI CLASS="li-itemize"><TT>--noInsertImplicitCasts</TT> do not insert implicit casts.
- <LI CLASS="li-itemize"><TT>--forceRLArgEval</TT> Forces right to left evaluation of function arguments.
- <LI CLASS="li-itemize"><TT>--disallowDuplication</TT> Prevent small chunks of code from being duplicated.
- <LI CLASS="li-itemize"><TT>--keepunused</TT> Do not remove the unused variables and types.
- <LI CLASS="li-itemize"><TT>--rmUnusedInlines</TT> Delete any unused inline functions. This is the default in MSVC mode.<BR>
-<BR>
-<B>Output Options:</B>
- <LI CLASS="li-itemize"><TT>--printCilAsIs</TT> Do not try to simplify the CIL when
- printing. Without this flag, CIL will attempt to produce prettier
- output by e.g. changing <TT>while(1)</TT> into more meaningful loops.
- <LI CLASS="li-itemize"><TT>--noWrap</TT> do not wrap long lines when printing
- <LI CLASS="li-itemize"><TT>--out=xxx</TT> the name of the output CIL file. <TT>cilly</TT>
- sets this for you.
- <LI CLASS="li-itemize"><TT>--mergedout=xxx</TT> specify the name of the merged file
- <LI CLASS="li-itemize"><TT>--cabsonly=xxx</TT> CABS output file name
-<BR>
-<BR>
- <B>Selected features.</B> See Section&nbsp;<A HREF="#sec-Extension">8</A> for more information.
-<LI CLASS="li-itemize"><TT>--dologcalls</TT>. Insert code in the processed source to print the name of
-functions as are called. Implemented in <TT>src/ext/logcalls.ml</TT>.
-<LI CLASS="li-itemize"><TT>--dologwrites</TT>. Insert code in the processed source to print the
-address of all memory writes. Implemented in <TT>src/ext/logwrites.ml</TT>.
-<LI CLASS="li-itemize"><TT>--dooneRet</TT>. Make each function have at most one 'return'.
-Implemented in <TT>src/ext/oneret.ml</TT>. 
-<LI CLASS="li-itemize"><TT>--dostackGuard</TT>. Instrument function calls and returns to
-maintain a separate stack for return addresses. Implemeted in
-<TT>src/ext/heapify.ml</TT>. 
-<LI CLASS="li-itemize"><TT>--domakeCFG</TT>. Make the program look more like a CFG. Implemented
-in <TT>src/cil.ml</TT>. 
-<LI CLASS="li-itemize"><TT>--dopartial</TT>. Do interprocedural partial evaluation and
-constant folding. Implemented in <TT>src/ext/partial.ml</TT>. 
-<LI CLASS="li-itemize"><TT>--dosimpleMem</TT>. Simplify all memory expressions. Implemented in
-<TT>src/ext/simplemem.ml</TT>. <BR>
-<BR>
-For an up-to-date list of available options, run <TT>cilly.asm --help</TT>. </UL>
-<!--TOC section Library of CIL Modules-->
-
-<H2 CLASS="section"><A NAME="htoc17">8</A>&nbsp;&nbsp;Library of CIL Modules</H2><!--SEC END -->
- <A NAME="sec-Extension"></A><!--NAME ext.html-->
-<BR>
-<BR>
-We are developing a suite of modules that use CIL for program analyses and
-transformations that we have found useful. You can use these modules directly
-on your code, or generally as inspiration for writing similar modules. A
-particularly big and complex application written on top of CIL is CCured
-(<A HREF="../ccured/index.html"><TT>../ccured/index.html</TT></A>).<BR>
-<BR>
-<!--TOC subsection Control-Flow Graphs-->
-
-<H3 CLASS="subsection"><A NAME="htoc18">8.1</A>&nbsp;&nbsp;Control-Flow Graphs</H3><!--SEC END -->
- <A NAME="sec-cfg"></A>
-The <A HREF="api/Cil.html#TYPEstmt">Cil.stmt</A> datatype includes fields for intraprocedural
-control-flow information: the predecessor and successor statements of
-the current statement. This information is not computed by default.
-If you want to use the control-flow graph, or any of the extensions in
-this section that require it, you have to explicitly ask CIL to
-compute the CFG.<BR>
-<BR>
-<!--TOC subsubsection The CFG module (new in CIL 1.3.5)-->
-
-<H4 CLASS="subsubsection"><A NAME="htoc19">8.1.1</A>&nbsp;&nbsp;The CFG module (new in CIL 1.3.5)</H4><!--SEC END -->
-
-The best way to compute the CFG is with the CFG module. Just invoke
-<A HREF="api/Cfg.html#VALcomputeFileCFG">Cfg.computeFileCFG</A> on your file. The <A HREF="api/Cfg.html">Cfg</A> API
-describes the rest of actions you can take with this module, including
-computing the CFG for one function at a time, or printing the CFG in
-<TT>dot</TT> form.<BR>
-<BR>
-<!--TOC subsubsection Simplified control flow-->
-
-<H4 CLASS="subsubsection"><A NAME="htoc20">8.1.2</A>&nbsp;&nbsp;Simplified control flow</H4><!--SEC END -->
-
-CIL can reduce high-level C control-flow constructs like <TT>switch</TT> and
-<TT>continue</TT> to lower-level <TT>goto</TT>s. This completely eliminates some
-possible classes of statements from the program and may make the result
-easier to analyze (e.g., it simplifies data-flow analysis).<BR>
-<BR>
-You can invoke this transformation on the command line with
-<TT>--domakeCFG</TT> or programatically with <A HREF="api/Cil.html#VALprepareCFG">Cil.prepareCFG</A>.
-After calling Cil.prepareCFG, you can use <A HREF="api/Cil.html#VALcomputeCFGInfo">Cil.computeCFGInfo</A>
-to compute the CFG information and find the successor and predecessor
-of each statement.<BR>
-<BR>
-For a concrete example, you can see how <TT>cilly --domakeCFG</TT>
-transforms the following code (note the fall-through in case 1): 
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-  int foo (int predicate) {
-    int x = 0;
-    switch (predicate) {
-      case 0: return 111;
-      case 1: x = x + 1;
-      case 2: return (x+3);
-      case 3: break;
-      default: return 222;
-    }
-    return 333;
-  }
-</FONT></PRE>
-See the <A HREF="examples/ex23.txt">CIL output</A> for this
-code fragment<BR>
-<BR>
-<!--TOC subsection Data flow analysis framework-->
-
-<H3 CLASS="subsection"><A NAME="htoc21">8.2</A>&nbsp;&nbsp;Data flow analysis framework</H3><!--SEC END -->
-
-The <A HREF="api/Dataflow.html">Dataflow</A> module (click for the ocamldoc) contains a
-parameterized framework for forward and backward data flow
-analyses. You provide the transfer functions and this module does the
-analysis. You must compute control-flow information (Section&nbsp;<A HREF="#sec-cfg">8.1</A>)
-before invoking the Dataflow module.<BR>
-<BR>
-<!--TOC subsection Dominators-->
-
-<H3 CLASS="subsection"><A NAME="htoc22">8.3</A>&nbsp;&nbsp;Dominators</H3><!--SEC END -->
- 
-The module <A HREF="api/Dominators.html">Dominators</A> contains the computation of immediate
- dominators. It uses the <A HREF="api/Dataflow.html">Dataflow</A> module. <BR>
-<BR>
-<!--TOC subsection Points-to Analysis-->
-
-<H3 CLASS="subsection"><A NAME="htoc23">8.4</A>&nbsp;&nbsp;Points-to Analysis</H3><!--SEC END -->
-
-The module <TT>ptranal.ml</TT> contains two interprocedural points-to
-analyses for CIL: <TT>Olf</TT> and <TT>Golf</TT>. <TT>Olf</TT> is the default.
-(Switching from <TT>olf.ml</TT> to <TT>golf.ml</TT> requires a change in
-<TT>Ptranal</TT> and a recompiling <TT>cilly</TT>.)<BR>
-<BR>
-The analyses have the following characteristics:
-<UL CLASS="itemize"><LI CLASS="li-itemize">
-Not based on C types (inferred pointer relationships are sound
- despite most kinds of C casts)
-<LI CLASS="li-itemize">One level of subtyping 
-<LI CLASS="li-itemize">One level of context sensitivity (Golf only)
-<LI CLASS="li-itemize">Monomorphic type structures
-<LI CLASS="li-itemize">Field insensitive (fields of structs are conflated)
-<LI CLASS="li-itemize">Demand-driven (points-to queries are solved on demand)
-<LI CLASS="li-itemize">Handle function pointers
-</UL>
-The analysis itself is factored into two components: <TT>Ptranal</TT>,
-which walks over the CIL file and generates constraints, and <TT>Olf</TT>
-or <TT>Golf</TT>, which solve the constraints. The analysis is invoked
-with the function <TT>Ptranal.analyze_file: Cil.file -&gt;
- unit</TT>. This function builds the points-to graph for the CIL file
-and stores it internally. There is currently no facility for clearing
-internal state, so <TT>Ptranal.analyze_file</TT> should only be called
-once.<BR>
-<BR>
-The constructed points-to graph supports several kinds of queries,
-including alias queries (may two expressions be aliased?) and
-points-to queries (to what set of locations may an expression point?).<BR>
-<BR>
-The main interface with the alias analysis is as follows:
-<UL CLASS="itemize"><LI CLASS="li-itemize">
-<TT>Ptranal.may_alias: Cil.exp -&gt; Cil.exp -&gt; bool</TT>. If
- <TT>true</TT>, the two expressions may have the same value.
-<LI CLASS="li-itemize"><TT>Ptranal.resolve_lval: Cil.lval -&gt; (Cil.varinfo
- list)</TT>. Returns the list of variables to which the given
- left-hand value may point.
-<LI CLASS="li-itemize"><TT>Ptranal.resolve_exp: Cil.exp -&gt; (Cil.varinfo list)</TT>.
- Returns the list of variables to which the given expression may
- point.
-<LI CLASS="li-itemize"><TT>Ptranal.resolve_funptr: Cil.exp -&gt; (Cil.fundec
- list)</TT>. Returns the list of functions to which the given
- expression may point.
-</UL>
-The precision of the analysis can be customized by changing the values
-of several flags:
-<UL CLASS="itemize"><LI CLASS="li-itemize">
-<TT>Ptranal.no_sub: bool ref</TT>.
- If <TT>true</TT>, subtyping is disabled. Associated commandline option:
- <B>--ptr_unify</B>.
-<LI CLASS="li-itemize"><TT>Ptranal.analyze_mono: bool ref</TT>.
- (Golf only) If <TT>true</TT>, context sensitivity is disabled and the
- analysis is effectively monomorphic. Commandline option:
- <B>--ptr_mono</B>.
-<LI CLASS="li-itemize"><TT>Ptranal.smart_aliases: bool ref</TT>.
- (Golf only) If <TT>true</TT>, &#8220;smart&#8221; disambiguation of aliases is
- enabled. Otherwise, aliases are computed by intersecting points-to
- sets. This is an experimental feature.
-<LI CLASS="li-itemize"><TT>Ptranal.model_strings: bool ref</TT>.
- Make the alias analysis model string constants by treating them as
- pointers to chars. Commandline option: <B>--ptr_model_strings</B>
-<LI CLASS="li-itemize"><TT>Ptranal.conservative_undefineds: bool ref</TT>.
- Make the most pessimistic assumptions about globals if an undefined
- function is present. Such a function can write to every global
- variable. Commandline option: <B>--ptr_conservative</B>
-</UL>
-In practice, the best precision/efficiency tradeoff is achieved by
-setting <TT>Ptranal.no_sub</TT> to <TT>false</TT>, <TT>Ptranal.analyze_mono</TT> to
-<TT>true</TT>, and <TT>Ptranal.smart_aliases</TT> to <TT>false</TT>. These are the
-default values of the flags.<BR>
-<BR>
-There are also a few flags that can be used to inspect or serialize
-the results of the analysis.
-<UL CLASS="itemize"><LI CLASS="li-itemize">
-<TT>Ptranal.debug_may_aliases</TT>.
- Print the may-alias relationship of each pair of expressions in the
- program. Commandline option: <B>--ptr_may_aliases</B>.
-<LI CLASS="li-itemize"><TT>Ptranal.print_constraints: bool ref</TT>.
- If <TT>true</TT>, the analysis will print each constraint as it is
- generated.
-<LI CLASS="li-itemize"><TT>Ptranal.print_types: bool ref</TT>.
- If <TT>true</TT>, the analysis will print the inferred type of each
- variable in the program.<BR>
-<BR>
-If <TT>Ptranal.analyze_mono</TT> and <TT>Ptranal.no_sub</TT> are both
- <TT>true</TT>, this output is sufficient to reconstruct the points-to
- graph. One nice feature is that there is a pretty printer for
- recursive types, so the print routine does not loop.
-<LI CLASS="li-itemize"><TT>Ptranal.compute_results: bool ref</TT>.
- If <TT>true</TT>, the analysis will print out the points-to set of each
- variable in the program. This will essentially serialize the
- points-to graph.
-</UL>
-<!--TOC subsection StackGuard-->
-
-<H3 CLASS="subsection"><A NAME="htoc24">8.5</A>&nbsp;&nbsp;StackGuard</H3><!--SEC END -->
-
-The module <TT>heapify.ml</TT> contains a transformation similar to the one
-described in &#8220;StackGuard: Automatic Adaptive Detection and Prevention of
-Buffer-Overflow Attacks&#8221;, <EM>Proceedings of the 7th USENIX Security
-Conference</EM>. In essence it modifies the program to maintain a separate
-stack for return addresses. Even if a buffer overrun attack occurs the
-actual correct return address will be taken from the special stack. <BR>
-<BR>
-Although it does work, this CIL module is provided mainly as an example of
-how to perform a simple source-to-source program analysis and
-transformation. As an optimization only functions that contain a dangerous
-local array make use of the special return address stack. <BR>
-<BR>
-For a concrete example, you can see how <TT>cilly --dostackGuard</TT>
-transforms the following dangerous code: 
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-  int dangerous() {
-    char array[10];
-    scanf("%s",array); // possible buffer overrun!
-  }
-
-  int main () {
-    return dangerous();
-  }
-</FONT></PRE>
-See the <A HREF="examples/ex24.txt">CIL output</A> for this
-code fragment<BR>
-<BR>
-<!--TOC subsection Heapify-->
-
-<H3 CLASS="subsection"><A NAME="htoc25">8.6</A>&nbsp;&nbsp;Heapify</H3><!--SEC END -->
-
-The module <TT>heapify.ml</TT> also contains a transformation that moves all
-dangerous local arrays to the heap. This also prevents a number of buffer
-overruns. <BR>
-<BR>
-For a concrete example, you can see how <TT>cilly --doheapify</TT>
-transforms the following dangerous code: 
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-  int dangerous() {
-    char array[10];
-    scanf("%s",array); // possible buffer overrun!
-  }
-
-  int main () {
-    return dangerous();
-  }
-</FONT></PRE>
-See the <A HREF="examples/ex25.txt">CIL output</A> for this
-code fragment<BR>
-<BR>
-<!--TOC subsection One Return-->
-
-<H3 CLASS="subsection"><A NAME="htoc26">8.7</A>&nbsp;&nbsp;One Return</H3><!--SEC END -->
-
-The module <TT>oneret.ml</TT> contains a transformation the ensures that all
-function bodies have at most one return statement. This simplifies a number
-of analyses by providing a canonical exit-point. <BR>
-<BR>
-For a concrete example, you can see how <TT>cilly --dooneRet</TT>
-transforms the following code: 
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-  int foo (int predicate) {
-    if (predicate &lt;= 0) {
-      return 1;
-    } else {
-      if (predicate &gt; 5)
-        return 2;
-      return 3;
-    }
-  }
-</FONT></PRE>
-See the <A HREF="examples/ex26.txt">CIL output</A> for this
-code fragment<BR>
-<BR>
-<!--TOC subsection Partial Evaluation and Constant Folding-->
-
-<H3 CLASS="subsection"><A NAME="htoc27">8.8</A>&nbsp;&nbsp;Partial Evaluation and Constant Folding</H3><!--SEC END -->
- 
-The <TT>partial.ml</TT> module provides a simple interprocedural partial
-evaluation and constant folding data-flow analysis and transformation. This
-transformation requires the <TT>--domakeCFG</TT> option. <BR>
-<BR>
-For a concrete example, you can see how <TT>cilly --domakeCFG --dopartial</TT>
-transforms the following code (note the eliminated <TT>if</TT> branch and the
-partial optimization of <TT>foo</TT>): 
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-  int foo(int x, int y) {
-    int unknown;
-    if (unknown)
-      return y+2;     
-    return x+3;      
-  }
-
-  int main () {
-    int a,b,c;
-    a = foo(5,7) + foo(6,7);
-    b = 4;
-    c = b * b;      
-    if (b &gt; c)     
-      return b-c;
-    else
-      return b+c; 
-  }
-</FONT></PRE>
-See the <A HREF="examples/ex27.txt">CIL output</A> for this
-code fragment<BR>
-<BR>
-<!--TOC subsection Reaching Definitions-->
-
-<H3 CLASS="subsection"><A NAME="htoc28">8.9</A>&nbsp;&nbsp;Reaching Definitions</H3><!--SEC END -->
-
-The <TT>reachingdefs.ml</TT> module uses the dataflow framework and CFG
-information to calculate the definitions that reach each
-statement. After computing the CFG (Section&nbsp;<A HREF="#sec-cfg">8.1</A>) and calling
-<TT>computeRDs</TT> on a 
-function declaration, <TT>ReachingDef.stmtStartData</TT> will contain a
-mapping from statement IDs to data about which definitions reach each
-statement. In particular, it is a mapping from statement IDs to a
-triple the first two members of which are used internally. The third
-member is a mapping from variable IDs to Sets of integer options. If
-the set contains <TT>Some(i)</TT>, then the definition of that variable
-with ID <TT>i</TT> reaches that statement. If the set contains <TT>None</TT>,
-then there is a path to that statement on which there is no definition
-of that variable. Also, if the variable ID is unmapped at a
-statement, then no definition of that variable reaches that statement.<BR>
-<BR>
-To summarize, reachingdefs.ml has the following interface:
-<UL CLASS="itemize"><LI CLASS="li-itemize">
-<TT>computeRDs</TT> &ndash; Computes reaching definitions. Requires that
-CFG information has already been computed for each statement.
-<LI CLASS="li-itemize"><TT>ReachingDef.stmtStartData</TT> &ndash; contains reaching
-definition data after <TT>computeRDs</TT> is called.
-<LI CLASS="li-itemize"><TT>ReachingDef.defIdStmtHash</TT> &ndash; Contains a mapping
-from definition IDs to the ID of the statement in which
-the definition occurs.
-<LI CLASS="li-itemize"><TT>getRDs</TT> &ndash; Takes a statement ID and returns
-reaching definition data for that statement.
-<LI CLASS="li-itemize"><TT>instrRDs</TT> &ndash; Takes a list of instructions and the
-definitions that reach the first instruction, and for
-each instruction calculates the definitions that reach
-either into or out of that instruction.
-<LI CLASS="li-itemize"><TT>rdVisitorClass</TT> &ndash; A subclass of nopCilVisitor that
-can be extended such that the current reaching definition
-data is available when expressions are visited through
-the <TT>get_cur_iosh</TT> method of the class.
-</UL>
-<!--TOC subsection Available Expressions-->
-
-<H3 CLASS="subsection"><A NAME="htoc29">8.10</A>&nbsp;&nbsp;Available Expressions</H3><!--SEC END -->
-
-The <TT>availexps.ml</TT> module uses the dataflow framework and CFG
-information to calculate something similar to a traditional available
-expressions analysis. After <TT>computeAEs</TT> is called following a CFG
-calculation (Section&nbsp;<A HREF="#sec-cfg">8.1</A>), <TT>AvailableExps.stmtStartData</TT> will
-contain a mapping
-from statement IDs to data about what expressions are available at
-that statement. The data for each statement is a mapping for each
-variable ID to the whole expression available at that point(in the
-traditional sense) which the variable was last defined to be. So,
-this differs from a traditional available expressions analysis in that
-only whole expressions from a variable definition are considered rather
-than all expressions.<BR>
-<BR>
-The interface is as follows:
-<UL CLASS="itemize"><LI CLASS="li-itemize">
-<TT>computeAEs</TT> &ndash; Computes available expressions. Requires
-that CFG information has already been comptued for each statement.
-<LI CLASS="li-itemize"><TT>AvailableExps.stmtStartData</TT> &ndash; Contains available
-expressions data for each statement after <TT>computeAEs</TT> has been
-called.
-<LI CLASS="li-itemize"><TT>getAEs</TT> &ndash; Takes a statement ID and returns
-available expression data for that statement.
-<LI CLASS="li-itemize"><TT>instrAEs</TT> &ndash; Takes a list of instructions and
-the availalbe expressions at the first instruction, and
-for each instruction calculates the expressions available
-on entering or exiting each instruction.
-<LI CLASS="li-itemize"><TT>aeVisitorClass</TT> &ndash; A subclass of nopCilVisitor that
-can be extended such that the current available expressions
-data is available when expressions are visited through the
-<TT>get_cur_eh</TT> method of the class.
-</UL>
-<!--TOC subsection Liveness Analysis-->
-
-<H3 CLASS="subsection"><A NAME="htoc30">8.11</A>&nbsp;&nbsp;Liveness Analysis</H3><!--SEC END -->
-
-The <TT>liveness.ml</TT> module uses the dataflow framework and
-CFG information to calculate which variables are live at
-each program point. After <TT>computeLiveness</TT> is called
-following a CFG calculation (Section&nbsp;<A HREF="#sec-cfg">8.1</A>), <TT>LiveFlow.stmtStartData</TT> will
-contain a mapping for each statement ID to a set of <TT>varinfo</TT>s
-for varialbes live at that program point.<BR>
-<BR>
-The interface is as follows:
-<UL CLASS="itemize"><LI CLASS="li-itemize">
-<TT>computeLiveness</TT> &ndash; Computes live variables. Requires
-that CFG information has already been computed for each statement.
-<LI CLASS="li-itemize"><TT>LiveFlow.stmtStartData</TT> &ndash; Contains live variable data
-for each statement after <TT>computeLiveness</TT> has been called.
-</UL>
-Also included in this module is a command line interface that
-will cause liveness data to be printed to standard out for
-a particular function or label.
-<UL CLASS="itemize"><LI CLASS="li-itemize">
-<TT>&ndash;doliveness</TT> &ndash; Instructs cilly to comptue liveness
-information and to print on standard out the variables live
-at the points specified by <TT>&ndash;live_func</TT> and <TT>live_label</TT>.
-If both are ommitted, then nothing is printed.
-<LI CLASS="li-itemize"><TT>&ndash;live_func</TT> &ndash; The name of the function whose
-liveness data is of interest. If <TT>&ndash;live_label</TT> is ommitted,
-then data for each statement is printed.
-<LI CLASS="li-itemize"><TT>&ndash;live_label</TT> &ndash; The name of the label at which
-the liveness data will be printed.
-</UL>
-<!--TOC subsection Dead Code Elimination-->
-
-<H3 CLASS="subsection"><A NAME="htoc31">8.12</A>&nbsp;&nbsp;Dead Code Elimination</H3><!--SEC END -->
-
-The module <TT>deadcodeelim.ml</TT> uses the reaching definitions
-analysis to eliminate assignment instructions whose results
-are not used. The interface is as follows:
-<UL CLASS="itemize"><LI CLASS="li-itemize">
-<TT>elim_dead_code</TT> &ndash; Performs dead code elimination
-on a function. Requires that CFG information has already
-been computed (Section&nbsp;<A HREF="#sec-cfg">8.1</A>).
-<LI CLASS="li-itemize"><TT>dce</TT> &ndash; Performs dead code elimination on an
-entire file. Requires that CFG information has already
-been computed.
-</UL>
-<!--TOC subsection Simple Memory Operations-->
-
-<H3 CLASS="subsection"><A NAME="htoc32">8.13</A>&nbsp;&nbsp;Simple Memory Operations</H3><!--SEC END -->
- 
-The <TT>simplemem.ml</TT> module allows CIL lvalues that contain memory
-accesses to be even futher simplified via the introduction of
-well-typed temporaries. After this transformation all lvalues involve
-at most one memory reference.<BR>
-<BR>
-For a concrete example, you can see how <TT>cilly --dosimpleMem</TT> 
-transforms the following code:
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-  int main () {
-    int ***three;
-    int **two;
-    ***three = **two; 
-  } 
-</FONT></PRE>
-See the <A HREF="examples/ex28.txt">CIL output</A> for this
-code fragment<BR>
-<BR>
-<!--TOC subsection Simple Three-Address Code-->
-
-<H3 CLASS="subsection"><A NAME="htoc33">8.14</A>&nbsp;&nbsp;Simple Three-Address Code</H3><!--SEC END -->
- 
-The <TT>simplify.ml</TT> module further reduces the complexity of program
-expressions and gives you a form of three-address code. After this
-transformation all expressions will adhere to the following grammar: 
-<PRE CLASS="verbatim">
- basic::=
-    Const _ 
-    Addrof(Var v, NoOffset)
-    StartOf(Var v, NoOffset)
-    Lval(Var v, off), where v is a variable whose address is not taken
-                      and off contains only "basic"
-
- exp::=
-    basic
-    Lval(Mem basic, NoOffset)
-    BinOp(bop, basic, basic)
-    UnOp(uop, basic)
-    CastE(t, basic)
-   
- lval ::= 
-    Mem basic, NoOffset
-    Var v, off, where v is a variable whose address is not taken and off
-                contains only "basic"
-</PRE>In addition, all <TT>sizeof</TT> and <TT>alignof</TT> forms are turned into
-constants. Accesses to arrays and variables whose address is taken are
-turned into "Mem" accesses. All field and index computations are turned
-into address arithmetic.<BR>
-<BR>
-For a concrete example, you can see how <TT>cilly --dosimplify</TT> 
-transforms the following code:
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-  int main() {
-    struct mystruct {
-      int a;
-      int b;
-    } m;
-    int local;
-    int arr[3];
-    int *ptr;
-
-    ptr = &amp;local;
-    m.a = local + sizeof(m) + arr[2];
-    return m.a; 
-  } 
-</FONT></PRE>
-See the <A HREF="examples/ex29.txt">CIL output</A> for this
-code fragment<BR>
-<BR>
-<!--TOC subsection Converting C to C++-->
-
-<H3 CLASS="subsection"><A NAME="htoc34">8.15</A>&nbsp;&nbsp;Converting C to C++</H3><!--SEC END -->
-
-The module canonicalize.ml performs several transformations to correct
-differences between C and C++, so that the output is (hopefully) valid
-C++ code. This may be incomplete &mdash; certain fixes which are necessary
-for some programs are not yet implemented.<BR>
-<BR>
-Using the <TT>--doCanonicalize</TT> option with CIL will perform the
-following changes to your program:
-<OL CLASS="enumerate" type=1><LI CLASS="li-enumerate">
-Any variables that use C++ keywords as identifiers are renamed.
-<LI CLASS="li-enumerate">C allows global variables to have multiple declarations and
- multiple (equivalent) definitions. This transformation removes
- all but one declaration and all but one definition.
-<LI CLASS="li-enumerate"><TT>__inline</TT> is #defined to <TT>inline</TT>, and <TT>__restrict</TT> 
- is #defined to nothing.
-<LI CLASS="li-enumerate">C allows function pointers with no specified arguments to be used on
- any argument list. To make C++ accept this code, we insert a cast
- from the function pointer to a type that matches the arguments. Of
- course, this does nothing to guarantee that the pointer actually has
- that type.
-<LI CLASS="li-enumerate">Makes casts from int to enum types explicit. (CIL changes enum
- constants to int constants, but doesn't use a cast.)
-</OL>
-<!--TOC section Controlling CIL-->
-
-<H2 CLASS="section"><A NAME="htoc35">9</A>&nbsp;&nbsp;Controlling CIL</H2><!--SEC END -->
-
-In the process of converting a C file to CIL we drop the unused prototypes
-and even inline function definitions. This results in much smaller files. If
-you do not want this behavior then you must pass the <TT>--keepunused</TT> argument
-to the CIL application. <BR>
-<BR>
-Alternatively you can put the following pragma in the code (instructing CIL
-to specifically keep the declarations and definitions of the function
-<TT>func1</TT> and variable <TT>var2</TT>, the definition of type <TT>foo</TT> and of
-structure <TT>bar</TT>):
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-#pragma cilnoremove("func1", "var2", "type foo", "struct bar")
-</FONT></PRE>
-<!--TOC section GCC Extensions-->
-
-<H2 CLASS="section"><A NAME="htoc36">10</A>&nbsp;&nbsp;GCC Extensions</H2><!--SEC END -->
-
-The CIL parser handles most of the <TT>gcc</TT>
-<A HREF="javascript:loadTop('http://gcc.gnu.org/onlinedocs/gcc-3.0.2/gcc_5.html#SEC67')">extensions</A>
-and compiles them to CIL. The following extensions are not handled (note that
-we are able to compile a large number of programs, including the Linux kernel,
-without encountering these):
-<OL CLASS="enumerate" type=1><LI CLASS="li-enumerate">
-Nested function definitions.
-<LI CLASS="li-enumerate">Constructing function calls.
-<LI CLASS="li-enumerate">Naming an expression's type.
-<LI CLASS="li-enumerate">Complex numbers
-<LI CLASS="li-enumerate">Hex floats
-<LI CLASS="li-enumerate">Subscripts on non-lvalue arrays.
-<LI CLASS="li-enumerate">Forward function parameter declarations
-</OL>
-The following extensions are handled, typically by compiling them away:
-<OL CLASS="enumerate" type=1><LI CLASS="li-enumerate">
-Attributes for functions, variables and types. In fact, we have a clear
-specification (see Section&nbsp;<A HREF="#sec-attrib">6.4</A>) of how attributes are interpreted. The
-specification extends that of <TT>gcc</TT>.
-<LI CLASS="li-enumerate">Old-style function definitions and prototypes. These are translated to
-new-style. 
-<LI CLASS="li-enumerate">Locally-declared labels. As part of the translation to CIL, we generate
-new labels as needed. 
-<LI CLASS="li-enumerate">Labels as values and computed goto. This allows a program to take the
-address of a label and to manipulate it as any value and also to perform a
-computed goto. We compile this by assigning each label whose address is taken
-a small integer that acts as its address. Every computed <TT>goto</TT> in the body
-of the function is replaced with a <TT>switch</TT> statement. If you want to invoke
-the label from another function, you are on your own (the <TT>gcc</TT>
-documentation says the same.)
-<LI CLASS="li-enumerate">Generalized lvalues. You can write code like <TT>(a, b) += 5</TT> and it gets
-translated to CIL. 
-<LI CLASS="li-enumerate">Conditionals with omitted operands. Things like <TT>x ? : y</TT> are
-translated to CIL.
-<LI CLASS="li-enumerate">Double word integers. The type <TT>long long</TT> and the <TT>LL</TT> suffix on
-constants is understood. This is currently interpreted as 64-bit integers.
-<LI CLASS="li-enumerate">Local arrays of variable length. These are converted to uses of
-<TT>alloca</TT>, the array variable is replaced with a pointer to the allocated
-array and the instances of <TT>sizeof(a)</TT> are adjusted to return the size of
-the array and not the size of the pointer. 
-<LI CLASS="li-enumerate">Non-constant local initializers. Like all local initializers these are
-compiled into assignments. 
-<LI CLASS="li-enumerate">Compound literals. These are also turned into assignments.
-<LI CLASS="li-enumerate">Designated initializers. The CIL parser actually supports the full ISO
-syntax for initializers, which is more than both <TT>gcc</TT> and <TT>MSVC</TT>. I
-(George) think that this is the most complicated part of the C language and
-whoever designed it should be banned from ever designing languages again.
-<LI CLASS="li-enumerate">Case ranges. These are compiled into separate cases. There is no code
-duplication, just a larger number of <TT>case</TT> statements.
-<LI CLASS="li-enumerate">Transparent unions. This is a strange feature that allows you to define
-a function whose formal argument has a (tranparent) union type, but the
-argument is called as if it were the first element of the union. This is
-compiled away by saying that the type of the formal argument is that of the
-first field, and the first thing in the function body we copy the formal into
-a union. <BR>
-<BR>
-<LI CLASS="li-enumerate">Inline assembly-language. The full syntax is supported and it is carried
-as such in CIL.<BR>
-<BR>
-<LI CLASS="li-enumerate">Function names as strings. The identifiers <TT>__FUNCTION__</TT> and
-<TT>__PRETTY_FUNCTION__</TT> are replaced with string literals. <BR>
-<BR>
-<LI CLASS="li-enumerate">Keywords <TT>typeof</TT>, <TT>alignof</TT>, <TT>inline</TT> are supported. 
-</OL>
-<!--TOC section CIL Limitations-->
-
-<H2 CLASS="section"><A NAME="htoc37">11</A>&nbsp;&nbsp;CIL Limitations</H2><!--SEC END -->
-
-There are several implementation details of CIL that might make it unusable
- or less than ideal for certain tasks:
-<UL CLASS="itemize"><LI CLASS="li-itemize">
-CIL operates after preprocessing. If you need to see comments, for
-example, you cannot use CIL. But you can use attributes and pragmas instead.
-And there is some support to help you patch the include files before they are
-seen by the preprocessor. For example, this is how we turn some
-<TT>#define</TT>s that we don't like into function calls. <BR>
-<BR>
-<LI CLASS="li-itemize">CIL does transform the code in a non-trivial way. This is done in order
-to make most analyses easier. But if you want to see the code <TT>e1, e2++</TT>
-exactly as it appears in the code, then you should not use CIL. <BR>
-<BR>
-<LI CLASS="li-itemize">CIL removes all local scopes and moves all variables to function
-scope. It also separates a declaration with an initializer into a declaration
-plus an assignment. The unfortunate effect of this transformation is that
-local variables cannot have the <TT>const</TT> qualifier.</UL>
-<!--TOC section Known Bugs and Limitations-->
-
-<H2 CLASS="section"><A NAME="htoc38">12</A>&nbsp;&nbsp;Known Bugs and Limitations</H2><!--SEC END -->
-
-<UL CLASS="itemize"><LI CLASS="li-itemize">In the new versions of <TT>glibc</TT> there is a function
- <TT>__builtin_va_arg</TT> that takes a type as its second argument. CIL
- handles that through a slight trick. As it parses the function it changes a
- call like:
-<PRE CLASS="verbatim">
-  mytype x = __builtin_va_arg(marker, mytype)
-</PRE>into 
-<PRE CLASS="verbatim">
- mytype x;
- __builtin_va_arg(marker, sizeof(mytype), &amp;x);
-</PRE>
- The latter form is used internally in CIL. However, the CIL pretty printer
- will try to emit the original code. <BR>
-<BR>
-Similarly, <TT>__builtin_types_compatible_p(t1, t2)</TT>, which takes
- types as arguments, is represented internally as
- <TT>__builtin_types_compatible_p(sizeof t1, sizeof t2)</TT>, but the
- sizeofs are removed when printing.<BR>
-<BR>
-<LI CLASS="li-itemize">The implementation of <TT>bitsSizeOf</TT> does not take into account the
-packing pragmas. However it was tested to be accurate on cygwin/gcc-2.95.3,
-Linux/gcc-2.95.3 and on Windows/MSVC.<BR>
-<BR>
-<LI CLASS="li-itemize">We do not support tri-graph sequences (ISO 5.2.1.1).<BR>
-<BR>
-<LI CLASS="li-itemize">GCC has a strange feature called &#8220;extern inline&#8221;. Such a function can
-be defined twice: first with the &#8220;extern inline&#8221; specifier and the second
-time without it. If optimizations are turned off then the &#8220;extern inline&#8221;
-definition is considered a prototype (its body is ignored). If optimizations
-are turned on then the extern inline function is inlined at all of its
-occurrences from the point of its definition all the way to the point where the
-(optional) second definition appears. No body is generated for an extern
-inline function. A body is generated for the real definition and that one is
-used in the rest of the file. <BR>
-<BR>
-CIL will rename your extern inline function (and its uses) with the suffix
- <TT>__extinline</TT>. This means that if you have two such definition, that do
- different things and the optimizations are not on, then the CIL version might
- compute a different answer !<BR>
-<BR>
-Also, if you have multiple extern inline declarations then CIL will ignore
-but the first one. This is not so bad because GCC itself would not like it. <BR>
-<BR>
-<LI CLASS="li-itemize">There are still a number of bugs in handling some obscure features of
-GCC. For example, when you use variable-length arrays, CIL turns them into
-calls to <TT>alloca</TT>. This means that they are deallocated when the function
-returns and not when the local scope ends. <BR>
-<BR>
-Variable-length arrays are not supported as fields of a struct or union.<BR>
-<BR>
-<LI CLASS="li-itemize">CIL cannot parse arbitrary <TT>#pragma</TT> directives. Their
- syntax must follow gcc's attribute syntax to be understood. If you
- need a pragma that does not follow gcc syntax, add that pragma's name
- to <TT>no_parse_pragma</TT> in <TT>src/frontc/clexer.mll</TT> to indicate that
- CIL should treat that pragma as a monolithic string rather than try
- to parse its arguments.<BR>
-<BR>
-CIL cannot parse a line containing an empty <TT>#pragma</TT>.<BR>
-<BR>
-<LI CLASS="li-itemize">CIL only parses <TT>#pragma</TT> directives at the "top level", this is,
- outside of any enum, structure, union, or function definitions.<BR>
-<BR>
-If your compiler uses pragmas in places other than the top-level,
- you may have to preprocess the sources in a special way (sed, perl,
- etc.) to remove pragmas from these locations.<BR>
-<BR>
-<LI CLASS="li-itemize">CIL cannot parse the following code (fixing this problem would require
-extensive hacking of the LALR grammar):
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-int bar(int ()); // This prototype cannot be parsed
-int bar(int x()); // If you add a name to the function, it works
-int bar(int (*)()); // This also works (and it is more appropriate)
-</FONT></PRE><BR>
-<BR>
-<LI CLASS="li-itemize">CIL also cannot parse certain K&amp;R old-style prototypes with missing
-return type:
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-g(); // This cannot be parsed
-int g(); // This is Ok
-</FONT></PRE><BR>
-<BR>
-<LI CLASS="li-itemize">CIL does not understand some obscure combinations of type specifiers
-(&#8220;signed&#8221; and &#8220;unsigned&#8221; applied to typedefs that themselves contain a
-sign specification; you could argue that this should not be allowed anyway):
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-typedef signed char __s8;
-__s8 unsigned uchartest; // This is unsigned char for gcc
-</FONT></PRE><BR>
-<BR>
-<LI CLASS="li-itemize">The statement <TT>x = 3 + x ++</TT> will perform the increment of <TT>x</TT>
- before the assignment, while <TT>gcc</TT> delays the increment after the
- assignment. It turned out that this behavior is much easier to implement
- than gcc's one, and either way is correct (since the behavior is unspecified
- in this case). Similarly, if you write <TT>x = x ++;</TT> then CIL will perform
- the increment before the assignment, whereas GCC and MSVC will perform it
- after the assignment. 
-</UL>
-<!--TOC section Using the merger-->
-
-<H2 CLASS="section"><A NAME="htoc39">13</A>&nbsp;&nbsp;Using the merger</H2><!--SEC END -->
-<A NAME="sec-merger"></A><!--NAME merger.html-->
-<BR>
-<BR>
-There are many program analyses that are more effective when
-done on the whole program.<BR>
-<BR>
-The merger is a tool that combines all of the C source files in a project
-into a single C file. There are two tasks that a merger must perform:
-<OL CLASS="enumerate" type=1><LI CLASS="li-enumerate">
-Detect what are all the sources that make a project and with what
-compiler arguments they are compiled.<BR>
-<BR>
-<LI CLASS="li-enumerate">Merge all of the source files into a single file. 
-</OL>
-For the first task the merger impersonates a compiler and a linker (both a
-GCC and a Microsoft Visual C mode are supported) and it expects to be invoked
-(from a build script or a Makefile) on all sources of the project. When
-invoked to compile a source the merger just preprocesses the source and saves
-the result using the name of the requested object file. By preprocessing at
-this time the merger is able to take into account variations in the command
-line arguments that affect preprocessing of different source files.<BR>
-<BR>
-When the merger is invoked to link a number of object files it collects the
-preprocessed sources that were stored with the names of the object files, and
-invokes the merger proper. Note that arguments that affect the compilation or
-linking must be the same for all source files.<BR>
-<BR>
-For the second task, the merger essentially concatenates the preprocessed
-sources with care to rename conflicting file-local declarations (we call this
-process alpha-conversion of a file). The merger also attempts to remove
-duplicate global declarations and definitions. Specifically the following
-actions are taken: 
-<UL CLASS="itemize"><LI CLASS="li-itemize">
-File-scope names (<TT>static</TT> globals, names of types defined with
-<TT>typedef</TT>, and structure/union/enumeration tags) are given new names if they
-conflict with declarations from previously processed sources. The new name is
-formed by appending the suffix <TT>___n</TT>, where <TT>n</TT> is a unique integer
-identifier. Then the new names are applied to their occurrences in the file. <BR>
-<BR>
-<LI CLASS="li-itemize">Non-static declarations and definitions of globals are never renamed.
-But we try to remove duplicate ones. Equality of globals is detected by
-comparing the printed form of the global (ignoring the line number directives)
-after the body has been alpha-converted. This process is intended to remove
-those declarations (e.g. function prototypes) that originate from the same
-include file. Similarly, we try to eliminate duplicate definitions of
-<TT>inline</TT> functions, since these occasionally appear in include files.<BR>
-<BR>
-<LI CLASS="li-itemize">The types of all global declarations with the same name from all files
-are compared for type isomorphism. During this process, the merger detects all
-those isomorphisms between structures and type definitions that are <B>required</B> for the merged program to be legal. Such structure tags and
-typenames are coalesced and given the same name. <BR>
-<BR>
-<LI CLASS="li-itemize">Besides the structure tags and type names that are required to be
-isomorphic, the merger also tries to coalesce definitions of structures and
-types with the same name from different file. However, in this case the merger
-will not give an error if such definitions are not isomorphic; it will just
-use different names for them. <BR>
-<BR>
-<LI CLASS="li-itemize">In rare situations, it can happen that a file-local global in
-encountered first and it is not renamed, only to discover later when
-processing another file that there is an external symbol with the same name.
-In this case, a second pass is made over the merged file to rename the
-file-local symbol. 
-</UL>
-Here is an example of using the merger:<BR>
-<BR>
-The contents of <TT>file1.c</TT> is:
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-struct foo; // Forward declaration
-extern struct foo *global;
-</FONT></PRE>
-The contents of <TT>file2.c</TT> is:
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-struct bar {
- int x;
- struct bar *next;
-};
-extern struct bar *global;
-struct foo {
- int y;
-};
-extern struct foo another;
-void main() {
-}
-</FONT></PRE>
-There are several ways in which one might create an executable from these
-files:
-<UL CLASS="itemize"><LI CLASS="li-itemize">
-<PRE CLASS="verbatim">
-gcc file1.c file2.c -o a.out
-</PRE><BR>
-<BR>
-<LI CLASS="li-itemize"><PRE CLASS="verbatim">
-gcc -c file1.c -o file1.o
-gcc -c file2.c -o file2.o
-ld file1.o file2.o -o a.out
-</PRE><BR>
-<BR>
-<LI CLASS="li-itemize"><PRE CLASS="verbatim">
-gcc -c file1.c -o file1.o
-gcc -c file2.c -o file2.o
-ar r libfile2.a file2.o
-gcc file1.o libfile2.a -o a.out
-</PRE><BR>
-<BR>
-<LI CLASS="li-itemize"><PRE CLASS="verbatim">
-gcc -c file1.c -o file1.o
-gcc -c file2.c -o file2.o
-ar r libfile2.a file2.o
-gcc file1.o -lfile2 -o a.out
-</PRE></UL>
-In each of the cases above you must replace all occurrences of <TT>gcc</TT> and
-<TT>ld</TT> with <TT>cilly --merge</TT>, and all occurrences of <TT>ar</TT> with <TT>cilly
---merge --mode=AR</TT>. It is very important that the <TT>--merge</TT> flag be used
-throughout the build process. If you want to see the merged source file you
-must also pass the <TT>--keepmerged</TT> flag to the linking phase. <BR>
-<BR>
-The result of merging file1.c and file2.c is:
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-// from file1.c
-struct foo; // Forward declaration
-extern struct foo *global;
-
-// from file2.c
-struct foo {
- int x;
- struct foo *next;
-};
-struct foo___1 {
- int y;
-};
-extern struct foo___1 another;
-</FONT></PRE>
-<!--TOC section Using the patcher-->
-
-<H2 CLASS="section"><A NAME="htoc40">14</A>&nbsp;&nbsp;Using the patcher</H2><!--SEC END -->
-<A NAME="sec-patcher"></A><!--NAME patcher.html-->
-<BR>
-<BR>
-Occasionally we have needed to modify slightly the standard include files.
-So, we developed a simple mechanism that allows us to create modified copies
-of the include files and use them instead of the standard ones. For this
-purpose we specify a patch file and we run a program caller Patcher which
-makes modified copies of include files and applies the patch.<BR>
-<BR>
-The patcher is invoked as follows: 
-<PRE CLASS="verbatim">
-bin/patcher [options]
-
-Options:
-  --help       Prints this help message
-  --verbose    Prints a lot of information about what is being done
-  --mode=xxx   What tool to emulate: 
-                GNUCC     - GNU CC
-                MSVC      - MS VC cl compiler
-
-  --dest=xxx   The destination directory. Will make one if it does not exist
-  --patch=xxx  Patch file (can be specified multiple times)
-  --ppargs=xxx An argument to be passed to the preprocessor (can be specified
-               multiple times)
-
-  --ufile=xxx  A user-include file to be patched (treated as \#include "xxx")
-  --sfile=xxx  A system-include file to be patched (treated as \#include &lt;xxx&gt;)
- 
-  --clean       Remove all files in the destination directory
-  --dumpversion Print the version name used for the current compiler
-
- All of the other arguments are passed to the preprocessor. You should pass
- enough arguments (e.g., include directories) so that the patcher can find the
- right include files to be patched.
-</PRE>
- Based on the given <TT>mode</TT> and the current version of the compiler (which
-the patcher can print when given the <TT>dumpversion</TT> argument) the patcher
-will create a subdirectory of the <TT>dest</TT> directory (say <TT>/usr/home/necula/cil/include</TT>), such as:
-<PRE CLASS="verbatim">
-/usr/home/necula/cil/include/gcc_2.95.3-5
-</PRE>
- In that file the patcher will copy the modified versions of the include files
-specified with the <TT>ufile</TT> and <TT>sfile</TT> options. Each of these options can
-be specified multiple times. <BR>
-<BR>
-The patch file (specified with the <TT>patch</TT> option) has a format inspired by
-the Unix <TT>patch</TT> tool. The file has the following grammar:
-<PRE CLASS="verbatim">
-&lt;&lt;&lt; flags
-patterns
-===
-replacement
-&gt;&gt;&gt;
-</PRE>
- The flags are a comma separated, case-sensitive, sequence of keywords or
-keyword = value. The following flags are supported:
-<UL CLASS="itemize"><LI CLASS="li-itemize">
-<TT>file=foo.h</TT> - will only apply the patch on files whose name is
- <TT>foo.h</TT>. 
-<LI CLASS="li-itemize"><TT>optional</TT> - this means that it is Ok if the current patch does not
-match any of the processed files. 
-<LI CLASS="li-itemize"><TT>group=foo</TT> - will add this patch to the named group. If this is not
-specified then a unique group is created to contain just the current patch.
-When all files specified in the command line have been patched, an error
-message is generated for all groups for whom no member patch was used. We use
-this mechanism to receive notice when the patch triggers are out-dated with
-respect to the new include files. 
-<LI CLASS="li-itemize"><TT>system=sysname</TT> - will only consider this pattern on a given
-operating system. The &#8220;sysname&#8221; is reported by the &#8220;$Ô&#8221; variable in
-Perl, except that Windows is always considered to have sysname
-&#8220;cygwin.&#8221; For Linux use &#8220;linux&#8221; (capitalization matters).
-<LI CLASS="li-itemize"><TT>ateof</TT> - In this case the patterns are ignored and the replacement
-text is placed at the end of the patched file. Use the <TT>file</TT> flag if you
-want to restrict the files in which this replacement is performed. 
-<LI CLASS="li-itemize"><TT>atsof</TT> - The patterns are ignored and the replacement text is placed
-at the start of the patched file. Uf the <TT>file</TT> flag to restrict the
-application of this patch to a certain file. 
-<LI CLASS="li-itemize"><TT>disabled</TT> - Use this flag if you want to disable the pattern.
-</UL>
-The patterns can consist of several groups of lines separated by the <TT>|||</TT>
-marker. Each of these group of lines is a multi-line pattern that if found in
-the file will be replaced with the text given at the end of the block. <BR>
-<BR>
-The matching is space-insensitive.<BR>
-<BR>
-All of the markers <TT>&lt;&lt;&lt;</TT>, <TT>|||</TT>, <TT>===</TT> and <TT>&gt;&gt;&gt;</TT> must appear at the
-beginning of a line but they can be followed by arbitrary text (which is
-ignored).<BR>
-<BR>
-The replacement text can contain the special keyword <TT>@__pattern__@</TT>,
-which is substituted with the pattern that matched. <BR>
-<BR>
-<!--TOC section Debugging support-->
-
-<H2 CLASS="section"><A NAME="htoc41">15</A>&nbsp;&nbsp;Debugging support</H2><!--SEC END -->
-<A NAME="sec-debugger"></A>
-Most of the time we debug our code using the Errormsg module along with the
-pretty printer. But if you want to use the Ocaml debugger here is an easy way
-to do it. Say that you want to debug the invocation of cilly that arises out
-of the following command:
-<PRE CLASS="verbatim">
-cilly -c hello.c 
-</PRE>
- You must follow the installation <A HREF="../ccured/setup.html">instructions</A>
-to install the Elist support files for ocaml and to extend your .emacs
-appropriately. Then from within Emacs you do
-<PRE CLASS="verbatim">
-ALT-X my-camldebug
-</PRE>
- This will ask you for the command to use for running the Ocaml debugger
-(initially the default will be &#8220;ocamldebug&#8221; or the last command you
-introduced). You use the following command:
-<PRE CLASS="verbatim">
-cilly --ocamldebug -c hello.c 
-</PRE>
- This will run <TT>cilly</TT> as usual and invoke the Ocaml debugger when the cilly
-engine starts. The advantage of this way of invoking the debugger is that the
-directory search paths are set automatically and the right set or arguments is
-passed to the debugger. <BR>
-<BR>
-<!--TOC section Who Says C is Simple?-->
-
-<H2 CLASS="section"><A NAME="htoc42">16</A>&nbsp;&nbsp;Who Says C is Simple?</H2><!--SEC END -->
-<A NAME="sec-simplec"></A>
-When I (George) started to write CIL I thought it was going to take two weeks.
-Exactly a year has passed since then and I am still fixing bugs in it. This
-gross underestimate was due to the fact that I thought parsing and making
-sense of C is simple. You probably think the same. What I did not expect was
-how many dark corners this language has, especially if you want to parse
-real-world programs such as those written for GCC or if you are more ambitious
-and you want to parse the Linux or Windows NT sources (both of these were
-written without any respect for the standard and with the expectation that
-compilers will be changed to accommodate the program). <BR>
-<BR>
-The following examples were actually encountered either in real programs or
-are taken from the ISO C99 standard or from the GCC's testcases. My first
-reaction when I saw these was: <EM>Is this C?</EM>. The second one was : <EM>What the hell does it mean?</EM>. <BR>
-<BR>
-If you are contemplating doing program analysis for C on abstract-syntax
-trees then your analysis ought to be able to handle these things. Or, you can
-use CIL and let CIL translate them into clean C code. <BR>
-<BR>
-<!--TOC subsection Standard C-->
-
-<H3 CLASS="subsection"><A NAME="htoc43">16.1</A>&nbsp;&nbsp;Standard C</H3><!--SEC END -->
-
-<OL CLASS="enumerate" type=1><LI CLASS="li-enumerate">Why does the following code return 0 for most values of <TT>x</TT>? (This
-should be easy.)
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-  int x;
-  return x == (1 &amp;&amp; x);
-</FONT></PRE>
-See the <A HREF="examples/ex30.txt">CIL output</A> for this
-code fragment<BR>
-<BR>
-<LI CLASS="li-enumerate">Why does the following code return 0 and not -1? (Answer: because
-<TT>sizeof</TT> is unsigned, thus the result of the subtraction is unsigned, thus
-the shift is logical.)
-<PRE CLASS="verbatim"><FONT COLOR=blue>
- return ((1 - sizeof(int)) &gt;&gt; 32);
-</FONT></PRE>
-See the <A HREF="examples/ex31.txt">CIL output</A> for this
-code fragment<BR>
-<BR>
-<LI CLASS="li-enumerate">Scoping rules can be tricky. This function returns 5.
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-int x = 5;
-int f() {
-  int x = 3;
-  {
-    extern int x;
-    return x;
-  }
-}
-</FONT></PRE>
-See the <A HREF="examples/ex32.txt">CIL output</A> for this
-code fragment<BR>
-<BR>
-<LI CLASS="li-enumerate">Functions and function pointers are implicitly converted to each other. 
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-int (*pf)(void);
-int f(void) {
-
-   pf = &amp;f; // This looks ok
-   pf = ***f; // Dereference a function?
-   pf(); // Invoke a function pointer?     
-   (****pf)();  // Looks strange but Ok
-   (***************f)(); // Also Ok             
-}
-</FONT></PRE>
-See the <A HREF="examples/ex33.txt">CIL output</A> for this
-code fragment<BR>
-<BR>
-<LI CLASS="li-enumerate">Initializer with designators are one of the hardest parts about ISO C.
-Neither MSVC or GCC implement them fully. GCC comes close though. What is the
-final value of <TT>i.nested.y</TT> and <TT>i.nested.z</TT>? (Answer: 2 and respectively
-6). 
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-struct { 
-   int x; 
-   struct { 
-       int y, z; 
-   } nested;
-} i = { .nested.y = 5, 6, .x = 1, 2 };               
-</FONT></PRE>
-See the <A HREF="examples/ex34.txt">CIL output</A> for this
-code fragment<BR>
-<BR>
-<LI CLASS="li-enumerate">This is from c-torture. This function returns 1.
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-typedef struct
-{
-  char *key;
-  char *value;
-} T1;
-
-typedef struct
-{
-  long type;
-  char *value;
-} T3;
-
-T1 a[] =
-{
-  {
-    "",
-    ((char *)&amp;((T3) {1, (char *) 1}))
-  }
-};
-int main() {
-   T3 *pt3 = (T3*)a[0].value;
-   return pt3-&gt;value;
-}
-</FONT></PRE>
-See the <A HREF="examples/ex35.txt">CIL output</A> for this
-code fragment<BR>
-<BR>
-<LI CLASS="li-enumerate">Another one with constructed literals. This one is legal according to
-the GCC documentation but somehow GCC chokes on (it works in CIL though). This
-code returns 2.
-<PRE CLASS="verbatim"><FONT COLOR=blue>
- return ((int []){1,2,3,4})[1];
-</FONT></PRE>
-See the <A HREF="examples/ex36.txt">CIL output</A> for this
-code fragment<BR>
-<BR>
-<LI CLASS="li-enumerate">In the example below there is one copy of &#8220;bar&#8221; and two copies of
- &#8220;pbar&#8221; (static prototypes at block scope have file scope, while for all
- other types they have block scope). 
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-  int foo() {
-     static bar();
-     static (*pbar)() = bar;
-
-  }
-
-  static bar() { 
-    return 1;
-  }
-
-  static (*pbar)() = 0;
-</FONT></PRE>
-See the <A HREF="examples/ex37.txt">CIL output</A> for this
-code fragment<BR>
-<BR>
-<LI CLASS="li-enumerate">Two years after heavy use of CIL, by us and others, I discovered a bug
- in the parser. The return value of the following function depends on what
- precedence you give to casts and unary minus:
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-  unsigned long foo() {
-    return (unsigned long) - 1 / 8;
-  }
-</FONT></PRE>
-See the <A HREF="examples/ex38.txt">CIL output</A> for this
-code fragment<BR>
-<BR>
-The correct interpretation is <TT>((unsigned long) - 1) / 8</TT>, which is a
- relatively large number, as opposed to <TT>(unsigned long) (- 1 / 8)</TT>, which
- is 0. </OL>
-<!--TOC subsection GCC ugliness-->
-
-<H3 CLASS="subsection"><A NAME="htoc44">16.2</A>&nbsp;&nbsp;GCC ugliness</H3><!--SEC END -->
-<A NAME="sec-ugly-gcc"></A>
-<OL CLASS="enumerate" type=1><LI CLASS="li-enumerate">GCC has generalized lvalues. You can take the address of a lot of
-strange things:
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-  int x, y, z;
-  return &amp;(x ? y : z) - &amp; (x++, x);
-</FONT></PRE>
-See the <A HREF="examples/ex39.txt">CIL output</A> for this
-code fragment<BR>
-<BR>
-<LI CLASS="li-enumerate">GCC lets you omit the second component of a conditional expression.
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-  extern int f();
-  return f() ? : -1; // Returns the result of f unless it is 0
-</FONT></PRE>
-See the <A HREF="examples/ex40.txt">CIL output</A> for this
-code fragment<BR>
-<BR>
-<LI CLASS="li-enumerate">Computed jumps can be tricky. CIL compiles them away in a fairly clean
-way but you are on your own if you try to jump into another function this way.
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-static void *jtab[2]; // A jump table
-static int doit(int x){
- 
-  static int jtab_init = 0;
-  if(!jtab_init) { // Initialize the jump table
-    jtab[0] = &amp;&amp;lbl1;
-    jtab[1] = &amp;&amp;lbl2;
-    jtab_init = 1;
-  }
-  goto *jtab[x]; // Jump through the table
-lbl1:
-  return 0;
-lbl2:
-  return 1;
-}
- 
-int main(void){
-  if (doit(0) != 0) exit(1);
-  if (doit(1) != 1) exit(1);
-  exit(0);
-}
-</FONT></PRE>
-See the <A HREF="examples/ex41.txt">CIL output</A> for this
-code fragment<BR>
-<BR>
-<LI CLASS="li-enumerate">A cute little example that we made up. What is the returned value?
-(Answer: 1); 
-<PRE CLASS="verbatim"><FONT COLOR=blue>
- return ({goto L; 0;}) &amp;&amp; ({L: 5;});
-</FONT></PRE>
-See the <A HREF="examples/ex42.txt">CIL output</A> for this
-code fragment<BR>
-<BR>
-<LI CLASS="li-enumerate"><TT>extern inline</TT> is a strange feature of GNU C. Can you guess what the
-following code computes?
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-extern inline foo(void) { return 1; }
-int firstuse(void) { return foo(); }
-
-// A second, incompatible definition of foo
-int foo(void) { return 2; }
-
-int main() {
-    return foo() + firstuse();
-}
-</FONT></PRE>
-See the <A HREF="examples/ex43.txt">CIL output</A> for this
-code fragment<BR>
-<BR>
-The answer depends on whether the optimizations are turned on. If they are
-then the answer is 3 (the first definition is inlined at all occurrences until
-the second definition). If the optimizations are off, then the first
-definition is ignore (treated like a prototype) and the answer is 4. <BR>
-<BR>
-CIL will misbehave on this example, if the optimizations are turned off (it
- always returns 3).<BR>
-<BR>
-<LI CLASS="li-enumerate">GCC allows you to cast an object of a type T into a union as long as the
-union has a field of that type:
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-union u { 
-   int i; 
-   struct s { 
-      int i1, i2;
-   } s;
-};
-
-union u x = (union u)6;
-
-int main() {
-  struct s y = {1, 2};
-  union u  z = (union u)y;
-}
-</FONT></PRE>
-See the <A HREF="examples/ex44.txt">CIL output</A> for this
-code fragment<BR>
-<BR>
-<LI CLASS="li-enumerate">GCC allows you to use the <TT>__mode__</TT> attribute to specify the size
-of the integer instead of the standard <TT>char</TT>, <TT>short</TT> and so on:
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-int __attribute__ ((__mode__ (  __QI__ ))) i8;
-int __attribute__ ((__mode__ (  __HI__ ))) i16;
-int __attribute__ ((__mode__ (  __SI__ ))) i32;
-int __attribute__ ((__mode__ (  __DI__ ))) i64;
-</FONT></PRE>
-See the <A HREF="examples/ex45.txt">CIL output</A> for this
-code fragment<BR>
-<BR>
-<LI CLASS="li-enumerate">The &#8220;alias&#8221; attribute on a function declaration tells the
- linker to treat this declaration as another name for the specified
- function. CIL will replace the declaration with a trampoline
- function pointing to the specified target.
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-    static int bar(int x, char y) {
-      return x + y;
-    }
-
-    //foo is considered another name for bar.
-    int foo(int x, char y) __attribute__((alias("bar")));
-</FONT></PRE>
-See the <A HREF="examples/ex46.txt">CIL output</A> for this
-code fragment</OL>
-<!--TOC subsection Microsoft VC ugliness-->
-
-<H3 CLASS="subsection"><A NAME="htoc45">16.3</A>&nbsp;&nbsp;Microsoft VC ugliness</H3><!--SEC END -->
-
-This compiler has few extensions, so there is not much to say here.
-<OL CLASS="enumerate" type=1><LI CLASS="li-enumerate">
-Why does the following code return 0 and not -1? (Answer: because of a
-bug in Microsoft Visual C. It thinks that the shift is unsigned just because
-the second operator is unsigned. CIL reproduces this bug when in MSVC mode.)
-<PRE CLASS="verbatim"><FONT COLOR=blue>
- return -3 &gt;&gt; (8 * sizeof(int));
-</FONT></PRE><BR>
-<BR>
-<LI CLASS="li-enumerate">Unnamed fields in a structure seem really strange at first. It seems
-that Microsoft Visual C introduced this extension, then GCC picked it up (but
-in the process implemented it wrongly: in GCC the field <TT>y</TT> overlaps with
-<TT>x</TT>!).
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-struct {
-  int x;
-  struct {
-     int y, z;
-     struct {
-       int u, v;
-     };
- };
-} a;
-return a.x + a.y + a.z + a.u + a.v;
-</FONT></PRE>
-See the <A HREF="examples/ex47.txt">CIL output</A> for this
-code fragment</OL>
-<!--TOC section Authors-->
-
-<H2 CLASS="section"><A NAME="htoc46">17</A>&nbsp;&nbsp;Authors</H2><!--SEC END -->
-
-The CIL parser was developed starting from Hugues Casse's <TT>frontc</TT>
-front-end for C although all the files from the <TT>frontc</TT> distribution have
-been changed very extensively. The intermediate language and the elaboration
-stage are all written from scratch. The main author is
-<A HREF="mailto:necula@cs.berkeley.edu">George Necula</A>, with significant
-contributions from <A HREF="mailto:smcpeak@cs.berkeley.edu">Scott McPeak</A>,
-<A HREF="mailto:weimer@cs.berkeley.edu">Westley Weimer</A>,
-<A HREF="mailto:liblit@cs.wisc.edu">Ben Liblit</A>,
-<A HREF="javascript:loadTop('http://www.cs.berkeley.edu/~matth/')">Matt Harren</A>, 
-Raymond To and Aman Bhargava.<BR>
-<BR>
-This work is based upon work supported in part by the National Science
-Foundation under Grants No. 9875171, 0085949 and 0081588, and gifts from
-Microsoft Research. Any opinions, findings, and conclusions or recommendations
-expressed in this material are those of the author(s) and do not necessarily
-reflect the views of the National Science Foundation or the other sponsors.<BR>
-<BR>
-<!--TOC section License-->
-
-<H2 CLASS="section"><A NAME="htoc47">18</A>&nbsp;&nbsp;License</H2><!--SEC END -->
-
-Copyright (c) 2001-2005, 
-<UL CLASS="itemize"><LI CLASS="li-itemize">
-George C. Necula &lt;necula@cs.berkeley.edu&gt;
-<LI CLASS="li-itemize">Scott McPeak &lt;smcpeak@cs.berkeley.edu&gt;
-<LI CLASS="li-itemize">Wes Weimer &lt;weimer@cs.berkeley.edu&gt;
-<LI CLASS="li-itemize">Ben Liblit &lt;liblit@cs.wisc.edu&gt;
-</UL>
-All rights reserved.<BR>
-<BR>
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:<BR>
-<BR>
-1. Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.<BR>
-<BR>
-2. Redistributions in binary form must reproduce the above copyright notice,
-this list of conditions and the following disclaimer in the documentation
-and/or other materials provided with the distribution.<BR>
-<BR>
-3. The names of the contributors may not be used to endorse or promote
-products derived from this software without specific prior written
-permission.<BR>
-<BR>
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
-LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGE.<BR>
-<BR>
-<!--TOC section Bug reports-->
-
-<H2 CLASS="section"><A NAME="htoc48">19</A>&nbsp;&nbsp;Bug reports</H2><!--SEC END -->
-
-We are certain that there are still some remaining bugs in CIL. If you find
-one please file a bug report in our Source Forge space 
-<A HREF="javascript:loadTop('http://sourceforge.net/projects/cil')">http://sourceforge.net/projects/cil</A>. <BR>
-<BR>
-You can find there the latest announcements, a source distribution,
-bug report submission instructions and a mailing list: cil-users[at
-sign]lists.sourceforge.net. Please use this list to ask questions about CIL,
-as it will ensure your message is viewed by a broad audience. <BR>
-<BR>
-<!--TOC section Changes-->
-
-<H2 CLASS="section"><A NAME="htoc49">20</A>&nbsp;&nbsp;Changes</H2><!--SEC END -->
-<A NAME="sec-changes"></A><!--NAME changes.html-->
-
-<UL CLASS="itemize"><LI CLASS="li-itemize">
-<B>May 20, 2006</B>: <B>Released version 1.3.5</B>
-<LI CLASS="li-itemize"><B>May 19, 2006</B>: <TT>Makefile.cil.in</TT>/<TT>Makefile.cil</TT> have
- been renamed <TT>Makefile.in</TT>/<TT>Makefile</TT>. And <TT>maincil.ml</TT> has
- been renamed <TT>main.ml</TT>.
-<LI CLASS="li-itemize"><B>May 18, 2006</B>: Added a new module <A HREF="api/Cfg.html">Cfg</A> to compute the
- control-flow graph. Unlike the older <A HREF="api/Cil.html#VALcomputeCFGInfo">Cil.computeCFGInfo</A>,
- the new version does not modify the code. 
-<LI CLASS="li-itemize"><B>May 18, 2006</B>: Added several new analyses: reaching
- definitions, available expressions, liveness analysis, and dead code
- elimination. See Section&nbsp;<A HREF="#sec-Extension">8</A>.
-<LI CLASS="li-itemize"><B>May 2, 2006</B>: Added a flag <TT>--noInsertImplicitCasts</TT>.
- When this flag is used, CIL code will only include casts inserted by
- the programmer. Implicit coercions are not changed to explicit casts.
-<LI CLASS="li-itemize"><B>April 16, 2006</B>: Minor improvements to the <TT>--stats</TT>
- flag (Section&nbsp;<A HREF="#sec-cilly-asm-options">7.2</A>). We now use Pentium performance
- counters by default, if your processor supports them.
-<LI CLASS="li-itemize"><B>April 10, 2006</B>: Extended <TT>machdep.c</TT> to support
- microcontroller compilers where the struct alignment of integer
- types does not match the size of the type. Thanks to Nathan
- Cooprider for the patch.
-<LI CLASS="li-itemize"><B>April 6, 2006</B>: Fix for global initializers of unions when
- the union field being initialized is not the first one, and for
- missing initializers of unions when the first field is not the
- largest field.
-<LI CLASS="li-itemize"><B>April 6, 2006</B>: Fix for bitfields in the SFI module.
-<LI CLASS="li-itemize"><B>April 6, 2006</B>: Various fixes for gcc attributes.
- <TT>packed</TT>, <TT>section</TT>, and <TT>always_inline</TT> attributes are now
- parsed correctly. Also fixed printing of attributes on enum types.
-<LI CLASS="li-itemize"><B>March 30, 2006</B>: Fix for <TT>rmtemps.ml</TT>, which deletes
- unused inline functions. When in <TT>gcc</TT> mode CIL now leaves all
- inline functions in place, since <TT>gcc</TT> treats these as externally
- visible. 
-<LI CLASS="li-itemize"><B>March 15, 2006</B>: Fix for <TT>typeof(<I>e</I>)</TT> when <I>e</I> has type
- <TT>void</TT>.
-<LI CLASS="li-itemize"><B>March 3, 2006</B>: Assume inline assembly instructions can
- fall through for the purposes of adding return statements. Thanks to
- Nathan Cooprider for the patch.
-<LI CLASS="li-itemize"><B>February 27, 2006</B>: Fix for extern inline functions when
- the output of CIL is fed back into CIL.
-<LI CLASS="li-itemize"><B>January 30, 2006</B>: Fix parsing of <TT>switch</TT> without braces.
-<LI CLASS="li-itemize"><B>January 30, 2006</B>: Allow `$' to appear in identifiers.
-<LI CLASS="li-itemize"><B>January 13, 2006</B>: Added support for gcc's alias attribute
- on functions. See Section&nbsp;<A HREF="#sec-ugly-gcc">16.2</A>, item 8. 
-<LI CLASS="li-itemize"><B>December 9, 2005</B>: Christoph Spiel fixed the Golf and
- Olf modules so that Golf can be used with the points-to analysis.
- He also added performance fixes and cleaned up the documentation.
-<LI CLASS="li-itemize"><B>December 1, 2005</B>: Major rewrite of the ext/callgraph module. 
-<LI CLASS="li-itemize"><B>December 1, 2005</B>: Preserve enumeration constants in CIL. Default
-is the old behavior to replace them with integers.
-<LI CLASS="li-itemize"><B>November 30, 2005</B>: Added support for many GCC <TT>__builtin</TT>
- functions. 
-<LI CLASS="li-itemize"><B>November 30, 2005</B>: Added the EXTRAFEATURES configure
- option, making it easier to add Features to the build process.
-<LI CLASS="li-itemize"><B>November 23, 2005</B>: In MSVC mode do not remove any locals whose name
- appears as a substring in an inline assembly. 
-<LI CLASS="li-itemize"><B>November 23, 2005</B>: Do not add a return to functions that have the
- noreturn attribute. 
-<LI CLASS="li-itemize"><B>November 22, 2005</B>: <B>Released version 1.3.4</B>
-<LI CLASS="li-itemize"><B>November 21, 2005</B>: Performance and correctness fixes for
- the Points-to Analysis module. Thanks to Christoph Spiel for the
- patches.
-<LI CLASS="li-itemize"><B>October 5, 2005</B>: CIL now builds on SPARC/Solaris. Thanks
- to Nick Petroni and Remco van Engelen for the patches.
-<LI CLASS="li-itemize"><B>September 26, 2005</B>: CIL no longer uses the `<TT>-I-</TT>' flag
- by default when preprocessing with gcc.
-<LI CLASS="li-itemize"><B>August 24, 2005</B>: Added a command-line option
- &#8220;--forceRLArgEval&#8221; that forces function arguments to be evaluated
- right-to-left. This is the default behavior in unoptimized gcc and
- MSVC, but the order of evaluation is undefined when using
- optimizations, unless you apply this CIL transformation. This flag
- does not affect the order of evaluation of e.g. binary operators,
- which remains undefined. Thanks to Nathan Cooprider for the patch.
-<LI CLASS="li-itemize"><B>August 9, 2005</B>: Fixed merging when there are more than 20
- input files.
-<LI CLASS="li-itemize"><B>August 3, 2005</B>: When merging, it is now an error to
- declare the same global variable twice with different initializers.
-<LI CLASS="li-itemize"><B>July 27, 2005</B>: Fixed bug in transparent unions.
-<LI CLASS="li-itemize"><B>July 27, 2005</B>: Fixed bug in collectInitializer. Thanks to
- Benjamin Monate for the patch.
-<LI CLASS="li-itemize"><B>July 26, 2005</B>: Better support for extended inline assembly
- in gcc.
-<LI CLASS="li-itemize"><B>July 26, 2005</B>: Added many more gcc __builtin* functions
- to CIL. Most are treated as Call instructions, but a few are
- translated into expressions so that they can be used in global
- initializers. For example, &#8220;<TT>__builtin_offsetof(t, field)</TT>&#8221; is
- rewritten as &#8220;<TT>&amp;((t*)0)-&gt;field</TT>&#8221;, the traditional way of calculating
- an offset.
-<LI CLASS="li-itemize"><B>July 18, 2005</B>: Fixed bug in the constant folding of shifts
- when the second argument was negative or too large.
-<LI CLASS="li-itemize"><B>July 18, 2005</B>: Fixed bug where casts were not always
- inserted in function calls.
-<LI CLASS="li-itemize"><B>June 10, 2005</B>: Fixed bug in the code that makes implicit
- returns explicit. We weren't handling switch blocks correctly.
-<LI CLASS="li-itemize"><B>June 1, 2005</B>: <B>Released version 1.3.3</B>
-<LI CLASS="li-itemize"><B>May 31, 2005</B>: Fixed handling of noreturn attribute for function
- pointers. 
-<LI CLASS="li-itemize"><B>May 30, 2005</B>: Fixed bugs in the handling of constructors in gcc.
-<LI CLASS="li-itemize"><B>May 30, 2005</B>: Fixed bugs in the generation of global variable IDs.
-<LI CLASS="li-itemize"><B>May 27, 2005</B>: Reimplemented the translation of function calls so
- that we can intercept some builtins. This is important for the uses of
- __builtin_constant_p in constants. 
-<LI CLASS="li-itemize"><B>May 27, 2005</B>: Export the plainCilPrinter, for debugging.
-<LI CLASS="li-itemize"><B>May 27, 2005</B>: Fixed bug with printing of const attribute for
- arrays. 
-<LI CLASS="li-itemize"><B>May 27, 2005</B>: Fixed bug in generation of type signatures. Now they
- should not contain expressions anymore, so you can use structural equality.
- This used to lead to Out_of_Memory exceptions.
-<LI CLASS="li-itemize"><B>May 27, 2005</B>: Fixed bug in type comparisons using
- TBuiltin_va_list.
-<LI CLASS="li-itemize"><B>May 27, 2005</B>: Improved the constant folding in array lengths and
- case expressions. 
-<LI CLASS="li-itemize"><B>May 27, 2005</B>: Added the <TT>__builtin_frame_address</TT> to the set
- of gcc builtins.
-<LI CLASS="li-itemize"><B>May 27, 2005</B>: Added the CIL project to SourceForge.
-<LI CLASS="li-itemize"><B>April 23, 2005</B>: The cattr field was not visited.
-<LI CLASS="li-itemize"><B>March 6, 2005</B>: Debian packaging support
-<LI CLASS="li-itemize"><B>February 16, 2005</B>: Merger fixes.
-<LI CLASS="li-itemize"><B>February 11, 2005</B>: Fixed a bug in <TT>--dopartial</TT>. Thanks to
-Nathan Cooprider for this fix. 
-<LI CLASS="li-itemize"><B>January 31, 2005</B>: Make sure the input file is closed even if a
- parsing error is encountered. 
-<LI CLASS="li-itemize"><B>January 11, 2005</B>: <B>Released version 1.3.2</B>
-<LI CLASS="li-itemize"><B>January 11, 2005</B>: Fixed printing of integer constants whose
- integer kind is shorter than an int. 
-<LI CLASS="li-itemize"><B>January 11, 2005</B>: Added checks for negative size arrays and arrays
- too big. 
-<LI CLASS="li-itemize"><B>January 10, 2005</B>: Added support for GCC attribute &#8220;volatile&#8221; for
- tunctions (as a synonim for noreturn). 
-<LI CLASS="li-itemize"><B>January 10, 2005</B>: Improved the comparison of array sizes when
- comparing array types. 
-<LI CLASS="li-itemize"><B>January 10, 2005</B>: Fixed handling of shell metacharacters in the
- cilly command lione.
-<LI CLASS="li-itemize"><B>January 10, 2005</B>: Fixed dropping of cast in initialization of
- local variable with the result of a function call.
-<LI CLASS="li-itemize"><B>January 10, 2005</B>: Fixed some structural comparisons that were
- broken in the Ocaml 3.08.
-<LI CLASS="li-itemize"><B>January 10, 2005</B>: Fixed the <TT>unrollType</TT> function to not forget
- attributes. 
-<LI CLASS="li-itemize"><B>January 10, 2005</B>: Better keeping track of locations of function
- prototypes and definitions. 
-<LI CLASS="li-itemize"><B>January 10, 2005</B>: Fixed bug with the expansion of enumeration
- constants in attributes.
-<LI CLASS="li-itemize"><B>October 18, 2004</B>: Fixed a bug in cabsvisit.ml. CIl would wrap a
- BLOCK around a single atom unnecessarily. 
-<LI CLASS="li-itemize"><B>August 7, 2004</B>: <B>Released version 1.3.1</B>
-<LI CLASS="li-itemize"><B>August 4, 2004</B>: Fixed a bug in splitting of structs using 
- <TT>--dosimplify</TT>
-<LI CLASS="li-itemize"><B>July 29, 2004</B>: Minor changes to the type typeSig (type signatures)
- to ensure that they do not contain types, so that you can do structural
- comparison without danger of nontermination. 
-<LI CLASS="li-itemize"><B>July 28, 2004</B>: Ocaml version 3.08 is required. Numerous small 
- changes while porting to Ocaml 3.08. 
-<LI CLASS="li-itemize"><B>July 7, 2004</B>: <B>Released version 1.2.6</B>
-<LI CLASS="li-itemize"><B>July 2, 2004</B>: Character constants such as <TT>'c'</TT> should
- have type <TT>int</TT>, not <TT>char</TT>. Added a utility function
- <TT>Cil.charConstToInt</TT> that sign-extends chars greater than 128, if needed.
-<LI CLASS="li-itemize"><B>July 2, 2004</B>: Fixed a bug that was casting values to int
- before applying the logical negation operator !. This caused
- problems for floats, and for integer types bigger than <TT>int</TT>.
-<LI CLASS="li-itemize"><B>June 13, 2004</B>: Added the field <TT>sallstmts</TT> to a function
- description, to hold all statements in the function.
-<LI CLASS="li-itemize"><B>June 13, 2004</B>: Added new extensions for data flow analyses, and
- for computing dominators.
-<LI CLASS="li-itemize"><B>June 10, 2004</B>: Force initialization of CIL at the start of
-Cabs2cil. 
-<LI CLASS="li-itemize"><B>June 9, 2004</B>: Added support for GCC <TT>__attribute_used__</TT>
-<LI CLASS="li-itemize"><B>April 7, 2004</B>: <B>Released version 1.2.5</B>
-<LI CLASS="li-itemize"><B>April 7, 2004</B>: Allow now to run ./configure CC=cl and set the MSVC
-compiler to be the default. The MSVC driver will now select the default name
-of the .exe file like the CL compiler. 
-<LI CLASS="li-itemize"><B>April 7, 2004</B>: Fixed a bug in the driver. The temporary files are
-deleted by the Perl script before the CL compiler gets to them?
-<LI CLASS="li-itemize"><B>April 7, 2004</B>: Added the - form of arguments to the MSVC driver.
-<LI CLASS="li-itemize"><B>April 7, 2004</B>: Added a few more GCC-specific string escapes, (, [,
-{, %, E. 
-<LI CLASS="li-itemize"><B>April 7, 2004</B>: Fixed bug with continuation lines in MSVC.
-<LI CLASS="li-itemize"><B>April 6, 2004</B>: Fixed embarassing bug in the parser: the precedence
- of casts and unary operators was switched. 
-<LI CLASS="li-itemize"><B>April 5, 2004</B>: Fixed a bug involving statements mixed between
-declarations containing initializers. Now we make sure that the initializers
-are run in the proper order with respect to the statements.
-<LI CLASS="li-itemize"><B>April 5, 2004</B>: Fixed a bug in the merger. The merger was keeping
-separate alpha renaming talbes (namespaces) for variables and types. This
-means that it might end up with a type and a variable named the same way, if
-they come from different files, which breaks an important CIL invariant.
-<LI CLASS="li-itemize"><B>March 11, 2004</B> : Fixed a bug in the Cil.copyFunction function. The
-new local variables were not getting fresh IDs. 
-<LI CLASS="li-itemize"><B>March 5, 2004</B>: Fixed a bug in the handling of static function
- prototypes in a block scope. They used to be renamed. Now we just consider
- them global. 
-<LI CLASS="li-itemize"><B>February 20, 2004</B>: <B>Released version 1.2.4</B>
-<LI CLASS="li-itemize"><B>February 15, 2004</B>: Changed the parser to allow extra semicolons
- after field declarations.
-<LI CLASS="li-itemize"><B>February 14, 2004</B>: Changed the Errormsg functions: error, unimp,
-bug to not raise an exception. Instead they just set Errormsg.hadErrors. 
-<LI CLASS="li-itemize"><B>February 13, 2004</B>: Change the parsing of attributes to recognize
- enumeration constants.
-<LI CLASS="li-itemize"><B>February 10, 2004</B>: In some versions of <TT>gcc</TT> the identifier
- _{thread is an identifier and in others it is a keyword. Added code
- during configuration to detect which is the case. 
-<LI CLASS="li-itemize"><B>January 7, 2004</B>: <B>Released version 1.2.3</B>
-<LI CLASS="li-itemize"><B>January 7, 2004</B>: Changed the alpha renamer to be less
-conservative. It will remember all versions of a name that were seen and will
-only create a new name if we have not seen one. 
-<LI CLASS="li-itemize"><B>December 30, 2003</B> : Extended the <TT>cilly</TT> command to understand
- better linker command options <TT>-lfoo</TT>. 
-<LI CLASS="li-itemize"><B>December 5, 2003</B>: Added markup commands to the pretty-printer
-module. Also, changed the &#8220;@&lt;&#8221; left-flush command into &#8220;@''.
-<LI CLASS="li-itemize"><B>December 4, 2003</B>: Wide string literals are now handled
-directly by Cil (rather than being exploded into arrays). This is
-apparently handy for Microsoft Device Driver APIs that use intrinsic
-functions that require literal constant wide-string arguments. 
-<LI CLASS="li-itemize"><B>December 3, 2003</B>: Added support for structured exception handling
- extensions for the Microsoft compilers.
-<LI CLASS="li-itemize"><B>December 1, 2003</B>: Fixed a Makefile bug in the generation of the 
-Cil library (e.g., <TT>cil.cma</TT>) that was causing it to be unusable. Thanks
-to KEvin Millikin for pointing out this bug. 
-<LI CLASS="li-itemize"><B>November 26, 2003</B>: Added support for linkage specifications
- (extern &#8220;C&#8221;). 
-<LI CLASS="li-itemize"><B>November 26, 2003</B>: Added the ocamlutil directory to contain some
-utilities shared with other projects. 
-<LI CLASS="li-itemize"><B>November 25, 2003</B>: <B>Released version 1.2.2</B>
-<LI CLASS="li-itemize"><B>November 24, 2003</B>: Fixed a bug that allowed a static local to
- conflict with a global with the same name that is declared later in the
- file. 
-<LI CLASS="li-itemize"><B>November 24, 2003</B>: Removed the <TT>--keep</TT> option of the <TT>cilly</TT>
- driver and replaced it with <TT>--save-temps</TT>.
-<LI CLASS="li-itemize"><B>November 24, 2003</B>: Added printing of what CIL features are being
- run.
-<LI CLASS="li-itemize"><B>November 24, 2003</B>: Fixed a bug that resulted in attributes being
- dropped for integer types. 
-<LI CLASS="li-itemize"><B>November 11, 2003</B>: Fixed a bug in the visitor for enumeration
- definitions. 
-<LI CLASS="li-itemize"><B>October 24, 2003</B>: Fixed a problem in the configuration script. It
- was not recognizing the Ocaml version number for beta versions. 
-<LI CLASS="li-itemize"><B>October 15, 2003</B>: Fixed a problem in version 1.2.1 that was
- preventing compilation on OCaml 3.04.
-<LI CLASS="li-itemize"><B>September 17, 2003: Released version 1.2.1.</B>
-<LI CLASS="li-itemize"><B>September 7, 2003</B>: Redesigned the interface for choosing
- <TT>#line</TT> directive printing styles. Cil.printLn and
- Cil.printLnComment have been merged into Cil.lineDirectiveStyle.
-<LI CLASS="li-itemize"><B>August 8, 2003</B>: Do not silently pad out functions calls with
-arguments to match the prototype. 
-<LI CLASS="li-itemize"><B>August 1, 2003</B>: A variety of fixes suggested by Steve Chamberlain:
-initializers for externs, prohibit float literals in enum, initializers for
-unsized arrays were not working always, an overflow problem in Ocaml, changed
-the processing of attributes before struct specifiers<BR>
-<BR>
-<LI CLASS="li-itemize"><B>July 14, 2003</B>: Add basic support for GCC's "__thread" storage
-qualifier. If given, it will appear as a "thread" attribute at the top of the
-type of the declared object. Treatment is very similar to "__declspec(...)"
-in MSVC<BR>
-<BR>
-<LI CLASS="li-itemize"><B>July 8, 2003</B>: Fixed some of the __alignof computations. Fixed
- bug in the designated initializers for arrays (Array.get error).
-<LI CLASS="li-itemize"><B>July 8, 2003</B>: Fixed infinite loop bug (Stack Overflow) in the
- visitor for __alignof.
-<LI CLASS="li-itemize"><B>July 8, 2003</B>: Fixed bug in the conversion to CIL. A function or
- array argument of
- the GCC __typeof() was being converted to pointer type. Instead, it should
- be left alone, just like for sizeof. 
-<LI CLASS="li-itemize"><B>July 7, 2003</B>: New Escape module provides utility functions
- for escaping characters and strings in accordance with C lexical
- rules.<BR>
-<BR>
-<LI CLASS="li-itemize"><B>July 2, 2003</B>: Relax CIL's rules for when two enumeration types are
-considered compatible. Previously CIL considered two enums to be compatible if
-they were the same enum. Now we follow the C99 standard.<BR>
-<BR>
-<LI CLASS="li-itemize"><B>June 28, 2003</B>: In the Formatparse module, Eric Haugh found and
- fixed a bug in the handling of lvalues of the form &#8220;lv-&gt;field.more&#8221;.<BR>
-<BR>
-<LI CLASS="li-itemize"><B>June 28, 2003</B>: Extended the handling of gcc command lines
-arguments in the Perl scripts. <BR>
-<BR>
-<LI CLASS="li-itemize"><B>June 23, 2003</B>: In Rmtmps module, simplified the API for
- customizing the root set. Clients may supply a predicate that
- returns true for each root global. Modifying various
- &#8220;<TT>referenced</TT>&#8221; fields directly is no longer supported.<BR>
-<BR>
-<LI CLASS="li-itemize"><B>June 17, 2003</B>: Reimplement internal utility routine
- <TT>Cil.escape_char</TT>. Faster and better. <BR>
-<BR>
-<LI CLASS="li-itemize"><B>June 14, 2003</B>: Implemented support for <TT>__attribute__s</TT>
-appearing between "struct" and the struct tag name (also for unions and
-enums), since gcc supports this as documented in section 4.30 of the gcc
-(2.95.3) manual<BR>
-<BR>
-<LI CLASS="li-itemize"><B>May 30, 2003</B>: Released the regression tests. 
-<LI CLASS="li-itemize"><B>May 28, 2003</B>: <B>Released version 1.1.2</B>
-<LI CLASS="li-itemize"><B>May 26, 2003</B>: Add the <TT>simplify</TT> module that compiles CIL
-expressions into simpler expressions, similar to those that appear in a
-3-address intermediate language.
-<LI CLASS="li-itemize"><B>May 26, 2003</B>: Various fixes and improvements to the pointer
-analysis modules. 
-<LI CLASS="li-itemize"><B>May 26, 2003</B>: Added optional consistency checking for
-transformations.
-<LI CLASS="li-itemize"><B>May 25, 2003</B>: Added configuration support for big endian machines.
-Now <A HREF="api/Cil.html#VALlittle_endian">Cil.little_endian</A> can be used to test whether the machine is
-little endian or not. 
-<LI CLASS="li-itemize"><B>May 22, 2003</B>: Fixed a bug in the handling of inline functions. The
-CIL merger used to turn these functions into &#8220;static&#8221;, which is incorrect. 
-<LI CLASS="li-itemize"><B>May 22, 2003</B>: Expanded the CIL consistency checker to verify
-undesired sharing relationships between data structures. 
-<LI CLASS="li-itemize"><B>May 22, 2003</B>: Fixed bug in the <TT>oneret</TT> CIL module: it was
-mishandling certain labeled return statements. 
-<LI CLASS="li-itemize"><B>May 5, 2003</B>: <B>Released version 1.0.11</B>
-<LI CLASS="li-itemize"><B>May 5, 2003</B>: OS X (powerpc/darwin) support for CIL. Special 
-thanks to Jeff Foster, Andy Begel and Tim Leek. 
-<LI CLASS="li-itemize"><B>April 30, 2003</B>: Better description of how to use CIL for your
-analysis. 
-<LI CLASS="li-itemize"><B>April 28, 2003</B>: Fixed a bug with <TT>--dooneRet</TT> and
-<TT>--doheapify</TT>. Thanks, Manos Renieris.
-<LI CLASS="li-itemize"><B>April 16, 2003</B>: Reworked management of
- temporary/intermediate output files in Perl driver scripts. Default
- behavior is now to remove all such files. To keep intermediate
- files, use one of the following existing flags:
- <UL CLASS="itemize"><LI CLASS="li-itemize">
- <TT>--keepmerged</TT> for the single-file merge of all sources
- <LI CLASS="li-itemize"><TT>--keep=&lt;<I>dir</I></TT><TT>&gt;</TT> for various other CIL and
- CCured output files
- <LI CLASS="li-itemize"><TT>--save-temps</TT> for various gcc intermediate files; MSVC
- has no equivalent option
- </UL>
- As part of this change, some intermediate files have changed their
- names slightly so that new suffixes are always preceded by a
- period. For example, CCured output that used to appear in
- &#8220;<TT>foocured.c</TT>&#8221; now appears in &#8220;<TT>foo.cured.c</TT>&#8221;.
-<LI CLASS="li-itemize"><B>April 7, 2003</B>: Changed the representation of the <A HREF="api/Cil.html#VALGVar">Cil.GVar</A>
-global constructor. Now it is possible to update the initializer without
-reconstructing the global (which in turn it would require reconstructing the
-list of globals that make up a program). We did this because it is often
-tempting to use <A HREF="api/Cil.html#VALvisitCilFileSameGlobals">Cil.visitCilFileSameGlobals</A> and the <A HREF="api/Cil.html#VALGVar">Cil.GVar</A>
-was the only global that could not be updated in place. 
-<LI CLASS="li-itemize"><B>April 6, 2003</B>: Reimplemented parts of the cilly.pl script to make
-it more robust in the presence of complex compiler arguments. 
-<LI CLASS="li-itemize"><B>March 10, 2003</B>: <B>Released version 1.0.9</B>
-<LI CLASS="li-itemize"><B>March 10, 2003</B>: Unified and documented a large number of CIL
-Library Modules: oneret, simplemem, makecfg, heapify, stackguard, partial.
-Also documented the main client interface for the pointer analysis. 
-<LI CLASS="li-itemize"><B>February 18, 2003</B>: Fixed a bug in logwrites that was causing it
-to produce invalid C code on writes to bitfields. Thanks, David Park. 
-<LI CLASS="li-itemize"><B>February 15, 2003</B>: <B>Released version 1.0.8</B>
-<LI CLASS="li-itemize"><B>February 15, 2003</B>: PDF versions of the manual and API are
-available for those who would like to print them out. 
-<LI CLASS="li-itemize"><B>February 14, 2003</B>: CIL now comes bundled with alias analyses. 
-<LI CLASS="li-itemize"><B>February 11, 2003</B>: Added support for adding/removing options from
- <TT>./configure</TT>. 
-<LI CLASS="li-itemize"><B>February 3, 2003</B>: <B>Released version 1.0.7</B>
-<LI CLASS="li-itemize"><B>February 1, 2003</B>: Some bug fixes in the handling of variable
-argument functions in new versions of <TT>gcc</TT> And <TT>glibc</TT>. 
-<LI CLASS="li-itemize"><B>January 29, 2003</B>: Added the logical AND and OR operators.
-Exapanded the translation to CIL to handle more complicated initializers
-(including those that contain logical operators).
-<LI CLASS="li-itemize"><B>January 28, 2003</B>: <B>Released version 1.0.6</B>
-<LI CLASS="li-itemize"><B>January 28, 2003</B>: Added support for the new handling of
-variable-argument functions in new versions of <TT>glibc</TT>. 
-<LI CLASS="li-itemize"><B>January 19, 2003</B>: Added support for declarations in interpreted
- constructors. Relaxed the semantics of the patterns for variables. 
-<LI CLASS="li-itemize"><B>January 17, 2003</B>: Added built-in prototypes for the gcc built-in
- functions. Changed the <TT>pGlobal</TT> method in the printers to print the
- carriage return as well.
-<LI CLASS="li-itemize"><B>January 9, 2003</B>: Reworked lexer and parser's strategy for
- tracking source file names and line numbers to more closely match
- typical native compiler behavior. The visible CIL interface is
- unchanged.
-<LI CLASS="li-itemize"><B>January 9, 2003</B>: Changed the interface to the alpha convertor. Now
-you can pass a list where it will record undo information that you can use to
-revert the changes that it makes to the scope tables.
-<LI CLASS="li-itemize"><B>January 6, 2003</B>: <B>Released version 1.0.5</B>
-<LI CLASS="li-itemize"><B>January 4, 2003</B>: Changed the interface for the Formatcil module.
- Now the placeholders in the pattern have names. Also expanded the
- documentation of the Formatcil module.
- Now the placeholders in the pattern have names.
-<LI CLASS="li-itemize"><B>January 3, 2003</B>: Extended the <TT>rmtmps</TT> module to also remove
- unused labels that are generated in the conversion to CIL. This reduces the
- number of warnings that you get from <TT>cgcc</TT> afterwards.
-<LI CLASS="li-itemize"><B>December 17, 2002</B>: Fixed a few bugs in CIL related to the
- representation of string literals. The standard says that a string literal
- is an array. In CIL, a string literal has type pointer to character. This is
- Ok, except as an argument of sizeof. To support this exception, we have
- added to CIL the expression constructor SizeOfStr. This allowed us to fix
- bugs with computing <TT>sizeof("foo bar")</TT> and <TT>sizeof((char*)"foo bar")</TT>
- (the former is 8 and the latter is 4).<BR>
-<BR>
-<LI CLASS="li-itemize"><B>December 8, 2002</B>: Fixed a few bugs in the lexer and parser
- relating to hex and octal escapes in string literals. Also fixed
- the dependencies between the lexer and parser.
-<LI CLASS="li-itemize"><B>December 5, 2002</B>: Fixed visitor bugs that were causing
- some attributes not to be visited and some queued instructions to be
- dropped.
-<LI CLASS="li-itemize"><B>December 3, 2002</B>: Added a transformation to catch stack
- overflows. Fixed the heapify transformation.
-<LI CLASS="li-itemize"><B>October 14, 2002</B>: CIL is now available under the BSD license
-(see the License section or the file LICENSE). <B>Released version 1.0.4</B>
-<LI CLASS="li-itemize"><B>October 9, 2002</B>: More FreeBSD configuration changes, support
-for the GCC-ims <TT>__signed</TT> and <TT>__volatile</TT>. Thanks to Axel
-Simon for pointing out these problems. <B>Released version 1.0.3</B>
-<LI CLASS="li-itemize"><B>October 8, 2002</B>: FreeBSD configuration and porting fixes.
-Thanks to Axel Simon for pointing out these problems. 
-<LI CLASS="li-itemize"><B>September 10, 2002</B>: Fixed bug in conversion to CIL. Now we drop
-all &#8220;const&#8221; qualifiers from the types of locals, even from the fields of
-local structures or elements of arrays.
-<LI CLASS="li-itemize"><B>September 7, 2002</B>: Extended visitor interface to distinguish visitng
- offsets inside lvalues from offsets inside initializer lists.
-<LI CLASS="li-itemize"><B>September 7, 2002</B>: <B>Released version 1.0.1</B>
-<LI CLASS="li-itemize"><B>September 6, 2002</B>: Extended the patcher with the <TT>ateof</TT> flag.
-<LI CLASS="li-itemize"><B>September 4, 2002</B>: Fixed bug in the elaboration to CIL. In some
-cases constant folding of <TT>||</TT> and <TT>&amp;&amp;</TT> was computed wrong.
-<LI CLASS="li-itemize"><B>September 3, 2002</B>: Fixed the merger documentation. 
-<LI CLASS="li-itemize"><B>August 29, 2002</B>: <B>Released version 1.0.0.</B>
-<LI CLASS="li-itemize"><B>August 29, 2002</B>: Started numbering versions with a major nubmer,
-minor and revisions. Released version 1.0.0.
-<LI CLASS="li-itemize"><B>August 25, 2002</B>: Fixed the implementation of the unique
-identifiers for global variables and composites. Now those identifiers are
-globally unique.
-<LI CLASS="li-itemize"><B>August 24, 2002</B>: Added to the machine-dependent configuration the
-<TT>sizeofvoid</TT>. It is 1 on gcc and 0 on MSVC. Extended the implementation of
-<TT>Cil.bitsSizeOf</TT> to handle this (it was previously returning an error when
-trying to compute the size of <TT>void</TT>).
-<LI CLASS="li-itemize"><B>August 24, 2002</B>: Changed the representation of structure and
-unions to distinguish between undefined structures and those that are defined
-to be empty (allowed on gcc). The sizeof operator is undefined for the former
-and returns 0 for the latter.
-<LI CLASS="li-itemize"><B>August 22, 2002</B>: Apply a patch from Richard H. Y. to support
-FreeBSD installations. Thanks, Richard!
-<LI CLASS="li-itemize"><B>August 12, 2002</B>: Fixed a bug in the translation of wide-character
-strings. Now this translation matches that of the underlying compiler. Changed
-the implementation of the compiler dependencies.
-<LI CLASS="li-itemize"><B>May 25, 2002</B>: Added interpreted constructors and destructors.
-<LI CLASS="li-itemize"><B>May 17, 2002</B>: Changed the representation of functions to move the
-&#8220;inline&#8221; information to the varinfo. This way we can print the &#8220;inline&#8221;
-even in declarations which is what gcc does. 
-<LI CLASS="li-itemize"><B>May 15, 2002</B>: Changed the visitor for initializers to make two
-tail-recursive passes (the second is a <TT>List.rev</TT> and only done if one of
-the initializers change). This prevents <TT>Stack_Overflow</TT> for large
-initializers. Also improved the processing of initializers when converting to
-CIL. 
-<LI CLASS="li-itemize"><B>May 15, 2002</B>: Changed the front-end to allow the use of <TT>MSVC</TT>
-mode even on machines that do not have MSVC. The machine-dependent parameters
-for GCC will be used in that case. 
-<LI CLASS="li-itemize"><B>May 11, 2002</B>: Changed the representation of formals in function
-types. Now the function type is purely functional. 
-<LI CLASS="li-itemize"><B>May 4, 2002</B>: Added the function
-<A HREF="api/Cil.html#VALvisitCilFileSameGlobals">Cil.visitCilFileSameGlobals</A> and changed <A HREF="api/Cil.html#VALvisitCilFile">Cil.visitCilFile</A> to be
-tail recursive. This prevents stack overflow on huge files.
-<LI CLASS="li-itemize"><B>February 28, 2002</B>: Changed the significance of the
-<TT>CompoundInit</TT> in <A HREF="api/Cil.html#TYPEinit">Cil.init</A> to allow for missing initializers at the
-end of an array initializer. Added the API function
-<A HREF="api/Cil.html#VALfoldLeftCompoundAll">Cil.foldLeftCompoundAll</A>.
-</UL>
-<!--HTMLFOOT-->
-<!--ENDHTML-->
-<!--FOOTER-->
-<HR SIZE=2><BLOCKQUOTE CLASS="quote"><EM>This document was translated from L<sup>A</sup>T<sub>E</sub>X by
-</EM><A HREF="http://pauillac.inria.fr/~maranget/hevea/index.html"><EM>H<FONT SIZE=2><sup>E</sup></FONT>V<FONT SIZE=2><sup>E</sup></FONT>A</EM></A><EM>.</EM></BLOCKQUOTE></BODY>
-</HTML>
diff --git a/cil/doc/cil.version.tex b/cil/doc/cil.version.tex
deleted file mode 100644
index c58485945..000000000
--- a/cil/doc/cil.version.tex
+++ /dev/null
@@ -1,2 +0,0 @@
-\def\cilversion{1.3.5}
-\def\ccuredversion{@CCURED_VERSION@}
diff --git a/cil/doc/cil001.html b/cil/doc/cil001.html
deleted file mode 100644
index 5edc5daa2..000000000
--- a/cil/doc/cil001.html
+++ /dev/null
@@ -1,134 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
-            "http://www.w3.org/TR/REC-html40/loose.dtd">
-<HTML>
-<HEAD>
-
-
-
-<META http-equiv="Content-Type" content="text/html; charset=ANSI_X3.4-1968">
-<META name="GENERATOR" content="hevea 1.08">
-
-<base target="main">
-<script language="JavaScript">
-<!-- Begin
-function loadTop(url) {
-  parent.location.href= url;
-}
-// -->
-</script>
-<LINK rel="stylesheet" type="text/css" href="cil.css">
-<TITLE>
-Introduction
-</TITLE>
-</HEAD>
-<BODY >
-<A HREF="ciltoc.html"><IMG SRC ="contents_motif.gif" ALT="Up"></A>
-<A HREF="cil002.html"><IMG SRC ="next_motif.gif" ALT="Next"></A>
-<HR>
-
-<H2 CLASS="section"><A NAME="htoc1">1</A>&nbsp;&nbsp;Introduction</H2>
-New: CIL now has a Source Forge page: 
- <A HREF="javascript:loadTop('http://sourceforge.net/projects/cil')">http://sourceforge.net/projects/cil</A>. <BR>
-<BR>
-CIL (<B>C</B> <B>I</B>ntermediate <B>L</B>anguage) is a high-level representation
-along with a set of tools that permit easy analysis and source-to-source
-transformation of C programs.<BR>
-<BR>
-CIL is both lower-level than abstract-syntax trees, by clarifying ambiguous
-constructs and removing redundant ones, and also higher-level than typical
-intermediate languages designed for compilation, by maintaining types and a
-close relationship with the source program. The main advantage of CIL is that
-it compiles all valid C programs into a few core constructs with a very clean
-semantics. Also CIL has a syntax-directed type system that makes it easy to
-analyze and manipulate C programs. Furthermore, the CIL front-end is able to
-process not only ANSI-C programs but also those using Microsoft C or GNU C
-extensions. If you do not use CIL and want instead to use just a C parser and
-analyze programs expressed as abstract-syntax trees then your analysis will
-have to handle a lot of ugly corners of the language (let alone the fact that
-parsing C itself is not a trivial task). See Section&nbsp;<A HREF="cil016.html#sec-simplec">16</A> for some
-examples of such extreme programs that CIL simplifies for you.<BR>
-<BR>
-In essence, CIL is a highly-structured, &#8220;clean&#8221; subset of C. CIL features a
-reduced number of syntactic and conceptual forms. For example, all looping
-constructs are reduced to a single form, all function bodies are given
-explicit <TT>return</TT> statements, syntactic sugar like <TT>"-&gt;"</TT> is
-eliminated and function arguments with array types become pointers. (For an
-extensive list of how CIL simplifies C programs, see Section&nbsp;<A HREF="cil004.html#sec-cabs2cil">4</A>.)
-This reduces the number of cases that must be considered when manipulating a C
-program. CIL also separates type declarations from code and flattens scopes
-within function bodies. This structures the program in a manner more amenable
-to rapid analysis and transformation. CIL computes the types of all program
-expressions, and makes all type promotions and casts explicit. CIL supports
-all GCC and MSVC extensions except for nested functions and complex numbers.
-Finally, CIL organizes C's imperative features into expressions, instructions
-and statements based on the presence and absence of side-effects and
-control-flow. Every statement can be annotated with successor and predecessor
-information. Thus CIL provides an integrated program representation that can
-be used with routines that require an AST (e.g. type-based analyses and
-pretty-printers), as well as with routines that require a CFG (e.g., dataflow
-analyses). CIL also supports even lower-level representations (e.g.,
-three-address code), see Section&nbsp;<A HREF="ext.html#sec-Extension">8</A>. <BR>
-<BR>
-CIL comes accompanied by a number of Perl scripts that perform generally
-useful operations on code:
-<UL CLASS="itemize"><LI CLASS="li-itemize">
-A <A HREF="cil007.html#sec-driver">driver</A> which behaves as either the <TT>gcc</TT> or
-Microsoft VC compiler and can invoke the preprocessor followed by the CIL
-application. The advantage of this script is that you can easily use CIL and
-the analyses written for CIL with existing make files.
-<LI CLASS="li-itemize">A <A HREF="merger.html#sec-merger">whole-program merger</A> that you can use as a
-replacement for your compiler and it learns all the files you compile when you
-make a project and merges all of the preprocessed source files into a single
-one. This makes it easy to do whole-program analysis.
-<LI CLASS="li-itemize">A <A HREF="patcher.html#sec-patcher">patcher</A> makes it easy to create modified
-copies of the system include files. The CIL driver can then be told to use
-these patched copies instead of the standard ones.
-</UL>
-CIL has been tested very extensively. It is able to process the SPECINT95
-benchmarks, the Linux kernel, GIMP and other open-source projects. All of
-these programs are compiled to the simple CIL and then passed to <TT>gcc</TT> and
-they still run! We consider the compilation of Linux a major feat especially
-since Linux contains many of the ugly GCC extensions (see Section&nbsp;<A HREF="cil016.html#sec-ugly-gcc">16.2</A>).
-This adds to about 1,000,000 lines of code that we tested it on. It is also
-able to process the few Microsoft NT device drivers that we have had access
-to. CIL was tested against GCC's c-torture testsuite and (except for the tests
-involving complex numbers and inner functions, which CIL does not currently
-implement) CIL passes most of the tests. Specifically CIL fails 23 tests out
-of the 904 c-torture tests that it should pass. GCC itself fails 19 tests. A
-total of 1400 regression test cases are run automatically on each change to
-the CIL sources.<BR>
-<BR>
-CIL is relatively independent on the underlying machine and compiler. When
-you build it CIL will configure itself according to the underlying compiler.
-However, CIL has only been tested on Intel x86 using the gcc compiler on Linux
-and cygwin and using the MS Visual C compiler. (See below for specific
-versions of these compilers that we have used CIL for.)<BR>
-<BR>
-The largest application we have used CIL for is
-<A HREF="javascript:loadTop('../ccured/index.html')">CCured</A>, a compiler that compiles C code into
-type-safe code by analyzing your pointer usage and inserting runtime checks in
-the places that cannot be guaranteed statically to be type safe. <BR>
-<BR>
-You can also use CIL to &#8220;compile&#8221; code that uses GCC extensions (e.g. the
-Linux kernel) into standard C code.<BR>
-<BR>
-CIL also comes accompanies by a growing library of extensions (see
-Section&nbsp;<A HREF="ext.html#sec-Extension">8</A>). You can use these for your projects or as examples of
-using CIL. <BR>
-<BR>
-<TT>PDF</TT> versions of <A HREF="CIL.pdf">this manual</A> and the
-<A HREF="CIL-API.pdf">CIL API</A> are available. However, we recommend the
-<TT>HTML</TT> versions because the postprocessed code examples are easier to
-view. <BR>
-<BR>
-If you use CIL in your project, we would appreciate letting us know. If you
-want to cite CIL in your research writings, please refer to the paper &#8220;CIL:
-Intermediate Language and Tools for Analysis and Transformation of C
-Programs&#8221; by George C. Necula, Scott McPeak, S.P. Rahul and Westley Weimer,
-in &#8220;Proceedings of Conference on Compilier Construction&#8221;, 2002.<BR>
-<BR>
-<HR>
-<A HREF="ciltoc.html"><IMG SRC ="contents_motif.gif" ALT="Up"></A>
-<A HREF="cil002.html"><IMG SRC ="next_motif.gif" ALT="Next"></A>
-</BODY>
-</HTML>
diff --git a/cil/doc/cil002.html b/cil/doc/cil002.html
deleted file mode 100644
index e575ce39f..000000000
--- a/cil/doc/cil002.html
+++ /dev/null
@@ -1,98 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
-            "http://www.w3.org/TR/REC-html40/loose.dtd">
-<HTML>
-<HEAD>
-
-
-
-<META http-equiv="Content-Type" content="text/html; charset=ANSI_X3.4-1968">
-<META name="GENERATOR" content="hevea 1.08">
-
-<base target="main">
-<script language="JavaScript">
-<!-- Begin
-function loadTop(url) {
-  parent.location.href= url;
-}
-// -->
-</script>
-<LINK rel="stylesheet" type="text/css" href="cil.css">
-<TITLE>
-Installation
-</TITLE>
-</HEAD>
-<BODY >
-<A HREF="cil001.html"><IMG SRC ="previous_motif.gif" ALT="Previous"></A>
-<A HREF="ciltoc.html"><IMG SRC ="contents_motif.gif" ALT="Up"></A>
-<A HREF="cil003.html"><IMG SRC ="next_motif.gif" ALT="Next"></A>
-<HR>
-
-<H2 CLASS="section"><A NAME="htoc2">2</A>&nbsp;&nbsp;Installation</H2>
-You will need OCaml release 3.08 or higher to build CIL. CIL has been tested
-on Linux and on Windows (where it can behave at either Microsoft Visual C or
-gcc).<BR>
-<BR>
-If you want to use CIL on Windows then you must get a complete installation
-of <TT>cygwin</TT> and the source-code OCaml distribution and compile it yourself
-using the cygwin tools (as opposed to getting the Win32 native-code version of
-OCaml). If you have not done this before then take a look
-<A HREF="../ccured/setup.html">here</A>. (Don't need to worry about <TT>cvs</TT> and
-<TT>ssh</TT> unless you will need to use the master CVS repository for CIL.)
-<OL CLASS="enumerate" type=1><LI CLASS="li-enumerate">
-Download the CIL <A HREF="distrib">distribution</A> (latest version is
-<A HREF="distrib/cil-1.3.5.tar.gz"><TT>distrib/cil-1.3.5.tar.gz</TT></A>). See the Section&nbsp;<A HREF="changes.html#sec-changes">20</A> for recent changes to the CIL distribution.
-<LI CLASS="li-enumerate">Unzip and untar the source distribution. This will create a directory
- called <TT>cil</TT> whose structure is explained below.<BR>
-<TT>tar xvfz cil-1.3.5.tar.gz</TT>
-<LI CLASS="li-enumerate">Enter the <TT>cil</TT> directory and run the <TT>configure</TT> script and then 
- GNU make to build the distribution. If you are on Windows, at least the
- <TT>configure</TT> step must be run from within <TT>bash</TT>.<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;<CODE>cd cil</CODE><BR>
-&nbsp;&nbsp;&nbsp;&nbsp;<CODE>./configure</CODE><BR>
-&nbsp;&nbsp;&nbsp;&nbsp;<CODE>make</CODE><BR>
-&nbsp;&nbsp;&nbsp;&nbsp;<CODE>make quicktest</CODE><BR>
-<LI CLASS="li-enumerate">You should now find <TT>cilly.asm.exe</TT> in a
-subdirectory of <TT>obj</TT>. The name of the subdirectory is either <TT>x86_WIN32</TT>
-if you are using <TT>cygwin</TT> on Windows or <TT>x86_LINUX</TT> if you are using
-Linux (although you should be using instead the Perl wrapper <TT>bin/cilly</TT>).
-Note that we do not have an <TT>install</TT> make target and you should use Cil
-from the development directory. 
-<LI CLASS="li-enumerate">If you decide to use CIL, <B>please</B>
-<A HREF="mailto:necula@cs.berkeley.edu">send us a note</A>. This will help recharge
-our batteries after more than a year of development. And of course, do send us
-your bug reports as well.</OL>
-The <TT>configure</TT> script tries to find appropriate defaults for your system.
-You can control its actions by passing the following arguments:
-<UL CLASS="itemize"><LI CLASS="li-itemize">
-<TT>CC=foo</TT> Specifies the path for the <TT>gcc</TT> executable. By default
-whichever version is in the PATH is used. If <TT>CC</TT> specifies the Microsoft
-<TT>cl</TT> compiler, then that compiler will be set as the default one. Otherwise,
-the <TT>gcc</TT> compiler will be the default.
-</UL>
-CIL requires an underlying C compiler and preprocessor. CIL depends on the
-underlying compiler and machine for the sizes and alignment of types.The
-installation procedure for CIL queries the underlying compiler for
-architecture and compiler dependent configuration parameters, such as the size
-of a pointer or the particular alignment rules for structure fields. (This
-means, of course, that you should re-run <TT>./configure</TT> when you move CIL to
-another machine.)<BR>
-<BR>
-We have tested CIL on the following compilers:
-<UL CLASS="itemize"><LI CLASS="li-itemize">
-On Windows, <TT>cl</TT> compiler version 12.00.8168 (MSVC 6),
- 13.00.9466 (MSVC .Net), and 13.10.3077 (MSVC .Net 2003). Run <TT>cl</TT>
- with no arguments to get the compiler version. 
-<LI CLASS="li-itemize">On Windows, using <TT>cygwin</TT> and <TT>gcc</TT> version 2.95.3, 3.0,
- 3.2, 3.3, and 3.4.
-<LI CLASS="li-itemize">On Linux, using <TT>gcc</TT> version 2.95.3, 3.0, 3.2, 3.3, and 4.0.
-</UL>
-Others have successfully used CIL with Mac OS X (on both PowerPC and
-x86), Solaris, and *BSD. If you make any changes to the build
-system in order to run CIL on your platform, please send us a patch.<BR>
-<BR>
- <HR>
-<A HREF="cil001.html"><IMG SRC ="previous_motif.gif" ALT="Previous"></A>
-<A HREF="ciltoc.html"><IMG SRC ="contents_motif.gif" ALT="Up"></A>
-<A HREF="cil003.html"><IMG SRC ="next_motif.gif" ALT="Next"></A>
-</BODY>
-</HTML>
diff --git a/cil/doc/cil003.html b/cil/doc/cil003.html
deleted file mode 100644
index 4b885f35a..000000000
--- a/cil/doc/cil003.html
+++ /dev/null
@@ -1,187 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
-            "http://www.w3.org/TR/REC-html40/loose.dtd">
-<HTML>
-<HEAD>
-
-
-
-<META http-equiv="Content-Type" content="text/html; charset=ANSI_X3.4-1968">
-<META name="GENERATOR" content="hevea 1.08">
-
-<base target="main">
-<script language="JavaScript">
-<!-- Begin
-function loadTop(url) {
-  parent.location.href= url;
-}
-// -->
-</script>
-<LINK rel="stylesheet" type="text/css" href="cil.css">
-<TITLE>
-Distribution Contents
-</TITLE>
-</HEAD>
-<BODY >
-<A HREF="cil002.html"><IMG SRC ="previous_motif.gif" ALT="Previous"></A>
-<A HREF="ciltoc.html"><IMG SRC ="contents_motif.gif" ALT="Up"></A>
-<A HREF="cil004.html"><IMG SRC ="next_motif.gif" ALT="Next"></A>
-<HR>
-
-<H2 CLASS="section"><A NAME="htoc3">3</A>&nbsp;&nbsp;Distribution Contents</H2>
-The file <A HREF="distrib/cil-1.3.5.tar.gz"><TT>distrib/cil-1.3.5.tar.gz</TT></A> 
-contains the complete source CIL distribution, 
-consisting of the following files:<BR>
-<TABLE CELLSPACING=2 CELLPADDING=0>
-<TR><TD ALIGN=left NOWRAP>Filename</TD>
-<TD ALIGN=left NOWRAP>Description</TD>
-</TR>
-<TR><TD ALIGN=left NOWRAP><TT>Makefile.in</TT></TD>
-<TD ALIGN=left NOWRAP><TT>configure</TT> source for the 
- Makefile that builds CIL</TD>
-</TR>
-<TR><TD ALIGN=left NOWRAP><TT>configure</TT></TD>
-<TD ALIGN=left NOWRAP>The configure script</TD>
-</TR>
-<TR><TD ALIGN=left NOWRAP><TT>configure.in</TT></TD>
-<TD ALIGN=left NOWRAP>The <TT>autoconf</TT> source for <TT>configure</TT></TD>
-</TR>
-<TR><TD ALIGN=left NOWRAP><TT>config.guess</TT>, <TT>config.sub</TT>, <TT>install-sh</TT></TD>
-<TD ALIGN=left NOWRAP>stuff required by
- <TT>configure</TT></TD>
-</TR>
-<TR><TD ALIGN=left NOWRAP>&nbsp;</TD>
-</TR>
-<TR><TD ALIGN=left NOWRAP><TT>doc/</TT></TD>
-<TD ALIGN=left NOWRAP>HTML documentation of the CIL API</TD>
-</TR>
-<TR><TD ALIGN=left NOWRAP><TT>obj/</TT></TD>
-<TD ALIGN=left NOWRAP>Directory that will contain the compiled
- CIL modules and executables</TD>
-</TR>
-<TR><TD ALIGN=left NOWRAP><TT>bin/cilly.in</TT></TD>
-<TD ALIGN=left NOWRAP>The <TT>configure</TT> source for a Perl script 
- that can be invoked with the 
- same arguments as either <TT>gcc</TT> or
- Microsoft Visual C and will convert the
- program to CIL, perform some simple
- transformations, emit it and compile it as
- usual.</TD>
-</TR>
-<TR><TD ALIGN=left NOWRAP><TT>lib/CompilerStub.pm</TT></TD>
-<TD ALIGN=left NOWRAP>A Perl class that can be used to write code
- that impersonates a compiler. <TT>cilly</TT>
- uses it.</TD>
-</TR>
-<TR><TD ALIGN=left NOWRAP><TT>lib/Merger.pm</TT></TD>
-<TD ALIGN=left NOWRAP>A subclass of <TT>CompilerStub.pm</TT> that can
- be used to merge source files into a single
- source file.<TT>cilly</TT>
- uses it.</TD>
-</TR>
-<TR><TD ALIGN=left NOWRAP><TT>bin/patcher.in</TT></TD>
-<TD ALIGN=left NOWRAP>A Perl script that applies specified patches
- to standard include files.</TD>
-</TR>
-<TR><TD ALIGN=left NOWRAP>&nbsp;</TD>
-</TR>
-<TR><TD ALIGN=left NOWRAP><TT>src/check.ml,mli</TT></TD>
-<TD ALIGN=left NOWRAP>Checks the well-formedness of a CIL file</TD>
-</TR>
-<TR><TD ALIGN=left NOWRAP><TT>src/cil.ml,mli</TT></TD>
-<TD ALIGN=left NOWRAP>Definition of CIL abstract syntax and
- utilities for manipulating it</TD>
-</TR>
-<TR><TD ALIGN=left NOWRAP><TT>src/clist.ml,mli</TT></TD>
-<TD ALIGN=left NOWRAP>Utilities for efficiently managing lists
- that need to be concatenated often</TD>
-</TR>
-<TR><TD ALIGN=left NOWRAP><TT>src/errormsg.ml,mli</TT></TD>
-<TD ALIGN=left NOWRAP>Utilities for error reporting</TD>
-</TR>
-<TR><TD ALIGN=left NOWRAP><TT>src/ext/heapify.ml</TT></TD>
-<TD ALIGN=left NOWRAP>A CIL transformation that moves array local
- variables from the stack to the heap</TD>
-</TR>
-<TR><TD ALIGN=left NOWRAP><TT>src/ext/logcalls.ml,mli</TT></TD>
-<TD ALIGN=left NOWRAP>A CIL transformation that logs every
- function call</TD>
-</TR>
-<TR><TD ALIGN=left NOWRAP><TT>src/ext/sfi.ml</TT></TD>
-<TD ALIGN=left NOWRAP>A CIL transformation that can log every
- memory read and write</TD>
-</TR>
-<TR><TD ALIGN=left NOWRAP><TT>src/frontc/clexer.mll</TT></TD>
-<TD ALIGN=left NOWRAP>The lexer</TD>
-</TR>
-<TR><TD ALIGN=left NOWRAP><TT>src/frontc/cparser.mly</TT></TD>
-<TD ALIGN=left NOWRAP>The parser</TD>
-</TR>
-<TR><TD ALIGN=left NOWRAP><TT>src/frontc/cabs.ml</TT></TD>
-<TD ALIGN=left NOWRAP>The abstract syntax</TD>
-</TR>
-<TR><TD ALIGN=left NOWRAP><TT>src/frontc/cprint.ml</TT></TD>
-<TD ALIGN=left NOWRAP>The pretty printer for CABS</TD>
-</TR>
-<TR><TD ALIGN=left NOWRAP><TT>src/frontc/cabs2cil.ml</TT></TD>
-<TD ALIGN=left NOWRAP>The elaborator to CIL</TD>
-</TR>
-<TR><TD ALIGN=left NOWRAP><TT>src/main.ml</TT></TD>
-<TD ALIGN=left NOWRAP>The <TT>cilly</TT> application</TD>
-</TR>
-<TR><TD ALIGN=left NOWRAP><TT>src/pretty.ml,mli</TT></TD>
-<TD ALIGN=left NOWRAP>Utilities for pretty printing</TD>
-</TR>
-<TR><TD ALIGN=left NOWRAP><TT>src/rmtmps.ml,mli</TT></TD>
-<TD ALIGN=left NOWRAP>A CIL tranformation that removes unused
- types, variables and inlined functions</TD>
-</TR>
-<TR><TD ALIGN=left NOWRAP><TT>src/stats.ml,mli</TT></TD>
-<TD ALIGN=left NOWRAP>Utilities for maintaining timing statistics</TD>
-</TR>
-<TR><TD ALIGN=left NOWRAP><TT>src/testcil.ml</TT></TD>
-<TD ALIGN=left NOWRAP>A random test of CIL (against the resident 
- C compiler)</TD>
-</TR>
-<TR><TD ALIGN=left NOWRAP><TT>src/trace.ml,mli</TT></TD>
-<TD ALIGN=left NOWRAP>Utilities useful for printing debugging
- information</TD>
-</TR>
-<TR><TD ALIGN=left NOWRAP>&nbsp;</TD>
-</TR>
-<TR><TD ALIGN=left NOWRAP><TT>ocamlutil/</TT></TD>
-<TD ALIGN=left NOWRAP>Miscellaneous libraries that are not
- specific to CIL.</TD>
-</TR>
-<TR><TD ALIGN=left NOWRAP><TT>ocamlutil/Makefile.ocaml</TT></TD>
-<TD ALIGN=left NOWRAP>A file that is included by <TT>Makefile</TT></TD>
-</TR>
-<TR><TD ALIGN=left NOWRAP><TT>ocamlutil/Makefile.ocaml.build</TT></TD>
-<TD ALIGN=left NOWRAP>A file that is included by <TT>Makefile</TT></TD>
-</TR>
-<TR><TD ALIGN=left NOWRAP><TT>ocamlutil/perfcount.c</TT></TD>
-<TD ALIGN=left NOWRAP>C code that links with src/stats.ml
- and reads Intel performance
- counters.</TD>
-</TR>
-<TR><TD ALIGN=left NOWRAP>&nbsp;</TD>
-</TR>
-<TR><TD ALIGN=left NOWRAP><TT>obj/@ARCHOS@/feature_config.ml</TT></TD>
-<TD ALIGN=left NOWRAP>File generated by the Makefile
- describing which extra &#8220;features&#8221;
- to compile. See Section&nbsp;<A HREF="cilly.html#sec-cil">5</A></TD>
-</TR>
-<TR><TD ALIGN=left NOWRAP><TT>obj/@ARCHOS@/machdep.ml</TT></TD>
-<TD ALIGN=left NOWRAP>File generated by the Makefile containing
- information about your architecture,
- such as the size of a pointer</TD>
-</TR>
-<TR><TD ALIGN=left NOWRAP><TT>src/machdep.c</TT></TD>
-<TD ALIGN=left NOWRAP>C program that generates
- <TT>machdep.ml</TT> files</TD>
-</TR></TABLE><BR>
-<HR>
-<A HREF="cil002.html"><IMG SRC ="previous_motif.gif" ALT="Previous"></A>
-<A HREF="ciltoc.html"><IMG SRC ="contents_motif.gif" ALT="Up"></A>
-<A HREF="cil004.html"><IMG SRC ="next_motif.gif" ALT="Next"></A>
-</BODY>
-</HTML>
diff --git a/cil/doc/cil004.html b/cil/doc/cil004.html
deleted file mode 100644
index 16fde3929..000000000
--- a/cil/doc/cil004.html
+++ /dev/null
@@ -1,350 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
-            "http://www.w3.org/TR/REC-html40/loose.dtd">
-<HTML>
-<HEAD>
-
-
-
-<META http-equiv="Content-Type" content="text/html; charset=ANSI_X3.4-1968">
-<META name="GENERATOR" content="hevea 1.08">
-
-<base target="main">
-<script language="JavaScript">
-<!-- Begin
-function loadTop(url) {
-  parent.location.href= url;
-}
-// -->
-</script>
-<LINK rel="stylesheet" type="text/css" href="cil.css">
-<TITLE>
-Compiling C to CIL
-</TITLE>
-</HEAD>
-<BODY >
-<A HREF="cil003.html"><IMG SRC ="previous_motif.gif" ALT="Previous"></A>
-<A HREF="ciltoc.html"><IMG SRC ="contents_motif.gif" ALT="Up"></A>
-<A HREF="cilly.html"><IMG SRC ="next_motif.gif" ALT="Next"></A>
-<HR>
-
-<H2 CLASS="section"><A NAME="htoc4">4</A>&nbsp;&nbsp;Compiling C to CIL</H2><A NAME="sec-cabs2cil"></A>
-In this section we try to describe a few of the many transformations that are
-applied to a C program to convert it to CIL. The module that implements this
-conversion is about 5000 lines of OCaml code. In contrast a simple program
-transformation that instruments all functions to keep a shadow stack of the
-true return address (thus preventing stack smashing) is only 70 lines of code.
-This example shows that the analysis is so much simpler because it has to
-handle only a few simple C constructs and also because it can leverage on CIL
-infrastructure such as visitors and pretty-printers.<BR>
-<BR>
-In no particular order these are a few of the most significant ways in which
-C programs are compiled into CIL:
-<OL CLASS="enumerate" type=1><LI CLASS="li-enumerate">
-CIL will eliminate all declarations for unused entities. This means that
-just because your hello world program includes <TT>stdio.h</TT> it does not mean
-that your analysis has to handle all the ugly stuff from <TT>stdio.h</TT>.<BR>
-<BR>
-<LI CLASS="li-enumerate">Type specifiers are interpreted and normalized:
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-int long signed x;
-signed long extern x;
-long static int long y;
-
-// Some code that uses these declaration, so that CIL does not remove them
-int main() { return x + y; }
-</FONT></PRE>
-See the <A HREF="examples/ex1.txt">CIL output</A> for this
-code fragment<BR>
-<BR>
-<LI CLASS="li-enumerate">Anonymous structure and union declarations are given a name. 
-<PRE CLASS="verbatim"><FONT COLOR=blue>
- struct { int x; } s;
-</FONT></PRE>
-See the <A HREF="examples/ex2.txt">CIL output</A> for this
-code fragment<BR>
-<BR>
-<LI CLASS="li-enumerate">Nested structure tag definitions are pulled apart. This means that all
-structure tag definitions can be found by a simple scan of the globals.
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-struct foo {
-   struct bar {
-      union baz { 
-          int x1; 
-          double x2;
-      } u1;
-      int y;
-   } s1;
-   int z;
-} f;
-</FONT></PRE>
-See the <A HREF="examples/ex3.txt">CIL output</A> for this
-code fragment<BR>
-<BR>
-<LI CLASS="li-enumerate">All structure, union, enumeration definitions and the type definitions
-from inners scopes are moved to global scope (with appropriate renaming). This
-facilitates moving around of the references to these entities.
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-int main() {
-  struct foo { 
-        int x; } foo; 
-  {
-     struct foo { 
-        double d;
-     };
-     return foo.x;
-  }      
-}
-</FONT></PRE>
-See the <A HREF="examples/ex4.txt">CIL output</A> for this
-code fragment<BR>
-<BR>
-<LI CLASS="li-enumerate">Prototypes are added for those functions that are called before being
-defined. Furthermore, if a prototype exists but does not specify the type of
-parameters that is fixed. But CIL will not be able to add prototypes for those
-functions that are neither declared nor defined (but are used!).
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-  int f();  // Prototype without arguments
-  int f(double x) {
-      return g(x);
-  }
-  int g(double x) {
-     return x;
-  } 
-</FONT></PRE>
-See the <A HREF="examples/ex5.txt">CIL output</A> for this
-code fragment<BR>
-<BR>
-<LI CLASS="li-enumerate">Array lengths are computed based on the initializers or by constant
-folding.
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-  int a1[] = {1,2,3};
-  int a2[sizeof(int) &gt;= 4 ? 8 : 16];
-</FONT></PRE>
-See the <A HREF="examples/ex6.txt">CIL output</A> for this
-code fragment<BR>
-<BR>
-<LI CLASS="li-enumerate">Enumeration tags are computed using constant folding:
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-int main() {
-  enum { 
-     FIVE = 5, 
-     SIX, SEVEN, 
-     FOUR = FIVE - 1, 
-     EIGHT = sizeof(double)
-  } x = FIVE;
- return x;
-}
-
-</FONT></PRE>
-See the <A HREF="examples/ex7.txt">CIL output</A> for this
-code fragment<BR>
-<BR>
-<LI CLASS="li-enumerate">Initializers are normalized to include specific initialization for the
-missing elements:
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-  int a1[5] = {1,2,3};
-  struct foo { int x, y; } s1 = { 4 };
-</FONT></PRE>
-See the <A HREF="examples/ex8.txt">CIL output</A> for this
-code fragment<BR>
-<BR>
-<LI CLASS="li-enumerate">Initializer designators are interpreted and eliminated. Subobjects are
-properly marked with braces. CIL implements
-the whole ISO C99 specification for initializer (neither GCC nor MSVC do) and
-a few GCC extensions. 
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-  struct foo { 
-     int x, y; 
-     int a[5];
-     struct inner {
-        int z;
-     } inner;
-  } s = { 0, .inner.z = 3, .a[1 ... 2] = 5, 4, y : 8 };
-</FONT></PRE>
-See the <A HREF="examples/ex9.txt">CIL output</A> for this
-code fragment<BR>
-<BR>
-<LI CLASS="li-enumerate">String initializers for arrays of characters are processed
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-char foo[] = "foo plus bar";
-</FONT></PRE>
-See the <A HREF="examples/ex10.txt">CIL output</A> for this
-code fragment<BR>
-<BR>
-<LI CLASS="li-enumerate">String constants are concatenated
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-char *foo = "foo " " plus " " bar ";
-</FONT></PRE>
-See the <A HREF="examples/ex11.txt">CIL output</A> for this
-code fragment<BR>
-<BR>
-<LI CLASS="li-enumerate">Initializers for local variables are turned into assignments. This is in
-order to separate completely the declarative part of a function body from the
-statements. This has the unfortunate effect that we have to drop the <TT>const</TT>
-qualifier from local variables !
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-  int x = 5; 
-  struct foo { int f1, f2; } a [] = {1, 2, 3, 4, 5 };
-</FONT></PRE>
-See the <A HREF="examples/ex12.txt">CIL output</A> for this
-code fragment<BR>
-<BR>
-<LI CLASS="li-enumerate">Local variables in inner scopes are pulled to function scope (with
-appropriate renaming). Local scopes thus disappear. This makes it easy to find
-and operate on all local variables in a function.
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-  int x = 5; 
-  int main() {
-    int x = 6;
-    { 
-      int x = 7;
-      return x;
-    }
-    return x;
-  } 
-</FONT></PRE>
-See the <A HREF="examples/ex13.txt">CIL output</A> for this
-code fragment<BR>
-<BR>
-<LI CLASS="li-enumerate">Global declarations in local scopes are moved to global scope:
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-  int x = 5; 
-  int main() {
-    int x = 6;
-    { 
-      static int x = 7;
-      return x;
-    }
-    return x;
-  } 
-</FONT></PRE>
-See the <A HREF="examples/ex14.txt">CIL output</A> for this
-code fragment<BR>
-<BR>
-<LI CLASS="li-enumerate">Return statements are added for functions that are missing them. If the
-return type is not a base type then a <TT>return</TT> without a value is added.
-The guaranteed presence of return statements makes it easy to implement a
-transformation that inserts some code to be executed immediately before
-returning from a function.
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-  int foo() {
-    int x = 5;
-  } 
-</FONT></PRE>
-See the <A HREF="examples/ex15.txt">CIL output</A> for this
-code fragment<BR>
-<BR>
-<LI CLASS="li-enumerate">One of the most significant transformations is that expressions that
-contain side-effects are separated into statements. 
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-   int x, f(int);
-   return (x ++ + f(x));
-</FONT></PRE>
-See the <A HREF="examples/ex16.txt">CIL output</A> for this
-code fragment<BR>
-<BR>
-Internally, the <TT>x ++</TT> statement is turned into an assignment which the
-pretty-printer prints like the original. CIL has only three forms of basic
-statements: assignments, function calls and inline assembly.<BR>
-<BR>
-<LI CLASS="li-enumerate">Shortcut evaluation of boolean expressions and the <TT>?:</TT> operator are
-compiled into explicit conditionals:
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-  int x;
-  int y = x ? 2 : 4;
-  int z = x || y;
-  // Here we duplicate the return statement
-  if(x &amp;&amp; y) { return 0; } else { return 1; }
-  // To avoid excessive duplication, CIL uses goto's for 
-  // statement that have more than 5 instructions
-  if(x &amp;&amp; y || z) { x ++; y ++; z ++; x ++; y ++; return z; }
-</FONT></PRE>
-See the <A HREF="examples/ex17.txt">CIL output</A> for this
-code fragment<BR>
-<BR>
-<LI CLASS="li-enumerate">GCC's conditional expression with missing operands are also compiled
-into conditionals:
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-  int f();;
-  return f() ? : 4;
-</FONT></PRE>
-See the <A HREF="examples/ex18.txt">CIL output</A> for this
-code fragment<BR>
-<BR>
-<LI CLASS="li-enumerate">All forms of loops (<TT>while</TT>, <TT>for</TT> and <TT>do</TT>) are compiled
-internally as a single <TT>while(1)</TT> looping construct with explicit <TT>break</TT>
-statement for termination. For simple <TT>while</TT> loops the pretty printer is
-able to print back the original:
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-   int x, y;
-   for(int i = 0; i&lt;5; i++) {
-      if(i == 5) continue;
-      if(i == 4) break;
-      i += 2;
-   } 
-   while(x &lt; 5) {
-     if(x == 3) continue;
-     x ++;
-   }
-</FONT></PRE>
-See the <A HREF="examples/ex19.txt">CIL output</A> for this
-code fragment<BR>
-<BR>
-<LI CLASS="li-enumerate">GCC's block expressions are compiled away. (That's right there is an
-infinite loop in this code.)
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-   int x = 5, y = x;
-   int z = ({ x++; L: y -= x; y;});
-   return ({ goto L; 0; });
-</FONT></PRE>
-See the <A HREF="examples/ex20.txt">CIL output</A> for this
-code fragment<BR>
-<BR>
-<LI CLASS="li-enumerate">CIL contains support for both MSVC and GCC inline assembly (both in one
-internal construct)<BR>
-<BR>
-<LI CLASS="li-enumerate">CIL compiles away the GCC extension that allows many kinds of constructs
-to be used as lvalues:
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-   int x, y, z;
-   return &amp;(x ? y : z) - &amp; (x ++, x);
-</FONT></PRE>
-See the <A HREF="examples/ex21.txt">CIL output</A> for this
-code fragment<BR>
-<BR>
-<LI CLASS="li-enumerate">All types are computed and explicit casts are inserted for all
-promotions and conversions that a compiler must insert:<BR>
-<BR>
-<LI CLASS="li-enumerate">CIL will turn old-style function definition (without prototype) into
-new-style definitions. This will make the compiler less forgiving when
-checking function calls, and will catch for example cases when a function is
-called with too few arguments. This happens in old-style code for the purpose
-of implementing variable argument functions.<BR>
-<BR>
-<LI CLASS="li-enumerate">Since CIL sees the source after preprocessing the code after CIL does
-not contain the comments and the preprocessing directives.<BR>
-<BR>
-<LI CLASS="li-enumerate">CIL will remove from the source file those type declarations, local
-variables and inline functions that are not used in the file. This means that
-your analysis does not have to see all the ugly stuff that comes from the
-header files: 
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-#include &lt;stdio.h&gt;
-
-typedef int unused_type;
-
-static char unused_static (void) { return 0; }
-
-int main() {
-  int unused_local;
-  printf("Hello world\n"); // Only printf will be kept from stdio.h     
-}
-</FONT></PRE>
-See the <A HREF="examples/ex22.txt">CIL output</A> for this
-code fragment</OL>
-<HR>
-<A HREF="cil003.html"><IMG SRC ="previous_motif.gif" ALT="Previous"></A>
-<A HREF="ciltoc.html"><IMG SRC ="contents_motif.gif" ALT="Up"></A>
-<A HREF="cilly.html"><IMG SRC ="next_motif.gif" ALT="Next"></A>
-</BODY>
-</HTML>
diff --git a/cil/doc/cil006.html b/cil/doc/cil006.html
deleted file mode 100644
index 8fc319490..000000000
--- a/cil/doc/cil006.html
+++ /dev/null
@@ -1,627 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
-            "http://www.w3.org/TR/REC-html40/loose.dtd">
-<HTML>
-<HEAD>
-
-
-
-<META http-equiv="Content-Type" content="text/html; charset=ANSI_X3.4-1968">
-<META name="GENERATOR" content="hevea 1.08">
-
-<base target="main">
-<script language="JavaScript">
-<!-- Begin
-function loadTop(url) {
-  parent.location.href= url;
-}
-// -->
-</script>
-<LINK rel="stylesheet" type="text/css" href="cil.css">
-<TITLE>
-CIL API Documentation
-</TITLE>
-</HEAD>
-<BODY >
-<A HREF="cilly.html"><IMG SRC ="previous_motif.gif" ALT="Previous"></A>
-<A HREF="ciltoc.html"><IMG SRC ="contents_motif.gif" ALT="Up"></A>
-<A HREF="cil007.html"><IMG SRC ="next_motif.gif" ALT="Next"></A>
-<HR>
-
-<H2 CLASS="section"><A NAME="htoc8">6</A>&nbsp;&nbsp;CIL API Documentation</H2><A NAME="sec-api"></A> 
-The CIL API is documented in the file <TT>src/cil.mli</TT>. We also have an
-<A HREF="api/index.html">online documentation</A> extracted from <TT>cil.mli</TT>. We
-index below the main types that are used to represent C programs in CIL: 
-<UL CLASS="itemize"><LI CLASS="li-itemize">
-<A HREF="api/index_types.html">An index of all types</A>
-<LI CLASS="li-itemize"><A HREF="api/index_values.html">An index of all values</A>
-<LI CLASS="li-itemize"><A HREF="api/Cil.html#TYPEfile">Cil.file</A> is the representation of a file.
-<LI CLASS="li-itemize"><A HREF="api/Cil.html#TYPEglobal">Cil.global</A> is the representation of a global declaration or
-definitions. Values for <A HREF="api/Cil.html#VALemptyFunction">operating on globals</A>.
-<LI CLASS="li-itemize"><A HREF="api/Cil.html#TYPEtyp">Cil.typ</A> is the representation of a type. 
-Values for <A HREF="api/Cil.html#VALvoidType">operating on types</A>.
-<LI CLASS="li-itemize"><A HREF="api/Cil.html#TYPEcompinfo">Cil.compinfo</A> is the representation of a structure or a union
-type
-<LI CLASS="li-itemize"><A HREF="api/Cil.html#TYPEfieldinfo">Cil.fieldinfo</A> is the representation of a field in a structure
-or a union
-<LI CLASS="li-itemize"><A HREF="api/Cil.html#TYPEenuminfo">Cil.enuminfo</A> is the representation of an enumeration type. 
-<LI CLASS="li-itemize"><A HREF="api/Cil.html#TYPEvarinfo">Cil.varinfo</A> is the representation of a variable 
-<LI CLASS="li-itemize"><A HREF="api/Cil.html#TYPEfundec">Cil.fundec</A> is the representation of a function
-<LI CLASS="li-itemize"><A HREF="api/Cil.html#TYPElval">Cil.lval</A> is the representation of an lvalue.
-Values for <A HREF="api/Cil.html#VALmakeVarInfo">operating on lvalues</A>.
-<LI CLASS="li-itemize"><A HREF="api/Cil.html#TYPEexp">Cil.exp</A> is the representation of an expression without
-side-effects. 
-Values for <A HREF="api/Cil.html#VALzero">operating on expressions</A>.
-<LI CLASS="li-itemize"><A HREF="api/Cil.html#TYPEinstr">Cil.instr</A> is the representation of an instruction (with
-side-effects but without control-flow)
-<LI CLASS="li-itemize"><A HREF="api/Cil.html#TYPEstmt">Cil.stmt</A> is the representation of a control-flow statements. 
-Values for <A HREF="api/Cil.html#VALmkStmt">operating on statements</A>.
-<LI CLASS="li-itemize"><A HREF="api/Cil.html#TYPEattribute">Cil.attribute</A> is the representation of attributes. 
-Values for <A HREF="api/Cil.html#TYPEattributeClass">operating on attributes</A>.
-</UL>
-<A NAME="toc3"></A>
-<H3 CLASS="subsection"><A NAME="htoc9">6.1</A>&nbsp;&nbsp;Using the visitor</H3><A NAME="sec-visitor"></A>
-One of the most useful tools exported by the CIL API is an implementation of
-the visitor pattern for CIL programs. The visiting engine scans depth-first
-the structure of a CIL program and at each node is queries a user-provided
-visitor structure whether it should do one of the following operations: 
-<UL CLASS="itemize"><LI CLASS="li-itemize">
-Ignore this node and all its descendants
-<LI CLASS="li-itemize">Descend into all of the children and when done rebuild the node if any
-of the children have changed. 
-<LI CLASS="li-itemize">Replace the subtree rooted at the node with another tree.
-<LI CLASS="li-itemize">Replace the subtree with another tree, then descend into the children
-and rebuild the node if necessary and then invoke a user-specified function. 
-<LI CLASS="li-itemize">In addition to all of the above actions then visitor can specify that
-some instructions should be queued to be inserted before the current
-instruction or statement being visited. 
-</UL>
-By writing visitors you can customize the program traversal and
-transformation. One major limitation of the visiting engine is that it does
-not propagate information from one node to another. Each visitor must use its
-own private data to achieve this effect if necessary. <BR>
-<BR>
-Each visitor is an object that is an instance of a class of type <A HREF="api/Cil.cilVisitor.html#.">Cil.cilVisitor..</A>
-The most convenient way to obtain such classes is to specialize the
-<A HREF="api/Cil.nopCilVisitor.html#c">Cil.nopCilVisitor.c</A>lass (which just traverses the tree doing
-nothing). Any given specialization typically overrides only a few of the
-methods. Take a look for example at the visitor defined in the module
-<TT>logwrites.ml</TT>. Another, more elaborate example of a visitor is the
-[copyFunctionVisitor] defined in <TT>cil.ml</TT>.<BR>
-<BR>
-Once you have defined a visitor you can invoke it with one of the functions:
-<UL CLASS="itemize"><LI CLASS="li-itemize">
-<A HREF="api/Cil.html#VALvisitCilFile">Cil.visitCilFile</A> or <A HREF="api/Cil.html#VALvisitCilFileSameGlobals">Cil.visitCilFileSameGlobals</A> - visit a file
-<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALvisitCilGlobal">Cil.visitCilGlobal</A> - visit a global
-<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALvisitCilFunction">Cil.visitCilFunction</A> - visit a function definition
-<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALvisitCilExp">Cil.visitCilExp</A> - visit an expression
-<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALvisitCilLval">Cil.visitCilLval</A> - visit an lvalue
-<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALvisitCilInstr">Cil.visitCilInstr</A> - visit an instruction
-<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALvisitCilStmt">Cil.visitCilStmt</A> - visit a statement
-<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALvisitCilType">Cil.visitCilType</A> - visit a type. Note that this does not visit
-the files of a composite type. use visitGlobal to visit the [GCompTag] that
-defines the fields.
-</UL>
-Some transformations may want to use visitors to insert additional
-instructions before statements and instructions. To do so, pass a list of
-instructions to the <A HREF="api/Cil.html#VALqueueInstr">Cil.queueInstr</A> method of the specialized
-object. The instructions will automatically be inserted before that
-instruction in the transformed code. The <A HREF="api/Cil.html#VALunqueueInstr">Cil.unqueueInstr</A> method
-should not normally be called by the user. <BR>
-<BR>
-<A NAME="toc4"></A>
-<H3 CLASS="subsection"><A NAME="htoc10">6.2</A>&nbsp;&nbsp;Interpreted Constructors and Deconstructors</H3>
-Interpreted constructors and deconstructors are a facility for constructing
-and deconstructing CIL constructs using a pattern with holes that can be
-filled with a variety of kinds of elements. The pattern is a string that uses
-the C syntax to represent C language elements. For example, the following
-code:
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-Formatcil.cType "void * const (*)(int x)"
-</FONT></PRE>
-is an alternative way to construct the internal representation of the type of pointer to function
-with an integer argument and a void * const as result: 
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-TPtr(TFun(TVoid [Attr("const", [])],
-          [ ("x", TInt(IInt, []), []) ], false, []), [])
-</FONT></PRE>
-The advantage of the interpreted constructors is that you can use familiar C
-syntax to construct CIL abstract-syntax trees. <BR>
-<BR>
-You can construct this way types, lvalues, expressions, instructions and
-statements. The pattern string can also contain a number of placeholders that
-are replaced during construction with CIL items passed as additional argument
-to the construction function. For example, the <TT>%e:id</TT> placeholder means
-that the argument labeled &#8220;id&#8221; (expected to be of form <TT>Fe exp</TT>) will
-supply the expression to replace the placeholder. For example, the following
-code constructs an increment instruction at location <TT>loc</TT>:
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-Formatcil.cInstr "%v:x = %v:x + %e:something"
-        loc
-        [ ("something", Fe some_exp);
-          ("x", Fv some_varinfo) ]
-</FONT></PRE>
-An alternative way to construct the same CIL instruction is:
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-Set((Var some_varinfo, NoOffset),
-    BinOp(PlusA, Lval (Var some_varinfo, NoOffset),
-          some_exp, intType), 
-    loc)
-</FONT></PRE>
-See <A HREF="api/Cil.html#TYPEformatArg">Cil.formatArg</A> for a definition of the placeholders that are
-understood.<BR>
-<BR>
-A dual feature is the interpreted deconstructors. This can be used to test
-whether a CIL construct has a certain form:
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-Formatcil.dType "void * const (*)(int x)" t
-</FONT></PRE>
-will test whether the actual argument <TT>t</TT> is indeed a function pointer of
-the required type. If it is then the result is <TT>Some []</TT> otherwise it is
-<TT>None</TT>. Furthermore, for the purpose of the interpreted deconstructors
-placeholders in patterns match anything of the right type. For example, 
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-Formatcil.dType "void * (*)(%F:t)" t
-</FONT></PRE>
-will match any function pointer type, independent of the type and number of
-the formals. If the match succeeds the result is <TT>Some [ FF forms ]</TT> where
-<TT>forms</TT> is a list of names and types of the formals. Note that each member
-in the resulting list corresponds positionally to a placeholder in the
-pattern.<BR>
-<BR>
-The interpreted constructors and deconstructors do not support the complete C
-syntax, but only a substantial fragment chosen to simplify the parsing. The
-following is the syntax that is supported:
-<PRE CLASS="verbatim">
-Expressions:
-  E ::= %e:ID | %d:ID | %g:ID | n | L | ( E ) | Unop E | E Binop E 
-        | sizeof E | sizeof ( T ) | alignof E  | alignof ( T ) 
-        | &amp; L | ( T ) E 
-
-Unary operators:
-  Unop ::= + | - | ~ | %u:ID
-
-Binary operators:
-  Binop ::= + | - | * | / | &lt;&lt; | &gt;&gt; | &amp; | ``|'' | ^ 
-          | == | != | &lt; | &gt; | &lt;= | &gt;= | %b:ID
-
-Lvalues:
-  L ::= %l:ID | %v:ID Offset | * E | (* E) Offset | E -&gt; ident Offset 
-
-Offsets:
-  Offset ::= empty | %o:ID | . ident Offset | [ E ] Offset
-
-Types:
-  T ::= Type_spec Attrs Decl
-
-Type specifiers:
-  Type_spec ::= void | char | unsigned char | short | unsigned short
-            | int | unsigned int | long | unsigned long | %k:ID | float 
-            | double | struct %c:ID | union %c:ID 
-
-
-Declarators:
-  Decl ::= * Attrs Decl | Direct_decl
-
-
-Direct declarators:
-  Direct_decl ::= empty | ident | ( Attrs Decl ) 
-                 | Direct_decl [ Exp_opt ]
-                 | ( Attrs Decl )( Parameters )
-
-Optional expressions
-  Exp_opt ::= empty | E | %eo:ID
-
-Formal parameters
-  Parameters ::= empty | ... | %va:ID | %f:ID | T | T , Parameters
-
-List of attributes
-  Attrs ::= empty | %A:ID | Attrib Attrs
-
-Attributes
-  Attrib ::= const | restrict | volatile | __attribute__ ( ( GAttr ) )
-
-GCC Attributes
-  GAttr ::= ident | ident ( AttrArg_List )
-
-Lists of GCC Attribute arguments:
-  AttrArg_List ::= AttrArg | %P:ID | AttrArg , AttrArg_List
-
-GCC Attribute arguments  
-  AttrArg ::= %p:ID | ident | ident ( AttrArg_List )
-
-Instructions
-  Instr ::= %i:ID ; | L = E ; | L Binop= E | Callres L ( Args )
-
-Actual arguments
-   Args ::= empty | %E:ID | E | E , Args
-
-Call destination
-   Callres ::= empty | L = | %lo:ID
-
-Statements
-  Stmt ::= %s:ID | if ( E ) then Stmt ; | if ( E ) then Stmt else Stmt ;
-       | return Exp_opt | break ; | continue ; | { Stmt_list } 
-       | while (E ) Stmt | Instr_list 
-
-Lists of statements
-   Stmt_list ::= empty | %S:ID | Stmt Stmt_list  
-                | Type_spec Attrs Decl ; Stmt_list
-                | Type_spec Attrs Decl = E ; Stmt_list
-                | Type_spec Attrs Decl = L (Args) ; Stmt_list
-
-List of instructions
-   Instr_list ::= Instr | %I:ID | Instr Instr_list
-</PRE>
-Notes regarding the syntax:
-<UL CLASS="itemize"><LI CLASS="li-itemize">
-In the grammar description above non-terminals are written with
-uppercase initial<BR>
-<BR>
-<LI CLASS="li-itemize">All of the patterns consist of the <TT>%</TT> character followed by one or
-two letters, followed by &#8220;:&#8221; and an indentifier. For each such
-pattern there is a corresponding constructor of the <A HREF="api/Cil.html#TYPEformatArg">Cil.formatArg</A>
-type, whose name is the letter 'F' followed by the same one or two letters as
-in the pattern. That constructor is used by the user code to pass a
-<A HREF="api/Cil.html#TYPEformatArg">Cil.formatArg</A> actual argument to the interpreted constructor and by
-the interpreted deconstructor to return what was matched for a pattern.<BR>
-<BR>
-<LI CLASS="li-itemize">If the pattern name is uppercase, it designates a list of the elements
-designated by the corresponding lowercase pattern. E.g. %E designated lists
-of expressions (as in the actual arguments of a call).<BR>
-<BR>
-<LI CLASS="li-itemize">The two-letter patterns whose second letter is &#8220;o&#8221; designate an
-optional element. E.g. %eo designates an optional expression (as in the
-length of an array). <BR>
-<BR>
-<LI CLASS="li-itemize">Unlike in calls to <TT>printf</TT>, the pattern %g is used for strings. <BR>
-<BR>
-<LI CLASS="li-itemize">The usual precedence and associativity rules as in C apply <BR>
-<BR>
-<LI CLASS="li-itemize">The pattern string can contain newlines and comments, using both the
-<TT>/* ... */</TT> style as well as the <TT>//</TT> one. <BR>
-<BR>
-<LI CLASS="li-itemize">When matching a &#8220;cast&#8221; pattern of the form <TT>( T ) E</TT>, the
-deconstructor will match even expressions that do not have the actual cast but
-in that case the type is matched against the type of the expression. E.g. the
-patters <TT>"(int)%e"</TT> will match any expression of type <TT>int</TT> whether it
-has an explicit cast or not. <BR>
-<BR>
-<LI CLASS="li-itemize">The %k pattern is used to construct and deconstruct an integer type of
-any kind. <BR>
-<BR>
-<LI CLASS="li-itemize">Notice that the syntax of types and declaration are the same (in order
-to simplify the parser). This means that technically you can write a whole
-declaration instead of a type in the cast. In this case the name that you
-declare is ignored.<BR>
-<BR>
-<LI CLASS="li-itemize">In lists of formal parameters and lists of attributes, an empty list in
-the pattern matches any formal parameters or attributes. <BR>
-<BR>
-<LI CLASS="li-itemize">When matching types, uses of named types are unrolled to expose a real
-type before matching. <BR>
-<BR>
-<LI CLASS="li-itemize">The order of the attributes is ignored during matching. The the pattern
-for a list of attributes contains %A then the resulting <TT>formatArg</TT> will be
-bound to <B>all</B> attributes in the list. For example, the pattern <TT>"const
-%A"</TT> matches any list of attributes that contains <TT>const</TT> and binds the
-corresponding placeholder to the entire list of attributes, including
-<TT>const</TT>. <BR>
-<BR>
-<LI CLASS="li-itemize">All instruction-patterns must be terminated by semicolon<BR>
-<BR>
-<LI CLASS="li-itemize">The autoincrement and autodecrement instructions are not supported. Also
-not supported are complex expressions, the <TT>&amp;&amp;</TT> and <TT>||</TT> shortcut
-operators, and a number of other more complex instructions or statements. In
-general, the patterns support only constructs that can be represented directly
-in CIL.<BR>
-<BR>
-<LI CLASS="li-itemize">The pattern argument identifiers are not used during deconstruction.
-Instead, the result contains a sequence of values in the same order as the
-appearance of pattern arguments in the pattern.<BR>
-<BR>
-<LI CLASS="li-itemize">You can mix statements with declarations. For each declaration a new
- temporary will be constructed (using a function you provive). You can then
- refer to that temporary by name in the rest of the pattern.<BR>
-<BR>
-<LI CLASS="li-itemize">The <TT>%v:</TT> pattern specifier is optional.
-</UL>
-The following function are defined in the <TT>Formatcil</TT> module for
-constructing and deconstructing:
-<UL CLASS="itemize"><LI CLASS="li-itemize">
-<A HREF="api/Formatcil.html#VALcExp">Formatcil.cExp</A> constructs <A HREF="api/Cil.html#TYPEexp">Cil.exp</A>.
-<LI CLASS="li-itemize"><A HREF="api/Formatcil.html#VALcType">Formatcil.cType</A> constructs <A HREF="api/Cil.html#TYPEtyp">Cil.typ</A>.
-<LI CLASS="li-itemize"><A HREF="api/Formatcil.html#VALcLval">Formatcil.cLval</A> constructs <A HREF="api/Cil.html#TYPElval">Cil.lval</A>.
-<LI CLASS="li-itemize"><A HREF="api/Formatcil.html#VALcInstr">Formatcil.cInstr</A> constructs <A HREF="api/Cil.html#TYPEinstr">Cil.instr</A>.
-<LI CLASS="li-itemize"><A HREF="api/Formatcil.html#VALcStmt">Formatcil.cStmt</A> and <A HREF="api/Formatcil.html#VALcStmts">Formatcil.cStmts</A> construct <A HREF="api/Cil.html#TYPEstmt">Cil.stmt</A>.
-<LI CLASS="li-itemize"><A HREF="api/Formatcil.html#VALdExp">Formatcil.dExp</A> deconstructs <A HREF="api/Cil.html#TYPEexp">Cil.exp</A>.
-<LI CLASS="li-itemize"><A HREF="api/Formatcil.html#VALdType">Formatcil.dType</A> deconstructs <A HREF="api/Cil.html#TYPEtyp">Cil.typ</A>.
-<LI CLASS="li-itemize"><A HREF="api/Formatcil.html#VALdLval">Formatcil.dLval</A> deconstructs <A HREF="api/Cil.html#TYPElval">Cil.lval</A>.
-<LI CLASS="li-itemize"><A HREF="api/Formatcil.html#VALdInstr">Formatcil.dInstr</A> deconstructs <A HREF="api/Cil.html#TYPElval">Cil.lval</A>.
-</UL>
-Below is an example using interpreted constructors. This example generates
-the CIL representation of code that scans an array backwards and initializes
-every even-index element with an expression:
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-Formatcil.cStmts
-  loc
-  "int idx = sizeof(array) / sizeof(array[0]) - 1;
-   while(idx &gt;= 0) {
-     // Some statements to be run for all the elements of the array
-     %S:init
-     if(! (idx &amp; 1)) 
-       array[idx] = %e:init_even;
-     /* Do not forget to decrement the index variable */
-     idx = idx - 1;
-   }"
-  (fun n t -&gt; makeTempVar myfunc ~name:n t)
-  [ ("array", Fv myarray); 
-    ("init", FS [stmt1; stmt2; stmt3]);
-    ("init_even", Fe init_expr_for_even_elements) ]
-</FONT></PRE>
-To write the same CIL statement directly in CIL would take much more effort.
-Note that the pattern is parsed only once and the result (a function that
-takes the arguments and constructs the statement) is memoized. <BR>
-<BR>
-
-<H4 CLASS="subsubsection"><A NAME="htoc11">6.2.1</A>&nbsp;&nbsp;Performance considerations for interpreted constructors</H4>
-Parsing the patterns is done with a LALR parser and it takes some time. To
-improve performance the constructors and deconstructors memoize the parsed
-patterns and will only compile a pattern once. Also all construction and
-deconstruction functions can be applied partially to the pattern string to
-produce a function that can be later used directly to construct or
-deconstruct. This function appears to be about two times slower than if the
-construction is done using the CIL constructors (without memoization the
-process would be one order of magnitude slower.) However, the convenience of
-interpreted constructor might make them a viable choice in many situations
-when performance is not paramount (e.g. prototyping).<BR>
-<BR>
-<A NAME="toc5"></A>
-<H3 CLASS="subsection"><A NAME="htoc12">6.3</A>&nbsp;&nbsp;Printing and Debugging support</H3>
-The Modules <A HREF="api/Pretty.html">Pretty</A> and <A HREF="api/Errormsg.html">Errormsg</A> contain respectively
-utilities for pretty printing and reporting errors and provide a convenient
-<TT>printf</TT>-like interface. <BR>
-<BR>
-Additionally, CIL defines for each major type a pretty-printing function that
-you can use in conjunction with the <A HREF="api/Pretty.html">Pretty</A> interface. The
-following are some of the pretty-printing functions:
-<UL CLASS="itemize"><LI CLASS="li-itemize">
-<A HREF="api/Cil.html#VALd_exp">Cil.d_exp</A> - print an expression
-<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALd_type">Cil.d_type</A> - print a type
-<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALd_lval">Cil.d_lval</A> - print an lvalue
-<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALd_global">Cil.d_global</A> - print a global
-<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALd_stmt">Cil.d_stmt</A> - print a statment
-<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALd_instr">Cil.d_instr</A> - print an instruction
-<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALd_init">Cil.d_init</A> - print an initializer
-<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALd_attr">Cil.d_attr</A> - print an attribute
-<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALd_attrlist">Cil.d_attrlist</A> - print a set of attributes
-<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALd_loc">Cil.d_loc</A> - print a location
-<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALd_ikind">Cil.d_ikind</A> - print an integer kind
-<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALd_fkind">Cil.d_fkind</A> - print a floating point kind
-<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALd_const">Cil.d_const</A> - print a constant
-<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALd_storage">Cil.d_storage</A> - print a storage specifier
-</UL>
-You can even customize the pretty-printer by creating instances of
-<A HREF="api/Cil.cilPrinter.html#.">Cil.cilPrinter..</A> Typically such an instance extends
-<A HREF="api/Cil.html#VALdefaultCilPrinter">Cil.defaultCilPrinter</A>. Once you have a customized pretty-printer you
-can use the following printing functions:
-<UL CLASS="itemize"><LI CLASS="li-itemize">
-<A HREF="api/Cil.html#VALprintExp">Cil.printExp</A> - print an expression
-<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALprintType">Cil.printType</A> - print a type
-<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALprintLval">Cil.printLval</A> - print an lvalue
-<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALprintGlobal">Cil.printGlobal</A> - print a global
-<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALprintStmt">Cil.printStmt</A> - print a statment
-<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALprintInstr">Cil.printInstr</A> - print an instruction
-<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALprintInit">Cil.printInit</A> - print an initializer
-<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALprintAttr">Cil.printAttr</A> - print an attribute
-<LI CLASS="li-itemize"><A HREF="api/Cil.html#VALprintAttrs">Cil.printAttrs</A> - print a set of attributes
-</UL>
-CIL has certain internal consistency invariants. For example, all references
-to a global variable must point to the same <TT>varinfo</TT> structure. This
-ensures that one can rename the variable by changing the name in the
-<TT>varinfo</TT>. These constraints are mentioned in the API documentation. There
-is also a consistency checker in file <TT>src/check.ml</TT>. If you suspect that
-your transformation is breaking these constraints then you can pass the
-<TT>--check</TT> option to cilly and this will ensure that the consistency checker
-is run after each transformation. <BR>
-<BR>
-<A NAME="toc6"></A>
-<H3 CLASS="subsection"><A NAME="htoc13">6.4</A>&nbsp;&nbsp;Attributes</H3><A NAME="sec-attrib"></A>
-In CIL you can attach attributes to types and to names (variables, functions
-and fields). Attributes are represented using the type <A HREF="api/Cil.html#TYPEattribute">Cil.attribute</A>.
-An attribute consists of a name and a number of arguments (represented using
-the type <A HREF="api/Cil.html#TYPEattrparam">Cil.attrparam</A>). Almost any expression can be used as an
-attribute argument. Attributes are stored in lists sorted by the name of the
-attribute. To maintain list ordering, use the functions
-<A HREF="api/Cil.html#VALtypeAttrs">Cil.typeAttrs</A> to retrieve the attributes of a type and the functions
-<A HREF="api/Cil.html#VALaddAttribute">Cil.addAttribute</A> and <A HREF="api/Cil.html#VALaddAttributes">Cil.addAttributes</A> to add attributes.
-Alternatively you can use <A HREF="api/Cil.html#VALtypeAddAttributes">Cil.typeAddAttributes</A> to add an attribute to
-a type (and return the new type).<BR>
-<BR>
-GCC already has extensive support for attributes, and CIL extends this
-support to user-defined attributes. A GCC attribute has the syntax:
-<PRE CLASS="verbatim">
- gccattribute ::= __attribute__((attribute))    (Note the double parentheses)
-</PRE>
- Since GCC and MSVC both support various flavors of each attribute (with or
-without leading or trailing _) we first strip ALL leading and trailing _
-from the attribute name (but not the identified in [ACons] parameters in
-<A HREF="api/Cil.html#TYPEattrparam">Cil.attrparam</A>). When we print attributes, for GCC we add two leading
-and two trailing _; for MSVC we add just two leading _.<BR>
-<BR>
-There is support in CIL so that you can control the printing of attributes
-(see <A HREF="api/Cil.html#VALsetCustomPrintAttribute">Cil.setCustomPrintAttribute</A> and
-<A HREF="api/Cil.html#VALsetCustomPrintAttributeScope">Cil.setCustomPrintAttributeScope</A>). This custom-printing support is now
-used to print the "const" qualifier as "<TT>const</TT>" and not as
-"<TT>__attribute__((const))</TT>".<BR>
-<BR>
-The attributes are specified in declarations. This is unfortunate since the C
-syntax for declarations is already quite complicated and after writing the
-parser and elaborator for declarations I am convinced that few C programmers
-understand it completely. Anyway, this seems to be the easiest way to support
-attributes. <BR>
-<BR>
-Name attributes must be specified at the very end of the declaration, just
-before the <TT>=</TT> for the initializer or before the <TT>,</TT> the separates a
-declaration in a group of declarations or just before the <TT>;</TT> that
-terminates the declaration. A name attribute for a function being defined can
-be specified just before the brace that starts the function body.<BR>
-<BR>
-For example (in the following examples <TT>A1</TT>,...,<TT>An</TT> are type attributes
-and <TT>N</TT> is a name attribute (each of these uses the <TT>__attribute__</TT> syntax):
-<PRE CLASS="verbatim"><FONT COLOR=blue>
- int x N;
- int x N, * y N = 0, z[] N;
- extern void exit() N;
- int fact(int x) N { ... }
-</FONT></PRE>
-Type attributes can be specified along with the type using the following
- rules: 
-<OL CLASS="enumerate" type=1><LI CLASS="li-enumerate">
- The type attributes for a base type (int, float, named type, reference
- to struct or union or enum) must be specified immediately following the
- type (actually it is Ok to mix attributes with the specification of the
- type, in between unsigned and int for example).<BR>
-<BR>
-For example:
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-  int A1 x N;  /* A1 applies to the type int. An example is an attribute
-                   "even" restricting the type int to even values. */
-  struct foo A1 A2 x; // Both A1 and A2 apply to the struct foo type
-</FONT></PRE><BR>
-<BR>
-<LI CLASS="li-enumerate">The type attributes for a pointer type must be specified immediately
- after the * symbol.
-<PRE CLASS="verbatim"><FONT COLOR=blue>
- /* A pointer (A1) to an int (A2) */
- int A2 * A1 x;
- /* A pointer (A1) to a pointer (A2) to a float (A3) */
- float A3 * A2 * A1 x;
-</FONT></PRE>
-Note: The attributes for base types and for pointer types are a strict
- extension of the ANSI C type qualifiers (const, volatile and restrict). In
- fact CIL treats these qualifiers as attributes. <BR>
-<BR>
-<LI CLASS="li-enumerate">The attributes for a function type or for an array type can be
- specified using parenthesized declarators.<BR>
-<BR>
-For example:
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-   /* A function (A1) from int (A2) to float (A3) */
-   float A3 (A1 f)(int A2);
-
-   /* A pointer (A1) to a function (A2) that returns an int (A3) */
-   int A3 (A2 * A1 pfun)(void);
-
-   /* An array (A1) of int (A2) */
-   int A2 (A1 x0)[]
-
-   /* Array (A1) of pointers (A2) to functions (A3) that take an int (A4) and 
-    * return a pointer (A5) to int (A6)  */
-   int A6 * A5 (A3 * A2 (A1 x1)[5])(int A4);
-
-
-   /* A function (A4) that takes a float (A5) and returns a pointer (A6) to an 
-    * int (A7) */
-   extern int A7 * A6 (A4 x2)(float A5 x);
-
-   /* A function (A1) that takes a int (A2) and that returns a pointer (A3) to 
-    * a function (A4) that takes a float (A5) and returns a pointer (A6) to an 
-    * int (A7) */
-   int A7 * A6 (A4 * A3 (A1 x3)(int A2 x))(float A5) {
-      return &amp; x2;
-   }
-</FONT></PRE></OL>
-Note: ANSI C does not allow the specification of type qualifiers for function
-and array types, although it allows for the parenthesized declarator. With
-just a bit of thought (looking at the first few examples above) I hope that
-the placement of attributes for function and array types will seem intuitive.<BR>
-<BR>
-This extension is not without problems however. If you want to refer just to
-a type (in a cast for example) then you leave the name out. But this leads to
-strange conflicts due to the parentheses that we introduce to scope the
-attributes. Take for example the type of x0 from above. It should be written
-as: 
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-        int A2 (A1 )[]
-</FONT></PRE>
-But this will lead most C parsers into deep confusion because the parentheses
-around A1 will be confused for parentheses of a function designator. To push
-this problem around (I don't know a solution) whenever we are about to print a
-parenthesized declarator with no name but with attributes, we comment out the
-attributes so you can see them (for whatever is worth) without confusing the
-compiler. For example, here is how we would print the above type:
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-        int A2 /*(A1 )*/[]
-</FONT></PRE>
-
-<H5 CLASS="paragraph">Handling of predefined GCC attributes</H5>
-GCC already supports attributes in a lot of places in declarations. The only
-place where we support attributes and GCC does not is right before the { that
-starts a function body. <BR>
-<BR>
-GCC classifies its attributes in attributes for functions, for variables and
-for types, although the latter category is only usable in definition of struct
-or union types and is not nearly as powerful as the CIL type attributes. We
-have made an effort to reclassify GCC attributes as name and type attributes
-(they only apply for function types). Here is what we came up with:
-<UL CLASS="itemize"><LI CLASS="li-itemize">
- GCC name attributes:<BR>
-<BR>
-section, constructor, destructor, unused, weak, no_instrument_function,
- noreturn, alias, no_check_memory_usage, dllinport, dllexport, exception,
- model<BR>
-<BR>
-Note: the "noreturn" attribute would be more appropriately qualified as a
- function type attribute. But we classify it as a name attribute to make
- it easier to support a similarly named MSVC attribute. <BR>
-<BR>
-<LI CLASS="li-itemize">GCC function type attributes:<BR>
-<BR>
-fconst (printed as "const"), format, regparm, stdcall,
- cdecl, longcall<BR>
-<BR>
-I was not able to completely decipher the position in which these attributes
- must go. So, the CIL elaborator knows these names and applies the following
- rules: 
- <UL CLASS="itemize"><LI CLASS="li-itemize">
- All of the name attributes that appear in the specifier part (i.e. at
- the beginning) of a declaration are associated with all declared names. <BR>
-<BR>
-<LI CLASS="li-itemize">All of the name attributes that appear at the end of a declarator are
- associated with the particular name being declared.<BR>
-<BR>
-<LI CLASS="li-itemize">More complicated is the handling of the function type attributes, since
- there can be more than one function in a single declaration (a function
- returning a pointer to a function). Lacking any real understanding of how
- GCC handles this, I attach the function type attribute to the "nearest"
- function. This means that if a pointer to a function is "nearby" the
- attribute will be correctly associated with the function. In truth I pray
- that nobody uses declarations as that of x3 above. 
- </UL>
-</UL>
-
-<H5 CLASS="paragraph">Handling of predefined MSVC attributes</H5>
-MSVC has two kinds of attributes, declaration modifiers to be printed before
- the storage specifier using the notation "<TT>__declspec(...)</TT>" and a few
- function type attributes, printed almost as our CIL function type
- attributes. <BR>
-<BR>
-The following are the name attributes that are printed using
- <TT>__declspec</TT> right before the storage designator of the declaration:
- thread, naked, dllimport, dllexport, noreturn<BR>
-<BR>
-The following are the function type attributes supported by MSVC: 
- fastcall, cdecl, stdcall<BR>
-<BR>
-It is not worth going into the obscure details of where MSVC accepts these
- type attributes. The parser thinks it knows these details and it pulls
- these attributes from wherever they might be placed. The important thing
- is that MSVC will accept if we print them according to the rules of the CIL
- attributes ! <BR>
-<BR>
-<HR>
-<A HREF="cilly.html"><IMG SRC ="previous_motif.gif" ALT="Previous"></A>
-<A HREF="ciltoc.html"><IMG SRC ="contents_motif.gif" ALT="Up"></A>
-<A HREF="cil007.html"><IMG SRC ="next_motif.gif" ALT="Next"></A>
-</BODY>
-</HTML>
diff --git a/cil/doc/cil007.html b/cil/doc/cil007.html
deleted file mode 100644
index 7d6c02309..000000000
--- a/cil/doc/cil007.html
+++ /dev/null
@@ -1,279 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
-            "http://www.w3.org/TR/REC-html40/loose.dtd">
-<HTML>
-<HEAD>
-
-
-
-<META http-equiv="Content-Type" content="text/html; charset=ANSI_X3.4-1968">
-<META name="GENERATOR" content="hevea 1.08">
-
-<base target="main">
-<script language="JavaScript">
-<!-- Begin
-function loadTop(url) {
-  parent.location.href= url;
-}
-// -->
-</script>
-<LINK rel="stylesheet" type="text/css" href="cil.css">
-<TITLE>
-The CIL Driver
-</TITLE>
-</HEAD>
-<BODY >
-<A HREF="cil006.html"><IMG SRC ="previous_motif.gif" ALT="Previous"></A>
-<A HREF="ciltoc.html"><IMG SRC ="contents_motif.gif" ALT="Up"></A>
-<A HREF="ext.html"><IMG SRC ="next_motif.gif" ALT="Next"></A>
-<HR>
-
-<H2 CLASS="section"><A NAME="htoc14">7</A>&nbsp;&nbsp;The CIL Driver</H2><A NAME="sec-driver"></A>
-We have packaged CIL as an application <TT>cilly</TT> that contains certain
-example modules, such as <TT>logwrites.ml</TT> (a module
-that instruments code to print the addresses of memory locations being
-written). Normally, you write another module like that, add command-line
-options and an invocation of your module in <TT>src/main.ml</TT>. Once you compile
-CIL you will obtain the file <TT>obj/cilly.asm.exe</TT>. <BR>
-<BR>
-We wrote a driver for this executable that makes it easy to invoke your
-analysis on existing C code with very little manual intervention. This driver
-is <TT>bin/cilly</TT> and is quite powerful. Note that the <TT>cilly</TT> script
-is configured during installation with the path where CIL resides. This means
-that you can move it to any place you want. <BR>
-<BR>
-A simple use of the driver is:
-<PRE CLASS="verbatim">
-bin/cilly --save-temps -D HAPPY_MOOD -I myincludes hello.c -o hello
-</PRE>
-<FONT COLOR=blue>--save-temps</FONT> tells CIL to save the resulting output files in the
-current directory. Otherwise, they'll be put in <TT>/tmp</TT> and deleted
-automatically. Not that this is the only CIL-specific flag in the
-list &ndash; the other flags use <TT>gcc</TT>'s syntax.<BR>
-<BR>
-This performs the following actions: 
-<UL CLASS="itemize"><LI CLASS="li-itemize">
-preprocessing using the -D and -I arguments with the resulting 
- file left in <TT>hello.i</TT>, 
-<LI CLASS="li-itemize">the invocation of the <TT>cilly.asm</TT> application which parses <TT>hello.i</TT>
- converts it to CIL and the pretty-prints it to <TT>hello.cil.c</TT>
-<LI CLASS="li-itemize">another round of preprocessing with the result placed in <TT>hello.cil.i</TT>
-<LI CLASS="li-itemize">the true compilation with the result in <TT>hello.cil.o</TT>
-<LI CLASS="li-itemize">a linking phase with the result in <TT>hello</TT>
-</UL>
-Note that <TT>cilly</TT> behaves like the <TT>gcc</TT> compiler. This makes it
-easy to use it with existing <TT>Makefiles</TT>:
-<PRE CLASS="verbatim">
-make CC="bin/cilly" LD="bin/cilly"
-</PRE>
- <TT>cilly</TT> can also behave as the Microsoft Visual C compiler, if the first
- argument is <TT>--mode=MSVC</TT>:
-<PRE CLASS="verbatim">
-bin/cilly --mode=MSVC /D HAPPY_MOOD /I myincludes hello.c /Fe hello.exe
-</PRE>
- (This in turn will pass a <TT>--MSVC</TT> flag to the underlying <TT>cilly.asm</TT>
- process which will make it understand the Microsoft Visual C extensions)<BR>
-<BR>
-<TT>cilly</TT> can also behave as the archiver <TT>ar</TT>, if it is passed an
-argument <TT>--mode=AR</TT>. Note that only the <TT>cr</TT> mode is supported (create a
-new archive and replace all files in there). Therefore the previous version of
-the archive is lost. <BR>
-<BR>
-Furthermore, <TT>cilly</TT> allows you to pass some arguments on to the
-underlying <TT>cilly.asm</TT> process. As a general rule all arguments that start
-with <TT>--</TT> and that <TT>cilly</TT> itself does not process, are passed on. For
-example, 
-<PRE CLASS="verbatim">
-bin/cilly --dologwrites -D HAPPY_MOOD -I myincludes hello.c -o hello.exe
-</PRE>
- will produce a file <TT>hello.cil.c</TT> that prints all the memory addresses
-written by the application. <BR>
-<BR>
-The most powerful feature of <TT>cilly</TT> is that it can collect all the
-sources in your project, merge them into one file and then apply CIL. This
-makes it a breeze to do whole-program analysis and transformation. All you
-have to do is to pass the <TT>--merge</TT> flag to <TT>cilly</TT>:
-<PRE CLASS="verbatim">
-make CC="bin/cilly --save-temps --dologwrites --merge"
-</PRE>
- You can even leave some files untouched:
-<PRE CLASS="verbatim">
-make CC="bin/cilly --save-temps --dologwrites --merge --leavealone=foo --leavealone=bar"
-</PRE>
- This will merge all the files except those with the basename <TT>foo</TT> and
-<TT>bar</TT>. Those files will be compiled as usual and then linked in at the very
-end. <BR>
-<BR>
-The sequence of actions performed by <TT>cilly</TT> depends on whether merging
-is turned on or not:
-<UL CLASS="itemize"><LI CLASS="li-itemize">
-If merging is off
- <OL CLASS="enumerate" type=1><LI CLASS="li-enumerate">
- For every file <TT>file.c</TT> to compile
- <OL CLASS="enumerate" type=a><LI CLASS="li-enumerate">
- Preprocess the file with the given arguments to 
- produce <TT>file.i</TT>
- <LI CLASS="li-enumerate">Invoke <TT>cilly.asm</TT> to produce a <TT>file.cil.c</TT>
- <LI CLASS="li-enumerate">Preprocess to <TT>file.cil.i</TT>
- <LI CLASS="li-enumerate">Invoke the underlying compiler to produce <TT>file.cil.o</TT>
- </OL>
- <LI CLASS="li-enumerate">Link the resulting objects
- </OL>
-<LI CLASS="li-itemize">If merging is on
- <OL CLASS="enumerate" type=1><LI CLASS="li-enumerate">
- For every file <TT>file.c</TT> to compile
- <OL CLASS="enumerate" type=a><LI CLASS="li-enumerate">
- Preprocess the file with the given arguments to 
- produce <TT>file.i</TT>
- <LI CLASS="li-enumerate">Save the preprocessed source as <TT>file.o</TT>
- </OL>
- <LI CLASS="li-enumerate">When linking executable <TT>hello.exe</TT>, look at every object 
- file that must be linked and see if it actually 
- contains preprocessed source. Pass all those files to a 
- special merging application (described in
- Section&nbsp;<A HREF="merger.html#sec-merger">13</A>) to produce <TT>hello.exe_comb.c</TT>
- <LI CLASS="li-enumerate">Invoke <TT>cilly.asm</TT> to produce a <TT>hello.exe_comb.cil.c</TT>
- <LI CLASS="li-enumerate">Preprocess to <TT>hello.exe_comb.cil.i</TT>
- <LI CLASS="li-enumerate">Invoke the underlying compiler to produce <TT>hello.exe_comb.cil.o</TT>
- <LI CLASS="li-enumerate">Invoke the actual linker to produce <TT>hello.exe</TT>
- </OL>
-</UL>
-Note that files that you specify with <TT>--leavealone</TT> are not merged and
-never presented to CIL. They are compiled as usual and then are linked in at
-the end. <BR>
-<BR>
-And a final feature of <TT>cilly</TT> is that it can substitute copies of the
-system's include files:
-<PRE CLASS="verbatim">
-make CC="bin/cilly --includedir=myinclude"
-</PRE>
- This will force the preprocessor to use the file <TT>myinclude/xxx/stdio.h</TT>
-(if it exists) whenever it encounters <TT>#include &lt;stdio.h&gt;</TT>. The <TT>xxx</TT> is
-a string that identifies the compiler version you are using. This modified
-include files should be produced with the patcher script (see
-Section&nbsp;<A HREF="patcher.html#sec-patcher">14</A>).<BR>
-<BR>
-<A NAME="toc7"></A>
-<H3 CLASS="subsection"><A NAME="htoc15">7.1</A>&nbsp;&nbsp;<TT>cilly</TT> Options</H3>
-Among the options for the <TT>cilly</TT> you can put anything that can normally
-go in the command line of the compiler that <TT>cilly</TT> is impersonating.
-<TT>cilly</TT> will do its best to pass those options along to the appropriate
-subprocess. In addition, the following options are supported (a complete and
-up-to-date list can always be obtained by running <TT>cilly --help</TT>):
-<UL CLASS="itemize"><LI CLASS="li-itemize">
-<TT>--mode=mode</TT> This must be the first argument if present. It makes
-<TT>cilly</TT> behave as a given compiled. The following modes are recognized: 
- <UL CLASS="itemize"><LI CLASS="li-itemize">
- GNUCC - the GNU C Compiler. This is the default.
- <LI CLASS="li-itemize">MSVC - the Microsoft Visual C compiler. Of course, you should
- pass only MSVC valid options in this case. 
- <LI CLASS="li-itemize">AR - the archiver <TT>ar</TT>. Only the mode <TT>cr</TT> is supported and
- the original version of the archive is lost. 
- </UL>
-<LI CLASS="li-itemize"><TT>--help</TT> Prints a list of the options supported.
-<LI CLASS="li-itemize"><TT>--verbose</TT> Prints lots of messages about what is going on.
-<LI CLASS="li-itemize"><TT>--stages</TT> Less than <TT>--verbose</TT> but lets you see what <TT>cilly</TT>
- is doing. 
-<LI CLASS="li-itemize"><TT>--merge</TT> This tells <TT>cilly</TT> to first attempt to collect into one
-source file all of the sources that make your application, and then to apply
-<TT>cilly.asm</TT> on the resulting source. The sequence of actions in this case is
-described above and the merger itself is described in Section&nbsp;<A HREF="merger.html#sec-merger">13</A>.<BR>
-<BR>
-<LI CLASS="li-itemize"><TT>--leavealone=xxx</TT>. Do not merge and do not present to CIL the files
-whose basename is "xxx". These files are compiled as usual and linked in at
-the end. 
-<LI CLASS="li-itemize"><TT>--includedir=xxx</TT>. Override the include files with those in the given
-directory. The given directory is the same name that was given an an argument
-to the patcher (see Section&nbsp;<A HREF="patcher.html#sec-patcher">14</A>). In particular this means that
-that directory contains subdirectories named based on the current compiler
-version. The patcher creates those directories. 
-<LI CLASS="li-itemize"><TT>--usecabs</TT>. Do not CIL, but instead just parse the source and print
-its AST out. This should looked like the preprocessed file. This is useful
-when you suspect that the conversion to CIL phase changes the meaning of the
-program. 
-<LI CLASS="li-itemize"><TT>--save-temps=xxx</TT>. Temporary files are preserved in the xxx
- directory. For example, the output of CIL will be put in a file
- named <TT>*.cil.c</TT>.
-<LI CLASS="li-itemize"><TT>--save-temps</TT>. Temporay files are preserved in the current directory.
-</UL>
-<A NAME="toc8"></A>
-<H3 CLASS="subsection"><A NAME="htoc16">7.2</A>&nbsp;&nbsp;<TT>cilly.asm</TT> Options</H3>
- <A NAME="sec-cilly-asm-options"></A>
-All of the options that start with <TT>--</TT> and are not understood by
-<TT>cilly</TT> are passed on to <TT>cilly.asm</TT>. <TT>cilly</TT> also passes along to
-<TT>cilly.asm</TT> flags such as <TT>--MSVC</TT> that both need to know
-about. The following options are supported:<BR>
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <B>General Options:</B>
-<UL CLASS="itemize"><LI CLASS="li-itemize">
- <TT>--version</TT> output version information and exit
- <LI CLASS="li-itemize"><TT>--verbose</TT> Print lots of random stuff. This is passed on from cilly
- <LI CLASS="li-itemize"><TT>--warnall</TT> Show all warnings.
- <LI CLASS="li-itemize"><TT>--debug=xxx</TT> turns on debugging flag xxx
- <LI CLASS="li-itemize"><TT>--nodebug=xxx</TT> turns off debugging flag xxx
- <LI CLASS="li-itemize"><TT>--flush</TT> Flush the output streams often (aids debugging).
- <LI CLASS="li-itemize"><TT>--check</TT> Run a consistency check over the CIL after every operation.
- <LI CLASS="li-itemize"><TT>--nocheck</TT> turns off consistency checking of CIL.
- <LI CLASS="li-itemize"><TT>--noPrintLn</TT> Don't output #line directives in the output.
- <LI CLASS="li-itemize"><TT>--commPrintLn</TT> Print #line directives in the output, but
- put them in comments.
- <LI CLASS="li-itemize"><TT>--log=xxx</TT> Set the name of the log file. By default stderr is used
- <LI CLASS="li-itemize"><TT>--MSVC</TT> Enable MSVC compatibility. Default is GNU.
- <LI CLASS="li-itemize"><TT>--ignore-merge-conflicts</TT> ignore merging conflicts.
- <LI CLASS="li-itemize"><TT>--extrafiles=filename</TT>: the name of a file that contains
- a list of additional files to process, separated by whitespace.
- <LI CLASS="li-itemize"><TT>--stats</TT> Print statistics about the running time of the
- parser, conversion to CIL, etc. Also prints memory-usage
- statistics. You can time parts of your own code as well. Calling
- (<TT>Stats.time &#8220;label&#8221; func arg</TT>) will evaluate <TT>(func arg)</TT>
- and remember how long this takes. If you call <TT>Stats.time</TT>
- repeatedly with the same label, CIL will report the aggregate
- time.<BR>
-<BR>
-If available, CIL uses the x86 performance counters for these
- stats. This is very precise, but results in &#8220;wall-clock time.&#8221;
- To report only user-mode time, find the call to <TT>Stats.reset</TT> in
- <TT>main.ml</TT>, and change it to <TT>Stats.reset false</TT>.<BR>
-<BR>
-<B>Lowering Options</B>
- <LI CLASS="li-itemize"><TT>--noLowerConstants</TT> do not lower constant expressions.
- <LI CLASS="li-itemize"><TT>--noInsertImplicitCasts</TT> do not insert implicit casts.
- <LI CLASS="li-itemize"><TT>--forceRLArgEval</TT> Forces right to left evaluation of function arguments.
- <LI CLASS="li-itemize"><TT>--disallowDuplication</TT> Prevent small chunks of code from being duplicated.
- <LI CLASS="li-itemize"><TT>--keepunused</TT> Do not remove the unused variables and types.
- <LI CLASS="li-itemize"><TT>--rmUnusedInlines</TT> Delete any unused inline functions. This is the default in MSVC mode.<BR>
-<BR>
-<B>Output Options:</B>
- <LI CLASS="li-itemize"><TT>--printCilAsIs</TT> Do not try to simplify the CIL when
- printing. Without this flag, CIL will attempt to produce prettier
- output by e.g. changing <TT>while(1)</TT> into more meaningful loops.
- <LI CLASS="li-itemize"><TT>--noWrap</TT> do not wrap long lines when printing
- <LI CLASS="li-itemize"><TT>--out=xxx</TT> the name of the output CIL file. <TT>cilly</TT>
- sets this for you.
- <LI CLASS="li-itemize"><TT>--mergedout=xxx</TT> specify the name of the merged file
- <LI CLASS="li-itemize"><TT>--cabsonly=xxx</TT> CABS output file name
-<BR>
-<BR>
- <B>Selected features.</B> See Section&nbsp;<A HREF="ext.html#sec-Extension">8</A> for more information.
-<LI CLASS="li-itemize"><TT>--dologcalls</TT>. Insert code in the processed source to print the name of
-functions as are called. Implemented in <TT>src/ext/logcalls.ml</TT>.
-<LI CLASS="li-itemize"><TT>--dologwrites</TT>. Insert code in the processed source to print the
-address of all memory writes. Implemented in <TT>src/ext/logwrites.ml</TT>.
-<LI CLASS="li-itemize"><TT>--dooneRet</TT>. Make each function have at most one 'return'.
-Implemented in <TT>src/ext/oneret.ml</TT>. 
-<LI CLASS="li-itemize"><TT>--dostackGuard</TT>. Instrument function calls and returns to
-maintain a separate stack for return addresses. Implemeted in
-<TT>src/ext/heapify.ml</TT>. 
-<LI CLASS="li-itemize"><TT>--domakeCFG</TT>. Make the program look more like a CFG. Implemented
-in <TT>src/cil.ml</TT>. 
-<LI CLASS="li-itemize"><TT>--dopartial</TT>. Do interprocedural partial evaluation and
-constant folding. Implemented in <TT>src/ext/partial.ml</TT>. 
-<LI CLASS="li-itemize"><TT>--dosimpleMem</TT>. Simplify all memory expressions. Implemented in
-<TT>src/ext/simplemem.ml</TT>. <BR>
-<BR>
-For an up-to-date list of available options, run <TT>cilly.asm --help</TT>. </UL>
-<HR>
-<A HREF="cil006.html"><IMG SRC ="previous_motif.gif" ALT="Previous"></A>
-<A HREF="ciltoc.html"><IMG SRC ="contents_motif.gif" ALT="Up"></A>
-<A HREF="ext.html"><IMG SRC ="next_motif.gif" ALT="Next"></A>
-</BODY>
-</HTML>
diff --git a/cil/doc/cil009.html b/cil/doc/cil009.html
deleted file mode 100644
index f408d0062..000000000
--- a/cil/doc/cil009.html
+++ /dev/null
@@ -1,48 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
-            "http://www.w3.org/TR/REC-html40/loose.dtd">
-<HTML>
-<HEAD>
-
-
-
-<META http-equiv="Content-Type" content="text/html; charset=ANSI_X3.4-1968">
-<META name="GENERATOR" content="hevea 1.08">
-
-<base target="main">
-<script language="JavaScript">
-<!-- Begin
-function loadTop(url) {
-  parent.location.href= url;
-}
-// -->
-</script>
-<LINK rel="stylesheet" type="text/css" href="cil.css">
-<TITLE>
-Controlling CIL
-</TITLE>
-</HEAD>
-<BODY >
-<A HREF="ext.html"><IMG SRC ="previous_motif.gif" ALT="Previous"></A>
-<A HREF="ciltoc.html"><IMG SRC ="contents_motif.gif" ALT="Up"></A>
-<A HREF="cil010.html"><IMG SRC ="next_motif.gif" ALT="Next"></A>
-<HR>
-
-<H2 CLASS="section"><A NAME="htoc35">9</A>&nbsp;&nbsp;Controlling CIL</H2>
-In the process of converting a C file to CIL we drop the unused prototypes
-and even inline function definitions. This results in much smaller files. If
-you do not want this behavior then you must pass the <TT>--keepunused</TT> argument
-to the CIL application. <BR>
-<BR>
-Alternatively you can put the following pragma in the code (instructing CIL
-to specifically keep the declarations and definitions of the function
-<TT>func1</TT> and variable <TT>var2</TT>, the definition of type <TT>foo</TT> and of
-structure <TT>bar</TT>):
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-#pragma cilnoremove("func1", "var2", "type foo", "struct bar")
-</FONT></PRE>
-<HR>
-<A HREF="ext.html"><IMG SRC ="previous_motif.gif" ALT="Previous"></A>
-<A HREF="ciltoc.html"><IMG SRC ="contents_motif.gif" ALT="Up"></A>
-<A HREF="cil010.html"><IMG SRC ="next_motif.gif" ALT="Next"></A>
-</BODY>
-</HTML>
diff --git a/cil/doc/cil010.html b/cil/doc/cil010.html
deleted file mode 100644
index e7b1e4b08..000000000
--- a/cil/doc/cil010.html
+++ /dev/null
@@ -1,100 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
-            "http://www.w3.org/TR/REC-html40/loose.dtd">
-<HTML>
-<HEAD>
-
-
-
-<META http-equiv="Content-Type" content="text/html; charset=ANSI_X3.4-1968">
-<META name="GENERATOR" content="hevea 1.08">
-
-<base target="main">
-<script language="JavaScript">
-<!-- Begin
-function loadTop(url) {
-  parent.location.href= url;
-}
-// -->
-</script>
-<LINK rel="stylesheet" type="text/css" href="cil.css">
-<TITLE>
-GCC Extensions
-</TITLE>
-</HEAD>
-<BODY >
-<A HREF="cil009.html"><IMG SRC ="previous_motif.gif" ALT="Previous"></A>
-<A HREF="ciltoc.html"><IMG SRC ="contents_motif.gif" ALT="Up"></A>
-<A HREF="cil011.html"><IMG SRC ="next_motif.gif" ALT="Next"></A>
-<HR>
-
-<H2 CLASS="section"><A NAME="htoc36">10</A>&nbsp;&nbsp;GCC Extensions</H2>
-The CIL parser handles most of the <TT>gcc</TT>
-<A HREF="javascript:loadTop('http://gcc.gnu.org/onlinedocs/gcc-3.0.2/gcc_5.html#SEC67')">extensions</A>
-and compiles them to CIL. The following extensions are not handled (note that
-we are able to compile a large number of programs, including the Linux kernel,
-without encountering these):
-<OL CLASS="enumerate" type=1><LI CLASS="li-enumerate">
-Nested function definitions.
-<LI CLASS="li-enumerate">Constructing function calls.
-<LI CLASS="li-enumerate">Naming an expression's type.
-<LI CLASS="li-enumerate">Complex numbers
-<LI CLASS="li-enumerate">Hex floats
-<LI CLASS="li-enumerate">Subscripts on non-lvalue arrays.
-<LI CLASS="li-enumerate">Forward function parameter declarations
-</OL>
-The following extensions are handled, typically by compiling them away:
-<OL CLASS="enumerate" type=1><LI CLASS="li-enumerate">
-Attributes for functions, variables and types. In fact, we have a clear
-specification (see Section&nbsp;<A HREF="cil006.html#sec-attrib">6.4</A>) of how attributes are interpreted. The
-specification extends that of <TT>gcc</TT>.
-<LI CLASS="li-enumerate">Old-style function definitions and prototypes. These are translated to
-new-style. 
-<LI CLASS="li-enumerate">Locally-declared labels. As part of the translation to CIL, we generate
-new labels as needed. 
-<LI CLASS="li-enumerate">Labels as values and computed goto. This allows a program to take the
-address of a label and to manipulate it as any value and also to perform a
-computed goto. We compile this by assigning each label whose address is taken
-a small integer that acts as its address. Every computed <TT>goto</TT> in the body
-of the function is replaced with a <TT>switch</TT> statement. If you want to invoke
-the label from another function, you are on your own (the <TT>gcc</TT>
-documentation says the same.)
-<LI CLASS="li-enumerate">Generalized lvalues. You can write code like <TT>(a, b) += 5</TT> and it gets
-translated to CIL. 
-<LI CLASS="li-enumerate">Conditionals with omitted operands. Things like <TT>x ? : y</TT> are
-translated to CIL.
-<LI CLASS="li-enumerate">Double word integers. The type <TT>long long</TT> and the <TT>LL</TT> suffix on
-constants is understood. This is currently interpreted as 64-bit integers.
-<LI CLASS="li-enumerate">Local arrays of variable length. These are converted to uses of
-<TT>alloca</TT>, the array variable is replaced with a pointer to the allocated
-array and the instances of <TT>sizeof(a)</TT> are adjusted to return the size of
-the array and not the size of the pointer. 
-<LI CLASS="li-enumerate">Non-constant local initializers. Like all local initializers these are
-compiled into assignments. 
-<LI CLASS="li-enumerate">Compound literals. These are also turned into assignments.
-<LI CLASS="li-enumerate">Designated initializers. The CIL parser actually supports the full ISO
-syntax for initializers, which is more than both <TT>gcc</TT> and <TT>MSVC</TT>. I
-(George) think that this is the most complicated part of the C language and
-whoever designed it should be banned from ever designing languages again.
-<LI CLASS="li-enumerate">Case ranges. These are compiled into separate cases. There is no code
-duplication, just a larger number of <TT>case</TT> statements.
-<LI CLASS="li-enumerate">Transparent unions. This is a strange feature that allows you to define
-a function whose formal argument has a (tranparent) union type, but the
-argument is called as if it were the first element of the union. This is
-compiled away by saying that the type of the formal argument is that of the
-first field, and the first thing in the function body we copy the formal into
-a union. <BR>
-<BR>
-<LI CLASS="li-enumerate">Inline assembly-language. The full syntax is supported and it is carried
-as such in CIL.<BR>
-<BR>
-<LI CLASS="li-enumerate">Function names as strings. The identifiers <TT>__FUNCTION__</TT> and
-<TT>__PRETTY_FUNCTION__</TT> are replaced with string literals. <BR>
-<BR>
-<LI CLASS="li-enumerate">Keywords <TT>typeof</TT>, <TT>alignof</TT>, <TT>inline</TT> are supported. 
-</OL>
-<HR>
-<A HREF="cil009.html"><IMG SRC ="previous_motif.gif" ALT="Previous"></A>
-<A HREF="ciltoc.html"><IMG SRC ="contents_motif.gif" ALT="Up"></A>
-<A HREF="cil011.html"><IMG SRC ="next_motif.gif" ALT="Next"></A>
-</BODY>
-</HTML>
diff --git a/cil/doc/cil011.html b/cil/doc/cil011.html
deleted file mode 100644
index 975c8dd86..000000000
--- a/cil/doc/cil011.html
+++ /dev/null
@@ -1,53 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
-            "http://www.w3.org/TR/REC-html40/loose.dtd">
-<HTML>
-<HEAD>
-
-
-
-<META http-equiv="Content-Type" content="text/html; charset=ANSI_X3.4-1968">
-<META name="GENERATOR" content="hevea 1.08">
-
-<base target="main">
-<script language="JavaScript">
-<!-- Begin
-function loadTop(url) {
-  parent.location.href= url;
-}
-// -->
-</script>
-<LINK rel="stylesheet" type="text/css" href="cil.css">
-<TITLE>
-CIL Limitations
-</TITLE>
-</HEAD>
-<BODY >
-<A HREF="cil010.html"><IMG SRC ="previous_motif.gif" ALT="Previous"></A>
-<A HREF="ciltoc.html"><IMG SRC ="contents_motif.gif" ALT="Up"></A>
-<A HREF="cil012.html"><IMG SRC ="next_motif.gif" ALT="Next"></A>
-<HR>
-
-<H2 CLASS="section"><A NAME="htoc37">11</A>&nbsp;&nbsp;CIL Limitations</H2>
-There are several implementation details of CIL that might make it unusable
- or less than ideal for certain tasks:
-<UL CLASS="itemize"><LI CLASS="li-itemize">
-CIL operates after preprocessing. If you need to see comments, for
-example, you cannot use CIL. But you can use attributes and pragmas instead.
-And there is some support to help you patch the include files before they are
-seen by the preprocessor. For example, this is how we turn some
-<TT>#define</TT>s that we don't like into function calls. <BR>
-<BR>
-<LI CLASS="li-itemize">CIL does transform the code in a non-trivial way. This is done in order
-to make most analyses easier. But if you want to see the code <TT>e1, e2++</TT>
-exactly as it appears in the code, then you should not use CIL. <BR>
-<BR>
-<LI CLASS="li-itemize">CIL removes all local scopes and moves all variables to function
-scope. It also separates a declaration with an initializer into a declaration
-plus an assignment. The unfortunate effect of this transformation is that
-local variables cannot have the <TT>const</TT> qualifier.</UL>
-<HR>
-<A HREF="cil010.html"><IMG SRC ="previous_motif.gif" ALT="Previous"></A>
-<A HREF="ciltoc.html"><IMG SRC ="contents_motif.gif" ALT="Up"></A>
-<A HREF="cil012.html"><IMG SRC ="next_motif.gif" ALT="Next"></A>
-</BODY>
-</HTML>
diff --git a/cil/doc/cil012.html b/cil/doc/cil012.html
deleted file mode 100644
index 5d18fd52d..000000000
--- a/cil/doc/cil012.html
+++ /dev/null
@@ -1,133 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
-            "http://www.w3.org/TR/REC-html40/loose.dtd">
-<HTML>
-<HEAD>
-
-
-
-<META http-equiv="Content-Type" content="text/html; charset=ANSI_X3.4-1968">
-<META name="GENERATOR" content="hevea 1.08">
-
-<base target="main">
-<script language="JavaScript">
-<!-- Begin
-function loadTop(url) {
-  parent.location.href= url;
-}
-// -->
-</script>
-<LINK rel="stylesheet" type="text/css" href="cil.css">
-<TITLE>
-Known Bugs and Limitations
-</TITLE>
-</HEAD>
-<BODY >
-<A HREF="cil011.html"><IMG SRC ="previous_motif.gif" ALT="Previous"></A>
-<A HREF="ciltoc.html"><IMG SRC ="contents_motif.gif" ALT="Up"></A>
-<A HREF="merger.html"><IMG SRC ="next_motif.gif" ALT="Next"></A>
-<HR>
-
-<H2 CLASS="section"><A NAME="htoc38">12</A>&nbsp;&nbsp;Known Bugs and Limitations</H2>
-<UL CLASS="itemize"><LI CLASS="li-itemize">In the new versions of <TT>glibc</TT> there is a function
- <TT>__builtin_va_arg</TT> that takes a type as its second argument. CIL
- handles that through a slight trick. As it parses the function it changes a
- call like:
-<PRE CLASS="verbatim">
-  mytype x = __builtin_va_arg(marker, mytype)
-</PRE>into 
-<PRE CLASS="verbatim">
- mytype x;
- __builtin_va_arg(marker, sizeof(mytype), &amp;x);
-</PRE>
- The latter form is used internally in CIL. However, the CIL pretty printer
- will try to emit the original code. <BR>
-<BR>
-Similarly, <TT>__builtin_types_compatible_p(t1, t2)</TT>, which takes
- types as arguments, is represented internally as
- <TT>__builtin_types_compatible_p(sizeof t1, sizeof t2)</TT>, but the
- sizeofs are removed when printing.<BR>
-<BR>
-<LI CLASS="li-itemize">The implementation of <TT>bitsSizeOf</TT> does not take into account the
-packing pragmas. However it was tested to be accurate on cygwin/gcc-2.95.3,
-Linux/gcc-2.95.3 and on Windows/MSVC.<BR>
-<BR>
-<LI CLASS="li-itemize">We do not support tri-graph sequences (ISO 5.2.1.1).<BR>
-<BR>
-<LI CLASS="li-itemize">GCC has a strange feature called &#8220;extern inline&#8221;. Such a function can
-be defined twice: first with the &#8220;extern inline&#8221; specifier and the second
-time without it. If optimizations are turned off then the &#8220;extern inline&#8221;
-definition is considered a prototype (its body is ignored). If optimizations
-are turned on then the extern inline function is inlined at all of its
-occurrences from the point of its definition all the way to the point where the
-(optional) second definition appears. No body is generated for an extern
-inline function. A body is generated for the real definition and that one is
-used in the rest of the file. <BR>
-<BR>
-CIL will rename your extern inline function (and its uses) with the suffix
- <TT>__extinline</TT>. This means that if you have two such definition, that do
- different things and the optimizations are not on, then the CIL version might
- compute a different answer !<BR>
-<BR>
-Also, if you have multiple extern inline declarations then CIL will ignore
-but the first one. This is not so bad because GCC itself would not like it. <BR>
-<BR>
-<LI CLASS="li-itemize">There are still a number of bugs in handling some obscure features of
-GCC. For example, when you use variable-length arrays, CIL turns them into
-calls to <TT>alloca</TT>. This means that they are deallocated when the function
-returns and not when the local scope ends. <BR>
-<BR>
-Variable-length arrays are not supported as fields of a struct or union.<BR>
-<BR>
-<LI CLASS="li-itemize">CIL cannot parse arbitrary <TT>#pragma</TT> directives. Their
- syntax must follow gcc's attribute syntax to be understood. If you
- need a pragma that does not follow gcc syntax, add that pragma's name
- to <TT>no_parse_pragma</TT> in <TT>src/frontc/clexer.mll</TT> to indicate that
- CIL should treat that pragma as a monolithic string rather than try
- to parse its arguments.<BR>
-<BR>
-CIL cannot parse a line containing an empty <TT>#pragma</TT>.<BR>
-<BR>
-<LI CLASS="li-itemize">CIL only parses <TT>#pragma</TT> directives at the "top level", this is,
- outside of any enum, structure, union, or function definitions.<BR>
-<BR>
-If your compiler uses pragmas in places other than the top-level,
- you may have to preprocess the sources in a special way (sed, perl,
- etc.) to remove pragmas from these locations.<BR>
-<BR>
-<LI CLASS="li-itemize">CIL cannot parse the following code (fixing this problem would require
-extensive hacking of the LALR grammar):
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-int bar(int ()); // This prototype cannot be parsed
-int bar(int x()); // If you add a name to the function, it works
-int bar(int (*)()); // This also works (and it is more appropriate)
-</FONT></PRE><BR>
-<BR>
-<LI CLASS="li-itemize">CIL also cannot parse certain K&amp;R old-style prototypes with missing
-return type:
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-g(); // This cannot be parsed
-int g(); // This is Ok
-</FONT></PRE><BR>
-<BR>
-<LI CLASS="li-itemize">CIL does not understand some obscure combinations of type specifiers
-(&#8220;signed&#8221; and &#8220;unsigned&#8221; applied to typedefs that themselves contain a
-sign specification; you could argue that this should not be allowed anyway):
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-typedef signed char __s8;
-__s8 unsigned uchartest; // This is unsigned char for gcc
-</FONT></PRE><BR>
-<BR>
-<LI CLASS="li-itemize">The statement <TT>x = 3 + x ++</TT> will perform the increment of <TT>x</TT>
- before the assignment, while <TT>gcc</TT> delays the increment after the
- assignment. It turned out that this behavior is much easier to implement
- than gcc's one, and either way is correct (since the behavior is unspecified
- in this case). Similarly, if you write <TT>x = x ++;</TT> then CIL will perform
- the increment before the assignment, whereas GCC and MSVC will perform it
- after the assignment. 
-</UL>
-<HR>
-<A HREF="cil011.html"><IMG SRC ="previous_motif.gif" ALT="Previous"></A>
-<A HREF="ciltoc.html"><IMG SRC ="contents_motif.gif" ALT="Up"></A>
-<A HREF="merger.html"><IMG SRC ="next_motif.gif" ALT="Next"></A>
-</BODY>
-</HTML>
diff --git a/cil/doc/cil015.html b/cil/doc/cil015.html
deleted file mode 100644
index a3dff7d73..000000000
--- a/cil/doc/cil015.html
+++ /dev/null
@@ -1,60 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
-            "http://www.w3.org/TR/REC-html40/loose.dtd">
-<HTML>
-<HEAD>
-
-
-
-<META http-equiv="Content-Type" content="text/html; charset=ANSI_X3.4-1968">
-<META name="GENERATOR" content="hevea 1.08">
-
-<base target="main">
-<script language="JavaScript">
-<!-- Begin
-function loadTop(url) {
-  parent.location.href= url;
-}
-// -->
-</script>
-<LINK rel="stylesheet" type="text/css" href="cil.css">
-<TITLE>
-Debugging support
-</TITLE>
-</HEAD>
-<BODY >
-<A HREF="patcher.html"><IMG SRC ="previous_motif.gif" ALT="Previous"></A>
-<A HREF="ciltoc.html"><IMG SRC ="contents_motif.gif" ALT="Up"></A>
-<A HREF="cil016.html"><IMG SRC ="next_motif.gif" ALT="Next"></A>
-<HR>
-
-<H2 CLASS="section"><A NAME="htoc41">15</A>&nbsp;&nbsp;Debugging support</H2><A NAME="sec-debugger"></A>
-Most of the time we debug our code using the Errormsg module along with the
-pretty printer. But if you want to use the Ocaml debugger here is an easy way
-to do it. Say that you want to debug the invocation of cilly that arises out
-of the following command:
-<PRE CLASS="verbatim">
-cilly -c hello.c 
-</PRE>
- You must follow the installation <A HREF="../ccured/setup.html">instructions</A>
-to install the Elist support files for ocaml and to extend your .emacs
-appropriately. Then from within Emacs you do
-<PRE CLASS="verbatim">
-ALT-X my-camldebug
-</PRE>
- This will ask you for the command to use for running the Ocaml debugger
-(initially the default will be &#8220;ocamldebug&#8221; or the last command you
-introduced). You use the following command:
-<PRE CLASS="verbatim">
-cilly --ocamldebug -c hello.c 
-</PRE>
- This will run <TT>cilly</TT> as usual and invoke the Ocaml debugger when the cilly
-engine starts. The advantage of this way of invoking the debugger is that the
-directory search paths are set automatically and the right set or arguments is
-passed to the debugger. <BR>
-<BR>
-<HR>
-<A HREF="patcher.html"><IMG SRC ="previous_motif.gif" ALT="Previous"></A>
-<A HREF="ciltoc.html"><IMG SRC ="contents_motif.gif" ALT="Up"></A>
-<A HREF="cil016.html"><IMG SRC ="next_motif.gif" ALT="Next"></A>
-</BODY>
-</HTML>
diff --git a/cil/doc/cil016.html b/cil/doc/cil016.html
deleted file mode 100644
index 3191a9d57..000000000
--- a/cil/doc/cil016.html
+++ /dev/null
@@ -1,342 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
-            "http://www.w3.org/TR/REC-html40/loose.dtd">
-<HTML>
-<HEAD>
-
-
-
-<META http-equiv="Content-Type" content="text/html; charset=ANSI_X3.4-1968">
-<META name="GENERATOR" content="hevea 1.08">
-
-<base target="main">
-<script language="JavaScript">
-<!-- Begin
-function loadTop(url) {
-  parent.location.href= url;
-}
-// -->
-</script>
-<LINK rel="stylesheet" type="text/css" href="cil.css">
-<TITLE>
-Who Says C is Simple?
-</TITLE>
-</HEAD>
-<BODY >
-<A HREF="cil015.html"><IMG SRC ="previous_motif.gif" ALT="Previous"></A>
-<A HREF="ciltoc.html"><IMG SRC ="contents_motif.gif" ALT="Up"></A>
-<A HREF="cil017.html"><IMG SRC ="next_motif.gif" ALT="Next"></A>
-<HR>
-
-<H2 CLASS="section"><A NAME="htoc42">16</A>&nbsp;&nbsp;Who Says C is Simple?</H2><A NAME="sec-simplec"></A>
-When I (George) started to write CIL I thought it was going to take two weeks.
-Exactly a year has passed since then and I am still fixing bugs in it. This
-gross underestimate was due to the fact that I thought parsing and making
-sense of C is simple. You probably think the same. What I did not expect was
-how many dark corners this language has, especially if you want to parse
-real-world programs such as those written for GCC or if you are more ambitious
-and you want to parse the Linux or Windows NT sources (both of these were
-written without any respect for the standard and with the expectation that
-compilers will be changed to accommodate the program). <BR>
-<BR>
-The following examples were actually encountered either in real programs or
-are taken from the ISO C99 standard or from the GCC's testcases. My first
-reaction when I saw these was: <EM>Is this C?</EM>. The second one was : <EM>What the hell does it mean?</EM>. <BR>
-<BR>
-If you are contemplating doing program analysis for C on abstract-syntax
-trees then your analysis ought to be able to handle these things. Or, you can
-use CIL and let CIL translate them into clean C code. <BR>
-<BR>
-<A NAME="toc24"></A>
-<H3 CLASS="subsection"><A NAME="htoc43">16.1</A>&nbsp;&nbsp;Standard C</H3>
-<OL CLASS="enumerate" type=1><LI CLASS="li-enumerate">Why does the following code return 0 for most values of <TT>x</TT>? (This
-should be easy.)
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-  int x;
-  return x == (1 &amp;&amp; x);
-</FONT></PRE>
-See the <A HREF="examples/ex30.txt">CIL output</A> for this
-code fragment<BR>
-<BR>
-<LI CLASS="li-enumerate">Why does the following code return 0 and not -1? (Answer: because
-<TT>sizeof</TT> is unsigned, thus the result of the subtraction is unsigned, thus
-the shift is logical.)
-<PRE CLASS="verbatim"><FONT COLOR=blue>
- return ((1 - sizeof(int)) &gt;&gt; 32);
-</FONT></PRE>
-See the <A HREF="examples/ex31.txt">CIL output</A> for this
-code fragment<BR>
-<BR>
-<LI CLASS="li-enumerate">Scoping rules can be tricky. This function returns 5.
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-int x = 5;
-int f() {
-  int x = 3;
-  {
-    extern int x;
-    return x;
-  }
-}
-</FONT></PRE>
-See the <A HREF="examples/ex32.txt">CIL output</A> for this
-code fragment<BR>
-<BR>
-<LI CLASS="li-enumerate">Functions and function pointers are implicitly converted to each other. 
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-int (*pf)(void);
-int f(void) {
-
-   pf = &amp;f; // This looks ok
-   pf = ***f; // Dereference a function?
-   pf(); // Invoke a function pointer?     
-   (****pf)();  // Looks strange but Ok
-   (***************f)(); // Also Ok             
-}
-</FONT></PRE>
-See the <A HREF="examples/ex33.txt">CIL output</A> for this
-code fragment<BR>
-<BR>
-<LI CLASS="li-enumerate">Initializer with designators are one of the hardest parts about ISO C.
-Neither MSVC or GCC implement them fully. GCC comes close though. What is the
-final value of <TT>i.nested.y</TT> and <TT>i.nested.z</TT>? (Answer: 2 and respectively
-6). 
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-struct { 
-   int x; 
-   struct { 
-       int y, z; 
-   } nested;
-} i = { .nested.y = 5, 6, .x = 1, 2 };               
-</FONT></PRE>
-See the <A HREF="examples/ex34.txt">CIL output</A> for this
-code fragment<BR>
-<BR>
-<LI CLASS="li-enumerate">This is from c-torture. This function returns 1.
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-typedef struct
-{
-  char *key;
-  char *value;
-} T1;
-
-typedef struct
-{
-  long type;
-  char *value;
-} T3;
-
-T1 a[] =
-{
-  {
-    "",
-    ((char *)&amp;((T3) {1, (char *) 1}))
-  }
-};
-int main() {
-   T3 *pt3 = (T3*)a[0].value;
-   return pt3-&gt;value;
-}
-</FONT></PRE>
-See the <A HREF="examples/ex35.txt">CIL output</A> for this
-code fragment<BR>
-<BR>
-<LI CLASS="li-enumerate">Another one with constructed literals. This one is legal according to
-the GCC documentation but somehow GCC chokes on (it works in CIL though). This
-code returns 2.
-<PRE CLASS="verbatim"><FONT COLOR=blue>
- return ((int []){1,2,3,4})[1];
-</FONT></PRE>
-See the <A HREF="examples/ex36.txt">CIL output</A> for this
-code fragment<BR>
-<BR>
-<LI CLASS="li-enumerate">In the example below there is one copy of &#8220;bar&#8221; and two copies of
- &#8220;pbar&#8221; (static prototypes at block scope have file scope, while for all
- other types they have block scope). 
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-  int foo() {
-     static bar();
-     static (*pbar)() = bar;
-
-  }
-
-  static bar() { 
-    return 1;
-  }
-
-  static (*pbar)() = 0;
-</FONT></PRE>
-See the <A HREF="examples/ex37.txt">CIL output</A> for this
-code fragment<BR>
-<BR>
-<LI CLASS="li-enumerate">Two years after heavy use of CIL, by us and others, I discovered a bug
- in the parser. The return value of the following function depends on what
- precedence you give to casts and unary minus:
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-  unsigned long foo() {
-    return (unsigned long) - 1 / 8;
-  }
-</FONT></PRE>
-See the <A HREF="examples/ex38.txt">CIL output</A> for this
-code fragment<BR>
-<BR>
-The correct interpretation is <TT>((unsigned long) - 1) / 8</TT>, which is a
- relatively large number, as opposed to <TT>(unsigned long) (- 1 / 8)</TT>, which
- is 0. </OL>
-<A NAME="toc25"></A>
-<H3 CLASS="subsection"><A NAME="htoc44">16.2</A>&nbsp;&nbsp;GCC ugliness</H3><A NAME="sec-ugly-gcc"></A>
-<OL CLASS="enumerate" type=1><LI CLASS="li-enumerate">GCC has generalized lvalues. You can take the address of a lot of
-strange things:
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-  int x, y, z;
-  return &amp;(x ? y : z) - &amp; (x++, x);
-</FONT></PRE>
-See the <A HREF="examples/ex39.txt">CIL output</A> for this
-code fragment<BR>
-<BR>
-<LI CLASS="li-enumerate">GCC lets you omit the second component of a conditional expression.
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-  extern int f();
-  return f() ? : -1; // Returns the result of f unless it is 0
-</FONT></PRE>
-See the <A HREF="examples/ex40.txt">CIL output</A> for this
-code fragment<BR>
-<BR>
-<LI CLASS="li-enumerate">Computed jumps can be tricky. CIL compiles them away in a fairly clean
-way but you are on your own if you try to jump into another function this way.
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-static void *jtab[2]; // A jump table
-static int doit(int x){
- 
-  static int jtab_init = 0;
-  if(!jtab_init) { // Initialize the jump table
-    jtab[0] = &amp;&amp;lbl1;
-    jtab[1] = &amp;&amp;lbl2;
-    jtab_init = 1;
-  }
-  goto *jtab[x]; // Jump through the table
-lbl1:
-  return 0;
-lbl2:
-  return 1;
-}
- 
-int main(void){
-  if (doit(0) != 0) exit(1);
-  if (doit(1) != 1) exit(1);
-  exit(0);
-}
-</FONT></PRE>
-See the <A HREF="examples/ex41.txt">CIL output</A> for this
-code fragment<BR>
-<BR>
-<LI CLASS="li-enumerate">A cute little example that we made up. What is the returned value?
-(Answer: 1); 
-<PRE CLASS="verbatim"><FONT COLOR=blue>
- return ({goto L; 0;}) &amp;&amp; ({L: 5;});
-</FONT></PRE>
-See the <A HREF="examples/ex42.txt">CIL output</A> for this
-code fragment<BR>
-<BR>
-<LI CLASS="li-enumerate"><TT>extern inline</TT> is a strange feature of GNU C. Can you guess what the
-following code computes?
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-extern inline foo(void) { return 1; }
-int firstuse(void) { return foo(); }
-
-// A second, incompatible definition of foo
-int foo(void) { return 2; }
-
-int main() {
-    return foo() + firstuse();
-}
-</FONT></PRE>
-See the <A HREF="examples/ex43.txt">CIL output</A> for this
-code fragment<BR>
-<BR>
-The answer depends on whether the optimizations are turned on. If they are
-then the answer is 3 (the first definition is inlined at all occurrences until
-the second definition). If the optimizations are off, then the first
-definition is ignore (treated like a prototype) and the answer is 4. <BR>
-<BR>
-CIL will misbehave on this example, if the optimizations are turned off (it
- always returns 3).<BR>
-<BR>
-<LI CLASS="li-enumerate">GCC allows you to cast an object of a type T into a union as long as the
-union has a field of that type:
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-union u { 
-   int i; 
-   struct s { 
-      int i1, i2;
-   } s;
-};
-
-union u x = (union u)6;
-
-int main() {
-  struct s y = {1, 2};
-  union u  z = (union u)y;
-}
-</FONT></PRE>
-See the <A HREF="examples/ex44.txt">CIL output</A> for this
-code fragment<BR>
-<BR>
-<LI CLASS="li-enumerate">GCC allows you to use the <TT>__mode__</TT> attribute to specify the size
-of the integer instead of the standard <TT>char</TT>, <TT>short</TT> and so on:
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-int __attribute__ ((__mode__ (  __QI__ ))) i8;
-int __attribute__ ((__mode__ (  __HI__ ))) i16;
-int __attribute__ ((__mode__ (  __SI__ ))) i32;
-int __attribute__ ((__mode__ (  __DI__ ))) i64;
-</FONT></PRE>
-See the <A HREF="examples/ex45.txt">CIL output</A> for this
-code fragment<BR>
-<BR>
-<LI CLASS="li-enumerate">The &#8220;alias&#8221; attribute on a function declaration tells the
- linker to treat this declaration as another name for the specified
- function. CIL will replace the declaration with a trampoline
- function pointing to the specified target.
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-    static int bar(int x, char y) {
-      return x + y;
-    }
-
-    //foo is considered another name for bar.
-    int foo(int x, char y) __attribute__((alias("bar")));
-</FONT></PRE>
-See the <A HREF="examples/ex46.txt">CIL output</A> for this
-code fragment</OL>
-<A NAME="toc26"></A>
-<H3 CLASS="subsection"><A NAME="htoc45">16.3</A>&nbsp;&nbsp;Microsoft VC ugliness</H3>
-This compiler has few extensions, so there is not much to say here.
-<OL CLASS="enumerate" type=1><LI CLASS="li-enumerate">
-Why does the following code return 0 and not -1? (Answer: because of a
-bug in Microsoft Visual C. It thinks that the shift is unsigned just because
-the second operator is unsigned. CIL reproduces this bug when in MSVC mode.)
-<PRE CLASS="verbatim"><FONT COLOR=blue>
- return -3 &gt;&gt; (8 * sizeof(int));
-</FONT></PRE><BR>
-<BR>
-<LI CLASS="li-enumerate">Unnamed fields in a structure seem really strange at first. It seems
-that Microsoft Visual C introduced this extension, then GCC picked it up (but
-in the process implemented it wrongly: in GCC the field <TT>y</TT> overlaps with
-<TT>x</TT>!).
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-struct {
-  int x;
-  struct {
-     int y, z;
-     struct {
-       int u, v;
-     };
- };
-} a;
-return a.x + a.y + a.z + a.u + a.v;
-</FONT></PRE>
-See the <A HREF="examples/ex47.txt">CIL output</A> for this
-code fragment</OL>
-<HR>
-<A HREF="cil015.html"><IMG SRC ="previous_motif.gif" ALT="Previous"></A>
-<A HREF="ciltoc.html"><IMG SRC ="contents_motif.gif" ALT="Up"></A>
-<A HREF="cil017.html"><IMG SRC ="next_motif.gif" ALT="Next"></A>
-</BODY>
-</HTML>
diff --git a/cil/doc/cil017.html b/cil/doc/cil017.html
deleted file mode 100644
index a9e04eb2e..000000000
--- a/cil/doc/cil017.html
+++ /dev/null
@@ -1,53 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
-            "http://www.w3.org/TR/REC-html40/loose.dtd">
-<HTML>
-<HEAD>
-
-
-
-<META http-equiv="Content-Type" content="text/html; charset=ANSI_X3.4-1968">
-<META name="GENERATOR" content="hevea 1.08">
-
-<base target="main">
-<script language="JavaScript">
-<!-- Begin
-function loadTop(url) {
-  parent.location.href= url;
-}
-// -->
-</script>
-<LINK rel="stylesheet" type="text/css" href="cil.css">
-<TITLE>
-Authors
-</TITLE>
-</HEAD>
-<BODY >
-<A HREF="cil016.html"><IMG SRC ="previous_motif.gif" ALT="Previous"></A>
-<A HREF="ciltoc.html"><IMG SRC ="contents_motif.gif" ALT="Up"></A>
-<A HREF="cil018.html"><IMG SRC ="next_motif.gif" ALT="Next"></A>
-<HR>
-
-<H2 CLASS="section"><A NAME="htoc46">17</A>&nbsp;&nbsp;Authors</H2>
-The CIL parser was developed starting from Hugues Casse's <TT>frontc</TT>
-front-end for C although all the files from the <TT>frontc</TT> distribution have
-been changed very extensively. The intermediate language and the elaboration
-stage are all written from scratch. The main author is
-<A HREF="mailto:necula@cs.berkeley.edu">George Necula</A>, with significant
-contributions from <A HREF="mailto:smcpeak@cs.berkeley.edu">Scott McPeak</A>,
-<A HREF="mailto:weimer@cs.berkeley.edu">Westley Weimer</A>,
-<A HREF="mailto:liblit@cs.wisc.edu">Ben Liblit</A>,
-<A HREF="javascript:loadTop('http://www.cs.berkeley.edu/~matth/')">Matt Harren</A>, 
-Raymond To and Aman Bhargava.<BR>
-<BR>
-This work is based upon work supported in part by the National Science
-Foundation under Grants No. 9875171, 0085949 and 0081588, and gifts from
-Microsoft Research. Any opinions, findings, and conclusions or recommendations
-expressed in this material are those of the author(s) and do not necessarily
-reflect the views of the National Science Foundation or the other sponsors.<BR>
-<BR>
-<HR>
-<A HREF="cil016.html"><IMG SRC ="previous_motif.gif" ALT="Previous"></A>
-<A HREF="ciltoc.html"><IMG SRC ="contents_motif.gif" ALT="Up"></A>
-<A HREF="cil018.html"><IMG SRC ="next_motif.gif" ALT="Next"></A>
-</BODY>
-</HTML>
diff --git a/cil/doc/cil018.html b/cil/doc/cil018.html
deleted file mode 100644
index dc039eaf1..000000000
--- a/cil/doc/cil018.html
+++ /dev/null
@@ -1,71 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
-            "http://www.w3.org/TR/REC-html40/loose.dtd">
-<HTML>
-<HEAD>
-
-
-
-<META http-equiv="Content-Type" content="text/html; charset=ANSI_X3.4-1968">
-<META name="GENERATOR" content="hevea 1.08">
-
-<base target="main">
-<script language="JavaScript">
-<!-- Begin
-function loadTop(url) {
-  parent.location.href= url;
-}
-// -->
-</script>
-<LINK rel="stylesheet" type="text/css" href="cil.css">
-<TITLE>
-License
-</TITLE>
-</HEAD>
-<BODY >
-<A HREF="cil017.html"><IMG SRC ="previous_motif.gif" ALT="Previous"></A>
-<A HREF="ciltoc.html"><IMG SRC ="contents_motif.gif" ALT="Up"></A>
-<A HREF="cil019.html"><IMG SRC ="next_motif.gif" ALT="Next"></A>
-<HR>
-
-<H2 CLASS="section"><A NAME="htoc47">18</A>&nbsp;&nbsp;License</H2>
-Copyright (c) 2001-2005, 
-<UL CLASS="itemize"><LI CLASS="li-itemize">
-George C. Necula &lt;necula@cs.berkeley.edu&gt;
-<LI CLASS="li-itemize">Scott McPeak &lt;smcpeak@cs.berkeley.edu&gt;
-<LI CLASS="li-itemize">Wes Weimer &lt;weimer@cs.berkeley.edu&gt;
-<LI CLASS="li-itemize">Ben Liblit &lt;liblit@cs.wisc.edu&gt;
-</UL>
-All rights reserved.<BR>
-<BR>
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:<BR>
-<BR>
-1. Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.<BR>
-<BR>
-2. Redistributions in binary form must reproduce the above copyright notice,
-this list of conditions and the following disclaimer in the documentation
-and/or other materials provided with the distribution.<BR>
-<BR>
-3. The names of the contributors may not be used to endorse or promote
-products derived from this software without specific prior written
-permission.<BR>
-<BR>
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
-LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGE.<BR>
-<BR>
-<HR>
-<A HREF="cil017.html"><IMG SRC ="previous_motif.gif" ALT="Previous"></A>
-<A HREF="ciltoc.html"><IMG SRC ="contents_motif.gif" ALT="Up"></A>
-<A HREF="cil019.html"><IMG SRC ="next_motif.gif" ALT="Next"></A>
-</BODY>
-</HTML>
diff --git a/cil/doc/cil019.html b/cil/doc/cil019.html
deleted file mode 100644
index 84e3f8b60..000000000
--- a/cil/doc/cil019.html
+++ /dev/null
@@ -1,45 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
-            "http://www.w3.org/TR/REC-html40/loose.dtd">
-<HTML>
-<HEAD>
-
-
-
-<META http-equiv="Content-Type" content="text/html; charset=ANSI_X3.4-1968">
-<META name="GENERATOR" content="hevea 1.08">
-
-<base target="main">
-<script language="JavaScript">
-<!-- Begin
-function loadTop(url) {
-  parent.location.href= url;
-}
-// -->
-</script>
-<LINK rel="stylesheet" type="text/css" href="cil.css">
-<TITLE>
-Bug reports
-</TITLE>
-</HEAD>
-<BODY >
-<A HREF="cil018.html"><IMG SRC ="previous_motif.gif" ALT="Previous"></A>
-<A HREF="ciltoc.html"><IMG SRC ="contents_motif.gif" ALT="Up"></A>
-<A HREF="changes.html"><IMG SRC ="next_motif.gif" ALT="Next"></A>
-<HR>
-
-<H2 CLASS="section"><A NAME="htoc48">19</A>&nbsp;&nbsp;Bug reports</H2>
-We are certain that there are still some remaining bugs in CIL. If you find
-one please file a bug report in our Source Forge space 
-<A HREF="javascript:loadTop('http://sourceforge.net/projects/cil')">http://sourceforge.net/projects/cil</A>. <BR>
-<BR>
-You can find there the latest announcements, a source distribution,
-bug report submission instructions and a mailing list: cil-users[at
-sign]lists.sourceforge.net. Please use this list to ask questions about CIL,
-as it will ensure your message is viewed by a broad audience. <BR>
-<BR>
-<HR>
-<A HREF="cil018.html"><IMG SRC ="previous_motif.gif" ALT="Previous"></A>
-<A HREF="ciltoc.html"><IMG SRC ="contents_motif.gif" ALT="Up"></A>
-<A HREF="changes.html"><IMG SRC ="next_motif.gif" ALT="Next"></A>
-</BODY>
-</HTML>
diff --git a/cil/doc/cilly.html b/cil/doc/cilly.html
deleted file mode 100644
index 1a2875815..000000000
--- a/cil/doc/cilly.html
+++ /dev/null
@@ -1,187 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
-            "http://www.w3.org/TR/REC-html40/loose.dtd">
-<HTML>
-<HEAD>
-
-
-
-<META http-equiv="Content-Type" content="text/html; charset=ANSI_X3.4-1968">
-<META name="GENERATOR" content="hevea 1.08">
-
-<base target="main">
-<script language="JavaScript">
-<!-- Begin
-function loadTop(url) {
-  parent.location.href= url;
-}
-// -->
-</script>
-<LINK rel="stylesheet" type="text/css" href="cil.css">
-<TITLE>
-How to Use CIL
-</TITLE>
-</HEAD>
-<BODY >
-<A HREF="cil004.html"><IMG SRC ="previous_motif.gif" ALT="Previous"></A>
-<A HREF="ciltoc.html"><IMG SRC ="contents_motif.gif" ALT="Up"></A>
-<A HREF="cil006.html"><IMG SRC ="next_motif.gif" ALT="Next"></A>
-<HR>
-
-<H2 CLASS="section"><A NAME="htoc5">5</A>&nbsp;&nbsp;How to Use CIL</H2><A NAME="sec-cil"></A><BR>
-<BR>
-There are two predominant ways to use CIL to write a program analysis or
-transformation. The first is to phrase your analysis as a module that is
-called by our existing driver. The second is to use CIL as a stand-alone
-library. We highly recommend that you use <TT>cilly</TT>, our driver. <BR>
-<BR>
-<A NAME="toc1"></A>
-<H3 CLASS="subsection"><A NAME="htoc6">5.1</A>&nbsp;&nbsp;Using <TT>cilly</TT>, the CIL driver</H3>
-The most common way to use CIL is to write an Ocaml module containing your
-analysis and transformation, which you then link into our boilerplate
-driver application called <TT>cilly</TT>. <TT>cilly</TT> is a Perl script that
-processes and mimics <TT>GCC</TT> and <TT>MSVC</TT> command-line arguments and then
-calls <TT>cilly.byte.exe</TT> or <TT>cilly.asm.exe</TT> (CIL's Ocaml executable). <BR>
-<BR>
-An example of such module is <TT>logwrites.ml</TT>, a transformation that is
-distributed with CIL and whose purpose is to instrument code to print the
-addresses of memory locations being written. (We plan to release a
-C-language interface to CIL so that you can write your analyses in C
-instead of Ocaml.) See Section&nbsp;<A HREF="ext.html#sec-Extension">8</A> for a survey of other example
-modules. <BR>
-<BR>
-Assuming that you have written <TT>/home/necula/logwrites.ml</TT>, 
-here is how you use it: 
-<OL CLASS="enumerate" type=1><LI CLASS="li-enumerate">Modify <TT>logwrites.ml</TT> so that it includes a CIL &#8220;feature
- descriptor&#8221; like this: 
-<PRE CLASS="verbatim">
-let feature : featureDescr = 
-  { fd_name = "logwrites";              
-    fd_enabled = ref false;
-    fd_description = "generation of code to log memory writes";
-    fd_extraopt = [];
-    fd_doit = 
-    (function (f: file) -&gt; 
-      let lwVisitor = new logWriteVisitor in
-      visitCilFileSameGlobals lwVisitor f)
-  } 
-</PRE>The <TT>fd_name</TT> field names the feature and its associated
- command-line arguments. The <TT>fd_enabled</TT> field is a <TT>bool ref</TT>.
- &#8220;<TT>fd_doit</TT>&#8221; will be invoked if <TT>!fd_enabled</TT> is true after
- argument parsing, so initialize the ref cell to true if you want
- this feature to be enabled by default.<BR>
-<BR>
-When the user passes the <TT>--dologwrites</TT>
- command-line option to <TT>cilly</TT>, the variable associated with the
- <TT>fd_enabled</TT> flag is set and the <TT>fd_doit</TT> function is called
- on the <TT>Cil.file</TT> that represents the merger (see Section&nbsp;<A HREF="merger.html#sec-merger">13</A>) of
- all C files listed as arguments. <BR>
-<BR>
-<LI CLASS="li-enumerate">Invoke <TT>configure</TT> with the arguments
-<PRE CLASS="verbatim">
-./configure EXTRASRCDIRS=/home/necula EXTRAFEATURES=logwrites
-</PRE>
- This step works if each feature is packaged into its own ML file, and the
-name of the entry point in the file is <TT>feature</TT>.<BR>
-<BR>
-An alternative way to specify the new features is to change the build files
-yourself, as explained below. You'll need to use this method if a single
-feature is split across multiple files.
-<OL CLASS="enumerate" type=a><LI CLASS="li-enumerate">
- Put <TT>logwrites.ml</TT> in the <TT>src</TT> or <TT>src/ext</TT> directory. This
- will make sure that <TT>make</TT> can find it. If you want to put it in some
- other directory, modify <TT>Makefile.in</TT> and add to <TT>SOURCEDIRS</TT> your
- directory. Alternately, you can create a symlink from <TT>src</TT> or
- <TT>src/ext</TT> to your file.<BR>
-<BR>
-<LI CLASS="li-enumerate">Modify the <TT>Makefile.in</TT> and add your module to the 
- <TT>CILLY_MODULES</TT> or
- <TT>CILLY_LIBRARY_MODULES</TT> variables. The order of the modules matters. Add
- your modules somewhere after <TT>cil</TT> and before <TT>main</TT>.<BR>
-<BR>
-<LI CLASS="li-enumerate">If you have any helper files for your module, add those to
- the makefile in the same way. e.g.:
-<PRE CLASS="verbatim">
-CILLY_MODULES = $(CILLY_LIBRARY_MODULES) \
-                myutilities1 myutilities2 logwrites \
-                main
-</PRE>
- Again, order is important: <TT>myutilities2.ml</TT> will be able to refer
- to Myutilities1 but not Logwrites. If you have any ocamllex or ocamlyacc
- files, add them to both <TT>CILLY_MODULES</TT> and either <TT>MLLS</TT> or
- <TT>MLYS</TT>.<BR>
-<BR>
-<LI CLASS="li-enumerate">Modify <TT>main.ml</TT> so that your new feature descriptor appears in
- the global list of CIL features. 
-<PRE CLASS="verbatim">
-let features : C.featureDescr list = 
-  [ Logcalls.feature;
-    Oneret.feature;    
-    Heapify.feature1;  
-    Heapify.feature2;
-    makeCFGFeature; 
-    Partial.feature;
-    Simplemem.feature;
-    Logwrites.feature;  (* add this line to include the logwrites feature! *)
-  ] 
-  @ Feature_config.features 
-</PRE>
- Features are processed in the order they appear on this list. Put
- your feature last on the list if you plan to run any of CIL's
- built-in features (such as makeCFGfeature) before your own.</OL><BR>
-Standard code in <TT>cilly</TT> takes care of adding command-line arguments,
- printing the description, and calling your function automatically. 
- Note: do not worry about introducing new bugs into CIL by adding a single
- line to the feature list. <BR>
-<BR>
-<LI CLASS="li-enumerate">Now you can invoke the <TT>cilly</TT> application on a preprocessed file, or
- instead use the <TT>cilly</TT> driver which provides a convenient compiler-like
- interface to <TT>cilly</TT>. See Section&nbsp;<A HREF="cil007.html#sec-driver">7</A> for details using <TT>cilly</TT>.
- Remember to enable your analysis by passing the right argument (e.g.,
- <TT>--dologwrites</TT>). </OL>
-<A NAME="toc2"></A>
-<H3 CLASS="subsection"><A NAME="htoc7">5.2</A>&nbsp;&nbsp;Using CIL as a library</H3>
-CIL can also be built as a library that is called from your stand-alone
-application. Add <TT>cil/src</TT>, <TT>cil/src/frontc</TT>, <TT>cil/obj/x86_LINUX</TT>
-(or <TT>cil/obj/x86_WIN32</TT>) to your Ocaml project <TT>-I</TT> include paths.
-Building CIL will also build the library <TT>cil/obj/*/cil.cma</TT> (or
-<TT>cil/obj/*/cil.cmxa</TT>). You can then link your application against that
-library. <BR>
-<BR>
-You can call the <TT>Frontc.parse: string -&gt; unit -&gt; Cil.file</TT> function with
-the name of a file containing the output of the C preprocessor.
-The <TT>Mergecil.merge: Cil.file list -&gt; string -&gt; Cil.file</TT> function merges
-multiple files. You can then invoke your analysis function on the resulting
-<TT>Cil.file</TT> data structure. You might want to call
-<TT>Rmtmps.removeUnusedTemps</TT> first to clean up the prototypes and variables
-that are not used. Then you can call the function <TT>Cil.dumpFile:
-cilPrinter -&gt; out_channel -&gt; Cil.file -&gt; unit</TT> to print the file to a
-given output channel. A good <TT>cilPrinter</TT> to use is
-<TT>defaultCilPrinter</TT>. <BR>
-<BR>
-Check out <TT>src/main.ml</TT> and <TT>bin/cilly</TT> for other good ideas
-about high-level file processing. Again, we highly recommend that you just
-our <TT>cilly</TT> driver so that you can avoid spending time re-inventing the
-wheel to provide drop-in support for standard <TT>makefile</TT>s. <BR>
-<BR>
-Here is a concrete example of compiling and linking your project against
-CIL. Imagine that your program analysis or transformation is contained in
-the single file <TT>main.ml</TT>. 
-<PRE CLASS="verbatim">
-$ ocamlopt -c -I $(CIL)/obj/x86_LINUX/ main.ml
-$ ocamlopt -ccopt -L$(CIL)/obj/x86_LINUX/ -o main unix.cmxa str.cmxa \ 
-        $(CIL)/obj/x86_LINUX/cil.cmxa main.cmx
-</PRE>
-The first line compiles your analysis, the second line links it against CIL
-(as a library) and the Ocaml Unix library. For more information about
-compiling and linking Ocaml programs, see the Ocaml home page
-at <A HREF="javascript:loadTop('http://caml.inria.fr/ocaml/')">http://caml.inria.fr/ocaml/</A>. <BR>
-<BR>
-In the next section we give an overview of the API that you can use
-to write your analysis and transformation. <BR>
-<BR>
-<HR>
-<A HREF="cil004.html"><IMG SRC ="previous_motif.gif" ALT="Previous"></A>
-<A HREF="ciltoc.html"><IMG SRC ="contents_motif.gif" ALT="Up"></A>
-<A HREF="cil006.html"><IMG SRC ="next_motif.gif" ALT="Next"></A>
-</BODY>
-</HTML>
diff --git a/cil/doc/cilpp.haux b/cil/doc/cilpp.haux
deleted file mode 100644
index 1b9fa16b7..000000000
--- a/cil/doc/cilpp.haux
+++ /dev/null
@@ -1,64 +0,0 @@
-\@addtocsec{htoc}{1}{0}{\@print{1}\quad{}Introduction}
-\@addtocsec{htoc}{2}{0}{\@print{2}\quad{}Installation}
-\@addtocsec{htoc}{3}{0}{\@print{3}\quad{}Distribution Contents}
-\@addtocsec{htoc}{4}{0}{\@print{4}\quad{}Compiling C to CIL}
-\newlabel{sec-cabs2cil}{{4}{X}}
-\@addtocsec{htoc}{5}{0}{\@print{5}\quad{}How to Use CIL}
-\newlabel{sec-cil}{{5}{X}}
-\@addtocsec{htoc}{6}{1}{\@print{5.1}\quad{}Using \t{cilly}, the CIL driver}
-\@addtocsec{htoc}{7}{1}{\@print{5.2}\quad{}Using CIL as a library}
-\@addtocsec{htoc}{8}{0}{\@print{6}\quad{}CIL API Documentation}
-\newlabel{sec-api}{{6}{X}}
-\@addtocsec{htoc}{9}{1}{\@print{6.1}\quad{}Using the visitor}
-\newlabel{sec-visitor}{{6.1}{X}}
-\@addtocsec{htoc}{10}{1}{\@print{6.2}\quad{}Interpreted Constructors and Deconstructors}
-\@addtocsec{htoc}{11}{2}{\@print{6.2.1}\quad{}Performance considerations for interpreted constructors}
-\@addtocsec{htoc}{12}{1}{\@print{6.3}\quad{}Printing and Debugging support}
-\@addtocsec{htoc}{13}{1}{\@print{6.4}\quad{}Attributes}
-\newlabel{sec-attrib}{{6.4}{X}}
-\@addtocsec{htoc}{14}{0}{\@print{7}\quad{}The CIL Driver}
-\newlabel{sec-driver}{{7}{X}}
-\@addtocsec{htoc}{15}{1}{\@print{7.1}\quad{}\t{cilly} Options}
-\@addtocsec{htoc}{16}{1}{\@print{7.2}\quad{}\t{cilly.asm} Options}
-\newlabel{sec-cilly-asm-options}{{7.2}{X}}
-\@addtocsec{htoc}{17}{0}{\@print{8}\quad{}Library of CIL Modules}
-\newlabel{sec-Extension}{{8}{X}}
-\@addtocsec{htoc}{18}{1}{\@print{8.1}\quad{}Control-Flow Graphs}
-\newlabel{sec-cfg}{{8.1}{X}}
-\@addtocsec{htoc}{19}{2}{\@print{8.1.1}\quad{}The CFG module (new in CIL 1.3.5)}
-\@addtocsec{htoc}{20}{2}{\@print{8.1.2}\quad{}Simplified control flow}
-\@addtocsec{htoc}{21}{1}{\@print{8.2}\quad{}Data flow analysis framework}
-\@addtocsec{htoc}{22}{1}{\@print{8.3}\quad{}Dominators}
-\@addtocsec{htoc}{23}{1}{\@print{8.4}\quad{}Points-to Analysis}
-\@addtocsec{htoc}{24}{1}{\@print{8.5}\quad{}StackGuard}
-\@addtocsec{htoc}{25}{1}{\@print{8.6}\quad{}Heapify}
-\@addtocsec{htoc}{26}{1}{\@print{8.7}\quad{}One Return}
-\@addtocsec{htoc}{27}{1}{\@print{8.8}\quad{}Partial Evaluation and Constant Folding}
-\@addtocsec{htoc}{28}{1}{\@print{8.9}\quad{}Reaching Definitions}
-\@addtocsec{htoc}{29}{1}{\@print{8.10}\quad{}Available Expressions}
-\@addtocsec{htoc}{30}{1}{\@print{8.11}\quad{}Liveness Analysis}
-\@addtocsec{htoc}{31}{1}{\@print{8.12}\quad{}Dead Code Elimination}
-\@addtocsec{htoc}{32}{1}{\@print{8.13}\quad{}Simple Memory Operations}
-\@addtocsec{htoc}{33}{1}{\@print{8.14}\quad{}Simple Three-Address Code}
-\@addtocsec{htoc}{34}{1}{\@print{8.15}\quad{}Converting C to C++}
-\@addtocsec{htoc}{35}{0}{\@print{9}\quad{}Controlling CIL}
-\@addtocsec{htoc}{36}{0}{\@print{10}\quad{}GCC Extensions}
-\@addtocsec{htoc}{37}{0}{\@print{11}\quad{}CIL Limitations}
-\@addtocsec{htoc}{38}{0}{\@print{12}\quad{}Known Bugs and Limitations}
-\@addtocsec{htoc}{39}{0}{\@print{13}\quad{}Using the merger}
-\newlabel{sec-merger}{{13}{X}}
-\@addtocsec{htoc}{40}{0}{\@print{14}\quad{}Using the patcher}
-\newlabel{sec-patcher}{{14}{X}}
-\@addtocsec{htoc}{41}{0}{\@print{15}\quad{}Debugging support}
-\newlabel{sec-debugger}{{15}{X}}
-\@addtocsec{htoc}{42}{0}{\@print{16}\quad{}Who Says C is Simple?}
-\newlabel{sec-simplec}{{16}{X}}
-\@addtocsec{htoc}{43}{1}{\@print{16.1}\quad{}Standard C}
-\@addtocsec{htoc}{44}{1}{\@print{16.2}\quad{}GCC ugliness}
-\newlabel{sec-ugly-gcc}{{16.2}{X}}
-\@addtocsec{htoc}{45}{1}{\@print{16.3}\quad{}Microsoft VC ugliness}
-\@addtocsec{htoc}{46}{0}{\@print{17}\quad{}Authors}
-\@addtocsec{htoc}{47}{0}{\@print{18}\quad{}License}
-\@addtocsec{htoc}{48}{0}{\@print{19}\quad{}Bug reports}
-\@addtocsec{htoc}{49}{0}{\@print{20}\quad{}Changes}
-\newlabel{sec-changes}{{20}{X}}
diff --git a/cil/doc/cilpp.htoc b/cil/doc/cilpp.htoc
deleted file mode 100644
index d5bc0e5e5..000000000
--- a/cil/doc/cilpp.htoc
+++ /dev/null
@@ -1,65 +0,0 @@
-\begin{tocenv}
-\tocitem \@locref{htoc1}{\begin{@norefs}\@print{1}\quad{}Introduction\end{@norefs}}
-\tocitem \@locref{htoc2}{\begin{@norefs}\@print{2}\quad{}Installation\end{@norefs}}
-\tocitem \@locref{htoc3}{\begin{@norefs}\@print{3}\quad{}Distribution Contents\end{@norefs}}
-\tocitem \@locref{htoc4}{\begin{@norefs}\@print{4}\quad{}Compiling C to CIL\end{@norefs}}
-\tocitem \@locref{htoc5}{\begin{@norefs}\@print{5}\quad{}How to Use CIL\end{@norefs}}
-\begin{tocenv}
-\tocitem \@locref{htoc6}{\begin{@norefs}\@print{5.1}\quad{}Using \t{cilly}, the CIL driver\end{@norefs}}
-\tocitem \@locref{htoc7}{\begin{@norefs}\@print{5.2}\quad{}Using CIL as a library\end{@norefs}}
-\end{tocenv}
-\tocitem \@locref{htoc8}{\begin{@norefs}\@print{6}\quad{}CIL API Documentation\end{@norefs}}
-\begin{tocenv}
-\tocitem \@locref{htoc9}{\begin{@norefs}\@print{6.1}\quad{}Using the visitor\end{@norefs}}
-\tocitem \@locref{htoc10}{\begin{@norefs}\@print{6.2}\quad{}Interpreted Constructors and Deconstructors\end{@norefs}}
-\begin{tocenv}
-\tocitem \@locref{htoc11}{\begin{@norefs}\@print{6.2.1}\quad{}Performance considerations for interpreted constructors\end{@norefs}}
-\end{tocenv}
-\tocitem \@locref{htoc12}{\begin{@norefs}\@print{6.3}\quad{}Printing and Debugging support\end{@norefs}}
-\tocitem \@locref{htoc13}{\begin{@norefs}\@print{6.4}\quad{}Attributes\end{@norefs}}
-\end{tocenv}
-\tocitem \@locref{htoc14}{\begin{@norefs}\@print{7}\quad{}The CIL Driver\end{@norefs}}
-\begin{tocenv}
-\tocitem \@locref{htoc15}{\begin{@norefs}\@print{7.1}\quad{}\t{cilly} Options\end{@norefs}}
-\tocitem \@locref{htoc16}{\begin{@norefs}\@print{7.2}\quad{}\t{cilly.asm} Options\end{@norefs}}
-\end{tocenv}
-\tocitem \@locref{htoc17}{\begin{@norefs}\@print{8}\quad{}Library of CIL Modules\end{@norefs}}
-\begin{tocenv}
-\tocitem \@locref{htoc18}{\begin{@norefs}\@print{8.1}\quad{}Control-Flow Graphs\end{@norefs}}
-\begin{tocenv}
-\tocitem \@locref{htoc19}{\begin{@norefs}\@print{8.1.1}\quad{}The CFG module (new in CIL 1.3.5)\end{@norefs}}
-\tocitem \@locref{htoc20}{\begin{@norefs}\@print{8.1.2}\quad{}Simplified control flow\end{@norefs}}
-\end{tocenv}
-\tocitem \@locref{htoc21}{\begin{@norefs}\@print{8.2}\quad{}Data flow analysis framework\end{@norefs}}
-\tocitem \@locref{htoc22}{\begin{@norefs}\@print{8.3}\quad{}Dominators\end{@norefs}}
-\tocitem \@locref{htoc23}{\begin{@norefs}\@print{8.4}\quad{}Points-to Analysis\end{@norefs}}
-\tocitem \@locref{htoc24}{\begin{@norefs}\@print{8.5}\quad{}StackGuard\end{@norefs}}
-\tocitem \@locref{htoc25}{\begin{@norefs}\@print{8.6}\quad{}Heapify\end{@norefs}}
-\tocitem \@locref{htoc26}{\begin{@norefs}\@print{8.7}\quad{}One Return\end{@norefs}}
-\tocitem \@locref{htoc27}{\begin{@norefs}\@print{8.8}\quad{}Partial Evaluation and Constant Folding\end{@norefs}}
-\tocitem \@locref{htoc28}{\begin{@norefs}\@print{8.9}\quad{}Reaching Definitions\end{@norefs}}
-\tocitem \@locref{htoc29}{\begin{@norefs}\@print{8.10}\quad{}Available Expressions\end{@norefs}}
-\tocitem \@locref{htoc30}{\begin{@norefs}\@print{8.11}\quad{}Liveness Analysis\end{@norefs}}
-\tocitem \@locref{htoc31}{\begin{@norefs}\@print{8.12}\quad{}Dead Code Elimination\end{@norefs}}
-\tocitem \@locref{htoc32}{\begin{@norefs}\@print{8.13}\quad{}Simple Memory Operations\end{@norefs}}
-\tocitem \@locref{htoc33}{\begin{@norefs}\@print{8.14}\quad{}Simple Three-Address Code\end{@norefs}}
-\tocitem \@locref{htoc34}{\begin{@norefs}\@print{8.15}\quad{}Converting C to C++\end{@norefs}}
-\end{tocenv}
-\tocitem \@locref{htoc35}{\begin{@norefs}\@print{9}\quad{}Controlling CIL\end{@norefs}}
-\tocitem \@locref{htoc36}{\begin{@norefs}\@print{10}\quad{}GCC Extensions\end{@norefs}}
-\tocitem \@locref{htoc37}{\begin{@norefs}\@print{11}\quad{}CIL Limitations\end{@norefs}}
-\tocitem \@locref{htoc38}{\begin{@norefs}\@print{12}\quad{}Known Bugs and Limitations\end{@norefs}}
-\tocitem \@locref{htoc39}{\begin{@norefs}\@print{13}\quad{}Using the merger\end{@norefs}}
-\tocitem \@locref{htoc40}{\begin{@norefs}\@print{14}\quad{}Using the patcher\end{@norefs}}
-\tocitem \@locref{htoc41}{\begin{@norefs}\@print{15}\quad{}Debugging support\end{@norefs}}
-\tocitem \@locref{htoc42}{\begin{@norefs}\@print{16}\quad{}Who Says C is Simple?\end{@norefs}}
-\begin{tocenv}
-\tocitem \@locref{htoc43}{\begin{@norefs}\@print{16.1}\quad{}Standard C\end{@norefs}}
-\tocitem \@locref{htoc44}{\begin{@norefs}\@print{16.2}\quad{}GCC ugliness\end{@norefs}}
-\tocitem \@locref{htoc45}{\begin{@norefs}\@print{16.3}\quad{}Microsoft VC ugliness\end{@norefs}}
-\end{tocenv}
-\tocitem \@locref{htoc46}{\begin{@norefs}\@print{17}\quad{}Authors\end{@norefs}}
-\tocitem \@locref{htoc47}{\begin{@norefs}\@print{18}\quad{}License\end{@norefs}}
-\tocitem \@locref{htoc48}{\begin{@norefs}\@print{19}\quad{}Bug reports\end{@norefs}}
-\tocitem \@locref{htoc49}{\begin{@norefs}\@print{20}\quad{}Changes\end{@norefs}}
-\end{tocenv}
diff --git a/cil/doc/ciltoc.html b/cil/doc/ciltoc.html
deleted file mode 100644
index 7fe4c80e5..000000000
--- a/cil/doc/ciltoc.html
+++ /dev/null
@@ -1,92 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
-            "http://www.w3.org/TR/REC-html40/loose.dtd">
-<HTML>
-
-<HEAD>
-
-
-<META http-equiv="Content-Type" content="text/html; charset=ANSI_X3.4-1968">
-<META name="GENERATOR" content="hevea 1.08">
-
-<base target="main">
-<script language="JavaScript">
-<!-- Begin
-function loadTop(url) {
-  parent.location.href= url;
-}
-// -->
-</script>
-<LINK rel="stylesheet" type="text/css" href="cil.css">
-</HEAD>
-
-<BODY >
-<!--HEVEA command line is: /usr/bin/hevea -exec xxdate.exe ../../cilpp -->
-<!--HACHA command line is: /usr/bin/hacha -o ciltoc.html cil.html -->
-
-
-
-<TABLE CLASS="title">
-<TR><TD></TD>
-</TR></TABLE><BR>
-<UL>
-<LI><A HREF="cil001.html">Introduction</A>
-<LI><A HREF="cil002.html">Installation</A>
-<LI><A HREF="cil003.html">Distribution Contents</A>
-<LI><A HREF="cil004.html">Compiling C to CIL</A>
-<LI><A HREF="cilly.html">How to Use CIL</A>
-<UL>
-<LI><A HREF="cilly.html#toc1">Using <TT>cilly</TT>, the CIL driver</A>
-<LI><A HREF="cilly.html#toc2">Using CIL as a library</A>
-</UL>
-<LI><A HREF="cil006.html">CIL API Documentation</A>
-<UL>
-<LI><A HREF="cil006.html#toc3">Using the visitor</A>
-<LI><A HREF="cil006.html#toc4">Interpreted Constructors and Deconstructors</A>
-<LI><A HREF="cil006.html#toc5">Printing and Debugging support</A>
-<LI><A HREF="cil006.html#toc6">Attributes</A>
-</UL>
-<LI><A HREF="cil007.html">The CIL Driver</A>
-<UL>
-<LI><A HREF="cil007.html#toc7"><TT>cilly</TT> Options</A>
-<LI><A HREF="cil007.html#toc8"><TT>cilly.asm</TT> Options</A>
-</UL>
-<LI><A HREF="ext.html">Library of CIL Modules</A>
-<UL>
-<LI><A HREF="ext.html#toc9">Control-Flow Graphs</A>
-<LI><A HREF="ext.html#toc10">Data flow analysis framework</A>
-<LI><A HREF="ext.html#toc11">Dominators</A>
-<LI><A HREF="ext.html#toc12">Points-to Analysis</A>
-<LI><A HREF="ext.html#toc13">StackGuard</A>
-<LI><A HREF="ext.html#toc14">Heapify</A>
-<LI><A HREF="ext.html#toc15">One Return</A>
-<LI><A HREF="ext.html#toc16">Partial Evaluation and Constant Folding</A>
-<LI><A HREF="ext.html#toc17">Reaching Definitions</A>
-<LI><A HREF="ext.html#toc18">Available Expressions</A>
-<LI><A HREF="ext.html#toc19">Liveness Analysis</A>
-<LI><A HREF="ext.html#toc20">Dead Code Elimination</A>
-<LI><A HREF="ext.html#toc21">Simple Memory Operations</A>
-<LI><A HREF="ext.html#toc22">Simple Three-Address Code</A>
-<LI><A HREF="ext.html#toc23">Converting C to C++</A>
-</UL>
-<LI><A HREF="cil009.html">Controlling CIL</A>
-<LI><A HREF="cil010.html">GCC Extensions</A>
-<LI><A HREF="cil011.html">CIL Limitations</A>
-<LI><A HREF="cil012.html">Known Bugs and Limitations</A>
-<LI><A HREF="merger.html">Using the merger</A>
-<LI><A HREF="patcher.html">Using the patcher</A>
-<LI><A HREF="cil015.html">Debugging support</A>
-<LI><A HREF="cil016.html">Who Says C is Simple?</A>
-<UL>
-<LI><A HREF="cil016.html#toc24">Standard C</A>
-<LI><A HREF="cil016.html#toc25">GCC ugliness</A>
-<LI><A HREF="cil016.html#toc26">Microsoft VC ugliness</A>
-</UL>
-<LI><A HREF="cil017.html">Authors</A>
-<LI><A HREF="cil018.html">License</A>
-<LI><A HREF="cil019.html">Bug reports</A>
-<LI><A HREF="changes.html">Changes</A>
-</UL>
-<!--FOOTER-->
-<HR SIZE=2><BLOCKQUOTE CLASS="quote"><EM>This document was translated from L<sup>A</sup>T<sub>E</sub>X by
-</EM><A HREF="http://pauillac.inria.fr/~maranget/hevea/index.html"><EM>H<FONT SIZE=2><sup>E</sup></FONT>V<FONT SIZE=2><sup>E</sup></FONT>A</EM></A><EM>.</EM></BLOCKQUOTE></BODY>
-</HTML>
diff --git a/cil/doc/contents_motif.gif b/cil/doc/contents_motif.gif
deleted file mode 100644
index 5d3d016702478a74ae10ef900888bdd3c379aa3b..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 316
zcmZ?wbhEHb6krfw_{abP1q~Da{|7M?|0yXbc;*)57nP)@D5MqT=PE=5_$p-PCZ?xa
zDU{?V>s1uwGARCJVPs%nX3zm?0h!{!^!$#Qv4ElRF^Oazg%$xP4gr?K20Vui7@8Cq
z96<~aYG7bFXduDE)_gF*K!Sm#!2w8tc?<#^EKH0F0@&nWDh*(OL4iR)0LC#eU{Fv%
q765UP1Rz|v0LZ;S{U8800mw%-4`?77pMe2nUBZC|MrJMs25SIR**_xy

diff --git a/cil/doc/examples/ex1.txt b/cil/doc/examples/ex1.txt
deleted file mode 100644
index 2fe6c2105..000000000
--- a/cil/doc/examples/ex1.txt
+++ /dev/null
@@ -1,16 +0,0 @@
-/* Generated by CIL v. 1.3.5 */
-/* print_CIL_Input is true */
-
-#line 1 "cilcode.tmp/ex1.c"
-long x  ;
-#line 3 "cilcode.tmp/ex1.c"
-static long long y  ;
-#line 6 "cilcode.tmp/ex1.c"
-int main(void) 
-{ 
-
-  {
-#line 6
-  return ((int )((long long )x + y));
-}
-}
diff --git a/cil/doc/examples/ex10.txt b/cil/doc/examples/ex10.txt
deleted file mode 100644
index 7213b4c37..000000000
--- a/cil/doc/examples/ex10.txt
+++ /dev/null
@@ -1,10 +0,0 @@
-/* Generated by CIL v. 1.3.5 */
-/* print_CIL_Input is true */
-
-#line 1 "cilcode.tmp/ex10.c"
-char foo[13]  = 
-#line 1
-  {      (char )'f',      (char )'o',      (char )'o',      (char )' ', 
-        (char )'p',      (char )'l',      (char )'u',      (char )'s', 
-        (char )' ',      (char )'b',      (char )'a',      (char )'r', 
-        (char )'\000'};
diff --git a/cil/doc/examples/ex11.txt b/cil/doc/examples/ex11.txt
deleted file mode 100644
index 683df519d..000000000
--- a/cil/doc/examples/ex11.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-/* Generated by CIL v. 1.3.5 */
-/* print_CIL_Input is true */
-
-#line 1 "cilcode.tmp/ex11.c"
-char *foo  =    (char *)"foo  plus  bar ";
diff --git a/cil/doc/examples/ex12.txt b/cil/doc/examples/ex12.txt
deleted file mode 100644
index d04d83d82..000000000
--- a/cil/doc/examples/ex12.txt
+++ /dev/null
@@ -1,32 +0,0 @@
-/* Generated by CIL v. 1.3.5 */
-/* print_CIL_Input is true */
-
-#line 2 "cilcode.tmp/ex12.c"
-struct foo {
-   int f1 ;
-   int f2 ;
-};
-#line 1 "cilcode.tmp/ex12.c"
-int main(void) 
-{ int x ;
-  struct foo a[3] ;
-
-  {
-#line 1
-  x = 5;
-#line 2
-  a[0].f1 = 1;
-#line 2
-  a[0].f2 = 2;
-#line 2
-  a[1].f1 = 3;
-#line 2
-  a[1].f2 = 4;
-#line 2
-  a[2].f1 = 5;
-#line 2
-  a[2].f2 = 0;
-#line 3
-  return (0);
-}
-}
diff --git a/cil/doc/examples/ex13.txt b/cil/doc/examples/ex13.txt
deleted file mode 100644
index 6486ad6ee..000000000
--- a/cil/doc/examples/ex13.txt
+++ /dev/null
@@ -1,21 +0,0 @@
-/* Generated by CIL v. 1.3.5 */
-/* print_CIL_Input is true */
-
-#line 1 "cilcode.tmp/ex13.c"
-int x  =    5;
-#line 2 "cilcode.tmp/ex13.c"
-int main(void) 
-{ int x___0 ;
-  int x___1 ;
-
-  {
-#line 3
-  x___0 = 6;
-#line 5
-  x___1 = 7;
-#line 6
-  return (x___1);
-#line 8
-  return (x___0);
-}
-}
diff --git a/cil/doc/examples/ex14.txt b/cil/doc/examples/ex14.txt
deleted file mode 100644
index 72fc719ef..000000000
--- a/cil/doc/examples/ex14.txt
+++ /dev/null
@@ -1,22 +0,0 @@
-/* Generated by CIL v. 1.3.5 */
-/* print_CIL_Input is true */
-
-#line 1 "cilcode.tmp/ex14.c"
-int x  =    5;
-#line 5
-int main(void) ;
-#line 5 "cilcode.tmp/ex14.c"
-static int x___1  =    7;
-#line 2 "cilcode.tmp/ex14.c"
-int main(void) 
-{ int x___0 ;
-
-  {
-#line 3
-  x___0 = 6;
-#line 6
-  return (x___1);
-#line 8
-  return (x___0);
-}
-}
diff --git a/cil/doc/examples/ex15.txt b/cil/doc/examples/ex15.txt
deleted file mode 100644
index 4f64ae9b6..000000000
--- a/cil/doc/examples/ex15.txt
+++ /dev/null
@@ -1,14 +0,0 @@
-/* Generated by CIL v. 1.3.5 */
-/* print_CIL_Input is true */
-
-#line 1 "cilcode.tmp/ex15.c"
-int foo(void) 
-{ int x ;
-
-  {
-#line 2
-  x = 5;
-#line 3
-  return (0);
-}
-}
diff --git a/cil/doc/examples/ex16.txt b/cil/doc/examples/ex16.txt
deleted file mode 100644
index 82290c287..000000000
--- a/cil/doc/examples/ex16.txt
+++ /dev/null
@@ -1,22 +0,0 @@
-/* Generated by CIL v. 1.3.5 */
-/* print_CIL_Input is true */
-
-#line 1 "cilcode.tmp/ex16.c"
-extern int f(int  ) ;
-#line 1 "cilcode.tmp/ex16.c"
-int main(void) 
-{ int x ;
-  int tmp ;
-  int tmp___0 ;
-
-  {
-#line 2
-  tmp = x;
-#line 2
-  x ++;
-#line 2
-  tmp___0 = f(x);
-#line 2
-  return (tmp + tmp___0);
-}
-}
diff --git a/cil/doc/examples/ex17.txt b/cil/doc/examples/ex17.txt
deleted file mode 100644
index 20bbaa7ad..000000000
--- a/cil/doc/examples/ex17.txt
+++ /dev/null
@@ -1,81 +0,0 @@
-/* Generated by CIL v. 1.3.5 */
-/* print_CIL_Input is true */
-
-#line 1 "cilcode.tmp/ex17.c"
-int main(void) 
-{ int x ;
-  int y ;
-  int tmp ;
-  int z ;
-  int tmp___0 ;
-
-  {
-#line 2
-  if (x) {
-#line 2
-    tmp = 2;
-  } else {
-#line 2
-    tmp = 4;
-  }
-#line 2
-  y = tmp;
-#line 3
-  if (x) {
-#line 3
-    tmp___0 = 1;
-  } else {
-#line 3
-    if (y) {
-#line 3
-      tmp___0 = 1;
-    } else {
-#line 3
-      tmp___0 = 0;
-    }
-  }
-#line 3
-  z = tmp___0;
-#line 5
-  if (x) {
-#line 5
-    if (y) {
-#line 5
-      return (0);
-    } else {
-#line 5
-      return (1);
-    }
-  } else {
-#line 5
-    return (1);
-  }
-#line 8
-  if (x) {
-#line 8
-    if (y) {
-      goto _L;
-    } else {
-      goto _L___0;
-    }
-  } else {
-    _L___0: /* CIL Label */ 
-#line 8
-    if (z) {
-      _L: /* CIL Label */ 
-#line 8
-      x ++;
-#line 8
-      y ++;
-#line 8
-      z ++;
-#line 8
-      x ++;
-#line 8
-      y ++;
-#line 8
-      return (z);
-    }
-  }
-}
-}
diff --git a/cil/doc/examples/ex18.txt b/cil/doc/examples/ex18.txt
deleted file mode 100644
index bcdb7ef29..000000000
--- a/cil/doc/examples/ex18.txt
+++ /dev/null
@@ -1,20 +0,0 @@
-/* Generated by CIL v. 1.3.5 */
-/* print_CIL_Input is true */
-
-#line 1 "cilcode.tmp/ex18.c"
-extern int f() ;
-#line 1 "cilcode.tmp/ex18.c"
-int main(void) 
-{ int tmp___0 ;
-
-  {
-#line 2
-  tmp___0 = f();
-  if (! tmp___0) {
-#line 2
-    tmp___0 = 4;
-  }
-#line 2
-  return (tmp___0);
-}
-}
diff --git a/cil/doc/examples/ex19.txt b/cil/doc/examples/ex19.txt
deleted file mode 100644
index 3b82868fe..000000000
--- a/cil/doc/examples/ex19.txt
+++ /dev/null
@@ -1,42 +0,0 @@
-/* Generated by CIL v. 1.3.5 */
-/* print_CIL_Input is true */
-
-#line 1 "cilcode.tmp/ex19.c"
-int main(void) 
-{ int x ;
-  int i ;
-
-  {
-#line 2
-  i = 0;
-#line 2
-  while (i < 5) {
-#line 3
-    if (i == 5) {
-      goto __Cont;
-    }
-#line 4
-    if (i == 4) {
-#line 4
-      break;
-    }
-#line 5
-    i += 2;
-    __Cont: /* CIL Label */ 
-#line 2
-    i ++;
-  }
-#line 7
-  while (x < 5) {
-#line 8
-    if (x == 3) {
-#line 8
-      continue;
-    }
-#line 9
-    x ++;
-  }
-#line 11
-  return (0);
-}
-}
diff --git a/cil/doc/examples/ex2.txt b/cil/doc/examples/ex2.txt
deleted file mode 100644
index 20313828c..000000000
--- a/cil/doc/examples/ex2.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-/* Generated by CIL v. 1.3.5 */
-/* print_CIL_Input is true */
-
-#line 1 "cilcode.tmp/ex2.c"
-struct __anonstruct_s_1 {
-   int x ;
-};
-#line 1 "cilcode.tmp/ex2.c"
-struct __anonstruct_s_1 s  ;
diff --git a/cil/doc/examples/ex20.txt b/cil/doc/examples/ex20.txt
deleted file mode 100644
index 7a51db3b6..000000000
--- a/cil/doc/examples/ex20.txt
+++ /dev/null
@@ -1,26 +0,0 @@
-/* Generated by CIL v. 1.3.5 */
-/* print_CIL_Input is true */
-
-#line 1 "cilcode.tmp/ex20.c"
-int main(void) 
-{ int x ;
-  int y ;
-  int z ;
-
-  {
-#line 1
-  x = 5;
-#line 1
-  y = x;
-#line 2
-  x ++;
-  L: 
-#line 2
-  y -= x;
-#line 2
-  z = y;
-  goto L;
-#line 3
-  return (0);
-}
-}
diff --git a/cil/doc/examples/ex21.txt b/cil/doc/examples/ex21.txt
deleted file mode 100644
index 3f331e425..000000000
--- a/cil/doc/examples/ex21.txt
+++ /dev/null
@@ -1,25 +0,0 @@
-/* Generated by CIL v. 1.3.5 */
-/* print_CIL_Input is true */
-
-#line 1 "cilcode.tmp/ex21.c"
-int main(void) 
-{ int x ;
-  int y ;
-  int z ;
-  int *tmp ;
-
-  {
-#line 2
-  if (x) {
-#line 2
-    tmp = & y;
-  } else {
-#line 2
-    tmp = & z;
-  }
-#line 2
-  x ++;
-#line 2
-  return (tmp - & x);
-}
-}
diff --git a/cil/doc/examples/ex22.txt b/cil/doc/examples/ex22.txt
deleted file mode 100644
index 2224e7c7d..000000000
--- a/cil/doc/examples/ex22.txt
+++ /dev/null
@@ -1,16 +0,0 @@
-/* Generated by CIL v. 1.3.5 */
-/* print_CIL_Input is true */
-
-#line 327 "/usr/include/stdio.h"
-extern int printf(char const   * __restrict  __format  , ...) ;
-#line 7 "cilcode.tmp/ex22.c"
-int main(void) 
-{ 
-
-  {
-#line 9
-  printf((char const   * __restrict  )"Hello world\n");
-#line 10
-  return (0);
-}
-}
diff --git a/cil/doc/examples/ex23.txt b/cil/doc/examples/ex23.txt
deleted file mode 100644
index d48a13583..000000000
--- a/cil/doc/examples/ex23.txt
+++ /dev/null
@@ -1,56 +0,0 @@
-/* Generated by CIL v. 1.3.5 */
-/* print_CIL_Input is true */
-
-#line 1 "cilcode.tmp/ex23.c"
-int foo(int predicate ) 
-{ int x ;
-
-  {
-#line 2
-  x = 0;
-#line 4
-  if (predicate == 0) {
-    goto switch_0_0;
-  } else {
-#line 5
-    if (predicate == 1) {
-      goto switch_0_1;
-    } else {
-#line 6
-      if (predicate == 2) {
-        goto switch_0_2;
-      } else {
-#line 7
-        if (predicate == 3) {
-          goto switch_0_3;
-        } else {
-          {
-          goto switch_0_default;
-#line 3
-          if (0) {
-            switch_0_0: /* CIL Label */ 
-#line 4
-            return (111);
-            switch_0_1: /* CIL Label */ 
-#line 5
-            x ++;
-            switch_0_2: /* CIL Label */ 
-#line 6
-            return (x + 3);
-            switch_0_3: /* CIL Label */ 
-            goto switch_0_break;
-            switch_0_default: /* CIL Label */ ;
-#line 8
-            return (222);
-          } else {
-            switch_0_break: /* CIL Label */ ;
-          }
-          }
-        }
-      }
-    }
-  }
-#line 10
-  return (333);
-}
-}
diff --git a/cil/doc/examples/ex24.txt b/cil/doc/examples/ex24.txt
deleted file mode 100644
index 587ce674d..000000000
--- a/cil/doc/examples/ex24.txt
+++ /dev/null
@@ -1,59 +0,0 @@
-/* Generated by CIL v. 1.3.5 */
-/* print_CIL_Input is true */
-
-extern void * stackguard_get_ra();
-extern void stackguard_set_ra(void *new_ra);
-/* You must provide an implementation for functions that get and set the
- * return address. Such code is unfortunately architecture specific.
- */
-struct stackguard_stack {
-  void * data;
-  struct stackguard_stack * next;
-} * stackguard_stack;
-
-void stackguard_push(void *ra) {
-  void * old = stackguard_stack;
-  stackguard_stack = (struct stackguard_stack *)
-    malloc(sizeof(stackguard_stack));
-  stackguard_stack->data = ra;
-  stackguard_stack->next = old;
-}
-
-void * stackguard_pop() {
-  void * ret = stackguard_stack->data;
-  void * next = stackguard_stack->next;
-  free(stackguard_stack);
-  stackguard_stack->next = next;
-  return ret;
-}
-#line 3 "cilcode.tmp/ex24.c"
-extern int ( /* missing proto */  scanf)() ;
-#line 1 "cilcode.tmp/ex24.c"
-int dangerous(void) 
-{ char array[10] ;
-  void *return_address ;
-
-  {
-  return_address = (void *)stackguard_get_ra();
-  stackguard_push(return_address);
-#line 3
-  scanf("%s", array);
-  {
-  return_address = (void *)stackguard_pop();
-  stackguard_set_ra(return_address);
-#line 4
-  return (0);
-  }
-}
-}
-#line 6 "cilcode.tmp/ex24.c"
-int main(void) 
-{ int tmp ;
-
-  {
-#line 7
-  tmp = dangerous();
-#line 7
-  return (tmp);
-}
-}
diff --git a/cil/doc/examples/ex25.txt b/cil/doc/examples/ex25.txt
deleted file mode 100644
index 88f6902e4..000000000
--- a/cil/doc/examples/ex25.txt
+++ /dev/null
@@ -1,40 +0,0 @@
-/* Generated by CIL v. 1.3.5 */
-/* print_CIL_Input is true */
-
-#line 3 "cilcode.tmp/ex25.c"
-extern int ( /* missing proto */  scanf)() ;
-#line 1 "cilcode.tmp/ex25.c"
-struct dangerous_heapify {
-   char array[10] ;
-};
-#line 1 "cilcode.tmp/ex25.c"
-int dangerous(void) 
-{ struct dangerous_heapify *dangerous_heapify ;
-  int __cil_tmp3 ;
-
-  {
-#line 1
-  dangerous_heapify = (struct dangerous_heapify *)malloc(sizeof(struct dangerous_heapify ));
-#line 3
-  scanf("%s", dangerous_heapify->array);
-  {
-#line 4
-  __cil_tmp3 = 0;
-#line 4
-  free(dangerous_heapify);
-#line 4
-  return (__cil_tmp3);
-  }
-}
-}
-#line 6 "cilcode.tmp/ex25.c"
-int main(void) 
-{ int tmp ;
-
-  {
-#line 7
-  tmp = dangerous();
-#line 7
-  return (tmp);
-}
-}
diff --git a/cil/doc/examples/ex26.txt b/cil/doc/examples/ex26.txt
deleted file mode 100644
index 8f5b17188..000000000
--- a/cil/doc/examples/ex26.txt
+++ /dev/null
@@ -1,29 +0,0 @@
-/* Generated by CIL v. 1.3.5 */
-/* print_CIL_Input is true */
-
-#line 1 "cilcode.tmp/ex26.c"
-int foo(int predicate ) 
-{ int __retres ;
-
-  {
-#line 2
-  if (predicate <= 0) {
-#line 3
-    __retres = 1;
-    goto return_label;
-  } else {
-#line 5
-    if (predicate > 5) {
-#line 6
-      __retres = 2;
-      goto return_label;
-    }
-#line 7
-    __retres = 3;
-    goto return_label;
-  }
-  return_label: /* CIL Label */ 
-#line 1
-  return (__retres);
-}
-}
diff --git a/cil/doc/examples/ex27.txt b/cil/doc/examples/ex27.txt
deleted file mode 100644
index 60591132a..000000000
--- a/cil/doc/examples/ex27.txt
+++ /dev/null
@@ -1,51 +0,0 @@
-/* Generated by CIL v. 1.3.5 */
-/* print_CIL_Input is true */
-
-#line 1 "cilcode.tmp/ex27.c"
-int foo(int x , int y ) 
-{ int unknown ;
-
-  {
-#line 3
-  if (unknown) {
-#line 4
-    return (9);
-  }
-#line 5
-  return (x + 3);
-}
-}
-#line 8 "cilcode.tmp/ex27.c"
-int main(void) 
-{ int a ;
-  int b ;
-  int c ;
-  int tmp ;
-  int tmp___0 ;
-
-  {
-  {
-#line 10
-  tmp = foo(5, 7);
-#line 10
-  tmp___0 = foo(6, 7);
-#line 10
-  a = tmp + tmp___0;
-#line 11
-  b = 4;
-#line 12
-  c = 16;
-  }
-  {
-  {
-#line 16
-  return (20);
-  }
-#line 13
-  if (0) {
-#line 14
-    return (b - c);
-  }
-  }
-}
-}
diff --git a/cil/doc/examples/ex28.txt b/cil/doc/examples/ex28.txt
deleted file mode 100644
index 098b144a2..000000000
--- a/cil/doc/examples/ex28.txt
+++ /dev/null
@@ -1,24 +0,0 @@
-/* Generated by CIL v. 1.3.5 */
-/* print_CIL_Input is true */
-
-#line 1 "cilcode.tmp/ex28.c"
-int main(void) 
-{ int ***three ;
-  int **two ;
-  int **mem_3 ;
-  int *mem_4 ;
-  int *mem_5 ;
-
-  {
-#line 4
-  mem_3 = (*three);
-#line 4
-  mem_4 = (*mem_3);
-#line 4
-  mem_5 = (*two);
-#line 4
-  (*mem_4) = (*mem_5);
-#line 5
-  return (0);
-}
-}
diff --git a/cil/doc/examples/ex29.txt b/cil/doc/examples/ex29.txt
deleted file mode 100644
index 7df8f681d..000000000
--- a/cil/doc/examples/ex29.txt
+++ /dev/null
@@ -1,53 +0,0 @@
-/* Generated by CIL v. 1.3.5 */
-/* print_CIL_Input is true */
-
-#line 2 "cilcode.tmp/ex29.c"
-struct mystruct {
-   int a ;
-   int b ;
-};
-#line 1 "cilcode.tmp/ex29.c"
-int main(void) 
-{ struct mystruct m ;
-  int local ;
-  int arr[3] ;
-  int *ptr ;
-  unsigned int __cil_tmp5 ;
-  unsigned int __cil_tmp6 ;
-  int __cil_tmp7 ;
-  unsigned int __cil_tmp8 ;
-  int *__cil_tmp9 ;
-  int __cil_tmp10 ;
-  unsigned int __cil_tmp11 ;
-  unsigned int __cil_tmp12 ;
-  unsigned int __cil_tmp13 ;
-  int m_b14 ;
-  int m_a15 ;
-
-  {
-#line 10
-  ptr = & local;
-#line 11
-  __cil_tmp5 = 2 * 4U;
-#line 11
-  __cil_tmp6 = (unsigned int )(arr) + __cil_tmp5;
-#line 11
-  __cil_tmp7 = (*((int *)__cil_tmp6));
-#line 11
-  __cil_tmp8 = (unsigned int )__cil_tmp7;
-#line 11
-  __cil_tmp9 = & local;
-#line 11
-  __cil_tmp10 = (*__cil_tmp9);
-#line 11
-  __cil_tmp11 = (unsigned int )__cil_tmp10;
-#line 11
-  __cil_tmp12 = __cil_tmp11 + 8U;
-#line 11
-  __cil_tmp13 = __cil_tmp12 + __cil_tmp8;
-#line 11
-  m_a15 = (int )__cil_tmp13;
-#line 12
-  return (m_a15);
-}
-}
diff --git a/cil/doc/examples/ex3.txt b/cil/doc/examples/ex3.txt
deleted file mode 100644
index 2ca8ac953..000000000
--- a/cil/doc/examples/ex3.txt
+++ /dev/null
@@ -1,20 +0,0 @@
-/* Generated by CIL v. 1.3.5 */
-/* print_CIL_Input is true */
-
-#line 1 "cilcode.tmp/ex3.c"
-union baz {
-   int x1 ;
-   double x2 ;
-};
-#line 1 "cilcode.tmp/ex3.c"
-struct bar {
-   union baz u1 ;
-   int y ;
-};
-#line 1 "cilcode.tmp/ex3.c"
-struct foo {
-   struct bar s1 ;
-   int z ;
-};
-#line 1 "cilcode.tmp/ex3.c"
-struct foo f  ;
diff --git a/cil/doc/examples/ex30.txt b/cil/doc/examples/ex30.txt
deleted file mode 100644
index 729cfb066..000000000
--- a/cil/doc/examples/ex30.txt
+++ /dev/null
@@ -1,12 +0,0 @@
-/* Generated by CIL v. 1.3.5 */
-/* print_CIL_Input is true */
-
-#line 1 "cilcode.tmp/ex30.c"
-int main(void) 
-{ int x ;
-
-  {
-#line 2
-  return (x == (x != 0));
-}
-}
diff --git a/cil/doc/examples/ex31.txt b/cil/doc/examples/ex31.txt
deleted file mode 100644
index ab7d4716f..000000000
--- a/cil/doc/examples/ex31.txt
+++ /dev/null
@@ -1,12 +0,0 @@
-/* Generated by CIL v. 1.3.5 */
-/* print_CIL_Input is true */
-
-#line 1 "cilcode.tmp/ex31.c"
-int main(void) 
-{ 
-
-  {
-#line 1
-  return ((int )((1U - sizeof(int )) >> 32));
-}
-}
diff --git a/cil/doc/examples/ex32.txt b/cil/doc/examples/ex32.txt
deleted file mode 100644
index f2b6b5b1e..000000000
--- a/cil/doc/examples/ex32.txt
+++ /dev/null
@@ -1,16 +0,0 @@
-/* Generated by CIL v. 1.3.5 */
-/* print_CIL_Input is true */
-
-#line 1 "cilcode.tmp/ex32.c"
-int x  =    5;
-#line 2 "cilcode.tmp/ex32.c"
-int f(void) 
-{ int x___0 ;
-
-  {
-#line 3
-  x___0 = 3;
-#line 6
-  return (x);
-}
-}
diff --git a/cil/doc/examples/ex33.txt b/cil/doc/examples/ex33.txt
deleted file mode 100644
index f73178f97..000000000
--- a/cil/doc/examples/ex33.txt
+++ /dev/null
@@ -1,24 +0,0 @@
-/* Generated by CIL v. 1.3.5 */
-/* print_CIL_Input is true */
-
-#line 1 "cilcode.tmp/ex33.c"
-int (*pf)(void)  ;
-#line 2 "cilcode.tmp/ex33.c"
-int f(void) 
-{ 
-
-  {
-#line 4
-  pf = & f;
-#line 5
-  pf = & f;
-#line 6
-  ((*pf))();
-#line 7
-  ((*pf))();
-#line 8
-  f();
-#line 9
-  return (0);
-}
-}
diff --git a/cil/doc/examples/ex34.txt b/cil/doc/examples/ex34.txt
deleted file mode 100644
index 494ca916d..000000000
--- a/cil/doc/examples/ex34.txt
+++ /dev/null
@@ -1,15 +0,0 @@
-/* Generated by CIL v. 1.3.5 */
-/* print_CIL_Input is true */
-
-#line 1 "cilcode.tmp/ex34.c"
-struct __anonstruct_nested_2 {
-   int y ;
-   int z ;
-};
-#line 1 "cilcode.tmp/ex34.c"
-struct __anonstruct_i_1 {
-   int x ;
-   struct __anonstruct_nested_2 nested ;
-};
-#line 1 "cilcode.tmp/ex34.c"
-struct __anonstruct_i_1 i  =    {1, {2, 6}};
diff --git a/cil/doc/examples/ex35.txt b/cil/doc/examples/ex35.txt
deleted file mode 100644
index 1af7447c7..000000000
--- a/cil/doc/examples/ex35.txt
+++ /dev/null
@@ -1,32 +0,0 @@
-/* Generated by CIL v. 1.3.5 */
-/* print_CIL_Input is true */
-
-#line 1 "cilcode.tmp/ex35.c"
-struct __anonstruct_T1_1 {
-   char *key ;
-   char *value ;
-};
-#line 1 "cilcode.tmp/ex35.c"
-typedef struct __anonstruct_T1_1 T1;
-#line 7 "cilcode.tmp/ex35.c"
-struct __anonstruct_T3_2 {
-   long type ;
-   char *value ;
-};
-#line 7 "cilcode.tmp/ex35.c"
-typedef struct __anonstruct_T3_2 T3;
-#line 13 "cilcode.tmp/ex35.c"
-struct __anonstruct_T3_2 __constr_expr_0  =    {1L, (char *)1};
-#line 13 "cilcode.tmp/ex35.c"
-T1 a[1]  = {      {(char *)"", (char *)(& __constr_expr_0)}};
-#line 20 "cilcode.tmp/ex35.c"
-int main(void) 
-{ T3 *pt3 ;
-
-  {
-#line 21
-  pt3 = (T3 *)a[0].value;
-#line 22
-  return ((int )pt3->value);
-}
-}
diff --git a/cil/doc/examples/ex36.txt b/cil/doc/examples/ex36.txt
deleted file mode 100644
index adbcdaaa8..000000000
--- a/cil/doc/examples/ex36.txt
+++ /dev/null
@@ -1,20 +0,0 @@
-/* Generated by CIL v. 1.3.5 */
-/* print_CIL_Input is true */
-
-#line 1 "cilcode.tmp/ex36.c"
-int main(void) 
-{ int __constr_expr_0[4] ;
-
-  {
-#line 1
-  __constr_expr_0[0] = 1;
-#line 1
-  __constr_expr_0[1] = 2;
-#line 1
-  __constr_expr_0[2] = 3;
-#line 1
-  __constr_expr_0[3] = 4;
-#line 1
-  return (__constr_expr_0[1]);
-}
-}
diff --git a/cil/doc/examples/ex37.txt b/cil/doc/examples/ex37.txt
deleted file mode 100644
index 00d6ca44d..000000000
--- a/cil/doc/examples/ex37.txt
+++ /dev/null
@@ -1,14 +0,0 @@
-/* Generated by CIL v. 1.3.5 */
-/* print_CIL_Input is true */
-
-#line 3 "cilcode.tmp/ex37.c"
-int foo(void) ;
-#line 1 "cilcode.tmp/ex37.c"
-int foo(void) 
-{ 
-
-  {
-#line 5
-  return (0);
-}
-}
diff --git a/cil/doc/examples/ex38.txt b/cil/doc/examples/ex38.txt
deleted file mode 100644
index 706e13d92..000000000
--- a/cil/doc/examples/ex38.txt
+++ /dev/null
@@ -1,12 +0,0 @@
-/* Generated by CIL v. 1.3.5 */
-/* print_CIL_Input is true */
-
-#line 1 "cilcode.tmp/ex38.c"
-unsigned long foo(void) 
-{ 
-
-  {
-#line 2
-  return (536870911UL);
-}
-}
diff --git a/cil/doc/examples/ex39.txt b/cil/doc/examples/ex39.txt
deleted file mode 100644
index 2c8c25f93..000000000
--- a/cil/doc/examples/ex39.txt
+++ /dev/null
@@ -1,25 +0,0 @@
-/* Generated by CIL v. 1.3.5 */
-/* print_CIL_Input is true */
-
-#line 1 "cilcode.tmp/ex39.c"
-int main(void) 
-{ int x ;
-  int y ;
-  int z ;
-  int *tmp ;
-
-  {
-#line 2
-  if (x) {
-#line 2
-    tmp = & y;
-  } else {
-#line 2
-    tmp = & z;
-  }
-#line 2
-  x ++;
-#line 2
-  return (tmp - & x);
-}
-}
diff --git a/cil/doc/examples/ex4.txt b/cil/doc/examples/ex4.txt
deleted file mode 100644
index 00a22d31a..000000000
--- a/cil/doc/examples/ex4.txt
+++ /dev/null
@@ -1,16 +0,0 @@
-/* Generated by CIL v. 1.3.5 */
-/* print_CIL_Input is true */
-
-#line 2 "cilcode.tmp/ex4.c"
-struct foo {
-   int x ;
-};
-#line 1 "cilcode.tmp/ex4.c"
-int main(void) 
-{ struct foo foo ;
-
-  {
-#line 8
-  return (foo.x);
-}
-}
diff --git a/cil/doc/examples/ex40.txt b/cil/doc/examples/ex40.txt
deleted file mode 100644
index c41496b3d..000000000
--- a/cil/doc/examples/ex40.txt
+++ /dev/null
@@ -1,20 +0,0 @@
-/* Generated by CIL v. 1.3.5 */
-/* print_CIL_Input is true */
-
-#line 1 "cilcode.tmp/ex40.c"
-extern int f() ;
-#line 1 "cilcode.tmp/ex40.c"
-int main(void) 
-{ int tmp___0 ;
-
-  {
-#line 2
-  tmp___0 = f();
-  if (! tmp___0) {
-#line 2
-    tmp___0 = -1;
-  }
-#line 2
-  return (tmp___0);
-}
-}
diff --git a/cil/doc/examples/ex41.txt b/cil/doc/examples/ex41.txt
deleted file mode 100644
index f1196f39f..000000000
--- a/cil/doc/examples/ex41.txt
+++ /dev/null
@@ -1,69 +0,0 @@
-/* Generated by CIL v. 1.3.5 */
-/* print_CIL_Input is true */
-
-#line 1 "cilcode.tmp/ex41.c"
-static void *jtab[2]  ;
-#line 4
-static int doit(int x ) ;
-#line 4 "cilcode.tmp/ex41.c"
-static int jtab_init  =    0;
-#line 2 "cilcode.tmp/ex41.c"
-static int doit(int x ) 
-{ unsigned int __compgoto ;
-
-  {
-#line 5
-  if (! jtab_init) {
-#line 6
-    jtab[0] = (void *)0;
-#line 7
-    jtab[1] = (void *)1;
-#line 8
-    jtab_init = 1;
-  }
-#line 10
-  __compgoto = (unsigned int )jtab[x];
-#line 10
-  switch (__compgoto) {
-  case 1: 
-  goto lbl2;
-  case 0: 
-  goto lbl1;
-  default: 
-#line 10
-  (*((int *)0)) = 0;
-  }
-  lbl1: 
-#line 12
-  return (0);
-  lbl2: 
-#line 14
-  return (1);
-}
-}
-#line 18
-extern int ( /* missing proto */  exit)() ;
-#line 17 "cilcode.tmp/ex41.c"
-int main(void) 
-{ int tmp ;
-  int tmp___0 ;
-
-  {
-#line 18
-  tmp = doit(0);
-#line 18
-  if (tmp != 0) {
-#line 18
-    exit(1);
-  }
-#line 19
-  tmp___0 = doit(1);
-#line 19
-  if (tmp___0 != 1) {
-#line 19
-    exit(1);
-  }
-#line 20
-  exit(0);
-}
-}
diff --git a/cil/doc/examples/ex42.txt b/cil/doc/examples/ex42.txt
deleted file mode 100644
index b0f40b88a..000000000
--- a/cil/doc/examples/ex42.txt
+++ /dev/null
@@ -1,22 +0,0 @@
-/* Generated by CIL v. 1.3.5 */
-/* print_CIL_Input is true */
-
-#line 1 "cilcode.tmp/ex42.c"
-int main(void) 
-{ int tmp ;
-
-  {
-  goto L;
-#line 1
-  if (0) {
-    L: 
-#line 1
-    tmp = 1;
-  } else {
-#line 1
-    tmp = 0;
-  }
-#line 1
-  return (tmp);
-}
-}
diff --git a/cil/doc/examples/ex43.txt b/cil/doc/examples/ex43.txt
deleted file mode 100644
index 4104f7975..000000000
--- a/cil/doc/examples/ex43.txt
+++ /dev/null
@@ -1,46 +0,0 @@
-/* Generated by CIL v. 1.3.5 */
-/* print_CIL_Input is true */
-
-#line 1 "cilcode.tmp/ex43.c"
-__inline static int foo__extinline(void) 
-{ 
-
-  {
-#line 1
-  return (1);
-}
-}
-#line 2 "cilcode.tmp/ex43.c"
-int firstuse(void) 
-{ int tmp ;
-
-  {
-#line 2
-  tmp = foo__extinline();
-#line 2
-  return (tmp);
-}
-}
-#line 5 "cilcode.tmp/ex43.c"
-int foo(void) 
-{ 
-
-  {
-#line 5
-  return (2);
-}
-}
-#line 7 "cilcode.tmp/ex43.c"
-int main(void) 
-{ int tmp ;
-  int tmp___0 ;
-
-  {
-#line 8
-  tmp = foo();
-#line 8
-  tmp___0 = firstuse();
-#line 8
-  return (tmp + tmp___0);
-}
-}
diff --git a/cil/doc/examples/ex44.txt b/cil/doc/examples/ex44.txt
deleted file mode 100644
index 06f83ba3e..000000000
--- a/cil/doc/examples/ex44.txt
+++ /dev/null
@@ -1,31 +0,0 @@
-/* Generated by CIL v. 1.3.5 */
-/* print_CIL_Input is true */
-
-#line 1 "cilcode.tmp/ex44.c"
-struct s {
-   int i1 ;
-   int i2 ;
-};
-#line 1 "cilcode.tmp/ex44.c"
-union u {
-   int i ;
-   struct s s ;
-};
-#line 8 "cilcode.tmp/ex44.c"
-union u x  =    {6};
-#line 10 "cilcode.tmp/ex44.c"
-int main(void) 
-{ struct s y ;
-  union u z ;
-
-  {
-#line 11
-  y.i1 = 1;
-#line 11
-  y.i2 = 2;
-#line 12
-  z.s = y;
-#line 13
-  return (0);
-}
-}
diff --git a/cil/doc/examples/ex45.txt b/cil/doc/examples/ex45.txt
deleted file mode 100644
index aaafca3a2..000000000
--- a/cil/doc/examples/ex45.txt
+++ /dev/null
@@ -1,11 +0,0 @@
-/* Generated by CIL v. 1.3.5 */
-/* print_CIL_Input is true */
-
-#line 1 "cilcode.tmp/ex45.c"
-char i8  ;
-#line 2 "cilcode.tmp/ex45.c"
-short i16  ;
-#line 3 "cilcode.tmp/ex45.c"
-int i32  ;
-#line 4 "cilcode.tmp/ex45.c"
-long long i64  ;
diff --git a/cil/doc/examples/ex46.txt b/cil/doc/examples/ex46.txt
deleted file mode 100644
index 1f87ec2f7..000000000
--- a/cil/doc/examples/ex46.txt
+++ /dev/null
@@ -1,23 +0,0 @@
-/* Generated by CIL v. 1.3.5 */
-/* print_CIL_Input is true */
-
-#line 1 "cilcode.tmp/ex46.c"
-static int bar(int x , char y ) 
-{ 
-
-  {
-#line 2
-  return (x + (int )y);
-}
-}
-#line 6 "cilcode.tmp/ex46.c"
-int foo(int x , char y ) 
-{ int tmp ;
-
-  {
-#line 6
-  tmp = bar(x, y);
-#line 6
-  return (tmp);
-}
-}
diff --git a/cil/doc/examples/ex47.txt b/cil/doc/examples/ex47.txt
deleted file mode 100644
index cc5c3067b..000000000
--- a/cil/doc/examples/ex47.txt
+++ /dev/null
@@ -1,28 +0,0 @@
-/* Generated by CIL v. 1.3.5 */
-/* print_CIL_Input is true */
-
-#line 1 "cilcode.tmp/ex47.c"
-struct __anonstruct____missing_field_name_3 {
-   int u ;
-   int v ;
-};
-#line 1 "cilcode.tmp/ex47.c"
-struct __anonstruct____missing_field_name_2 {
-   int y ;
-   int z ;
-   struct __anonstruct____missing_field_name_3 __annonCompField1 ;
-};
-#line 1 "cilcode.tmp/ex47.c"
-struct __anonstruct_a_1 {
-   int x ;
-   struct __anonstruct____missing_field_name_2 __annonCompField2 ;
-};
-#line 1 "cilcode.tmp/ex47.c"
-int main(void) 
-{ struct __anonstruct_a_1 a ;
-
-  {
-#line 10
-  return ((((a.x + a.__annonCompField2.y) + a.__annonCompField2.z) + a.__annonCompField2.__annonCompField1.u) + a.__annonCompField2.__annonCompField1.v);
-}
-}
diff --git a/cil/doc/examples/ex5.txt b/cil/doc/examples/ex5.txt
deleted file mode 100644
index d750bb59a..000000000
--- a/cil/doc/examples/ex5.txt
+++ /dev/null
@@ -1,27 +0,0 @@
-/* Generated by CIL v. 1.3.5 */
-/* print_CIL_Input is true */
-
-#line 1 "cilcode.tmp/ex5.c"
-int f(double x ) ;
-#line 3
-int g(double x ) ;
-#line 2 "cilcode.tmp/ex5.c"
-int f(double x ) 
-{ int tmp ;
-
-  {
-#line 3
-  tmp = g(x);
-#line 3
-  return (tmp);
-}
-}
-#line 5 "cilcode.tmp/ex5.c"
-int g(double x ) 
-{ 
-
-  {
-#line 6
-  return ((int )x);
-}
-}
diff --git a/cil/doc/examples/ex6.txt b/cil/doc/examples/ex6.txt
deleted file mode 100644
index c33eb9e31..000000000
--- a/cil/doc/examples/ex6.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-/* Generated by CIL v. 1.3.5 */
-/* print_CIL_Input is true */
-
-#line 1 "cilcode.tmp/ex6.c"
-int a1[3]  = {      1,      2,      3};
-#line 2 "cilcode.tmp/ex6.c"
-int a2[8]  ;
diff --git a/cil/doc/examples/ex7.txt b/cil/doc/examples/ex7.txt
deleted file mode 100644
index 55434c709..000000000
--- a/cil/doc/examples/ex7.txt
+++ /dev/null
@@ -1,22 +0,0 @@
-/* Generated by CIL v. 1.3.5 */
-/* print_CIL_Input is true */
-
-#line 2 "cilcode.tmp/ex7.c"
-enum __anonenum_x_1 {
-    FIVE = 5,
-    SIX = 6,
-    SEVEN = 7,
-    FOUR = 4,
-    EIGHT = 8
-} ;
-#line 1 "cilcode.tmp/ex7.c"
-int main(void) 
-{ enum __anonenum_x_1 x ;
-
-  {
-#line 2
-  x = 5;
-#line 8
-  return ((int )x);
-}
-}
diff --git a/cil/doc/examples/ex8.txt b/cil/doc/examples/ex8.txt
deleted file mode 100644
index 323a41e99..000000000
--- a/cil/doc/examples/ex8.txt
+++ /dev/null
@@ -1,13 +0,0 @@
-/* Generated by CIL v. 1.3.5 */
-/* print_CIL_Input is true */
-
-#line 2 "cilcode.tmp/ex8.c"
-struct foo {
-   int x ;
-   int y ;
-};
-#line 1 "cilcode.tmp/ex8.c"
-int a1[5]  = {      1,      2,      3,      0, 
-        0};
-#line 2 "cilcode.tmp/ex8.c"
-struct foo s1  =    {4, 0};
diff --git a/cil/doc/examples/ex9.txt b/cil/doc/examples/ex9.txt
deleted file mode 100644
index 22e976cac..000000000
--- a/cil/doc/examples/ex9.txt
+++ /dev/null
@@ -1,16 +0,0 @@
-/* Generated by CIL v. 1.3.5 */
-/* print_CIL_Input is true */
-
-#line 1 "cilcode.tmp/ex9.c"
-struct inner {
-   int z ;
-};
-#line 1 "cilcode.tmp/ex9.c"
-struct foo {
-   int x ;
-   int y ;
-   int a[5] ;
-   struct inner inner ;
-};
-#line 1 "cilcode.tmp/ex9.c"
-struct foo s  =    {0, 8, {0, 5, 5, 4, 0}, {3}};
diff --git a/cil/doc/ext.html b/cil/doc/ext.html
deleted file mode 100644
index 532e22588..000000000
--- a/cil/doc/ext.html
+++ /dev/null
@@ -1,506 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
-            "http://www.w3.org/TR/REC-html40/loose.dtd">
-<HTML>
-<HEAD>
-
-
-
-<META http-equiv="Content-Type" content="text/html; charset=ANSI_X3.4-1968">
-<META name="GENERATOR" content="hevea 1.08">
-
-<base target="main">
-<script language="JavaScript">
-<!-- Begin
-function loadTop(url) {
-  parent.location.href= url;
-}
-// -->
-</script>
-<LINK rel="stylesheet" type="text/css" href="cil.css">
-<TITLE>
-Library of CIL Modules
-</TITLE>
-</HEAD>
-<BODY >
-<A HREF="cil007.html"><IMG SRC ="previous_motif.gif" ALT="Previous"></A>
-<A HREF="ciltoc.html"><IMG SRC ="contents_motif.gif" ALT="Up"></A>
-<A HREF="cil009.html"><IMG SRC ="next_motif.gif" ALT="Next"></A>
-<HR>
-
-<H2 CLASS="section"><A NAME="htoc17">8</A>&nbsp;&nbsp;Library of CIL Modules</H2> <A NAME="sec-Extension"></A><BR>
-<BR>
-We are developing a suite of modules that use CIL for program analyses and
-transformations that we have found useful. You can use these modules directly
-on your code, or generally as inspiration for writing similar modules. A
-particularly big and complex application written on top of CIL is CCured
-(<A HREF="../ccured/index.html"><TT>../ccured/index.html</TT></A>).<BR>
-<BR>
-<A NAME="toc9"></A>
-<H3 CLASS="subsection"><A NAME="htoc18">8.1</A>&nbsp;&nbsp;Control-Flow Graphs</H3> <A NAME="sec-cfg"></A>
-The <A HREF="api/Cil.html#TYPEstmt">Cil.stmt</A> datatype includes fields for intraprocedural
-control-flow information: the predecessor and successor statements of
-the current statement. This information is not computed by default.
-If you want to use the control-flow graph, or any of the extensions in
-this section that require it, you have to explicitly ask CIL to
-compute the CFG.<BR>
-<BR>
-
-<H4 CLASS="subsubsection"><A NAME="htoc19">8.1.1</A>&nbsp;&nbsp;The CFG module (new in CIL 1.3.5)</H4>
-The best way to compute the CFG is with the CFG module. Just invoke
-<A HREF="api/Cfg.html#VALcomputeFileCFG">Cfg.computeFileCFG</A> on your file. The <A HREF="api/Cfg.html">Cfg</A> API
-describes the rest of actions you can take with this module, including
-computing the CFG for one function at a time, or printing the CFG in
-<TT>dot</TT> form.<BR>
-<BR>
-
-<H4 CLASS="subsubsection"><A NAME="htoc20">8.1.2</A>&nbsp;&nbsp;Simplified control flow</H4>
-CIL can reduce high-level C control-flow constructs like <TT>switch</TT> and
-<TT>continue</TT> to lower-level <TT>goto</TT>s. This completely eliminates some
-possible classes of statements from the program and may make the result
-easier to analyze (e.g., it simplifies data-flow analysis).<BR>
-<BR>
-You can invoke this transformation on the command line with
-<TT>--domakeCFG</TT> or programatically with <A HREF="api/Cil.html#VALprepareCFG">Cil.prepareCFG</A>.
-After calling Cil.prepareCFG, you can use <A HREF="api/Cil.html#VALcomputeCFGInfo">Cil.computeCFGInfo</A>
-to compute the CFG information and find the successor and predecessor
-of each statement.<BR>
-<BR>
-For a concrete example, you can see how <TT>cilly --domakeCFG</TT>
-transforms the following code (note the fall-through in case 1): 
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-  int foo (int predicate) {
-    int x = 0;
-    switch (predicate) {
-      case 0: return 111;
-      case 1: x = x + 1;
-      case 2: return (x+3);
-      case 3: break;
-      default: return 222;
-    }
-    return 333;
-  }
-</FONT></PRE>
-See the <A HREF="examples/ex23.txt">CIL output</A> for this
-code fragment<BR>
-<BR>
-<A NAME="toc10"></A>
-<H3 CLASS="subsection"><A NAME="htoc21">8.2</A>&nbsp;&nbsp;Data flow analysis framework</H3>
-The <A HREF="api/Dataflow.html">Dataflow</A> module (click for the ocamldoc) contains a
-parameterized framework for forward and backward data flow
-analyses. You provide the transfer functions and this module does the
-analysis. You must compute control-flow information (Section&nbsp;<A HREF="#sec-cfg">8.1</A>)
-before invoking the Dataflow module.<BR>
-<BR>
-<A NAME="toc11"></A>
-<H3 CLASS="subsection"><A NAME="htoc22">8.3</A>&nbsp;&nbsp;Dominators</H3> 
-The module <A HREF="api/Dominators.html">Dominators</A> contains the computation of immediate
- dominators. It uses the <A HREF="api/Dataflow.html">Dataflow</A> module. <BR>
-<BR>
-<A NAME="toc12"></A>
-<H3 CLASS="subsection"><A NAME="htoc23">8.4</A>&nbsp;&nbsp;Points-to Analysis</H3>
-The module <TT>ptranal.ml</TT> contains two interprocedural points-to
-analyses for CIL: <TT>Olf</TT> and <TT>Golf</TT>. <TT>Olf</TT> is the default.
-(Switching from <TT>olf.ml</TT> to <TT>golf.ml</TT> requires a change in
-<TT>Ptranal</TT> and a recompiling <TT>cilly</TT>.)<BR>
-<BR>
-The analyses have the following characteristics:
-<UL CLASS="itemize"><LI CLASS="li-itemize">
-Not based on C types (inferred pointer relationships are sound
- despite most kinds of C casts)
-<LI CLASS="li-itemize">One level of subtyping 
-<LI CLASS="li-itemize">One level of context sensitivity (Golf only)
-<LI CLASS="li-itemize">Monomorphic type structures
-<LI CLASS="li-itemize">Field insensitive (fields of structs are conflated)
-<LI CLASS="li-itemize">Demand-driven (points-to queries are solved on demand)
-<LI CLASS="li-itemize">Handle function pointers
-</UL>
-The analysis itself is factored into two components: <TT>Ptranal</TT>,
-which walks over the CIL file and generates constraints, and <TT>Olf</TT>
-or <TT>Golf</TT>, which solve the constraints. The analysis is invoked
-with the function <TT>Ptranal.analyze_file: Cil.file -&gt;
- unit</TT>. This function builds the points-to graph for the CIL file
-and stores it internally. There is currently no facility for clearing
-internal state, so <TT>Ptranal.analyze_file</TT> should only be called
-once.<BR>
-<BR>
-The constructed points-to graph supports several kinds of queries,
-including alias queries (may two expressions be aliased?) and
-points-to queries (to what set of locations may an expression point?).<BR>
-<BR>
-The main interface with the alias analysis is as follows:
-<UL CLASS="itemize"><LI CLASS="li-itemize">
-<TT>Ptranal.may_alias: Cil.exp -&gt; Cil.exp -&gt; bool</TT>. If
- <TT>true</TT>, the two expressions may have the same value.
-<LI CLASS="li-itemize"><TT>Ptranal.resolve_lval: Cil.lval -&gt; (Cil.varinfo
- list)</TT>. Returns the list of variables to which the given
- left-hand value may point.
-<LI CLASS="li-itemize"><TT>Ptranal.resolve_exp: Cil.exp -&gt; (Cil.varinfo list)</TT>.
- Returns the list of variables to which the given expression may
- point.
-<LI CLASS="li-itemize"><TT>Ptranal.resolve_funptr: Cil.exp -&gt; (Cil.fundec
- list)</TT>. Returns the list of functions to which the given
- expression may point.
-</UL>
-The precision of the analysis can be customized by changing the values
-of several flags:
-<UL CLASS="itemize"><LI CLASS="li-itemize">
-<TT>Ptranal.no_sub: bool ref</TT>.
- If <TT>true</TT>, subtyping is disabled. Associated commandline option:
- <B>--ptr_unify</B>.
-<LI CLASS="li-itemize"><TT>Ptranal.analyze_mono: bool ref</TT>.
- (Golf only) If <TT>true</TT>, context sensitivity is disabled and the
- analysis is effectively monomorphic. Commandline option:
- <B>--ptr_mono</B>.
-<LI CLASS="li-itemize"><TT>Ptranal.smart_aliases: bool ref</TT>.
- (Golf only) If <TT>true</TT>, &#8220;smart&#8221; disambiguation of aliases is
- enabled. Otherwise, aliases are computed by intersecting points-to
- sets. This is an experimental feature.
-<LI CLASS="li-itemize"><TT>Ptranal.model_strings: bool ref</TT>.
- Make the alias analysis model string constants by treating them as
- pointers to chars. Commandline option: <B>--ptr_model_strings</B>
-<LI CLASS="li-itemize"><TT>Ptranal.conservative_undefineds: bool ref</TT>.
- Make the most pessimistic assumptions about globals if an undefined
- function is present. Such a function can write to every global
- variable. Commandline option: <B>--ptr_conservative</B>
-</UL>
-In practice, the best precision/efficiency tradeoff is achieved by
-setting <TT>Ptranal.no_sub</TT> to <TT>false</TT>, <TT>Ptranal.analyze_mono</TT> to
-<TT>true</TT>, and <TT>Ptranal.smart_aliases</TT> to <TT>false</TT>. These are the
-default values of the flags.<BR>
-<BR>
-There are also a few flags that can be used to inspect or serialize
-the results of the analysis.
-<UL CLASS="itemize"><LI CLASS="li-itemize">
-<TT>Ptranal.debug_may_aliases</TT>.
- Print the may-alias relationship of each pair of expressions in the
- program. Commandline option: <B>--ptr_may_aliases</B>.
-<LI CLASS="li-itemize"><TT>Ptranal.print_constraints: bool ref</TT>.
- If <TT>true</TT>, the analysis will print each constraint as it is
- generated.
-<LI CLASS="li-itemize"><TT>Ptranal.print_types: bool ref</TT>.
- If <TT>true</TT>, the analysis will print the inferred type of each
- variable in the program.<BR>
-<BR>
-If <TT>Ptranal.analyze_mono</TT> and <TT>Ptranal.no_sub</TT> are both
- <TT>true</TT>, this output is sufficient to reconstruct the points-to
- graph. One nice feature is that there is a pretty printer for
- recursive types, so the print routine does not loop.
-<LI CLASS="li-itemize"><TT>Ptranal.compute_results: bool ref</TT>.
- If <TT>true</TT>, the analysis will print out the points-to set of each
- variable in the program. This will essentially serialize the
- points-to graph.
-</UL>
-<A NAME="toc13"></A>
-<H3 CLASS="subsection"><A NAME="htoc24">8.5</A>&nbsp;&nbsp;StackGuard</H3>
-The module <TT>heapify.ml</TT> contains a transformation similar to the one
-described in &#8220;StackGuard: Automatic Adaptive Detection and Prevention of
-Buffer-Overflow Attacks&#8221;, <EM>Proceedings of the 7th USENIX Security
-Conference</EM>. In essence it modifies the program to maintain a separate
-stack for return addresses. Even if a buffer overrun attack occurs the
-actual correct return address will be taken from the special stack. <BR>
-<BR>
-Although it does work, this CIL module is provided mainly as an example of
-how to perform a simple source-to-source program analysis and
-transformation. As an optimization only functions that contain a dangerous
-local array make use of the special return address stack. <BR>
-<BR>
-For a concrete example, you can see how <TT>cilly --dostackGuard</TT>
-transforms the following dangerous code: 
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-  int dangerous() {
-    char array[10];
-    scanf("%s",array); // possible buffer overrun!
-  }
-
-  int main () {
-    return dangerous();
-  }
-</FONT></PRE>
-See the <A HREF="examples/ex24.txt">CIL output</A> for this
-code fragment<BR>
-<BR>
-<A NAME="toc14"></A>
-<H3 CLASS="subsection"><A NAME="htoc25">8.6</A>&nbsp;&nbsp;Heapify</H3>
-The module <TT>heapify.ml</TT> also contains a transformation that moves all
-dangerous local arrays to the heap. This also prevents a number of buffer
-overruns. <BR>
-<BR>
-For a concrete example, you can see how <TT>cilly --doheapify</TT>
-transforms the following dangerous code: 
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-  int dangerous() {
-    char array[10];
-    scanf("%s",array); // possible buffer overrun!
-  }
-
-  int main () {
-    return dangerous();
-  }
-</FONT></PRE>
-See the <A HREF="examples/ex25.txt">CIL output</A> for this
-code fragment<BR>
-<BR>
-<A NAME="toc15"></A>
-<H3 CLASS="subsection"><A NAME="htoc26">8.7</A>&nbsp;&nbsp;One Return</H3>
-The module <TT>oneret.ml</TT> contains a transformation the ensures that all
-function bodies have at most one return statement. This simplifies a number
-of analyses by providing a canonical exit-point. <BR>
-<BR>
-For a concrete example, you can see how <TT>cilly --dooneRet</TT>
-transforms the following code: 
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-  int foo (int predicate) {
-    if (predicate &lt;= 0) {
-      return 1;
-    } else {
-      if (predicate &gt; 5)
-        return 2;
-      return 3;
-    }
-  }
-</FONT></PRE>
-See the <A HREF="examples/ex26.txt">CIL output</A> for this
-code fragment<BR>
-<BR>
-<A NAME="toc16"></A>
-<H3 CLASS="subsection"><A NAME="htoc27">8.8</A>&nbsp;&nbsp;Partial Evaluation and Constant Folding</H3> 
-The <TT>partial.ml</TT> module provides a simple interprocedural partial
-evaluation and constant folding data-flow analysis and transformation. This
-transformation requires the <TT>--domakeCFG</TT> option. <BR>
-<BR>
-For a concrete example, you can see how <TT>cilly --domakeCFG --dopartial</TT>
-transforms the following code (note the eliminated <TT>if</TT> branch and the
-partial optimization of <TT>foo</TT>): 
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-  int foo(int x, int y) {
-    int unknown;
-    if (unknown)
-      return y+2;     
-    return x+3;      
-  }
-
-  int main () {
-    int a,b,c;
-    a = foo(5,7) + foo(6,7);
-    b = 4;
-    c = b * b;      
-    if (b &gt; c)     
-      return b-c;
-    else
-      return b+c; 
-  }
-</FONT></PRE>
-See the <A HREF="examples/ex27.txt">CIL output</A> for this
-code fragment<BR>
-<BR>
-<A NAME="toc17"></A>
-<H3 CLASS="subsection"><A NAME="htoc28">8.9</A>&nbsp;&nbsp;Reaching Definitions</H3>
-The <TT>reachingdefs.ml</TT> module uses the dataflow framework and CFG
-information to calculate the definitions that reach each
-statement. After computing the CFG (Section&nbsp;<A HREF="#sec-cfg">8.1</A>) and calling
-<TT>computeRDs</TT> on a 
-function declaration, <TT>ReachingDef.stmtStartData</TT> will contain a
-mapping from statement IDs to data about which definitions reach each
-statement. In particular, it is a mapping from statement IDs to a
-triple the first two members of which are used internally. The third
-member is a mapping from variable IDs to Sets of integer options. If
-the set contains <TT>Some(i)</TT>, then the definition of that variable
-with ID <TT>i</TT> reaches that statement. If the set contains <TT>None</TT>,
-then there is a path to that statement on which there is no definition
-of that variable. Also, if the variable ID is unmapped at a
-statement, then no definition of that variable reaches that statement.<BR>
-<BR>
-To summarize, reachingdefs.ml has the following interface:
-<UL CLASS="itemize"><LI CLASS="li-itemize">
-<TT>computeRDs</TT> &ndash; Computes reaching definitions. Requires that
-CFG information has already been computed for each statement.
-<LI CLASS="li-itemize"><TT>ReachingDef.stmtStartData</TT> &ndash; contains reaching
-definition data after <TT>computeRDs</TT> is called.
-<LI CLASS="li-itemize"><TT>ReachingDef.defIdStmtHash</TT> &ndash; Contains a mapping
-from definition IDs to the ID of the statement in which
-the definition occurs.
-<LI CLASS="li-itemize"><TT>getRDs</TT> &ndash; Takes a statement ID and returns
-reaching definition data for that statement.
-<LI CLASS="li-itemize"><TT>instrRDs</TT> &ndash; Takes a list of instructions and the
-definitions that reach the first instruction, and for
-each instruction calculates the definitions that reach
-either into or out of that instruction.
-<LI CLASS="li-itemize"><TT>rdVisitorClass</TT> &ndash; A subclass of nopCilVisitor that
-can be extended such that the current reaching definition
-data is available when expressions are visited through
-the <TT>get_cur_iosh</TT> method of the class.
-</UL>
-<A NAME="toc18"></A>
-<H3 CLASS="subsection"><A NAME="htoc29">8.10</A>&nbsp;&nbsp;Available Expressions</H3>
-The <TT>availexps.ml</TT> module uses the dataflow framework and CFG
-information to calculate something similar to a traditional available
-expressions analysis. After <TT>computeAEs</TT> is called following a CFG
-calculation (Section&nbsp;<A HREF="#sec-cfg">8.1</A>), <TT>AvailableExps.stmtStartData</TT> will
-contain a mapping
-from statement IDs to data about what expressions are available at
-that statement. The data for each statement is a mapping for each
-variable ID to the whole expression available at that point(in the
-traditional sense) which the variable was last defined to be. So,
-this differs from a traditional available expressions analysis in that
-only whole expressions from a variable definition are considered rather
-than all expressions.<BR>
-<BR>
-The interface is as follows:
-<UL CLASS="itemize"><LI CLASS="li-itemize">
-<TT>computeAEs</TT> &ndash; Computes available expressions. Requires
-that CFG information has already been comptued for each statement.
-<LI CLASS="li-itemize"><TT>AvailableExps.stmtStartData</TT> &ndash; Contains available
-expressions data for each statement after <TT>computeAEs</TT> has been
-called.
-<LI CLASS="li-itemize"><TT>getAEs</TT> &ndash; Takes a statement ID and returns
-available expression data for that statement.
-<LI CLASS="li-itemize"><TT>instrAEs</TT> &ndash; Takes a list of instructions and
-the availalbe expressions at the first instruction, and
-for each instruction calculates the expressions available
-on entering or exiting each instruction.
-<LI CLASS="li-itemize"><TT>aeVisitorClass</TT> &ndash; A subclass of nopCilVisitor that
-can be extended such that the current available expressions
-data is available when expressions are visited through the
-<TT>get_cur_eh</TT> method of the class.
-</UL>
-<A NAME="toc19"></A>
-<H3 CLASS="subsection"><A NAME="htoc30">8.11</A>&nbsp;&nbsp;Liveness Analysis</H3>
-The <TT>liveness.ml</TT> module uses the dataflow framework and
-CFG information to calculate which variables are live at
-each program point. After <TT>computeLiveness</TT> is called
-following a CFG calculation (Section&nbsp;<A HREF="#sec-cfg">8.1</A>), <TT>LiveFlow.stmtStartData</TT> will
-contain a mapping for each statement ID to a set of <TT>varinfo</TT>s
-for varialbes live at that program point.<BR>
-<BR>
-The interface is as follows:
-<UL CLASS="itemize"><LI CLASS="li-itemize">
-<TT>computeLiveness</TT> &ndash; Computes live variables. Requires
-that CFG information has already been computed for each statement.
-<LI CLASS="li-itemize"><TT>LiveFlow.stmtStartData</TT> &ndash; Contains live variable data
-for each statement after <TT>computeLiveness</TT> has been called.
-</UL>
-Also included in this module is a command line interface that
-will cause liveness data to be printed to standard out for
-a particular function or label.
-<UL CLASS="itemize"><LI CLASS="li-itemize">
-<TT>&ndash;doliveness</TT> &ndash; Instructs cilly to comptue liveness
-information and to print on standard out the variables live
-at the points specified by <TT>&ndash;live_func</TT> and <TT>live_label</TT>.
-If both are ommitted, then nothing is printed.
-<LI CLASS="li-itemize"><TT>&ndash;live_func</TT> &ndash; The name of the function whose
-liveness data is of interest. If <TT>&ndash;live_label</TT> is ommitted,
-then data for each statement is printed.
-<LI CLASS="li-itemize"><TT>&ndash;live_label</TT> &ndash; The name of the label at which
-the liveness data will be printed.
-</UL>
-<A NAME="toc20"></A>
-<H3 CLASS="subsection"><A NAME="htoc31">8.12</A>&nbsp;&nbsp;Dead Code Elimination</H3>
-The module <TT>deadcodeelim.ml</TT> uses the reaching definitions
-analysis to eliminate assignment instructions whose results
-are not used. The interface is as follows:
-<UL CLASS="itemize"><LI CLASS="li-itemize">
-<TT>elim_dead_code</TT> &ndash; Performs dead code elimination
-on a function. Requires that CFG information has already
-been computed (Section&nbsp;<A HREF="#sec-cfg">8.1</A>).
-<LI CLASS="li-itemize"><TT>dce</TT> &ndash; Performs dead code elimination on an
-entire file. Requires that CFG information has already
-been computed.
-</UL>
-<A NAME="toc21"></A>
-<H3 CLASS="subsection"><A NAME="htoc32">8.13</A>&nbsp;&nbsp;Simple Memory Operations</H3> 
-The <TT>simplemem.ml</TT> module allows CIL lvalues that contain memory
-accesses to be even futher simplified via the introduction of
-well-typed temporaries. After this transformation all lvalues involve
-at most one memory reference.<BR>
-<BR>
-For a concrete example, you can see how <TT>cilly --dosimpleMem</TT> 
-transforms the following code:
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-  int main () {
-    int ***three;
-    int **two;
-    ***three = **two; 
-  } 
-</FONT></PRE>
-See the <A HREF="examples/ex28.txt">CIL output</A> for this
-code fragment<BR>
-<BR>
-<A NAME="toc22"></A>
-<H3 CLASS="subsection"><A NAME="htoc33">8.14</A>&nbsp;&nbsp;Simple Three-Address Code</H3> 
-The <TT>simplify.ml</TT> module further reduces the complexity of program
-expressions and gives you a form of three-address code. After this
-transformation all expressions will adhere to the following grammar: 
-<PRE CLASS="verbatim">
- basic::=
-    Const _ 
-    Addrof(Var v, NoOffset)
-    StartOf(Var v, NoOffset)
-    Lval(Var v, off), where v is a variable whose address is not taken
-                      and off contains only "basic"
-
- exp::=
-    basic
-    Lval(Mem basic, NoOffset)
-    BinOp(bop, basic, basic)
-    UnOp(uop, basic)
-    CastE(t, basic)
-   
- lval ::= 
-    Mem basic, NoOffset
-    Var v, off, where v is a variable whose address is not taken and off
-                contains only "basic"
-</PRE>In addition, all <TT>sizeof</TT> and <TT>alignof</TT> forms are turned into
-constants. Accesses to arrays and variables whose address is taken are
-turned into "Mem" accesses. All field and index computations are turned
-into address arithmetic.<BR>
-<BR>
-For a concrete example, you can see how <TT>cilly --dosimplify</TT> 
-transforms the following code:
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-  int main() {
-    struct mystruct {
-      int a;
-      int b;
-    } m;
-    int local;
-    int arr[3];
-    int *ptr;
-
-    ptr = &amp;local;
-    m.a = local + sizeof(m) + arr[2];
-    return m.a; 
-  } 
-</FONT></PRE>
-See the <A HREF="examples/ex29.txt">CIL output</A> for this
-code fragment<BR>
-<BR>
-<A NAME="toc23"></A>
-<H3 CLASS="subsection"><A NAME="htoc34">8.15</A>&nbsp;&nbsp;Converting C to C++</H3>
-The module canonicalize.ml performs several transformations to correct
-differences between C and C++, so that the output is (hopefully) valid
-C++ code. This may be incomplete &mdash; certain fixes which are necessary
-for some programs are not yet implemented.<BR>
-<BR>
-Using the <TT>--doCanonicalize</TT> option with CIL will perform the
-following changes to your program:
-<OL CLASS="enumerate" type=1><LI CLASS="li-enumerate">
-Any variables that use C++ keywords as identifiers are renamed.
-<LI CLASS="li-enumerate">C allows global variables to have multiple declarations and
- multiple (equivalent) definitions. This transformation removes
- all but one declaration and all but one definition.
-<LI CLASS="li-enumerate"><TT>__inline</TT> is #defined to <TT>inline</TT>, and <TT>__restrict</TT> 
- is #defined to nothing.
-<LI CLASS="li-enumerate">C allows function pointers with no specified arguments to be used on
- any argument list. To make C++ accept this code, we insert a cast
- from the function pointer to a type that matches the arguments. Of
- course, this does nothing to guarantee that the pointer actually has
- that type.
-<LI CLASS="li-enumerate">Makes casts from int to enum types explicit. (CIL changes enum
- constants to int constants, but doesn't use a cast.)
-</OL>
-<HR>
-<A HREF="cil007.html"><IMG SRC ="previous_motif.gif" ALT="Previous"></A>
-<A HREF="ciltoc.html"><IMG SRC ="contents_motif.gif" ALT="Up"></A>
-<A HREF="cil009.html"><IMG SRC ="next_motif.gif" ALT="Next"></A>
-</BODY>
-</HTML>
diff --git a/cil/doc/header.html b/cil/doc/header.html
deleted file mode 100644
index cfedee900..000000000
--- a/cil/doc/header.html
+++ /dev/null
@@ -1,18 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<meta name="GENERATOR" content="Microsoft FrontPage 5.0">
-<meta name="ProgId" content="FrontPage.Editor.Document">
-<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
-<title>CIL Documentation (v. 1.3.5)</title>
-<base target="contents">
-</head>
-
-<body>
-
-<h1 align="center">CIL - Infrastructure for C Program Analysis and Transformation (v. 1.3.5)</h1>
-
-</body>
-
-</html>
diff --git a/cil/doc/index.html b/cil/doc/index.html
deleted file mode 100644
index 77ec1606a..000000000
--- a/cil/doc/index.html
+++ /dev/null
@@ -1,26 +0,0 @@
-<html>
-
-<head>
-<meta name="GENERATOR" content="Microsoft FrontPage 5.0">
-<meta name="ProgId" content="FrontPage.Editor.Document">
-<base target="main">
-<title>CIL Documentation (v. 1.3.5)</title>
-</head>
-
-<frameset rows="64,*">
-  <frame name="banner" scrolling="auto" noresize target="contents" 
-         src="header.html">
-  <frameset cols="267,*">
-    <frame name="contents" target="main" src="ciltoc.html" scrolling="auto">
-    <frame name="main" src="cil001.html" scrolling="auto">
-  </frameset>
-  <noframes>
-  <body>
-
-  <p>This page uses frames, but your browser doesn't support them.</p>
-
-  </body>
-  </noframes>
-</frameset>
-
-</html>
\ No newline at end of file
diff --git a/cil/doc/merger.html b/cil/doc/merger.html
deleted file mode 100644
index 636dd2a85..000000000
--- a/cil/doc/merger.html
+++ /dev/null
@@ -1,167 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
-            "http://www.w3.org/TR/REC-html40/loose.dtd">
-<HTML>
-<HEAD>
-
-
-
-<META http-equiv="Content-Type" content="text/html; charset=ANSI_X3.4-1968">
-<META name="GENERATOR" content="hevea 1.08">
-
-<base target="main">
-<script language="JavaScript">
-<!-- Begin
-function loadTop(url) {
-  parent.location.href= url;
-}
-// -->
-</script>
-<LINK rel="stylesheet" type="text/css" href="cil.css">
-<TITLE>
-Using the merger
-</TITLE>
-</HEAD>
-<BODY >
-<A HREF="cil012.html"><IMG SRC ="previous_motif.gif" ALT="Previous"></A>
-<A HREF="ciltoc.html"><IMG SRC ="contents_motif.gif" ALT="Up"></A>
-<A HREF="patcher.html"><IMG SRC ="next_motif.gif" ALT="Next"></A>
-<HR>
-
-<H2 CLASS="section"><A NAME="htoc39">13</A>&nbsp;&nbsp;Using the merger</H2><A NAME="sec-merger"></A><BR>
-<BR>
-There are many program analyses that are more effective when
-done on the whole program.<BR>
-<BR>
-The merger is a tool that combines all of the C source files in a project
-into a single C file. There are two tasks that a merger must perform:
-<OL CLASS="enumerate" type=1><LI CLASS="li-enumerate">
-Detect what are all the sources that make a project and with what
-compiler arguments they are compiled.<BR>
-<BR>
-<LI CLASS="li-enumerate">Merge all of the source files into a single file. 
-</OL>
-For the first task the merger impersonates a compiler and a linker (both a
-GCC and a Microsoft Visual C mode are supported) and it expects to be invoked
-(from a build script or a Makefile) on all sources of the project. When
-invoked to compile a source the merger just preprocesses the source and saves
-the result using the name of the requested object file. By preprocessing at
-this time the merger is able to take into account variations in the command
-line arguments that affect preprocessing of different source files.<BR>
-<BR>
-When the merger is invoked to link a number of object files it collects the
-preprocessed sources that were stored with the names of the object files, and
-invokes the merger proper. Note that arguments that affect the compilation or
-linking must be the same for all source files.<BR>
-<BR>
-For the second task, the merger essentially concatenates the preprocessed
-sources with care to rename conflicting file-local declarations (we call this
-process alpha-conversion of a file). The merger also attempts to remove
-duplicate global declarations and definitions. Specifically the following
-actions are taken: 
-<UL CLASS="itemize"><LI CLASS="li-itemize">
-File-scope names (<TT>static</TT> globals, names of types defined with
-<TT>typedef</TT>, and structure/union/enumeration tags) are given new names if they
-conflict with declarations from previously processed sources. The new name is
-formed by appending the suffix <TT>___n</TT>, where <TT>n</TT> is a unique integer
-identifier. Then the new names are applied to their occurrences in the file. <BR>
-<BR>
-<LI CLASS="li-itemize">Non-static declarations and definitions of globals are never renamed.
-But we try to remove duplicate ones. Equality of globals is detected by
-comparing the printed form of the global (ignoring the line number directives)
-after the body has been alpha-converted. This process is intended to remove
-those declarations (e.g. function prototypes) that originate from the same
-include file. Similarly, we try to eliminate duplicate definitions of
-<TT>inline</TT> functions, since these occasionally appear in include files.<BR>
-<BR>
-<LI CLASS="li-itemize">The types of all global declarations with the same name from all files
-are compared for type isomorphism. During this process, the merger detects all
-those isomorphisms between structures and type definitions that are <B>required</B> for the merged program to be legal. Such structure tags and
-typenames are coalesced and given the same name. <BR>
-<BR>
-<LI CLASS="li-itemize">Besides the structure tags and type names that are required to be
-isomorphic, the merger also tries to coalesce definitions of structures and
-types with the same name from different file. However, in this case the merger
-will not give an error if such definitions are not isomorphic; it will just
-use different names for them. <BR>
-<BR>
-<LI CLASS="li-itemize">In rare situations, it can happen that a file-local global in
-encountered first and it is not renamed, only to discover later when
-processing another file that there is an external symbol with the same name.
-In this case, a second pass is made over the merged file to rename the
-file-local symbol. 
-</UL>
-Here is an example of using the merger:<BR>
-<BR>
-The contents of <TT>file1.c</TT> is:
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-struct foo; // Forward declaration
-extern struct foo *global;
-</FONT></PRE>
-The contents of <TT>file2.c</TT> is:
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-struct bar {
- int x;
- struct bar *next;
-};
-extern struct bar *global;
-struct foo {
- int y;
-};
-extern struct foo another;
-void main() {
-}
-</FONT></PRE>
-There are several ways in which one might create an executable from these
-files:
-<UL CLASS="itemize"><LI CLASS="li-itemize">
-<PRE CLASS="verbatim">
-gcc file1.c file2.c -o a.out
-</PRE><BR>
-<BR>
-<LI CLASS="li-itemize"><PRE CLASS="verbatim">
-gcc -c file1.c -o file1.o
-gcc -c file2.c -o file2.o
-ld file1.o file2.o -o a.out
-</PRE><BR>
-<BR>
-<LI CLASS="li-itemize"><PRE CLASS="verbatim">
-gcc -c file1.c -o file1.o
-gcc -c file2.c -o file2.o
-ar r libfile2.a file2.o
-gcc file1.o libfile2.a -o a.out
-</PRE><BR>
-<BR>
-<LI CLASS="li-itemize"><PRE CLASS="verbatim">
-gcc -c file1.c -o file1.o
-gcc -c file2.c -o file2.o
-ar r libfile2.a file2.o
-gcc file1.o -lfile2 -o a.out
-</PRE></UL>
-In each of the cases above you must replace all occurrences of <TT>gcc</TT> and
-<TT>ld</TT> with <TT>cilly --merge</TT>, and all occurrences of <TT>ar</TT> with <TT>cilly
---merge --mode=AR</TT>. It is very important that the <TT>--merge</TT> flag be used
-throughout the build process. If you want to see the merged source file you
-must also pass the <TT>--keepmerged</TT> flag to the linking phase. <BR>
-<BR>
-The result of merging file1.c and file2.c is:
-<PRE CLASS="verbatim"><FONT COLOR=blue>
-// from file1.c
-struct foo; // Forward declaration
-extern struct foo *global;
-
-// from file2.c
-struct foo {
- int x;
- struct foo *next;
-};
-struct foo___1 {
- int y;
-};
-extern struct foo___1 another;
-</FONT></PRE>
-<HR>
-<A HREF="cil012.html"><IMG SRC ="previous_motif.gif" ALT="Previous"></A>
-<A HREF="ciltoc.html"><IMG SRC ="contents_motif.gif" ALT="Up"></A>
-<A HREF="patcher.html"><IMG SRC ="next_motif.gif" ALT="Next"></A>
-</BODY>
-</HTML>
diff --git a/cil/doc/next_motif.gif b/cil/doc/next_motif.gif
deleted file mode 100644
index 3f84bacfb26ea6a4141ad407ff4fb77954171fea..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 317
zcmZ?wbhEHb6krfw_{abP1q~Da{|AwZ|CALJJaY^3i%L>c6w-?Fa}^>2d=)Zt6Vp?z
z6!KClO7toUav2nVvM@3*Ff-_YG=q$BV0wPX%oqrcNic)NoH!IY7zB6@8}Kj-us9lk
z7$CL+2ZMnG4_ouW1Z2ulL4bpWfr*g;NHKx6GcYhUIw%M*FhEp-DFfU<KmbJ!<R%~h
tih(Er0R{yi0E>ZHARYuTK(sM{cnnYuPzb0WB7s6C9B5!<=3-#51_0IeJqZ8+

diff --git a/cil/doc/patcher.html b/cil/doc/patcher.html
deleted file mode 100644
index 2c727e233..000000000
--- a/cil/doc/patcher.html
+++ /dev/null
@@ -1,126 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
-            "http://www.w3.org/TR/REC-html40/loose.dtd">
-<HTML>
-<HEAD>
-
-
-
-<META http-equiv="Content-Type" content="text/html; charset=ANSI_X3.4-1968">
-<META name="GENERATOR" content="hevea 1.08">
-
-<base target="main">
-<script language="JavaScript">
-<!-- Begin
-function loadTop(url) {
-  parent.location.href= url;
-}
-// -->
-</script>
-<LINK rel="stylesheet" type="text/css" href="cil.css">
-<TITLE>
-Using the patcher
-</TITLE>
-</HEAD>
-<BODY >
-<A HREF="merger.html"><IMG SRC ="previous_motif.gif" ALT="Previous"></A>
-<A HREF="ciltoc.html"><IMG SRC ="contents_motif.gif" ALT="Up"></A>
-<A HREF="cil015.html"><IMG SRC ="next_motif.gif" ALT="Next"></A>
-<HR>
-
-<H2 CLASS="section"><A NAME="htoc40">14</A>&nbsp;&nbsp;Using the patcher</H2><A NAME="sec-patcher"></A><BR>
-<BR>
-Occasionally we have needed to modify slightly the standard include files.
-So, we developed a simple mechanism that allows us to create modified copies
-of the include files and use them instead of the standard ones. For this
-purpose we specify a patch file and we run a program caller Patcher which
-makes modified copies of include files and applies the patch.<BR>
-<BR>
-The patcher is invoked as follows: 
-<PRE CLASS="verbatim">
-bin/patcher [options]
-
-Options:
-  --help       Prints this help message
-  --verbose    Prints a lot of information about what is being done
-  --mode=xxx   What tool to emulate: 
-                GNUCC     - GNU CC
-                MSVC      - MS VC cl compiler
-
-  --dest=xxx   The destination directory. Will make one if it does not exist
-  --patch=xxx  Patch file (can be specified multiple times)
-  --ppargs=xxx An argument to be passed to the preprocessor (can be specified
-               multiple times)
-
-  --ufile=xxx  A user-include file to be patched (treated as \#include "xxx")
-  --sfile=xxx  A system-include file to be patched (treated as \#include &lt;xxx&gt;)
- 
-  --clean       Remove all files in the destination directory
-  --dumpversion Print the version name used for the current compiler
-
- All of the other arguments are passed to the preprocessor. You should pass
- enough arguments (e.g., include directories) so that the patcher can find the
- right include files to be patched.
-</PRE>
- Based on the given <TT>mode</TT> and the current version of the compiler (which
-the patcher can print when given the <TT>dumpversion</TT> argument) the patcher
-will create a subdirectory of the <TT>dest</TT> directory (say <TT>/usr/home/necula/cil/include</TT>), such as:
-<PRE CLASS="verbatim">
-/usr/home/necula/cil/include/gcc_2.95.3-5
-</PRE>
- In that file the patcher will copy the modified versions of the include files
-specified with the <TT>ufile</TT> and <TT>sfile</TT> options. Each of these options can
-be specified multiple times. <BR>
-<BR>
-The patch file (specified with the <TT>patch</TT> option) has a format inspired by
-the Unix <TT>patch</TT> tool. The file has the following grammar:
-<PRE CLASS="verbatim">
-&lt;&lt;&lt; flags
-patterns
-===
-replacement
-&gt;&gt;&gt;
-</PRE>
- The flags are a comma separated, case-sensitive, sequence of keywords or
-keyword = value. The following flags are supported:
-<UL CLASS="itemize"><LI CLASS="li-itemize">
-<TT>file=foo.h</TT> - will only apply the patch on files whose name is
- <TT>foo.h</TT>. 
-<LI CLASS="li-itemize"><TT>optional</TT> - this means that it is Ok if the current patch does not
-match any of the processed files. 
-<LI CLASS="li-itemize"><TT>group=foo</TT> - will add this patch to the named group. If this is not
-specified then a unique group is created to contain just the current patch.
-When all files specified in the command line have been patched, an error
-message is generated for all groups for whom no member patch was used. We use
-this mechanism to receive notice when the patch triggers are out-dated with
-respect to the new include files. 
-<LI CLASS="li-itemize"><TT>system=sysname</TT> - will only consider this pattern on a given
-operating system. The &#8220;sysname&#8221; is reported by the &#8220;$Ô&#8221; variable in
-Perl, except that Windows is always considered to have sysname
-&#8220;cygwin.&#8221; For Linux use &#8220;linux&#8221; (capitalization matters).
-<LI CLASS="li-itemize"><TT>ateof</TT> - In this case the patterns are ignored and the replacement
-text is placed at the end of the patched file. Use the <TT>file</TT> flag if you
-want to restrict the files in which this replacement is performed. 
-<LI CLASS="li-itemize"><TT>atsof</TT> - The patterns are ignored and the replacement text is placed
-at the start of the patched file. Uf the <TT>file</TT> flag to restrict the
-application of this patch to a certain file. 
-<LI CLASS="li-itemize"><TT>disabled</TT> - Use this flag if you want to disable the pattern.
-</UL>
-The patterns can consist of several groups of lines separated by the <TT>|||</TT>
-marker. Each of these group of lines is a multi-line pattern that if found in
-the file will be replaced with the text given at the end of the block. <BR>
-<BR>
-The matching is space-insensitive.<BR>
-<BR>
-All of the markers <TT>&lt;&lt;&lt;</TT>, <TT>|||</TT>, <TT>===</TT> and <TT>&gt;&gt;&gt;</TT> must appear at the
-beginning of a line but they can be followed by arbitrary text (which is
-ignored).<BR>
-<BR>
-The replacement text can contain the special keyword <TT>@__pattern__@</TT>,
-which is substituted with the pattern that matched. <BR>
-<BR>
-<HR>
-<A HREF="merger.html"><IMG SRC ="previous_motif.gif" ALT="Previous"></A>
-<A HREF="ciltoc.html"><IMG SRC ="contents_motif.gif" ALT="Up"></A>
-<A HREF="cil015.html"><IMG SRC ="next_motif.gif" ALT="Next"></A>
-</BODY>
-</HTML>
diff --git a/cil/doc/previous_motif.gif b/cil/doc/previous_motif.gif
deleted file mode 100644
index 8c8a3e6430050e67e2e71dbd1f99fb9caf6176bf..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 317
zcmZ?wbhEHb6krfw_{abP1q~Da{|AwZ|CALJJaY^3i%L>c6w-?Fa}^>2d=)Zt6Vp?z
z6bgz`%k(M=av2nVvM@3*Ff-_YG=q$BV0wPX%oqrcNhmWYv<NtXBp7%O8}K*^upBS|
zF@T6cf#ZOI1P@#D!31Q=Q9*!%fq{t;NU<<AGctf_p!q=109DDDV1Ne*2p}W{fB>iw
rA^>J9009F?7$^Z^BLGMh0|ST;RSz`=t{-8nfkDE721aHs1_o;Y3u!(;

diff --git a/cil/install-sh b/cil/install-sh
deleted file mode 100644
index e9de23842..000000000
--- a/cil/install-sh
+++ /dev/null
@@ -1,251 +0,0 @@
-#!/bin/sh
-#
-# install - install a program, script, or datafile
-# This comes from X11R5 (mit/util/scripts/install.sh).
-#
-# Copyright 1991 by the Massachusetts Institute of Technology
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of M.I.T. not be used in advertising or
-# publicity pertaining to distribution of the software without specific,
-# written prior permission.  M.I.T. makes no representations about the
-# suitability of this software for any purpose.  It is provided "as is"
-# without express or implied warranty.
-#
-# Calling this script install-sh is preferred over install.sh, to prevent
-# `make' implicit rules from creating a file called install from it
-# when there is no Makefile.
-#
-# This script is compatible with the BSD install script, but was written
-# from scratch.  It can only install one file at a time, a restriction
-# shared with many OS's install programs.
-
-
-# set DOITPROG to echo to test this script
-
-# Don't use :- since 4.3BSD and earlier shells don't like it.
-doit="${DOITPROG-}"
-
-
-# put in absolute paths if you don't have them in your path; or use env. vars.
-
-mvprog="${MVPROG-mv}"
-cpprog="${CPPROG-cp}"
-chmodprog="${CHMODPROG-chmod}"
-chownprog="${CHOWNPROG-chown}"
-chgrpprog="${CHGRPPROG-chgrp}"
-stripprog="${STRIPPROG-strip}"
-rmprog="${RMPROG-rm}"
-mkdirprog="${MKDIRPROG-mkdir}"
-
-transformbasename=""
-transform_arg=""
-instcmd="$mvprog"
-chmodcmd="$chmodprog 0755"
-chowncmd=""
-chgrpcmd=""
-stripcmd=""
-rmcmd="$rmprog -f"
-mvcmd="$mvprog"
-src=""
-dst=""
-dir_arg=""
-
-while [ x"$1" != x ]; do
-    case $1 in
-	-c) instcmd="$cpprog"
-	    shift
-	    continue;;
-
-	-d) dir_arg=true
-	    shift
-	    continue;;
-
-	-m) chmodcmd="$chmodprog $2"
-	    shift
-	    shift
-	    continue;;
-
-	-o) chowncmd="$chownprog $2"
-	    shift
-	    shift
-	    continue;;
-
-	-g) chgrpcmd="$chgrpprog $2"
-	    shift
-	    shift
-	    continue;;
-
-	-s) stripcmd="$stripprog"
-	    shift
-	    continue;;
-
-	-t=*) transformarg=`echo $1 | sed 's/-t=//'`
-	    shift
-	    continue;;
-
-	-b=*) transformbasename=`echo $1 | sed 's/-b=//'`
-	    shift
-	    continue;;
-
-	*)  if [ x"$src" = x ]
-	    then
-		src=$1
-	    else
-		# this colon is to work around a 386BSD /bin/sh bug
-		:
-		dst=$1
-	    fi
-	    shift
-	    continue;;
-    esac
-done
-
-if [ x"$src" = x ]
-then
-	echo "install:	no input file specified"
-	exit 1
-else
-	true
-fi
-
-if [ x"$dir_arg" != x ]; then
-	dst=$src
-	src=""
-	
-	if [ -d $dst ]; then
-		instcmd=:
-		chmodcmd=""
-	else
-		instcmd=mkdir
-	fi
-else
-
-# Waiting for this to be detected by the "$instcmd $src $dsttmp" command
-# might cause directories to be created, which would be especially bad 
-# if $src (and thus $dsttmp) contains '*'.
-
-	if [ -f $src -o -d $src ]
-	then
-		true
-	else
-		echo "install:  $src does not exist"
-		exit 1
-	fi
-	
-	if [ x"$dst" = x ]
-	then
-		echo "install:	no destination specified"
-		exit 1
-	else
-		true
-	fi
-
-# If destination is a directory, append the input filename; if your system
-# does not like double slashes in filenames, you may need to add some logic
-
-	if [ -d $dst ]
-	then
-		dst="$dst"/`basename $src`
-	else
-		true
-	fi
-fi
-
-## this sed command emulates the dirname command
-dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
-
-# Make sure that the destination directory exists.
-#  this part is taken from Noah Friedman's mkinstalldirs script
-
-# Skip lots of stat calls in the usual case.
-if [ ! -d "$dstdir" ]; then
-defaultIFS='	
-'
-IFS="${IFS-${defaultIFS}}"
-
-oIFS="${IFS}"
-# Some sh's can't handle IFS=/ for some reason.
-IFS='%'
-set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'`
-IFS="${oIFS}"
-
-pathcomp=''
-
-while [ $# -ne 0 ] ; do
-	pathcomp="${pathcomp}${1}"
-	shift
-
-	if [ ! -d "${pathcomp}" ] ;
-        then
-		$mkdirprog "${pathcomp}"
-	else
-		true
-	fi
-
-	pathcomp="${pathcomp}/"
-done
-fi
-
-if [ x"$dir_arg" != x ]
-then
-	$doit $instcmd $dst &&
-
-	if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi &&
-	if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi &&
-	if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi &&
-	if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi
-else
-
-# If we're going to rename the final executable, determine the name now.
-
-	if [ x"$transformarg" = x ] 
-	then
-		dstfile=`basename $dst`
-	else
-		dstfile=`basename $dst $transformbasename | 
-			sed $transformarg`$transformbasename
-	fi
-
-# don't allow the sed command to completely eliminate the filename
-
-	if [ x"$dstfile" = x ] 
-	then
-		dstfile=`basename $dst`
-	else
-		true
-	fi
-
-# Make a temp file name in the proper directory.
-
-	dsttmp=$dstdir/#inst.$$#
-
-# Move or copy the file name to the temp name
-
-	$doit $instcmd $src $dsttmp &&
-
-	trap "rm -f ${dsttmp}" 0 &&
-
-# and set any options; do chmod last to preserve setuid bits
-
-# If any of these fail, we abort the whole thing.  If we want to
-# ignore errors from any of these, just make sure not to ignore
-# errors from the above "$doit $instcmd $src $dsttmp" command.
-
-	if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi &&
-	if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi &&
-	if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi &&
-	if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi &&
-
-# Now rename the file to the real destination.
-
-	$doit $rmcmd -f $dstdir/$dstfile &&
-	$doit $mvcmd $dsttmp $dstdir/$dstfile 
-
-fi &&
-
-
-exit 0
diff --git a/cil/lib/Cilly.pm b/cil/lib/Cilly.pm
deleted file mode 100644
index fa7aa53b7..000000000
--- a/cil/lib/Cilly.pm
+++ /dev/null
@@ -1,2137 +0,0 @@
-#
-#
-# Copyright (c) 2001-2002, 
-#  George C. Necula    <necula@cs.berkeley.edu>
-#  Scott McPeak        <smcpeak@cs.berkeley.edu>
-#  Wes Weimer          <weimer@cs.berkeley.edu>
-# All rights reserved.
-# 
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions are
-# met:
-#
-# 1. Redistributions of source code must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-#
-# 2. Redistributions in binary form must reproduce the above copyright
-# notice, this list of conditions and the following disclaimer in the
-# documentation and/or other materials provided with the distribution.
-#
-# 3. The names of the contributors may not be used to endorse or promote
-# products derived from this software without specific prior written
-# permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
-# IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
-# PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
-# OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-#
-
-
-
-# This module implements a compiler stub that parses the command line
-# arguments of gcc and Microsoft Visual C (along with some arguments for the
-# script itself) and gives hooks into preprocessing, compilation and linking.
-
-
-$::cilbin = 'bin';
-
-package Cilly;
-@ISA = ();
-
-use strict;
-use File::Basename;
-use File::Copy;
-use File::Spec;
-use Data::Dumper;
-use Carp;
-use Text::ParseWords;
-
-use KeptFile;
-use OutputFile;
-use TempFile;
-
-$Cilly::savedSourceExt = "_saved.c";
-
-# Pass to new a list of command arguments
-sub new {
-    my ($proto, @args) = @_;
-
-    my $class = ref($proto) || $proto;
-
-    my $ref =
-    { CFILES => [],    # C input files
-      SFILES => [],    # Assembly language files
-      OFILES => [],    # Other input files
-      IFILES => [],    # Already preprocessed files
-      EARLY_PPARGS => [], # Preprocessor args, first (pre-CIL) pass only
-      PPARGS => [],    # Preprocessor args
-      CCARGS => [],    # Compiler args
-      LINKARGS => [],  # Linker args
-      NATIVECAML => 1, # this causes the native code boxer to be used
-      RELEASELIB => 0, # if true, use the release runtime library (if any)
-      # IDASHI => 1,     # if true, pass "-I-" to gcc's preprocessor
-      IDASHDOT => 1,   # if true, pass "-I." to gcc's preprocessor
-      VERBOSE => 0,    # when true, print extra detail
-      TRACE_COMMANDS => 1, # when true, echo commands being run
-      SEPARATE => ! $::default_is_merge,
-      LIBDIR => [],
-      OPERATION => 'TOEXE', # This is the default for all compilers
-    };
-    my $self = bless $ref, $class;
-
-    if(! @args) {
-        print "No arguments passed\n";
-        $self->printHelp();
-        exit 0;
-    }
-    # Look for the --mode argument first. If not found it is GCC
-    my $mode = $::default_mode;
-    {
-        my @args1 = ();
-        foreach my $arg (@args) {
-            if($arg =~ m|--mode=(.+)$|) {
-                $mode = $1;
-            } else {
-                push @args1, $arg;
-            }
-        }
-        @args = @args1; # These are the argument after we extracted the --mode
-
-    }
-    if(defined $self->{MODENAME} && $self->{MODENAME} ne $mode) {
-        die "Cannot re-specify the compiler";
-    }
-    {
-        my $compiler;
-        if($mode eq "MSVC") {
-            unshift @Cilly::ISA, qw(MSVC);
-            $compiler = MSVC->new($self);
-        } elsif($mode eq "GNUCC") {
-            unshift @Cilly::ISA, qw(GNUCC);
-            $compiler = GNUCC->new($self);
-        } elsif($mode eq "MSLINK") {
-            unshift @Cilly::ISA, qw(MSLINK);
-            $compiler = MSLINK->new($self);
-        } elsif($mode eq "MSLIB") {
-            unshift @Cilly::ISA, qw(MSLIB);
-            $compiler = MSLIB->new($self);
-        } elsif($mode eq "AR") {
-            unshift @Cilly::ISA, qw(AR);
-            $compiler = AR->new($self);
-        } else {
-            die "Don't know about compiler $mode\n";
-        }
-        # Now grab the fields from the compiler and put them inside self
-        my $key;
-        foreach $key (keys %{$compiler}) {
-            $self->{$key} = $compiler->{$key};
-        }
-
-        # For MSVC we have to use --save-temps because otherwise the 
-        # temporary files get deleted somehow before CL gets at them !
-        if($mode ne "GNUCC" && $mode ne "AR") {
-            $self->{SAVE_TEMPS} = '.';
-        }
-    }
-
-    # Scan and process the arguments
-    $self->setDefaultArguments;
-    collectArgumentList($self, @args);
-
-    # sm: if an environment variable is set, then do not merge; this
-    # is intended for use in ./configure scripts, where merging delays
-    # the reporting of errors that the script is expecting
-    if (defined($ENV{"CILLY_NOMERGE"})) {
-      $self->{SEPARATE} = 1;
-      if($self->{VERBOSE}) { print STDERR "Merging disabled by CILLY_NOMERGE\n"; }
-    }
-
-#    print Dumper($self);
-
-    return $self;
-}
-
-# Hook to let subclasses set/override default arguments
-sub setDefaultArguments {
-}
-
-# work through an array of arguments, processing each one
-sub collectArgumentList {
-    my ($self, @args) = @_;
-
-    # Scan and process the arguments
-    while($#args >= 0) {
-        my $arg = $self->fetchNextArg(\@args);
-        
-        if(! defined($arg)) {
-            last;
-        }
-        if($arg eq "") { next; } 
-
-        #print("arg: $arg\n");
-#
-#        my $arg = shift @args; # Grab the next one
-        if(! $self->collectOneArgument($arg, \@args)) {
-            print "Warning: Unknown argument $arg\n";
-            push @{$self->{CCARGS}}, $arg;
-        }
-    }
-}
-
-# Grab the next argument
-sub fetchNextArg {
-    my ($self, $pargs) = @_;
-    return shift @{$pargs};
-}
-
-# Collecting arguments. Take a look at one argument. If we understand it then
-# we return 1. Otherwise we return 0. Might pop some more arguments from pargs.
-sub collectOneArgument {
-    my($self, $arg, $pargs) = @_;
-    my $res;
-    # Maybe it is a compiler option or a source file
-    if($self->compilerArgument($self->{OPTIONS}, $arg, $pargs)) { return 1; }
-
-    if($arg eq "--help" || $arg eq "-help") {
-        $self->printVersion(); 
-        $self->printHelp(); 
-        exit 1;
-    }
-    if($arg eq "--version" || $arg eq "-version") {
-        $self->printVersion(); exit 0;
-    }
-    if($arg eq "--verbose") {
-        $self->{VERBOSE} = 1; return 1;
-    }
-    if($arg eq "--flatten_linker_scripts") {
-        $self->{FLATTEN_LINKER_SCRIPTS} = 1; return 1;
-    }
-    if($arg eq '--nomerge') {
-        $self->{SEPARATE} = 1;
-        return 1;
-    }
-    if($arg eq '--merge') {
-        $self->{SEPARATE} = 0;
-        return 1;
-    }
-    if($arg =~ "--ccargs=(.+)\$") {
-        push @{$self->{CCARGS}}, $1;
-        return 1;
-    }
-    if($arg eq '--trueobj') {
-        $self->{TRUEOBJ} = 1;
-        return 1;
-    }
-    # zf: force curing when linking to a lib
-    if ($arg eq '--truelib') {
-	$self->{TRUELIB} = 1;
-	return 1;
-    }
-    if($arg eq '--keepmerged') {
-        $self->{KEEPMERGED} = 1;
-        return 1;
-    }
-    if($arg eq '--stdoutpp') {
-        $self->{STDOUTPP} = 1;
-        return 1;
-    }
-    if($arg =~ m|--save-temps=(.+)$|) {
-        if(! -d $1) {
-            die "Cannot find directory $1";
-        }
-        $self->{SAVE_TEMPS} = $1;
-        return 1;
-    }
-    if($arg eq '--save-temps') {
-        $self->{SAVE_TEMPS} = '.';
-        return 1;
-    }
-    if($arg =~ m|--leavealone=(.+)$|)  {
-        push @{$self->{LEAVEALONE}}, $1; 
-        return 1;
-    }
-    if($arg =~ m|--includedir=(.+)$|)  {
-        push @{$self->{INCLUDEDIR}}, $1; return 1;
-    }
-    if($arg =~ m|--stages|) {
-        $self->{SHOWSTAGES} = 1;
-        push @{$self->{CILARGS}}, $arg;
-        return 1;
-    }
-    if($arg eq "--bytecode") {
-        $self->{NATIVECAML} = 0; return 1;
-    }
-#     if($arg eq "--no-idashi") {
-#         $self->{IDASHI} = 0; return 1;
-#     }
-    if($arg eq "--no-idashdot") {
-        $self->{IDASHDOT} = 0; return 1;
-    }
-
-    # sm: response file
-    if($arg =~ m|-@(.+)$| ||
-        (($self->{MODENAME} eq "MSVC" ||
-          $self->{MODENAME} eq "MSLINK" ||
-          $self->{MODENAME} eq "MSLIB") && $arg =~ m|@(.+)$|)) {
-        my $fname = $1;         # name of response file
-        &classifyArgDebug("processing response file: $fname\n");
-
-        # read the lines into an array
-        if (!open(RF, "<$fname")) {
-            die("cannot open response file $fname: $!\n");
-        }
-        my @respArgs = ();
-        while(<RF>) {
-            # Drop spaces and empty lines
-            my ($middle) = ($_ =~ m|\s*(\S.*\S)\s*|);
-            if($middle ne "") {
-                # Sometimes we have multiple arguments in one line :-()
-                if($middle =~ m|\s| &&
-                   $middle !~ m|[\"]|) { 
-                      # Contains spaces and no quotes
-                    my @middles = split(/\s+/, $middle);
-                    push @respArgs, @middles;
-                } else {
-                    push @respArgs, $middle;
-                }
-#                print "Arg:$middle\n";
-            }
-        }
-        close(RF) or die;
-
-
-        # Scan and process the arguments
-        collectArgumentList($self, @respArgs);
-
-        #print("done with response file: $fname\n");
-        return 1;      # argument undestood
-    }
-    if($arg eq "-@" || ($self->{MODENAME} eq "MSVC" && $arg eq "@")) {
-        # sm: I didn't implement the case where it takes the next argument
-        # because I wasn't sure how to grab add'l args (none of the
-        # cases above do..)
-        die("For ccured/cilly, please don't separate the -@ from the\n",
-            "response file name.  e.g., use -@", "respfile.\n");
-    }
-
-    # Intercept the --out argument
-    if($arg =~ m|^--out=(\S+)$|) {
-        $self->{CILLY_OUT} = $1;
-        push @{$self->{CILARGS}}, "--out", $1;
-        return 1;
-    }
-    # All other arguments starting with -- are passed to CIL
-    if($arg =~ m|^--|) {
-        # Split the ==
-        if($arg =~ m|^(--\S+)=(.+)$|) {
-            push @{$self->{CILARGS}}, $1, $2; return 1;
-        } else {
-            push @{$self->{CILARGS}}, $arg; return 1;
-        }
-    }
-    return 0;
-}
-
-
-sub printVersion {
-    system ($CilCompiler::compiler, '--version'); 
-}
-
-sub printHelp {
-    my($self) = @_;
-    $self->usage();
-    print <<EOF;
-
-Options:
-  --mode=xxx   What tool to emulate:
-                GNUCC   - GNU gcc
-                AR      - GNU ar
-                MSVC    - MS VC cl compiler
-                MSLINK  - MS VC link linker
-                MSLIB   - MS VC lib linker
-               This option must be the first one! If it is not found there
-               then GNUCC mode is assumed.
-  --help (or -help) Prints this help message.
-  --verbose    Prints a lot of information about what is being done.
-  --save-temps Keep temporary files in the current directory.
-  --save-temps=xxx Keep temporary files in the given directory.
-  
-  --nomerge    Apply CIL separately to each source file as they are compiled. 
-               By default CIL is applied to the whole program during linking.
-  --merge      Apply CIL to the merged program.
-  --keepmerged  Save the merged file. Only useful if --nomerge is not given.
-  --trueobj          Do not write preprocessed sources in .obj/.o files but
-                     create some other files (e.g. foo.o_saved.c).
-  --truelib          When linking to a library (with -r or -i), output real
-                     object files instead of preprocessed sources. This only
-		     works for GCC right now.
-  --leavealone=xxx   Leave alone files whose base name is xxx. This means
-                     they are not merged and not processed with CIL.
-  --includedir=xxx   Adds a new include directory to replace existing ones
-  --bytecode         Invoke the bytecode (as opposed to native code) system
-
-EOF
-#   --no-idashi        Do not use '-I-' with the gcc preprocessor.
-    $self->helpMessage();
-}
-
-# For printing the first line of the help message
-sub usage {
-    my ($self) = @_;
-    print "<No usage is defined>";
-}
-
-# The rest of the help message
-sub helpMessage {
-    my ($self) = @_;
-    print <<EOF;
-Send bugs to necula\@cs.berkeley.edu.
-EOF
-}
-
-
-#
-# Normalize a file name to always use slashes
-#
-sub normalizeFileName {
-    my($f) = @_;
-    $f =~ s|\\|/|g;
-    return $f;
-}
-
-#
-# The basic routines: for ech source file preprocess, compile, then link
-# everything
-#
-#
-
-
-# LINKING into a library (with COMPILATION and PREPROCESSING)
-sub straight_linktolib {
-    my ($self, $psrcs, $dest, $ppargs, $ccargs, $ldargs) = @_;
-    my @sources = ref($psrcs) ? @{$psrcs} : ($psrcs);
-    my @dest = $dest eq "" ? () : ($self->{OUTLIB} . $dest);
-    # Pass the linkargs last because some libraries must be passed after
-    # the sources
-    my @cmd = (@{$self->{LDLIB}}, @dest, @{$ppargs}, @{$ccargs}, @sources, @{$ldargs});
-    return $self->runShell(@cmd);
-}
-
-# Customize the linking into libraries
-sub linktolib {
-    my($self, $psrcs, $dest, $ppargs, $ccargs, $ldargs) = @_;
-    if($self->{VERBOSE}) { print STDERR "Linking into library $dest\n"; }
-
-    # Now collect the files to be merged
-    my ($tomerge, $trueobjs, $ccargs) = 
-        $self->separateTrueObjects($psrcs, $ccargs);
-
-    if($self->{SEPARATE} || @{$tomerge} == 0) {
-        # Not merging. Regular linking.
-
-        return $self->straight_linktolib($psrcs, $dest, 
-                                         $ppargs, $ccargs, $ldargs);
-    }
-    # We are merging. Merge all the files into a single one
-    
-    if(@{$trueobjs} > 0) {
-        # We have some true objects. Save them into an additional file
-        my $trueobjs_file = "$dest" . "_trueobjs";
-        if($self->{VERBOSE}) {
-            print STDERR
-                "Saving additional true object files in $trueobjs_file\n";
-        }
-        open(TRUEOBJS, ">$trueobjs_file") || die "Cannot write $trueobjs_file";
-        foreach my $true (@{$trueobjs}) {
-            my $abs = File::Spec->rel2abs($true);
-            print TRUEOBJS "$abs\n";
-        }
-        close(TRUEOBJS);
-    }
-    if(@{$tomerge} == 1) { # Just copy the file over
-        (!system('cp', '-f', ${$tomerge}[0], $dest))
-            || die "Cannot copy ${$tomerge}[0] to $dest\n";
-        return ;
-    }
-    #
-    # We must do real merging
-    #
-    # Prepare the name of the CIL output file based on dest
-    my ($base, $dir, $ext) = fileparse($dest, "(\\.[^.]+)");
-    
-    # Now prepare the command line for invoking cilly
-    my ($aftercil, @cmd) = $self->MergeCommand ($psrcs, $dir, $base);
-    die unless $cmd[0];
-
-    if($self->{MODENAME} eq "MSVC") {
-        push @cmd, "--MSVC";
-    }
-    if($self->{VERBOSE}) {
-        push @cmd, "--verbose";
-    }
-    if(defined $self->{CILARGS}) {
-        push @cmd, @{$self->{CILARGS}};
-    }
-    # Eliminate duplicates
-    
-    # Add the arguments
-    if(@{$tomerge} > 20) {
-        my $extraFile = "___extra_files";
-        open(TOMERGE, ">$extraFile") || die $!;
-        #FRANJO added the following on February 15th, 2005
-        #REASON: extrafiles was TempFIle=HASH(0x12345678) 
-        # instead of actual filename
-        my @normalized = @{$tomerge} ;
-        $_ = (ref $_ ? $_->filename : $_) foreach @normalized;
-        foreach my $fl (@normalized) {
-            print TOMERGE "$fl\n";
-        }
-        close(TOMERGE);
-        push @cmd, '--extrafiles', $extraFile;
-    } else {
-        push @cmd, @{$tomerge};
-    }
-    push @cmd, "--mergedout", $dest;
-    # Now run cilly
-    return $self->runShell(@cmd);
-}
-
-############
-############ PREPROCESSING
-############
-#
-# All flavors of preprocessing return the destination file
-#
-
-# THIS IS THE ENTRY POINT FOR COMPILING SOURCE FILES
-sub preprocess_compile {
-    my ($self, $src, $dest, $early_ppargs, $ppargs, $ccargs) = @_;
-    &mydebug("preprocess_compile(src=$src, dest=$dest)\n");
-    Carp::confess "bad dest: $dest" unless $dest->isa('OutputFile');
-
-    my ($base, $dir, $ext) = fileparse($src, "\\.[^.]+");
-    if($ext eq ".c" || $ext eq ".cpp" || $ext eq ".cc") {
-        if($self->leaveAlone($src)) {
-            print "Leaving alone $src\n";
-            # We leave this alone. So just compile as usual
-            return $self->straight_compile($src, $dest, $early_ppargs, $ppargs, $ccargs);
-        }
-        my $out    = $self->preprocessOutputFile($src);
-        $out = $self->preprocess($src, $out, 
-                                 [@{$early_ppargs}, @{$ppargs},
-                                  "$self->{DEFARG}CIL=1"]);
-        return $self->compile($out, $dest, $ppargs, $ccargs);
-    }
-    if($ext eq ".i") {
-        return $self->compile($src, $dest, $ppargs, $ccargs);
-    }
-    if($ext eq ".$::cilbin") {
-        return $self->compile($src, $dest, $ppargs, $ccargs);
-    }
-}
-
-# THIS IS THE ENTRY POINT FOR JUST PREPROCESSING A FILE
-sub preprocess {
-    my($self, $src, $dest, $ppargs) = @_;
-    Carp::confess "bad dest: $dest" unless $dest->isa('OutputFile');
-    return $self->preprocess_before_cil($src, $dest, $ppargs);
-}
-
-# Find the name of the preprocessed file before CIL processing
-sub preprocessOutputFile {
-    my($self, $src) = @_;
-    return $self->outputFile($src, 'i');
-}
-
-# Find the name of the preprocessed file after CIL processing
-sub preprocessAfterOutputFile {
-    my($self, $src) = @_;
-    return $self->outputFile($src, 'cil.i');
-}
-
-# When we use CIL we have two separate preprocessing stages. First is the
-# preprocessing before the CIL sees the code and the is the preprocessing
-# after CIL sees the code
- 
-sub preprocess_before_cil {
-    my ($self, $src, $dest, $ppargs) = @_;
-    Carp::confess "bad dest: $dest" unless $dest->isa('OutputFile');
-    my @args = @{$ppargs};
-
-    # See if we must force some includes
-    if(defined $self->{INCLUDEDIR} && !defined($ENV{"CILLY_NOCURE"})) {
-        # And force the other includes. Put them at the begining
-        if(($self->{MODENAME} eq 'GNUCC') &&
-           # sm: m88k doesn't work if I pass -I.
-           $self->{IDASHDOT}) {
-            unshift @args, "-I.";
-        }
-        if(! defined($self->{VERSION})) {
-            $self->setVersion();
-        }
-        unshift @args,
-            map { my $dir = $_;
-                  $self->{INCARG} . $dir . "/" . $self->{VERSION} }
-            @{$self->{INCLUDEDIR}};
-        #matth: include the main include dir as well as the compiler-specific directory
-        unshift @args,
-            map { my $dir = $_;
-                  $self->{INCARG} . $dir }
-            @{$self->{INCLUDEDIR}};
-        if($self->{MODENAME} eq 'GNUCC') {
-            # sm: this is incompatible with wu-ftpd, but is apparently needed
-            # for apache.. more investigation is needed
-            # update: now when I try it, apache works without -I- also.. but
-            # I'll make this into a switchable flag anyway
-            # matth: this breaks other tests.  Let's try without.
-#             if ($self->{IDASHI}) {
-#                 unshift @args, "-I-";
-#             }
-        }
-    }
-
-    return $self->straight_preprocess($src, $dest, \@args);
-}
-
-# Preprocessing after CIL
-sub preprocess_after_cil {
-    my ($self, $src, $dest, $ppargs) = @_;
-    Carp::confess "bad dest: $dest" unless $dest->isa('OutputFile');
-    return $self->straight_preprocess($src, $dest, $ppargs);
-}
-
-#
-# This is intended to be the true invocation of the underlying preprocessor
-# You should not override this method
-sub straight_preprocess {
-    my ($self, $src, $dest, $ppargs) = @_;
-    Carp::confess "bad dest: $dest" unless $dest->isa('OutputFile');
-    if($self->{VERBOSE}) {
-	my $srcname = ref $src ? $src->filename : $src;
-	print STDERR "Preprocessing $srcname\n";
-    }
-    if($self->{MODENAME} eq "MSVC" ||
-       $self->{MODENAME} eq "MSLINK" ||
-       $self->{MODENAME} eq "MSLIB") {
-        $self->MSVC::msvc_preprocess($src, $dest, $ppargs);
-    } else {
-#        print Dumper($self);
-        my @cmd = (@{$self->{CPP}}, @{$ppargs},
-		   $src, $self->makeOutArguments($self->{OUTCPP}, $dest));
-        $self->runShell(@cmd);
-        
-    }
-    return $dest;
-}
-
-
-#
-#
-#
-# COMPILATION
-#
-#
-
-sub compile {
-    my($self, $src, $dest, $ppargs, $ccargs) = @_;
-    &mydebug("Cilly.compile(src=$src, dest=$dest->{filename})\n");
-    Carp::confess "bad dest: $dest->{filename}" 
-        unless $dest->isa('OutputFile');
-    
-    if($self->{SEPARATE}) {
-        # Now invoke CIL and compile afterwards
-        return $self->applyCilAndCompile([$src], $dest, $ppargs, $ccargs); 
-    }
-    # We are merging
-    # If we are merging then we just save the preprocessed source
-    my ($mtime, $res, $outfile);
-    if(! $self->{TRUEOBJ}) {
-        $outfile = $dest->{filename}; $mtime = 0; $res   = $dest;
-    } else {
-        # Do the real compilation
-        $res = $self->straight_compile($src, $dest, $ppargs, $ccargs);
-        # Now stat the result 
-        my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,
-            $atime,$mtime_1,$ctime,$blksize,$blocks) = stat($dest->{filename});
-        if(! defined($mtime_1)) {
-            die "Cannot stat the result of compilation $dest->{filename}";
-        }
-        $mtime = $mtime_1;
-        $outfile = $dest->{filename} . $Cilly::savedSourceExt;
-    }
-    my $srcname = ref $src ? $src->filename : $src; 
-    if($self->{VERBOSE}) { 
-        print STDERR "Saving source $srcname into $outfile\n";
-    }
-    open(OUT, ">$outfile") || die "Cannot create $outfile";
-    my $toprintsrc = $srcname; 
-    $toprintsrc =~ s|\\|/|g;
-    print OUT "#pragma merger($mtime,\"$toprintsrc\",\"" . 
-              join(',', @{$ccargs}), "\")\n";
-    open(IN, '<', $srcname) || die "Cannot read $srcname";
-    while(<IN>) {
-        print OUT $_;
-    }
-    close(OUT);
-    close(IN);
-    return $res;
-} 
-
-sub makeOutArguments { 
-    my ($self, $which, $dest) = @_;
-    $dest = $dest->{filename} if ref $dest;
-    if($self->{MODENAME} eq "MSVC" || 
-       $self->{MODENAME} eq "MSLINK" ||
-       $self->{MODENAME} eq "MSLIB") { 
-        # A single argument
-        return ("$which$dest");
-    } else {
-        return ($which, $dest);
-    }
-}
-# This is the actual invocation of the underlying compiler. You should not
-# override this 
-sub straight_compile {
-    my ($self, $src, $dest, $ppargs, $ccargs) = @_;
-    if($self->{VERBOSE}) { 
-        print STDERR 'Compiling ', ref $src ? $src->filename : $src, ' into ', 
-        $dest->filename, "\n"; 
-    }
-    my @dest = 
-        $dest eq "" ? () : $self->makeOutArguments($self->{OUTOBJ}, $dest);
-    my @forcec = @{$self->{FORCECSOURCE}};
-    my @cmd = (@{$self->{CC}}, @{$ppargs}, @{$ccargs},
-	       @dest, @forcec, $src);
-    return $self->runShell(@cmd);
-}
-
-# This is compilation after CIL
-sub compile_cil {
-    my ($self, $src, $dest, $ppargs, $ccargs) = @_;
-    return $self->straight_compile($src, $dest, $ppargs, $ccargs);
-}
-
-
-
-# THIS IS THE ENTRY POINT FOR JUST ASSEMBLING FILES
-sub assemble {
-    my ($self, $src, $dest, $ppargs, $ccargs) = @_;
-    if($self->{VERBOSE}) { print STDERR "Assembling $src\n"; }
-    my @dest = 
-        $dest eq "" ? () : $self->makeOutArguments($self->{OUTOBJ}, $dest);
-    my @cmd = (@{$self->{CC}}, @{$ppargs}, @{$ccargs},
-	       @dest, $src);
-    return $self->runShell(@cmd);
-}
-
-
-
-#
-# This is intended to be the true invocation of the underlying linker
-# You should not override this method
-sub straight_link {
-    my ($self, $psrcs, $dest, $ppargs, $ccargs, $ldargs) = @_;
-    my @sources = ref($psrcs) ? @{$psrcs} : ($psrcs);
-    my @dest = 
-        $dest eq "" ? () : $self->makeOutArguments($self->{OUTEXE}, $dest);
-    # Pass the linkargs last because some libraries must be passed after
-    # the sources
-    my @cmd = (@{$self->{LD}}, @dest,
-	       @{$ppargs}, @{$ccargs}, @sources, @{$ldargs});
-    return $self->runShell(@cmd);
-}
-
-#
-# See if some libraries are actually lists of files
-sub expandLibraries {
-    my ($self) = @_;
-
-    my @tolink = @{$self->{OFILES}};
-
-    # Go through the sources and replace all libraries with the files that
-    # they contain
-    my @tolink1 = ();
-    while($#tolink >= 0) {
-        my $src = shift @tolink;
-#        print "Looking at $src\n";
-        # See if the source is a library. Then maybe we should get instead the 
-        # list of files
-        if($src =~ m|\.$self->{LIBEXT}$| && -f "$src.files") {
-            open(FILES, "<$src.files") || die "Cannot read $src.files";
-            while(<FILES>) {
-                # Put them back in the "tolink" to process them recursively
-                while($_ =~ m|[\r\n]$|) {
-                    chop;
-                }
-                unshift @tolink, $_;
-            }
-            close(FILES);
-            next;
-        }
-        # This is not for us
-        push @tolink1, $src;
-        next;
-    }
-    $self->{OFILES} = \@tolink1;
-}
-
-# Go over a list of object files and separate them into those that are
-# actually sources to be merged, and the true object files
-#
-sub separateTrueObjects {
-    my ($self, $psrcs, $ccargs) = @_;
-
-    my @sources = @{$psrcs};
-#    print "Sources are @sources\n";
-    my @tomerge = ();
-    my @othersources = ();
-
-    my @ccmerged = @{$ccargs};
-    foreach my $src (@sources) {
-        my ($combsrc, $combsrcname, $mtime);
-	my $srcname = ref $src ? $src->filename : $src;
-        if(! $self->{TRUEOBJ}) {
-            # We are using the object file itself to save the sources
-            $combsrcname = $srcname;
-            $combsrc = $src;
-            $mtime = 0;
-        } else {
-            $combsrcname = $srcname . $Cilly::savedSourceExt;
-            $combsrc = $combsrcname;
-            if(-f $combsrcname) { 
-                my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,
-                    $atime,$mtime_1,$ctime,$blksize,$blocks) = stat($srcname);
-                $mtime = $mtime_1;
-            } else {
-                $mtime = 0;
-            }
-        }
-        # Look inside and see if it is one of the files created by us
-        open(IN, "<$combsrcname") || die "Cannot read $combsrcname";
-        my $fstline = <IN>;
-        close(IN);
-        if($fstline =~ m|CIL|) {
-            goto ToMerge;
-        } 
-        if($fstline =~ m|^\#pragma merger\((\d+),\".*\",\"(.*)\"\)$|) {
-            my $mymtime = $1;
-            # Get the CC flags
-            my @thisccargs = split(/,/, $2);
-            foreach my $arg (@thisccargs) {
-                # print "Looking at $arg\n  ccmerged=@ccmerged\n";
-                if(! grep(/$arg/, @ccmerged)) {
-                    # print " adding it\n";
-                    push @ccmerged, $arg
-                }
-            }
-          ToMerge:
-            if($mymtime == $mtime) { # It is ours
-                # See if we have this already
-                if(! grep { $_ eq $srcname } @tomerge) { # It is ours
-                    push @tomerge, $combsrc; 
-                    # See if there is a a trueobjs file also
-                    my $trueobjs = $combsrcname . "_trueobjs";
-                    if(-f $trueobjs) {
-                        open(TRUEOBJS, "<$trueobjs") 
-                            || die "Cannot read $trueobjs";
-                        while(<TRUEOBJS>) {
-                            chop;
-                            push @othersources, $_;
-                        }
-                        close(TRUEOBJS);
-                    }
-                }
-                next;
-            }
-        }
-        push @othersources, $combsrc;
-    }
-    # If we are merging, turn off "warnings are errors" flag
-    if(grep(/$self->{WARNISERROR}/, @ccmerged)) {
-        @ccmerged = grep(!/$self->{WARNISERROR}/, @ccmerged);
-        print STDERR "Turning off warn-is-error flag $self->{WARNISERROR}\n";
-    }
-
-    return (\@tomerge, \@othersources, \@ccmerged);
-}
-
-
-# Customize the linking
-sub link {
-    my($self, $psrcs, $dest, $ppargs, $ccargs, $ldargs) = @_;
-    my $destname = ref $dest ? $dest->filename : $dest;
-    if($self->{SEPARATE}) {
-        if (!defined($ENV{CILLY_DONT_LINK_AFTER_MERGE})) {
-          if($self->{VERBOSE}) { print STDERR "Linking into $destname\n"; }
-          # Not merging. Regular linking.
-          return $self->link_after_cil($psrcs, $dest, 
-                                       $ppargs, $ccargs, $ldargs);
-        }
-        else {
-          return 0;   # sm: is this value used??
-        }
-    }
-    my $mergedobj = new OutputFile($destname, 
-                                   "${destname}_comb.$self->{OBJEXT}");
-
-    # We must merge
-    if($self->{VERBOSE}) { 
-        print STDERR "Merging saved sources into $mergedobj->{filename} (in process of linking $destname)\n"; 
-    }
-    
-    # Now collect the files to be merged
-
-    my ($tomerge, $trueobjs, $ccargs) = 
-        $self->separateTrueObjects($psrcs, $ccargs);
-
-    if($self->{VERBOSE}) {
-        print STDERR "Will merge the following: ", 
-                         join(' ', @{$tomerge}), "\n";
-        print STDERR "Will just link the genuine object files: ", 
-                         join(' ', @{$trueobjs}), "\n";
-        print STDERR "After merge compile flags: @{$ccargs}\n";
-    }
-    # Check the modification times and see if we can just use the combined
-    # file instead of merging all over again
-    if(@{$tomerge} > 1 && $self->{KEEPMERGED}) {
-        my $canReuse = 1;
-        my $combFile = new OutputFile($destname,
-                                      "${destname}_comb.c");
-        my @tmp = stat($combFile); 
-        my $combFileMtime = $tmp[9] || 0;
-        foreach my $mrg (@{$tomerge}) {
-            my @tmp = stat($mrg); my $mtime = $tmp[9];
-            if($mtime >= $combFileMtime) { goto DoMerge; }
-        }
-        if($self->{VERBOSE}) {
-            print STDERR "Reusing merged file $combFile\n";
-        }
-        $self->applyCilAndCompile([$combFile], $mergedobj, $ppargs, $ccargs); 
-    } else { 
-      DoMerge:
-        $self->applyCilAndCompile($tomerge, $mergedobj, $ppargs, $ccargs);
-    }
-
-    # Put the merged OBJ at the beginning because maybe some of the trueobjs
-    # are libraries which like to be at the end
-    unshift @{$trueobjs}, $mergedobj;
-
-    # And finally link
-    # zf: hack for linking linux stuff
-    if ($self->{TRUELIB}) {
-	my @cmd = (@{$self->{LDLIB}}, ($dest),
-		   @{$ppargs}, @{$ccargs}, @{$trueobjs}, @{$ldargs});
-	return $self->runShell(@cmd);
-    }
-
-    # sm: hack: made this conditional for dsw
-    if (!defined($ENV{CILLY_DONT_LINK_AFTER_MERGE})) {
-      $self->link_after_cil($trueobjs, $dest, $ppargs, $ccargs, $ldargs);
-    }
-
-}
-
-sub applyCil {
-    my ($self, $ppsrc, $dest) = @_;
-    
-    # The input files
-    my @srcs = @{$ppsrc};
-
-    # Now prepare the command line for invoking cilly
-    my ($aftercil, @cmd) = $self->CillyCommand ($ppsrc, $dest);
-    Carp::confess "$self produced bad output file: $aftercil" 
-        unless $aftercil->isa('OutputFile');
-
-    if($self->{MODENAME} eq "MSVC" || 
-       $self->{MODENAME} eq "MSLINK" ||
-       $self->{MODENAME} eq "MSLIB") {
-        push @cmd, '--MSVC';
-    }
-    if($self->{VERBOSE}) {
-        push @cmd, '--verbose';
-    }
-    if(defined $self->{CILARGS}) {
-        push @cmd, @{$self->{CILARGS}};
-    }
-
-    # Add the arguments
-    if(@srcs > 20) {
-        my $extraFile = "___extra_files";
-        open(TOMERGE, ">$extraFile") || die $!;
-        foreach my $fl (@srcs) {
-            my $fname =  ref $fl ? $fl->filename : $fl;
-            print TOMERGE "$fname\n";
-        }
-        close(TOMERGE);
-        push @cmd, '--extrafiles', $extraFile;
-    } else {
-        push @cmd, @srcs;
-    }
-    if(@srcs > 1 && $self->{KEEPMERGED}) {
-	my ($base, $dir, undef) = fileparse($dest->filename, qr{\.[^.]+});
-        push @cmd, '--mergedout', "$dir$base" . '.c';
-    }
-    # Now run cilly
-    $self->runShell(@cmd);
-
-    # Tell the caller where we put the output
-    return $aftercil;
-}
-
-
-sub applyCilAndCompile {
-    my ($self, $ppsrc, $dest, $ppargs, $ccargs) = @_;
-    Carp::confess "$self produced bad destination file: $dest"
-	unless $dest->isa('OutputFile');
-
-    # The input files
-    my @srcs = @{$ppsrc};
-    &mydebug("Cilly.PM.applyCilAndCompile(srcs=[",join(',',@{$ppsrc}),"])\n");
-
-    # Now run cilly
-    my $aftercil = $self->applyCil($ppsrc, $dest);
-    Carp::confess "$self produced bad output file: $aftercil" 
-        unless $aftercil->isa('OutputFile');
-
-    # Now preprocess
-    my $aftercilpp = $self->preprocessAfterOutputFile($aftercil);
-    $self->preprocess_after_cil($aftercil, $aftercilpp, $ppargs);
-
-    if (!defined($ENV{CILLY_DONT_COMPILE_AFTER_MERGE})) {
-      # Now compile
-      return $self->compile_cil($aftercilpp, $dest, $ppargs, $ccargs);
-    }
-}
-
-# Linking after CIL
-sub link_after_cil {
-    my ($self, $psrcs, $dest, $ppargs, $ccargs, $ldargs) = @_;
-    if (!defined($ENV{CILLY_DONT_COMPILE_AFTER_MERGE})) {
-      return $self->straight_link($psrcs, $dest, $ppargs, $ccargs, $ldargs);
-    }
-}
-
-# See if we must merge this one
-sub leaveAlone {
-    my($self, $filename) = @_;
-    my ($base, $dir, $ext) = fileparse($filename, "(\\.[^.]+)");
-    if(grep { $_ eq $base } @{$self->{LEAVEALONE}}) {
-        return 1;
-    } else {
-        return 0;
-    }
-}
-
-
-# DO EVERYTHING
-sub doit {
-    my ($self) = @_;
-    my $file;
-    my $out;
-
-#    print Dumper($self);
-
-    # Maybe we must preprocess only
-    if($self->{OPERATION} eq "TOI" || $self->{OPERATION} eq 'SPECIAL') {
-        # Then we do not do anything
-	my @cmd = (@{$self->{CPP}},
-		   @{$self->{EARLY_PPARGS}},
-		   @{$self->{PPARGS}}, @{$self->{CCARGS}}, 
-		   @{$self->{CFILES}}, @{$self->{SFILES}});
-	push @cmd, @{$self->{OUTARG}} if defined $self->{OUTARG};
-
-        return $self->runShell(@cmd);
-    }
-    # We expand some libraries names. Maybe they just contain some 
-    # new object files
-    $self->expandLibraries();
-
-    # Try to guess whether to run in the separate mode. In that case 
-    # we can go ahead with the compilation, without having to save 
-    # files
-    if(! $self->{SEPARATE} && # Not already separate mode
-       $self->{OPERATION} eq "TOEXE" &&  # We are linking to an executable
-       @{$self->{CFILES}} + @{$self->{IFILES}} <= 1) { # At most one source
-        # If we have object files, we should keep merging if at least one 
-        # object file is a disguised source
-        my $turnOffMerging = 0;
-        if(@{$self->{OFILES}}) {
-            my ($tomerge, $trueobjs, $mergedccargs) = 
-                $self->separateTrueObjects($self->{OFILES}, $self->{CCARGS});
-            $self->{CCARGS} = $mergedccargs;
-            $turnOffMerging = (@{$tomerge} == 0);
-        } else {
-            $turnOffMerging = 1;
-        }
-        if($turnOffMerging) {
-            if($self->{VERBOSE}) {
-                print STDERR
-                    "Turn off merging because the program contains one file\n";
-            }
-            $self->{SEPARATE} = 1; 
-        }
-    }
-
-    # Turn everything into OBJ files
-    my @tolink = ();
-
-    foreach $file (@{$self->{IFILES}}, @{$self->{CFILES}}) {
-        $out = $self->compileOutputFile($file);
-        $self->preprocess_compile($file, $out,
-				  $self->{EARLY_PPARGS},
-                                  $self->{PPARGS}, $self->{CCARGS});
-        push @tolink, $out;
-    }
-    # Now do the assembly language file
-    foreach $file (@{$self->{SFILES}}) {
-        $out = $self->assembleOutputFile($file);
-        $self->assemble($file, $out, $self->{PPARGS}, $self->{CCARGS});
-        push @tolink, $out;
-    }
-    # Now add the original object files. Put them last because libraries like
-    # to be last.
-    push @tolink, @{$self->{OFILES}};
-
-    # See if we must stop after compilation
-    if($self->{OPERATION} eq "TOOBJ") {
-        return;
-    }
-
-    # See if we must create a library only
-    if($self->{OPERATION} eq "TOLIB") {
-	if (!$self->{TRUELIB}) {
-	    # zf: Creating a library containing merged source
-	    $out = $self->linkOutputFile(@tolink);
-	    $self->linktolib(\@tolink,  $out, 
-			     $self->{PPARGS}, $self->{CCARGS}, 
-			     $self->{LINKARGS});
-	    return;
-	} else {
-	    # zf: Linking to a true library. Do real curing.
-	    # Only difference from TOEXE is that we use "partial linking" of the 
-	    # underlying linker
-	    if ($self->{VERBOSE}) {
-	        print STDERR "Linking to a true library!";
-	    }
-	    push @{$self->{CCARGS}}, "-r";
-	    $out = $self->linkOutputFile(@tolink);
-	    $self->link(\@tolink,  $out, 
-			$self->{PPARGS}, $self->{CCARGS}, $self->{LINKARGS});
-	    return;
-	}
-
-    }
-
-    # Now link all of the files into an executable
-    if($self->{OPERATION} eq "TOEXE") {
-        $out = $self->linkOutputFile(@tolink);
-        $self->link(\@tolink,  $out, 
-                    $self->{PPARGS}, $self->{CCARGS}, $self->{LINKARGS});
-        return;
-    }
-
-    die "I don't understand OPERATION:$self->{OPERATION}\n";
-}
-
-sub classifyArgDebug {
-    if(0) { print @_; }
-}
-
-sub mydebug {
-    if(0) { print @_; }
-}
-
-sub compilerArgument {
-    my($self, $options, $arg, $pargs) = @_;
-    &classifyArgDebug("Classifying arg: $arg\n");
-    my $idx = 0;
-    for($idx=0; $idx < $#$options; $idx += 2) {
-        my $key = ${$options}[$idx];
-        my $action = ${$options}[$idx + 1];
-        &classifyArgDebug("Try match with $key\n");
-        if($arg =~ m|^$key|) {
-          &classifyArgDebug(" match with $key\n");
-          my @fullarg = ($arg);
-          my $onemore;
-          if(defined $action->{'ONEMORE'}) {
-              &classifyArgDebug("  expecting one more\n");
-              # Maybe the next arg is attached
-              my $realarg;
-              ($realarg, $onemore) = ($arg =~ m|^($key)(.+)$|);
-              if(! defined $onemore) {
-                  # Grab the next argument
-                  $onemore = $self->fetchNextArg($pargs);
-                  $onemore = &quoteIfNecessary($onemore);
-                  push @fullarg, $onemore;
-              } else {
-                  $onemore = &quoteIfNecessary($onemore);
-              }
-              &classifyArgDebug(" onemore=$onemore\n");
-          }
-          # Now see what action we must perform
-          my $argument_done = 1;
-          if(defined $action->{'RUN'}) {
-              &{$action->{'RUN'}}($self, @fullarg, $onemore, $pargs);
-              $argument_done = 1;
-          }
-          # Quote special SHELL caracters 
-          @fullarg = map { $_ =~ s%([<>;&|])%'$1'%g; $_ } @fullarg;
-          # print "fullarg = ", @fullarg, "\n";
-          if(defined $action->{'TYPE'}) {
-              &classifyArgDebug("  type=$action->{TYPE}\n");
-              if($action->{TYPE} eq 'EARLY_PREPROC') {
-                  push @{$self->{EARLY_PPARGS}}, @fullarg; return 1;
-              }
-              elsif($action->{TYPE} eq "PREPROC") {
-                  push @{$self->{PPARGS}}, @fullarg; return 1;
-              }
-              elsif($action->{TYPE} eq 'SPECIAL') {
-                  push @{$self->{PPARGS}}, @fullarg;
-		  $self->{OPERATION} = 'SPECIAL';
-		  return 1;
-              }
-              elsif($action->{TYPE} eq "CC") {
-                  push @{$self->{CCARGS}}, @fullarg; return 1;
-              }
-              elsif($action->{TYPE} eq "LINKCC") {
-                  push @{$self->{CCARGS}}, @fullarg; 
-                  push @{$self->{LINKARGS}}, @fullarg; return 1;
-              }
-              elsif($action->{TYPE} eq "ALLARGS") {
-                  push @{$self->{PPARGS}}, @fullarg;
-                  push @{$self->{CCARGS}}, @fullarg; 
-                  push @{$self->{LINKARGS}}, @fullarg; return 1;
-              }
-              elsif($action->{TYPE} eq "LINK") {
-                  push @{$self->{LINKARGS}}, @fullarg; return 1;
-              }
-              elsif($action->{TYPE} eq "CSOURCE") {
-		  OutputFile->protect(@fullarg);
-                  $fullarg[0] = &normalizeFileName($fullarg[0]);
-                  push @{$self->{CFILES}}, @fullarg; return 1;
-              }
-              elsif($action->{TYPE} eq "ASMSOURCE") {
-		  OutputFile->protect(@fullarg);
-                  $fullarg[0] = &normalizeFileName($fullarg[0]);
-                  push @{$self->{SFILES}}, @fullarg; return 1;
-              }
-              elsif($action->{TYPE} eq "OSOURCE") {
-		  OutputFile->protect(@fullarg);
-                  $fullarg[0] = &normalizeFileName($fullarg[0]);
-                  push @{$self->{OFILES}}, @fullarg; return 1;
-              }
-              elsif($action->{TYPE} eq "ISOURCE") {
-		  OutputFile->protect(@fullarg);
-                  $fullarg[0] = &normalizeFileName($fullarg[0]);
-                  push @{$self->{IFILES}}, @fullarg; return 1;
-              }
-              elsif($action->{TYPE} eq 'OUT') {
-                  if(defined($self->{OUTARG})) {
-                      print "Warning: output file is multiply defined: @{$self->{OUTARG}} and @fullarg\n";
-                  }
-                  $fullarg[0] = &normalizeFileName($fullarg[0]);
-                  $self->{OUTARG} = [@fullarg]; return 1;
-              }
-              print "  Do not understand TYPE\n"; return 1;
-          }
-          if($argument_done) { return 1; }
-          print "Don't know what to do with option $arg\n"; 
-          return 0;
-      }
-   }
-   return 0;
-}
-
-
-sub runShell {
-    my ($self, @cmd) = @_;
-
-    my $msvcFriends = 
-        ($self->{MODENAME} eq "MSVC" || 
-         $self->{MODENAME} eq "MSLINK" || 
-         $self->{MODENAME} eq "MSLIB");
-
-    foreach (@cmd) {
-	$_ = $_->filename if ref;
-        # If we are in MSVC mode then we might have to convert the files
-        # from cygwin names to the actual Windows names
-        if($msvcFriends && $^O eq "cygwin") {
-            my $arg = $_;
-            if ($arg =~ m|^/| && -f $arg) { 
-                my $mname = `cygpath -m $arg`;
-                chop $mname;
-                if($mname ne "") { $_ = $mname; }
-            }
-        }
-    }
-
-    # sm: I want this printed to stderr instead of stdout
-    # because the rest of 'make' output goes there and this
-    # way I can capture to a coherent file
-    # sm: removed conditional on verbose since there's already
-    # so much noise in the output, and this is the *one* piece
-    # of information I *always* end up digging around for..
-    if($self->{TRACE_COMMANDS}) { print STDERR "@cmd\n"; }
-
-    # weimer: let's have a sanity check
-    my $code = system { $cmd[0] } @cmd;
-    if ($code != 0) {
-        # sm: now that we always print, don't echo the command again,
-        # since that makes the output more confusing
-	#die "Possible error with @cmd!\n";
-	$code >>= 8;    # extract exit code portion
-
-        exit $code;
-    } 
-    return $code;
-}
-
-sub quoteIfNecessary {
-    my($arg) = @_;
-    # If it contains spaces or "" then it must be quoted
-    if($arg =~ m|\s| || $arg =~ m|\"|) {
-        return "\'$arg\'";
-    } else {
-        return $arg;
-    }
-}
-
-
-sub cilOutputFile {
-    Carp::croak 'bad argument count' unless @_ == 3;
-    my ($self, $basis, $suffix) = @_;
-
-    if (defined $self->{SAVE_TEMPS}) {
-	return new KeptFile($basis, $suffix, $self->{SAVE_TEMPS});
-    } else {
-	return $self->outputFile($basis, $suffix);
-    }
-}
-
-
-sub outputFile {
-    Carp::confess 'bad argument count' unless @_ == 3;
-    my ($self, $basis, $suffix) = @_;
-
-    if (defined $self->{SAVE_TEMPS}) {
-	return new KeptFile($basis, $suffix,  $self->{SAVE_TEMPS});
-    } else {
-	return new TempFile($basis, $suffix);
-    }
-}
-
-
-###########################################################################
-####
-#### MS CL specific code
-####
-package MSVC;
-
-use strict;
-use File::Basename;
-use Data::Dumper;
-
-# For MSVC we remember which was the first source, because we use that to 
-# determine the name of the output file
-sub setFirstSource {
-    my ($self, $src) = @_;
-    
-    if(! defined ($self->{FIRST_SOURCE})) { 
-        $self->{FIRST_SOURCE} = $src;
-    }
-}
-
-sub new {
-    my ($proto, $stub) = @_;
-    my $class = ref($proto) || $proto;
-    # Create $self
-
-    my $self = 
-    { NAME => 'Microsoft cl compiler',
-      MODENAME => 'MSVC',
-      CC => ['cl', '/nologo', '/D_MSVC', '/c'],
-      CPP => ['cl', '/nologo', '/D_MSVC', '/P'],
-      LD => ['cl', '/nologo', '/D_MSVC'],
-      DEFARG  => "/D",
-      INCARG  => "/I",
-      DEBUGARG => ['/Zi', '/MLd', '/DEBUG'],
-      OPTIMARG => ['/Ox', '/G6'],
-      OBJEXT => "obj",
-      LIBEXT => "lib",   # Library extension (without the .)
-      EXEEXT => ".exe",  # Executable extension (with the .)
-      OUTOBJ => "/Fo",
-      OUTEXE => "/Fe",
-      WARNISERROR => "/WX",
-      FORCECSOURCE => ['/Tc'],
-      LINEPATTERN => "^#line\\s+(\\d+)\\s+\"(.+)\"",
-
-      OPTIONS => 
-# Describe the compiler options as a list of patterns and associated actions. 
-# The patterns are matched in order against the _begining_ of the argument.
-#
-# If the action contains ONEMORE => 1 then the argument is expected to be
-# parameterized by a following word. The word can be attached immediately to
-# the end of the argument or in a separate word. 
-#
-# If the action contains TYPE => "..." then the argument is put into
-# one of several lists, as follows: "PREPROC" in ppargs; "CC" in
-# ccargs; "LINK" in linkargs; "LINKCC" both in ccargs and linkargs;
-# "ALLARGS" in ppargs, ccargs, and linkargs; "CSOURCE" in cfiles;
-# "ASMSOURCE" in sfiles; "OSOURCE" in ofiles; "ISOURCE" in ifiles;
-# "OUT" in outarg.  "SPECIAL" flags indicate that the compiler should
-# be run directly so that it can perform some special action other
-# than generating code (e.g. printing out version or configuration
-# information).
-#
-# If the TYPE is not defined but the RUN => sub { ... } is defined then the
-# given subroutine is invoked with the self, the argument and the (possibly
-# empty) additional word and a pointer to the list of remaining arguments
-#
-          ["^[^/\\-@].*\\.($::cilbin|c|cpp|cc)\$" => 
-           { TYPE => 'CSOURCE',
-             RUN => sub { &MSVC::setFirstSource(@_); } },
-           "[^/].*\\.(asm)\$" => { TYPE => 'ASMSOURCE' },
-           "[^/].*\\.i\$" => { TYPE => 'ISOURCE' },
-           "[^/\\-@]" => { TYPE => "OSOURCE" },
-           "[/\\-]O" => { TYPE => "CC" },
-           "[/\\-][DI]" => { TYPE => "PREPROC"},
-           "[/\\-]EH" => { TYPE => "CC" },
-           "[/\\-]G"  => { TYPE => "CC" },
-           "[/\\-]F[aA]"  => { TYPE => 'CC' },
-           "[/\\-]Fo"     => { TYPE => 'OUT' },
-           "/Fe"   => { TYPE => 'OUT',
-                        RUN => sub { $stub->{OPERATION} = "TOEXE" }},
-           "[/\\-]F[dprR]" => { TYPE => "CC" },
-           "[/\\-]FI" => { TYPE => "PREPROC" },
-           "[/\\-][CXu]" => { TYPE => "PREPROC" },
-           "[/\\-]U" => { ONEMORE => 1, TYPE => "PREPROC" },
-           "[/\\-](E|EP|P)" => { RUN => sub { push @{$stub->{PPARGS}}, $_[1]; 
-                                         $stub->{OPERATION} = "PREPROC"; }},
-           "[/\\-]c" => { RUN => sub { $stub->{OPERATION} = "TOOBJ"; }},
-           "[/\\-](Q|Z|J|nologo|w|W|Zm)" => { TYPE => "CC" },
-           "[/\\-]Y(u|c|d|l|X)" => { TYPE => "CC" },
-           "[/\\-]T(C|P)" => { TYPE => "PREPROC" },
-           "[/\\-]Tc(.+)\$" => 
-                { RUN => sub { 
-                    my $arg = $_[1];
-                    my ($fname) = ($arg =~ m|[/\\-]Tc(.+)$|);
-                    $fname = &normalizeFileName($fname);
-                    push @{$stub->{CFILES}}, $fname;
-                }},
-           "[/\\-]v(d|m)" => { TYPE => "CC" },
-           "[/\\-]F" => { TYPE => "CC" },
-           "[/\\-]M"   => { TYPE => 'LINKCC' },
-           "/link" => { RUN => sub { push @{$stub->{LINKARGS}}, "/link", 
-                                          @{$_[3]};
-                                     @{$_[3]} = (); } },
-           "-cbstring" => { TYPE => "CC" },
-           "/"  => { RUN => 
-                         sub { print "Unimplemented MSVC argument $_[1]\n";}},
-           ],
-      };
-    bless $self, $class;
-    return $self;
-}
-
-
-sub msvc_preprocess {
-    my($self, $src, $dest, $ppargs) = @_;
-    my $res;
-    my $srcname = ref $src ? $src->filename : $src;
-    my ($sbase, $sdir, $sext) = 
-        fileparse($srcname, 
-                  "(\\.c)|(\\.cc)|(\\.cpp)|(\\.i)");
-    # If this is a .cpp file we still hope it is C. Pass the /Tc argument to 
-    # cl to force this file to be interpreted as a C one
-    my @cmd = @{$ppargs};
-
-    if($sext eq ".cpp") {
-        push @cmd, "/Tc";
-    }
-    # MSVC cannot be told where to put the output. But we know that it
-    # puts it in the current directory
-    my $msvcout = "./$sbase.i";
-    if($self->{STDOUTPP}) {
-        @cmd = ('cmd', '/c', 'cl', '/nologo', '/E', ">$msvcout", '/D_MSVC', 
-                @cmd);
-        
-    } else { 
-        @cmd = ('cl', '/nologo', '/P', '/D_MSVC', @cmd);
-    }
-    $res = $self->runShell(@cmd, $srcname);
-    # Check file equivalence by making sure that all elements of the stat
-    # structure are the same, except for the access time.
-    my @st1 = stat $msvcout; $st1[8] = 0;
-    my @st2 = stat $dest->{filename}; $st2[8] = 0;
-    # print Dumper(\@st1, \@st2);
-    if($msvcout ne $dest->{filename}) {
-        while($#st1 >= 0) {
-            if(shift @st1 != shift @st2) {
-#                print "$msvcout is NOT the same as $afterpp\n";
-                if($self->{VERBOSE}) {
-                    print STDERR "Copying $msvcout to $dest->{filename} (MSVC_preprocess)\n";
-                }
-                unlink $dest;
-                File::Copy::copy($msvcout, $dest->filename);
-                unlink $msvcout;
-                return $res;
-            }
-        }
-    }
-    return $res;
-}
-
-sub forceIncludeArg { 
-    my($self, $what) = @_;
-    return "/FI$what";
-}
-
-
-    # MSVC does not understand the extension .i, so we tell it it is a C file
-sub fixupCsources {
-    my (@csources) = @_;
-    my @mod_csources = ();
-    my $src;
-    foreach $src (@csources) {
-        my ($sbase, $sdir, $sext) = fileparse($src, 
-                                              "\\.[^.]+");
-        if($sext eq ".i") {
-            push @mod_csources, "/Tc";
-        }
-        push @mod_csources, $src;
-    }
-    return @mod_csources;
-}
-
-
-# Emit a line # directive
-sub lineDirective {
-    my ($self, $fileName, $lineno) = @_;
-    return "#line $lineno \"$fileName\"\n";
-}
-
-# The name of the output file
-sub compileOutputFile {
-    my($self, $src) = @_;
-
-    die "compileOutputFile: not a C source file: $src\n"
-	unless $src =~ /\.($::cilbin|c|cc|cpp|i|asm)$/;
-
-    Carp::carp ("compileOutputFile: $self->{OPERATION}, $src", 
-                   Dumper($self->{OUTARG})) if 0;
-    if ($self->{OPERATION} eq 'TOOBJ') {
-	if(defined $self->{OUTARG} 
-           && "@{$self->{OUTARG}}" =~ m|[/\\-]Fo(.+)|) {
-            my $dest  = $1;
-            # Perhaps $dest is a directory
-            if(-d $dest) {
-                return new KeptFile($src, $self->{OBJEXT}, $dest);
-            } else {
-                return new OutputFile($src, $1);
-            }
-	} else {
-	    return new KeptFile($src, $self->{OBJEXT}, '.');
-	}
-    } else {
-#        die "compileOutputfile: operation is not TOOBJ";
-	return $self->outputFile($src, $self->{OBJEXT});
-    }
-}
-
-sub assembleOutputFile {
-    my($self, $src) = @_;
-    return $self->compileOutputFile($src);
-}
-
-sub linkOutputFile {
-    my($self, $src) = @_;
-    $src = $src->filename if ref $src;
-    if(defined $self->{OUTARG} && "@{$self->{OUTARG}}" =~ m|/Fe(.+)|) {
-        return $1;
-    }
-    # Use the name of the first source file, in the current directory
-    my ($base, $dir, $ext) = fileparse ($src, "\\.[^.]+");
-    return "./$base.exe";
-}
-
-sub setVersion {
-    my($self) = @_;
-    my $cversion = "";
-    open(VER, "cl 2>&1|") || die "Cannot start Microsoft CL\n";
-    while(<VER>) {
-        if($_ =~ m|Compiler Version (\S+) |) {
-            $cversion = "cl_$1";
-            close(VER);
-            $self->{VERSION} = $cversion;
-            return;
-        }
-    }
-    die "Cannot find Microsoft CL version\n";
-}
-
-########################################################################
-##
-##  MS LINK specific code
-##
-###
-package MSLINK;
-
-use strict;
-
-use File::Basename;
-use Data::Dumper;
-
-sub new {
-    my ($proto, $stub) = @_;
-    my $class = ref($proto) || $proto;
-
-    # Create a MSVC compiler object
-    my $msvc = MSVC->new($stub);
-
-    # Create $self
-
-    my $self = 
-    { NAME => 'Microsoft linker',
-      MODENAME => 'MSLINK',
-      CC => $msvc->{CC},
-      CPP => $msvc->{CPP},
-      LD => ['link'],
-      DEFARG  => $msvc->{DEFARG},
-      INCARG  => $msvc->{INCARG},
-      DEBUGARG => ['/DEBUG'],
-      OPTIMARG => [],
-      LDLIB => ['lib'],
-      OBJEXT => "obj",
-      LIBEXT => "lib",   # Library extension (without the .)
-      EXEEXT => ".exe",  # Executable extension (with the .)
-      OUTOBJ => $msvc->{OUTOBJ},
-      OUTEXE => "-out:", # Keep this form because build.exe looks for it
-      WARNISERROR => "/WX",
-      LINEPATTERN => "", 
-      FORCECSOURCE => $msvc->{FORCECSOURCE},
-
-      MSVC => $msvc,
-
-      OPTIONS => 
-          ["[^/\\-@]" => { TYPE => 'OSOURCE' },
-           "[/\\-](OUT|out):" => { TYPE => 'OUT' },
-           "^((/)|(\\-[^\\-]))"  => { TYPE => 'LINK' },
-           ],
-      };
-    bless $self, $class;
-    return $self;
-}
-
-
-sub forceIncludeArg {  # Same as for CL
-    my($self, $what) = @_;
-    return "/FI$what";
-}
-
-
-
-sub linkOutputFile {
-    my($self, $src) = @_;
-#    print Dumper($self);
-    Carp::confess "Cannot compute the linker output file" 
-        if ! defined $self->{OUTARG};
-
-    if("@{$self->{OUTARG}}" =~ m|.+:(.+)|) {
-        return $1;
-    }
-    die "I do not know what is the link output file\n";
-}
-
-sub setVersion {
-    my($self) = @_;
-    my $cversion = "";
-    open(VER, "link 2>&1|") || die "Cannot start Microsoft LINK\n";
-    while(<VER>) {
-        if($_ =~ m|Linker Version (\S+)|) {
-            $cversion = "link_$1";
-            close(VER);
-            $self->{VERSION} = $cversion;
-            return;
-        }
-    }
-    die "Cannot find Microsoft LINK version\n";
-}
-
-########################################################################
-##
-##  MS LIB specific code
-##
-###
-package MSLIB;
-
-our @ISA = qw(MSLINK);
-
-use strict;
-
-use File::Basename;
-use Data::Dumper;
-
-sub new {
-    my ($proto, $stub) = @_;
-    my $class = ref($proto) || $proto;
-
-    # Create a MSVC linker object
-    my $self = MSLINK->new($stub);
-
-    $self->{NAME} = 'Microsoft librarian';
-    $self->{MODENAME} = 'MSLIB';
-    $self->{OPERATION} = "TOLIB";
-    $self->{LDLIB} = ['lib'];
-    bless $self, $class;
-    return $self;
-}
-
-sub setVersion {
-    my($self) = @_;
-    my $cversion = "";
-    open(VER, "lib 2>&1|") || die "Cannot start Microsoft LIB\n";
-    while(<VER>) {
-        if($_ =~ m|Library Manager Version (\S+)|) {
-            $cversion = "lib_$1";
-            close(VER);
-            $self->{VERSION} = $cversion;
-            return;
-        }
-    }
-    die "Cannot find Microsoft LINK version\n";
-}
-
-########################################################################
-##
-##  GNU ar specific code
-##
-###
-package AR;
-
-use strict;
-
-use File::Basename;
-use Data::Dumper;
-
-sub new {
-    my ($proto, $stub) = @_;
-    my $class = ref($proto) || $proto;
-    # Create $self
-
-    my $self = 
-    { NAME => 'Archiver',
-      MODENAME => 'ar',
-      CC => ['no_compiler_in_ar_mode'],
-      CPP => ['no_compiler_in_ar_mode'],
-      LDLIB => ['ar', 'crv'],
-      DEFARG  => "??DEFARG",
-      INCARG  => '??INCARG',
-      DEBUGARG => ['??DEBUGARG'],
-      OPTIMARG => [],
-      OBJEXT => "o",
-      LIBEXT => "a",   # Library extension (without the .)
-      EXEEXT => "",  # Executable extension (with the .)
-      OUTOBJ => "??OUTOBJ",
-      OUTLIB => "",  # But better be first
-      LINEPATTERN => "", 
-
-      OPTIONS => 
-          ["^[^-]" => { RUN => \&arArguments } ]
-
-      };
-    bless $self, $class;
-    return $self;
-}
-
-# We handle arguments in a special way for AR
-sub arArguments {
-    my ($self, $arg, $onemore, $pargs) = @_;
-    # If the first argument starts with -- pass it on
-    if($arg =~ m|^--|) {
-        return 0;
-    }
-    # We got here for the first non -- argument. 
-    # Will handle all arguments at once
-    if($self->{VERBOSE}) {
-        print "AR called with $arg @{$pargs}\n";
-    }
-
-    #The r flag is required:
-    if($arg !~ m|r| || $#{$pargs} < 0) {
-	die "Error: CCured's AR mode implements only the r and cr operations.";
-    }
-    if($arg =~ /[^crvus]/) {
-	die "Error: CCured's AR mode supports only the c, r, u, s, and v flags.";
-    }
-    if($arg =~ /v/) {
-	$self->{VERBOSE} = 1;
-    }
-
-    if($arg =~ /c/)
-    {
-	# Command is "cr":
-        # Get the name of the library
-	my $out = shift @{$pargs};
-        $self->{OUTARG} = [$out];
-        unlink $out;
-    }
-    else
-    {
-	# if the command is "r" alone, we should add to the current library, 
-        # not replace it, unless the library does not exist
-        
-        # Get the name of the library
-	my $out = shift @{$pargs};
-        $self->{OUTARG} = [$out];
-        
-        #The library is both an input and an output.
-        #To avoid problems with reading and writing the same file, move the
-        #current version of the library out of the way first.
-        if(-f $out) {
-
-            my $temp_name = $out . "_old.a";
-            if($self->{VERBOSE}) {
-        	print "Copying $out to $temp_name so we can add "
-                    . "to it.\n";
-            }
-            if(-f $temp_name) {
-                unlink $temp_name;
-            }
-            rename $out, $temp_name;
-
-            #now use $temp_name as the input.  $self->{OUTARG} will,
-            # as usual, be the output.
-            push @{$self->{OFILES}}, $temp_name;
-        } else {
-            warn "Library $out not found; creating.";
-        }
-
-    }
-        
-    # The rest of the arguments must be object files
-    push @{$self->{OFILES}}, @{$pargs};
-    $self->{OPERATION} = 'TOLIB';
-    @{$pargs} = ();
-#    print Dumper($self);
-    return 1;
-}
-
-sub linkOutputFile {
-    my($self, $src) = @_;
-    if(defined $self->{OUTARG}) {
-        return "@{$self->{OUTARG}}";
-    }
-    die "I do not know what is the link output file\n";
-}
-
-sub setVersion {
-    # sm: bin/cilly wants this for all "compilers"
-}
-
-
-#########################################################################
-##
-## GNUCC specific code
-##
-package GNUCC;
-
-use strict;
-
-use File::Basename;
-
-# The variable $::cc is inherited from the main script!!
-
-sub new {
-    my ($proto, $stub) = @_;
-    my $class = ref($proto) || $proto;
-    # Create $self
-
-    my @native_cc = Text::ParseWords::shellwords($ENV{CILLY_NATIVE_CC} || $::cc);
-
-    my $self = 
-    { NAME => 'GNU CC',
-      MODENAME => 'GNUCC',  # do not change this since it is used in code
-      # sm: added -O since it's needed for inlines to be merged instead of causing link errors
-      # sm: removed -O to ease debugging; will address "inline extern" elsewhere
-      CC => [@native_cc, '-D_GNUCC', '-c'],
-      LD => [@native_cc, '-D_GNUCC'],
-      LDLIB => ['ld', '-r', '-o'],
-      CPP =>  [@native_cc, '-D_GNUCC', '-E'],
-      DEFARG  => "-D",
-      INCARG => "-I",
-      DEBUGARG => ['-g', '-ggdb'],
-      OPTIMARG => ['-O4'],
-      CPROFILEARG => '-pg',
-      LPROFILEARG => '-pg',
-      OBJEXT => "o",
-      LIBEXT => "a",
-      EXEEXT => "",
-      OUTOBJ => '-o',
-      OUTEXE => '-o',
-      OUTCPP => '-o',
-      WARNISERROR => "-Werror",
-      FORCECSOURCE => [],
-      LINEPATTERN => "^#\\s+(\\d+)\\s+\"(.+)\"",
-      
-      OPTIONS => 
-          [ "[^-].*\\.($::cilbin|c|cpp|cc)\$" => { TYPE => 'CSOURCE' },
-            "[^-].*\\.(s|S)\$" => { TYPE => 'ASMSOURCE' },
-            "[^-].*\\.i\$" => { TYPE => 'ISOURCE' },
-            # .o files can be linker scripts
-            "[^-]" => { RUN => sub { &GNUCC::parseLinkerScript(@_); }},
-            "-E"   => { RUN => sub { $stub->{OPERATION} = "TOI"; }},
-	    "-pipe\$" => { TYPE => 'ALLARGS' },
-            "-[DIU]" => { ONEMORE => 1, TYPE => "PREPROC" },
-            "-isystem" => { ONEMORE => 1, TYPE => "PREPROC" },
-            '-undef$' => { TYPE => 'PREPROC' },
-            '-w$' => { TYPE => 'PREPROC' },
-	    '-M$' => { TYPE => 'SPECIAL' },
-	    '-MM$' => { TYPE => 'SPECIAL' },
-	    '-MF$' => { TYPE => 'EARLY_PREPROC', ONEMORE => 1 },
-	    '-C$' =>  { TYPE => 'EARLY_PREPROC'}, # zra
-	    '-MG$' => { TYPE => 'EARLY_PREPROC' },
-	    '-MP$' => { TYPE => 'EARLY_PREPROC' },
-	    '-MT$' => { TYPE => 'EARLY_PREPROC', ONEMORE => 1 },
-	    '-MQ$' => { TYPE => 'EARLY_PREPROC', ONEMORE => 1 },
-	    '-MD$' => { TYPE => 'EARLY_PREPROC' },
-	    '-MMD$' => { TYPE => 'EARLY_PREPROC' }, 
-            "-include" => { ONEMORE => 1, TYPE => "PREPROC" },  # sm
-            "-iwithprefix" => { ONEMORE => 1, TYPE => "PREPROC" },
-	    '-Wp,' => { TYPE => 'PREPROC' },
-            "-ansi" => { TYPE => 'ALLARGS' },
-            "-c" => { RUN => sub { $stub->{OPERATION} = "TOOBJ"; }},
-            "-x" => { ONEMORE => 1, TYPE => "CC" },
-	    "-v" => { TYPE => 'ALLARGS',
-		      RUN => sub { $stub->{TRACE_COMMANDS} = 1; } },
-            "^-e\$" => { ONEMORE => 1, TYPE => 'LINK' },
-            "^-T\$" => { ONEMORE => 1, TYPE => 'LINK' },
-             # GCC defines some more macros if the optimization is On so pass
-             # the -O to the preprocessor and the compiler
-            '-O' => { TYPE => 'ALLARGS' },
-            "-S" => { RUN => sub { $stub->{OPERATION} = "TOOBJ";
-                                   push @{$stub->{CCARGS}}, $_[1]; }},
-            "-o" => { ONEMORE => 1, TYPE => 'OUT' },
-            "-p\$" => { TYPE => 'LINKCC' },
-            "-pg" => { TYPE => 'LINKCC' },
-            "-a" => { TYPE => 'LINKCC' },
-            "-pedantic\$" => { TYPE => 'ALLARGS' },
-            "-Wall" => { TYPE => 'CC', 
-			 RUN => sub { push @{$stub->{CILARGS}},"--warnall";}},
-            "-W[-a-z]*\$" => { TYPE => 'CC' },
-            '-g' => { TYPE => 'ALLARGS' },
-	    "-save-temps" => { TYPE => 'ALLARGS',
-			       RUN => sub { if(! defined $stub->{SAVE_TEMPS}) {
-                                                $stub->{SAVE_TEMPS} = '.'; } }},
-	    '--?print-' => { TYPE => 'SPECIAL' },
-	    '-dump' => { TYPE => 'SPECIAL' },
-            "-l" => 
-            { RUN => sub { 
-                my ($libname) = ($_[1] =~ m|-l(.+)$|);
-                # See if we can find this library in the LIBDIR
-                my @libdirs = @{$stub->{LIBDIR}};
-                if($#libdirs == -1) {
-                    push @libdirs, '.';
-                }
-                foreach my $d (@libdirs) {
-                    if(-f "$d/lib$libname.a") {
-                        # Pretend that we had a straight argument
-                        push @{$stub->{OFILES}}, "$d/lib$libname.a";
-                        return;
-                    }
-                }
-                # We get here when we cannot find the library in the LIBDIR
-                push @{$stub->{LINKARGS}}, $_[1];
-            }},
-            "-L" => 
-            { RUN => sub { 
-                # Remember these directories in LIBDIR
-                my ($dir) = ($_[1] =~ m|-L(.+)$|);
-                push @{$stub->{LIBDIR}}, $dir;
-                push @{$stub->{LINKARGS}}, $_[1];
-            }},
-            "-f" => { TYPE => 'LINKCC' },
-            "-r\$" => { RUN => sub { $stub->{OPERATION} = "TOLIB"; }},
-            "-i\$" => { RUN => sub { $stub->{OPERATION} = "TOLIB"; }},
-            "-m" => { TYPE => 'LINKCC', ONEMORE => 1 },
-            "-s\$" => { TYPE => 'LINKCC' },
-            "-Xlinker" => { ONEMORE => 1, TYPE => 'LINK' },
-            "-nostdlib" => { TYPE => 'LINK' },
-            "-nostdinc" => { TYPE => 'PREPROC' },
-	    '-rdynamic$' => { TYPE => 'LINK' },
-	    "-static" => { TYPE => 'LINK' },
-	    "-shared" => { TYPE => 'LINK' },
-	    "-static-libgcc" => { TYPE => 'LINK' },
-	    "-shared-libgcc" => { TYPE => 'LINK' },
-	    '-Wl,--(no-)?whole-archive$' => { TYPE => 'OSOURCE' },
-	    '-Wl,' => { TYPE => 'LINK' },
-            "-traditional" => { TYPE => 'PREPROC' },
-            '-std=' => { TYPE => 'ALLARGS' },
-            "--start-group" => { RUN => sub { } },
-            "--end-group" => { RUN => sub { }},
-	    "-pthread\$" => { TYPE => 'ALLARGS' },
-            ],
-                                  
-      };
-    bless $self, $class;
-    return $self;
-}
-# '
-
-my $linker_script_debug = 0;
-sub parseLinkerScript {
-    my($self, $filename, $onemore, $pargs) = @_;
-    
-    if(! defined($self->{FLATTEN_LINKER_SCRIPTS}) ||
-       $filename !~ /\.o$/) {
-      NotAScript:
-        warn "$filename is not a linker script\n" if $linker_script_debug;
-        push @{$self->{OFILES}}, $filename; 
-        return 1;
-    }
-    warn "parsing OBJECT FILE:$filename ****************\n" if
-        $linker_script_debug;
-    open OBJFILE, $filename or die $!;
-    my $line = <OBJFILE>;
-    if ($line !~ /^INPUT/) {
-        close OBJFILE or die $!;
-        goto NotAScript;
-    }
-    warn "\tYES an INPUT file.\n" if $linker_script_debug;
-    my @lines = <OBJFILE>; # Read it all and close it
-    unshift @lines, $line;
-    close OBJFILE or die $!;
-    # Process recursively each line from the file
-    my @tokens = ();
-    my $incomment = 0; # Whether we are in a comment
-    foreach my $line (@lines) {
-        chomp $line;
-        if($incomment) {
-            # See where the comment ends
-            my $endcomment = index($line, "*/");
-            if($endcomment < 0) { # No end on this line
-                next; # next line
-            } else {
-                $line = substr($line, $endcomment + 2); 
-                $incomment = 0;
-            }
-        }
-        # Drop the comments that are on a single line
-        $line =~ s|/\*.*\*/| |g;
-        # Here if outside comment. See if a comment starts
-        my $startcomment = index($line, "/*");
-        if($startcomment >= 0) {
-            $incomment = 1;
-            $line = substr($line, 0, $startcomment);
-        }
-        # Split the line into tokens. Sicne we use parentheses in the pattern
-        # the separators will be tokens as well
-        push @tokens, split(/([(),\s])/, $line);
-    }
-    print "Found tokens:", join(':', @tokens), "\n" 
-        if $linker_script_debug;
-    # Now parse the file
-    my $state = 0;
-    foreach my $token (@tokens) {
-        if($token eq "" || $token =~ /\s+/) { next; } # Skip spaces
-        if($state == 0) {
-            if($token eq "INPUT") { $state = 1; next; } 
-            else { die "Error in script: expecting INPUT"; }
-        }
-        if($state == 1) { 
-            if($token eq "(") { $state = 2; next; } 
-            else { die "Error in script: expecting ( after INPUT"; }
-        } 
-        if($state == 2) { 
-            if($token eq ")") { $state = 0; next; }
-            if($token eq ",") { next; } # Comma could be a separator
-            # Now we better see a filename
-            if(! -f $token) {
-               warn "Linker script mentions inexistent file:$token.Ignoring\n";
-               next;
-            }
-            # Process it recursively because it could be a script itself
-            warn "LISTED FILE:$token.\n" if $linker_script_debug;
-            $self->parseLinkerScript($token, $onemore, $pargs);
-            next;
-        } 
-        die "Invalid linker script parser state\n";
-        
-    }
-}
-
-sub forceIncludeArg { 
-    my($self, $what) = @_;
-    return ('-include', $what);
-}
-
-
-# Emit a line # directive
-sub lineDirective {
-    my ($self, $fileName, $lineno) = @_;
-    return "# $lineno \"$fileName\"\n";
-}
-
-# The name of the output file
-sub compileOutputFile {
-    my($self, $src) = @_;
-
-    die "objectOutputFile: not a C source file: $src\n"
-	unless $src =~ /\.($::cilbin|c|cc|cpp|i|s|S)$/;
-    
-    if ($self->{OPERATION} eq 'TOOBJ') {
-	if (defined $self->{OUTARG} 
-            && "@{$self->{OUTARG}}" =~ m|^-o\s*(\S.+)$|) {
-	    return new OutputFile($src, $1);
-	} else {
-	    return new KeptFile($src, $self->{OBJEXT}, '.');
-	}
-    } else {
-	return $self->outputFile($src, $self->{OBJEXT});
-    }
-}
-
-sub assembleOutputFile {
-    my($self, $src) = @_;
-    return $self->compileOutputFile($src);
-}
-
-sub linkOutputFile {
-    my($self, $src) = @_;
-    if(defined $self->{OUTARG} && "@{$self->{OUTARG}}" =~ m|-o\s*(\S.+)|) {
-        return $1;
-    }
-    return "a.out";
-}
-
-sub setVersion {
-    my($self) = @_;
-    my $cversion = "";
-    open(VER, "@{$self->{CC}} -dumpversion " 
-         . join(' ', @{$self->{PPARGS}}) ." |") 
-        || die "Cannot start GNUCC";
-    while(<VER>) {
-        if($_ =~ m|^(\d+\S+)| || $_ =~ m|^(egcs-\d+\S+)|) {
-            $cversion = "gcc_$1";
-            close(VER) || die "Cannot start GNUCC\n";
-            $self->{VERSION} = $cversion;
-            return;
-        }
-    }
-    die "Cannot find GNUCC version\n";
-}
-
-1;
-
-
-__END__
-
-
-
diff --git a/cil/lib/KeptFile.pm b/cil/lib/KeptFile.pm
deleted file mode 100644
index 904b5145c..000000000
--- a/cil/lib/KeptFile.pm
+++ /dev/null
@@ -1,88 +0,0 @@
-package KeptFile;
-use OutputFile;
-@ISA = (OutputFile);
-
-use strict;
-use Carp;
-use File::Basename;
-use File::Spec;
-
-
-########################################################################
-
-
-sub new {
-    croak 'bad argument count' unless @_ == 4;
-    my ($proto, $basis, $suffix, $dir) = @_;
-    my $class = ref($proto) || $proto;
-
-    $basis = $basis->basis if ref $basis;
-    my ($basename, undef, $basefix) = fileparse($basis, qr{\.[^.]+});
-    my $filename = File::Spec->catfile($dir, "$basename.$suffix");
-
-    my $self = $class->SUPER::new($basis, $filename);
-    return $self;
-}
-
-
-########################################################################
-
-
-1;
-
-__END__
-
-
-=head1 Name
-
-KeptFile - persistent compiler output files
-
-=head1 Synopsis
-
-    use KeptFile;
-
-    my $cppOut = new KeptFile ('code.c', 'i', '/output/directory');
-    system 'cpp', 'code.c', '-o', $cppOut->filename;
-
-=head2 Description
-
-C<KeptFile> represents an intermediate output file generated by some
-stage of a C<Cilly>-based compiler that should be retained after
-compilation.  It is a concrete subclass of L<OutputFile|OutputFile>.
-Use C<KeptFile> when the user has asked for intermediate files to be
-retained, such as via gcc's C<-save-temps> flag.
-
-=head2 Public Methods
-
-=over
-
-=item new
-
-C<new KeptFile ($basis, $suffix, $dir)> constructs a new C<KeptFile>
-instance.  The new file name is constructed using the base file name
-of C<$basis> with its suffix replaced by C<$suffix> and its path given
-by C<$dir>.  For example,
-
-    new KeptFile ('/foo/code.c', 'i', '/bar')
-
-yields a C<KeptFile> with file name F</bar/code.i>.
-
-C<$basis> may be either absolute or relative; only the trailing file
-name is used.  C<$basis> can also be an C<OutputFile> instance, in
-which case C<< $basis->basis >> is used as the actual basis.  See
-L<OutputFile/"basis"> for more information on basis flattening.
-
-C<$suffix> should not include a leading dot; this will be added
-automatically.
-
-C<$dir> may be either absolute or relative.  It is common to use F<.>
-as the directory, which puts the C<KeptFile> in the current working
-directory.
-
-=back
-
-=head1 See Also
-
-L<OutputFile>, L<TempFile>.
-
-=cut
diff --git a/cil/lib/OutputFile.pm b/cil/lib/OutputFile.pm
deleted file mode 100644
index 8f02ba23e..000000000
--- a/cil/lib/OutputFile.pm
+++ /dev/null
@@ -1,213 +0,0 @@
-package OutputFile;
-@ISA = ();
-
-use strict;
-use Carp;
-use File::Basename;
-use File::Spec;
-
-
-########################################################################
-
-
-my $debug = 0;
-
-
-sub new {
-    croak 'bad argument count' unless @_ == 3;
-    my ($proto, $basis, $filename) = @_;
-    my $class = ref($proto) || $proto;
-
-    $basis = $basis->basis if ref $basis;
-    my $ref = { filename => $filename,
-		basis => $basis };
-    my $self = bless $ref, $class;
-
-    $self->checkRef($filename);
-    $self->checkRef($basis);
-    $self->checkProtected();
-    $self->checkTemporary();
-
-    Carp::cluck "OutputFile: filename == $filename, basis == $basis" if $debug;
-    return $self;
-}
-
-
-sub filename {
-    my ($self) = @_;
-    return $self->{filename};
-}
-
-
-sub basis {
-    my ($self) = @_;
-    return $self->{basis};
-}
-
-
-########################################################################
-
-
-sub checkRef {
-    my ($self, $filename) = @_;
-    confess "ref found where string expected: $filename" if ref $filename;
-    confess "stringified ref found where string expected: $filename" if $filename =~ /\w+=HASH\(0x[0-9a-f]+\)/;
-}
-
-
-sub checkTemporary {
-    my ($self) = @_;
-    my ($basename, $path) = fileparse $self->filename;
-    return if $path eq File::Spec->tmpdir . '/';
-    confess "found temporary file in wrong directory: ", $self->filename
-	if $basename =~ /^cil-[a-zA-Z0-9]{8}\./;
-}
-
-
-########################################################################
-
-
-my @protected = ();
-
-
-sub checkProtected {
-    my ($self) = @_;
-    my $abs = File::Spec->rel2abs($self->filename);
-
-    foreach (@protected) {
-	confess "caught attempt to overwrite protected file: ", $self->filename
-	    if $_ eq $abs;
-    }
-}
-
-
-sub protect {
-    my ($self, @precious) = @_;
-    push @protected, File::Spec->rel2abs($_)
-	foreach @precious;
-}
-
-
-########################################################################
-
-
-1;
-
-__END__
-
-
-=head1 Name
-
-OutputFile - base class for intermediate compiler output files
-
-=head1 Description
-
-C<OutputFile> represents an intermediate output file generated by some
-stage of a C<Cilly>-based compiler.  This is an abstract base class
-and should never be instantiated directly.  It provides common
-behaviors used by concrete subclasses L<KeptFile|KeptFile> and
-L<TempFile|TempFile>.
-
-=head2 Public Methods
-
-=over
-
-=item filename
-
-An C<OutputFile> instance is a smart wrapper around a file name.  C<<
-$out->filename >> returns the name of the file represented by
-C<OutputFile> instance C<$out>.  When building a command line, this is
-the string to use for the file.  For example:
-
-    my $out = ... ;		# some OutputFile subclass
-    my @argv = ('gcc', '-E', '-o', $out->filename, 'input.c');
-    system @argv;
-
-C<Cilly> often creates command vectors with a mix of strings and
-C<OutputFile> objects.  This is fine, but before using a mixed vector
-as a command line, you must replace all C<OutputFile> objects with
-their corresponding file names:
-
-    my @mixed = (...);		# mix of strings and objects
-    my @normalized = @mixed;
-    $_ = (ref $_ ? $_->filename : $_) foreach @normalized;
-    system @normalized;
-
-Common utility methods like C<Cilly::runShell> already do exactly this
-normalization, but you may need to do it yourself if you are running
-external commands on your own.
-
-=item protect
-
-C<OutputFile> contains safety interlocks that help it avoid stomping
-on user input files.  C<< OutputFile->protect($precious) >> marks
-C<$precious> as a protected input file which should not be
-overwritten.  If any C<OutputFile> tries to claim this same file name,
-an error will be raised.  In theory, this never happens.  In practice,
-scripts can have bugs, and it's better to be safe than sorry.
-
-C<Cilly> uses this method to register input files that it discovers
-during command line processing.  If you add special command line
-processing of your own, or if you identify input files through other
-means, we highly recommend using this method as well.  Otherwise,
-there is some risk that a buggy client script could mistakenly create
-an output file that destroys the user's source code.
-
-Note that C<protect> is a class method: call it on the C<OutputFile>
-module, rather than on a specific instance.
-
-=back
-
-=head2 Internal Methods
-
-The following methods are used within C<OutputFile> or by
-C<OutputFile> subclasses.  They are not intended for use by outside
-scripts.
-
-=over
-
-=item basis
-
-In addition to L<its own file name|/"filename">, each C<OutputFile>
-instance records a second file name: its I<basis>.  The basis file
-name is initialized and used differently by different subclasses, but
-typically represents the input file from which this output file is
-derived.  C<< $out->basis >> returns the basis file name for instance
-C<$out>.
-
-When instantiating an C<OutputFile>, the caller can provide either a
-file name string as the basis or another C<OutputFile> instance.
-However, basis file names are not chained: if C<< $a->basis >> is
-F<foo.c>, and C<$b> is constructed with C<$a> as its basis, C<<
-$b->basis >> will return F<foo.c>, not C<$a> or C<< $a->filename >>.
-This flattening is done at construction time.
-
-See L<KeptFile/"new"> and L<TempFile/"new"> for more details on how
-basis file names are used.
-
-=item checkRef
-
-C<< OutputFile->checkRef($filename) >> raises an error if C<$filename>
-is an object reference, or looks like the string representation of an
-object reference.  Used to sanity check arguments to various methods.
-
-=item checkTemporary
-
-C<< $out->checkTemporary >> raises an error if C<< $out->filename >>
-looks like a temporary file name but is not in the system temporary
-directory.  Used to sanity check arguments in various methods.
-
-=item checkProtected
-
-C<< $out->checkProtected >> raises an error if C<< $out->filename >>
-is listed as a protected file.  This check, performed at construction
-time, implements a safety interlock to prevent overwriting of user
-input files.  Protected files are registered using L<"protect">.
-
-=back
-
-=head1 See Also
-
-L<KeptFile>, L<TempFile>.
-
-=cut
diff --git a/cil/lib/TempFile.pm b/cil/lib/TempFile.pm
deleted file mode 100644
index 608713cfb..000000000
--- a/cil/lib/TempFile.pm
+++ /dev/null
@@ -1,90 +0,0 @@
-package TempFile;
-use OutputFile;
-@ISA = (OutputFile);
-
-use strict;
-use Carp;
-use File::Temp qw(tempfile);
-
-
-########################################################################
-
-
-sub new {
-    croak 'bad argument count' unless @_ == 3;
-    my ($proto, $basis, $suffix) = @_;
-    my $class = ref($proto) || $proto;
-
-    my (undef, $filename) = tempfile('cil-XXXXXXXX',
-				     DIR => File::Spec->tmpdir,
-				     SUFFIX => ".$suffix",
-				     UNLINK => 1);
-
-    my $self = $class->SUPER::new($basis, $filename);
-    return $self;
-}
-
-
-########################################################################
-
-
-1;
-
-__END__
-
-
-=head1 Name
-
-TempFile - transitory compiler output files
-
-=head1 Synopsis
-
-    use TempFile;
-
-    my $cppOut = new TempFile ('code.c', 'i');
-    system 'cpp', 'code.c', '-o', $cppOut->filename;
-
-=head2 Description
-
-C<TempFile> represents an intermediate output file generated by some
-stage of a C<Cilly>-based compiler that should be removed after
-compilation.  It is a concrete subclass of L<OutputFile|OutputFile>.
-Use C<TempFile> when the user has asked not for intermediate files to
-be retained.
-
-All C<TempFile> files are removed when the script terminates.  This
-cleanup happens for both normal exits as well as fatal errors.
-However, the standard L<Perl exec function|perlfun/exec> does not
-perform cleanups, and therefore should be avoided in scripts that use
-C<TempFile>.
-
-=head2 Public Methods
-
-=over
-
-=item new
-
-C<new TempFile ($basis, $suffix)> constructs a new C<TempFile>
-instance.  The new file name is constructed in some system-specific
-temporary directory with a randomly generated file name that ends with
-C<$suffix>.  For example,
-
-    new TempFile ('/foo/code.c', 'i')
-
-might yield a C<TempFile> with file name F</var/tmp/cil-x9GyA93R.i>.
-
-C<$basis> gives the basis file name for this instance.  The file name
-is not used directly, but is retained in case this instance is later
-passed as the basis for some other C<OutputFile>.  See
-L<OutputFile/"basis"> for more information on basis flattening.
-
-C<$suffix> should not include a leading dot; this will be added
-automatically.
-
-=back
-
-=head1 See Also
-
-L<OutputFile>, L<TempFile>.
-
-=cut
diff --git a/cil/ocamlutil/Makefile.ocaml b/cil/ocamlutil/Makefile.ocaml
deleted file mode 100644
index 36ac21a5b..000000000
--- a/cil/ocamlutil/Makefile.ocaml
+++ /dev/null
@@ -1,395 +0,0 @@
-# -*- Mode: makefile -*-
-# Copyright (c) 2001-2002, 
-#  George C. Necula    <necula@cs.berkeley.edu>
-#  Scott McPeak        <smcpeak@cs.berkeley.edu>
-#  Wes Weimer          <weimer@cs.berkeley.edu>
-# All rights reserved.
-# 
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions are
-# met:
-#
-# 1. Redistributions of source code must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-#
-# 2. Redistributions in binary form must reproduce the above copyright
-# notice, this list of conditions and the following disclaimer in the
-# documentation and/or other materials provided with the distribution.
-#
-# 3. The names of the contributors may not be used to endorse or promote
-# products derived from this software without specific prior written
-# permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
-# IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
-# PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
-# OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-  # Generic Makefile for Ocaml projects
-  # Written by necula@cs.berkeley.edu
-  # 
-  # Features: 
-  #   - keeps byproducts of building in a separate directory
-  #   - handles dependencies automatically
-  #   - user specifies just what modules go into a project and 
-  #     everything else is done automatically
-  #   - you can use one Makefile for several Ocaml projects
-  #   
-  # You must include this file in your Makefile. Before the include point 
-  # you must defined the following variables (which are glob al for all Ocaml 
-  # projects specified in one Makefile):
-  # 
-  # CAMLDIR    - the directory where to get the ocaml executables from. 
-  #              Must be empty (defaul) or end with a /
-  # OBJDIR     - the directory where to put all object files. This directory 
-  #              must exist (default obj)
-  # DEPENDDIR  - the directory where to put dependency files. This directory 
-  #              must exist.  (default obj/.depend)
-  # NATIVECAML - if set then will use the native compiler
-  # UNSAFE     - if set then will turn off safety checks (only with NATIVECAML)
-  # PROFILE    - if set then it will compile and link with "gprof" profiling
-  #              support (NATIVECAML mode only)
-  # ASSEMBLY   - if set then it will keep assembly files
-  # STATIC     - if set then it will compile and link statically
-  #              (NATIVECAML mode only)
-  # PREPROC    - the preprocessor command
-
-  # MODULES    - a list of all modules for all projects defined in the 
-  #              Makefile. Give only the basenames (no directory, 
-  #              no extension).  This is used to create the dependencies.
-  # SOURCEDIRS - a list of all directories containing sources for all 
-  #              projects defined in a Makefile. This is used to set vpath.
-  # MLLS       - a list of all .mll (ocamllex input) files for all 
-  #              projects defined in the Makefile. 
-  # MLYS       - a list of all .mly (ocamlyacc input) files for all 
-  #              projects defined in the Makefile. 
-  # ECHO       - if specifically set to nothing then it will print 
-  #              all of the commands issued. Set this in the command line
-  #              if you want to see what is going on.
-  #
-  # COMPILEFLAGS      - if defined, then it is passed as argument to ocamlc
-  #                     and ocamlopt
-  # LINKFLAGS         - if defined, then it is passed as argument to 
-  #                     ocamlc and ocamlopt, when linking (at start of 
-  #                     command line)
-  #
-  # CAML_CFLAGS   - flags used only for the compilation of C files.
-  #                 e.g. '-ccopt <gcc flag>'
-  #
-  #
-  # After you set all of the above you must do the following for EACH separate 
-  # executable that you want to build.
-  #
-  # Define the following:
-  # PROJECT_EXECUTABLE - the name of the executable you want to build. To take 
-  #                      advantage of the naming scheme that separates the 
-  #                      bytecode version and the native version, use the 
-  #                      $(EXE) variable which is defined to either .byte.exe 
-  #                      or .asm.exe. I typically put the executable in 
-  #                      $(OBJDIR) as well.
-  # PROJECT_MODULES    - the base names of the modules that make this 
-  #                      executable in the order in which they must be
-  #                      passed to the linker. Make sure that all of
-  #                      the names mentioned here are also mentioned in 
-  #                      MODULES.
-  # PROJECT_CMODULES   - same as modules but for the C modules. These
-  #                      do not need to be mentioned in MODULES. There must be
-  #                      no name clashes with MODULES
-  # PROJECT_LIBS       - the base names of the libraries that you 
-  #                      want to link in the executable.
-  #
-  #
-  # Then include Makefile.ocaml.build to generate a customized
-  # rule for making your executable.
-  #
-  # Example:
-  # 
-  # OBJDIR     = obj
-  # DEPENDDIR  = obj/.depend
-  # SOURCEDIRS = src src/special
-  # MLLS       = mylex 
-  # MLYS       = myparse
-  #
-  # MODULES    = mod11 mod12 mod21 modcommon
-  #
-  #  # Rules for project 1
-  # PROJECT_EXECUTABLE = $(OBJDIR)/proj1$(EXE)
-  # PROJECT_MODULES    = mod11 mod12 modcommon
-  # PROJECT_CMODULES   =  
-  # PROJEC_LIBS        = unix
-  # include Makefile.ocaml.build
-  #
-  #
-  #  # Rules for project 2 
-  # PROJECT_EXECUTABLE = $(OBJDIR)/proj2$(EXE)
-  # PROJECT_MODULES    = mod21 modcommon
-  # PROJECT_CMODULES   =  
-  # PROJEC_LIBS        = unix str
-  # include Makefile.ocaml.build
-
-
-CAMLLEX = ocamllex
-CAMLYACC= ocamlyacc -v
-CAMLDEP = ocamldep
-
-COMPILEFLAGS += -I $(OBJDIR)
-
-# sm: two styles for echoing compilation progress:
-#   style 1, by George:
-#     - print English descriptions of what's happening
-#     - set ECHO to "" to see *everything*
-#   style 2, by Scott:
-#     - do not print English descriptions
-#     - print every shell command that is executed which has a side effect,
-#       so that they could be pasted into a shell to reproduce manually
-#     - omit some of the details of dependency generation
-#
-# to be able to choose which style, several variables are used:
-#   @$(NARRATIVE)  - put this before English descriptions for style 1
-#   @$(COMMAND)    - put this before shell commands which are to be
-#                    printed for style 2; the command is *not* executed
-#   $(AT)          - put this before shell commands which are to be executed,
-#                    and also printed in style 2
-#   $(ECHO)        - use in place of '@' for things not printed in either style
-ifdef ECHOSTYLE_SCOTT
-  # 'true' silently consumes its arguments, whereas 'echo' prints them
-  NARRATIVE   := true           
-  COMMAND     := echo
-  AT          := 
-  ECHO        := @
-else
-  NARRATIVE   := echo
-  COMMAND     := true
-  # change these next two definitions to <empty> to echo everything,
-  # or leave as @ to suppress echoing
-  AT          := @
-  ECHO        := @
-endif
-
-ifdef PREPROC
-  COMPILEFLAGS += -pp "$(PREPROC)$"
-  DEPFLAGS += -pp "$(PREPROC)"
-endif
-
-COMPILEMSG=
-LINKMSG=
-
-ifdef WIN32
-OBJ             = obj
-else
-OBJ             = o
-endif
-EXE		= $(EXEEXT).exe
-
-
-export EXE
-
-ifdef NATIVECAML
- ifdef PROFILE
-   COMPILEFLAGS   += -p
-   LINKFLAGS      += -p
-   COMPILEMSG     += (profile)
-   LINKMSG        += (profile)
- endif
- ifdef ASSEMBLY
-   COMPILEFLAGS   += -S
- endif
- ifdef STATIC
-   COMPILEFLAGS   += -ccopt -static
-   LINKFLAGS      += -ccopt -static
- endif
- #foo := $(shell echo "I am in NATIVECAML mode" >&2; echo whatever)
- ifdef WIN32
-   COMPILEFLAGS    += -ccopt /Ox
- else
-   COMPILEFLAGS    += -ccopt -O3
- endif
- CAMLC          = $(CAMLDIR)ocamlopt  $(COMPILEFLAGS)
- CAMLLINK       = $(CAMLDIR)ocamlopt  $(LINKFLAGS)
- CMO            = cmx
- CMC            = opt.$(OBJ)  # compiled (and optimized) C
- CMXA           = cmxa
- EXEEXT         = .asm
- MOVEAFTERCAMLC = cmi cmx $(OBJ)
- COMPILETOWHAT  = native code
- # sm: by adding -native in native mode, we prevent spurious
- # dependencies on .cmo files which were causing lots of
- # extra recompilation
- CAMLDEP        = $(CAMLDIR)ocamldep -native
-else 
- CMO            = cmo
- CMXA           = cma
- CMC            = $(OBJ)
- EXEEXT         = .byte
- MOVEAFTERCAMLC = cmi cmo
- COMPILETOWHAT  = bytecode
- ifdef WIN32
-   COMPILEFLAGS += -ccopt /Zi -ccopt /Od
-   LINKFLAGS    += -ccopt /Zi -ccopt /Od
- else
-   COMPILEFLAGS += -g
-   LINKFLAGS    += -g
- endif
- CAMLC          = $(CAMLDIR)ocamlc -g $(COMPILEFLAGS)
- CAMLLINK       = $(CAMLDIR)ocamlc -custom  $(LINKFLAGS)
-endif
-
-
-ifdef UNSAFE 
- CAMLC          := $(CAMLC) -unsafe -noassert
-endif
-
-
-
-
-    # Allow searching for .ml and .mli
-vpath %.mll $(SOURCEDIRS)
-vpath %.mly $(SOURCEDIRS)
-vpath %.ml  $(SOURCEDIRS) $(OBJDIR)
-vpath %.mli $(SOURCEDIRS) $(OBJDIR)
-vpath %.c   $(SOURCEDIRS)
-
-
-#  Secondaries are intermediates that we don't want make to delete
-#  By giving the right names to secondary files we tell make where to make
-#  them if they are not already made. VERY USEFUL!!
-.SECONDARY : $(MLLS:%.mll=$(OBJDIR)/%.ml) $(MLYS:%.mly=$(OBJDIR)/%.ml) \
-             $(MLYS:%.mly=$(OBJDIR)/%.mli)
-
-             # Run the lexer generator
-             # Move the result to the OBJDIR directory
-             # If there is a .mli file in the same directory with .mll then
-             # copy it to OBJDIR (where the .ml) file will live.
-$(OBJDIR)/%.ml: %.mll
-	$(CAMLLEX) $<
-	$(AT)mv -f $(basename $<).ml $(OBJDIR)/
-	$(ECHO)if test -f $(basename $<).mli ;then \
-	  $(COMMAND) cp -f $(basename $<).mli $(OBJDIR)/; \
-	  cp -f $(basename $<).mli $(OBJDIR)/ \
-        ;fi
-
-             # Run the parser generator
-             # Move the result to the $(OBJDIR) directory.
-$(OBJDIR)/%.ml $(OBJDIR)/%.mli: %.mly
-	$(CAMLYACC) $(CAMLYACCFLAGS) $<
-	$(AT)mv -f $(basename $<).ml $(basename $<).mli $(OBJDIR)/
-
-         # Compile an MLI file. After compilation move the result to OBJDIR
-$(OBJDIR)/%.cmi: %.mli
-	@$(NARRATIVE) Compiling interface $<
-	$(AT)$(CAMLC) $(COMPILEFLAGS) -c $<
-	$(ECHO)if test $(OBJDIR) != $(<D) ;then \
-                   $(COMMAND) mv -f $(basename $<).cmi $(OBJDIR)/; \
-                   mv -f $(basename $<).cmi $(OBJDIR)/ \
-        ;fi
-
-         # Compile an ML file. After compilation we 
-         # copy to $(OBJDIR) the .cmi and the result of compilation.
-$(OBJDIR)/%.$(CMO): %.ml
-	@$(NARRATIVE) "Compiling           $< to $(COMPILETOWHAT) $(COMPILEMSG)"
-#	$(ECHO)#if test $(OBJDIR) != $(<D) -a -f $(OBJDIR)/$(basename $(<F)).cmi ;then \
-#           $(COMMAND) mv -f $(OBJDIR)/$(basename $(<F)).cmi $(<D); \
-#           mv -f $(OBJDIR)/$(basename $(<F)).cmi $(<D); \
-#        fi
-	@$(COMMAND) $(CAMLC) $(COMPILEFLAGS) -c $<
-	$(ECHO)$(CAMLC) $(COMPILEFLAGS) -c $< ; res=$$?; \
-	   if test $(OBJDIR) != $(<D) ;then \
-              for ext in $(MOVEAFTERCAMLC); do \
-                if test -f $(basename $<).$$ext ;then \
-                  $(COMMAND) mv -f $(basename $<).$$ext $(OBJDIR)/; \
-                  mv -f $(basename $<).$$ext $(OBJDIR)/; \
-                fi; \
-              done; \
-           fi; exit $$res
-
-             # Compile C files
-             # They appear to be left in the current directory as .o files
-$(OBJDIR)/%.$(CMC): %.c
-	@$(NARRATIVE) "Compiling C file $< $(COMPILEMSG)"
-	$(AT)$(CAMLC) $(COMPILEFLAGS) $(CAML_CFLAGS) -c $< -o $@
-	$(AT)mv -f $(basename $(notdir $<)).$(OBJ) $@
-
-              # Special rule for profile.c
-CAMLC_NOPROF=$(subst -p,,$(CAMLC))
-$(OBJDIR)/profile.$(CMC): profile.c
-	@$(NARRATIVE) "Compiling C file $<"
-	$(AT)$(CAMLC_NOPROF) $(COMPILEFLAGS) $(CAML_CFLAGS) -c $< -o $@
-	$(AT)mv -f $(basename $(notdir $<)).$(OBJ) $@
-
-
-#	Phonies should be "remade" even if someone mistakenly creates them
-.PHONY: cleancaml
-cleancaml:
-	-rm -f $(OBJDIR)/*.cmi
-	-rm -f $(OBJDIR)/*.cmo
-	-rm -f $(OBJDIR)/*.cmx
-	-rm -f $(OBJDIR)/*.cma
-	-rm -f $(OBJDIR)/*.cmxa
-	-rm -f $(OBJDIR)/*.exe
-	-rm -f $(OBJDIR)/*.obj
-	-rm -f $(OBJDIR)/*.o
-	-rm -f $(OBJDIR)/*.obj
-	-rm -f $(OBJDIR)/*.o
-	-rm -f $(OBJDIR)/*.lib
-	-rm -f $(OBJDIR)/*.a
-	-rm -f $(OBJDIR)/*.mli
-	-rm -f $(OBJDIR)/*.ml
-	-rm -f $(DEPENDDIR)/*.d $(DEPENDDIR)/*.di
-	-rm -f $(MLLS:%.mll=$(OBJDIR)/%.ml) \
-               $(MLLS:%.mll=$(OBJDIR)/%.mli) \
-               $(MLYS:%.mly=$(OBJDIR)/%.ml) \
-               $(MLYS:%.mly=$(OBJDIR)/%.mli)
-
-
-# Automatic dependency generation (see GNU info for details)
-#
-# Each .ml file has a .d (dependency file) which is automatically
-# generated and included by the rules below.  The perl script replaces
-# directory paths with $(OBJDIR)/
-#
-# Dependencies for .mli files reside in corresponding .di files.
-#
-
-# Replace the directories in the dependency rules with $(OBJDIR)/, since 
-# we'll move .cmo/.cmx files there.
-# 1. Strip any text followed by / or \.  The / case even strips slashes that
-#    are preceded by whitespace, to account for unix absolute paths.
-#    The \ case does not strip slashes that come immediately after whitespace,
-#    to preserve the trailing \ at the end of Makefile rules.
-# 2. Replace these directory names by '$(OBJDIR)/'
-FIXDEPEND:=perl -e 'while(<>) { s%[^/\\ :]*/% %g; s%[^/\\ :]+\\% %g; s%([-a-zA-Z0-9+-.:/\/_]+)%\$$(OBJDIR)/$$1%g; print $$_;}'
-# FIXDEPEND:=cat
-
-DEPINCLUDES= -I $(OBJDIR) $(SOURCEDIRS:%=-I %)
-$(DEPENDDIR)/%.d: %.ml
-	@$(NARRATIVE) Generating dependency information for $<
-	@$(COMMAND) $(CAMLDEP) $(DEPFLAGS) $(DEPINCLUDES) $<
-	$(ECHO)$(CAMLDEP) $(DEPFLAGS) $(DEPINCLUDES) $< | $(FIXDEPEND) > $@
-
-$(DEPENDDIR)/%.di: %.mli
-	@$(NARRATIVE) Generating dependency information for $<
-	@$(COMMAND) $(CAMLDEP) $(DEPFLAGS) $(DEPINCLUDES) $<
-	$(ECHO)$(CAMLDEP) $(DEPFLAGS) $(DEPINCLUDES) $< | $(FIXDEPEND) > $@
-
-# sm: it turns out there's a variable which lists all the goals
-# specified on the command line; I'll use this to set CLEANING
-# (which is not set anywhere else, currently)
-ifeq ($(MAKECMDGOALS),clean)
-  #$(warning "Skipping dependency rules because we're cleaning")
-  CLEANING := 1
-endif
-
-ifndef CLEANING
--include $(MODULES:%=$(DEPENDDIR)/%.d)
--include $(MODULES:%=$(DEPENDDIR)/%.di)
-endif
-
-listmodules: 
-	@echo $(MODULES)
diff --git a/cil/ocamlutil/Makefile.ocaml.build b/cil/ocamlutil/Makefile.ocaml.build
deleted file mode 100644
index 5271e4617..000000000
--- a/cil/ocamlutil/Makefile.ocaml.build
+++ /dev/null
@@ -1,50 +0,0 @@
-# -*- Mode: makefile -*-
-# Copyright (c) 2001-2002, 
-#  George C. Necula    <necula@cs.berkeley.edu>
-#  Scott McPeak        <smcpeak@cs.berkeley.edu>
-#  Wes Weimer          <weimer@cs.berkeley.edu>
-# All rights reserved.
-# 
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions are
-# met:
-#
-# 1. Redistributions of source code must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-#
-# 2. Redistributions in binary form must reproduce the above copyright
-# notice, this list of conditions and the following disclaimer in the
-# documentation and/or other materials provided with the distribution.
-#
-# 3. The names of the contributors may not be used to endorse or promote
-# products derived from this software without specific prior written
-# permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
-# IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
-# PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
-# OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-  # Auxiliary Makefile for building Ocaml project. See the documentation in
-  # the associated Makefile.ocaml for how to use this file.
-  # Written by necula@cs.berkeley.edu
-  # 
-$(PROJECT_EXECUTABLE) : $(PROJECT_MODULES:%=$(OBJDIR)/%.$(CMO)) \
-                        $(PROJECT_CMODULES:%=$(OBJDIR)/%.$(CMC))
-	@$(NARRATIVE) "Linking $(COMPILETOWHAT) $@ $(LINKMSG)"
-	$(AT)$(CAMLLINK) -verbose -o $@ \
-                    $(PROJECT_LIBS:%=%.$(CMXA)) \
-                    $(PROJECT_LIBS:%=-cclib -l%) \
-                    $^
-
-
-
-
-
diff --git a/cil/ocamlutil/alpha.ml b/cil/ocamlutil/alpha.ml
deleted file mode 100755
index 6a1ea0172..000000000
--- a/cil/ocamlutil/alpha.ml
+++ /dev/null
@@ -1,156 +0,0 @@
-module H = Hashtbl
-module E = Errormsg
-open Pretty
-
-let debugAlpha (prefix: string) = false
-(*** Alpha conversion ***)
-let alphaSeparator = "___"
-let alphaSeparatorLen = String.length alphaSeparator
-
-(** For each prefix we remember the next integer suffix to use and the list 
- * of suffixes, each with some data assciated with the newAlphaName that 
- * created the suffix. *)
-type 'a alphaTableData = int * (string * 'a) list
-
-type 'a undoAlphaElement = 
-    AlphaChangedSuffix of 'a alphaTableData ref * 'a alphaTableData (* The 
-                                             * reference that was changed and 
-                                             * the old suffix *)
-  | AlphaAddedSuffix of string          (* We added this new entry to the 
-                                         * table *)
-
-(* Create a new name based on a given name. The new name is formed from a 
- * prefix (obtained from the given name by stripping a suffix consisting of 
- * the alphaSeparator followed by only digits), followed by alphaSeparator 
- * and then by a positive integer suffix. The first argument is a table 
- * mapping name prefixes to the largest suffix used so far for that 
- * prefix. The largest suffix is one when only the version without suffix has 
- * been used. *)
-let rec newAlphaName ~(alphaTable: (string, 'a alphaTableData ref) H.t)
-                     ~(undolist: 'a undoAlphaElement list ref option)
-                     ~(lookupname: string) 
-                     ~(data: 'a) : string * 'a = 
-  alphaWorker ~alphaTable:alphaTable ~undolist:undolist 
-              ~lookupname:lookupname ~data:data true
-  
-
-(** Just register the name so that we will not use in the future *)
-and registerAlphaName ~(alphaTable: (string, 'a alphaTableData ref) H.t)
-                      ~(undolist: 'a undoAlphaElement list ref option)
-                      ~(lookupname: string) 
-                      ~(data: 'a) : unit = 
-  ignore (alphaWorker ~alphaTable:alphaTable ~undolist:undolist 
-                      ~lookupname:lookupname ~data:data false)
-
-
-and alphaWorker      ~(alphaTable: (string, 'a alphaTableData ref) H.t)
-                     ~(undolist: 'a undoAlphaElement list ref option)
-                     ~(lookupname: string) ~(data:'a)
-                     (make_new: bool) : string * 'a = 
-  let prefix, suffix, (numsuffix: int) = splitNameForAlpha ~lookupname in
-  if debugAlpha prefix then
-    ignore (E.log "Alpha worker: prefix=%s suffix=%s (%d) create=%b. " 
-              prefix suffix numsuffix make_new);
-  let newname, (olddata: 'a) = 
-    try
-      let rc = H.find alphaTable prefix in
-      let max, suffixes = !rc in 
-      (* We have seen this prefix *)
-      if debugAlpha prefix then
-        ignore (E.log " Old max %d. Old suffixes: @[%a@]" max
-                  (docList 
-                     (fun (s, l) -> dprintf "%s" (* d_loc l *) s)) suffixes);
-      (* Save the undo info *)
-      (match undolist with 
-        Some l -> l := AlphaChangedSuffix (rc, !rc) :: !l
-      | _ -> ());
-
-      let newmax, newsuffix, (olddata: 'a), newsuffixes = 
-        if numsuffix > max then begin 
-          (* Clearly we have not seen it *)
-          numsuffix, suffix, data,
-          (suffix, data) :: suffixes 
-        end else begin 
-          match List.filter (fun (n, _) -> n = suffix) suffixes with 
-            [] -> (* Not found *)
-              max, suffix, data, (suffix, data) :: suffixes
-          | [(_, l) ] -> 
-              (* We have seen this exact suffix before *)
-              if make_new then 
-                let newsuffix = alphaSeparator ^ (string_of_int (max + 1)) in
-                max + 1, newsuffix, l, (newsuffix, data) :: suffixes
-              else
-                max, suffix, data, suffixes
-          |  _ -> E.s (E.bug "Cil.alphaWorker")
-        end
-      in
-      rc := (newmax, newsuffixes);
-      prefix ^ newsuffix, olddata
-    with Not_found -> begin (* First variable with this prefix *)
-      (match undolist with 
-        Some l -> l := AlphaAddedSuffix prefix :: !l
-      | _ -> ());
-      H.add alphaTable prefix (ref (numsuffix, [ (suffix, data) ]));
-      if debugAlpha prefix then ignore (E.log " First seen. ");
-      lookupname, data  (* Return the original name *)
-    end
-  in
-  if debugAlpha prefix then
-    ignore (E.log " Res=: %s \n" newname (* d_loc oldloc *));
-  newname, olddata
-
-(* Strip the suffix. Return the prefix, the suffix (including the separator 
- * and the numeric value, possibly empty), and the 
- * numeric value of the suffix (possibly -1 if missing) *) 
-and splitNameForAlpha ~(lookupname: string) : (string * string * int) = 
-  let len = String.length lookupname in
-  (* Search backward for the numeric suffix. Return the first digit of the 
-   * suffix. Returns len if no numeric suffix *)
-  let rec skipSuffix (i: int) = 
-    if i = -1 then -1 else 
-    let c = Char.code (String.get lookupname i) - Char.code '0' in
-    if c >= 0 && c <= 9 then 
-      skipSuffix (i - 1)
-    else (i + 1)
-  in
-  let startSuffix = skipSuffix (len - 1) in
-
-  if startSuffix >= len (* No digits at all at the end *) ||
-     startSuffix <= alphaSeparatorLen     (* Not enough room for a prefix and 
-                                           * the separator before suffix *) ||
-     (* Suffix starts with a 0 and has more characters after that *) 
-     (startSuffix < len - 1 && String.get lookupname startSuffix = '0')  ||
-     alphaSeparator <> String.sub lookupname 
-                                 (startSuffix - alphaSeparatorLen)  
-                                 alphaSeparatorLen 
-  then
-    (lookupname, "", -1)  (* No valid suffix in the name *)
-  else
-    (String.sub lookupname 0 (startSuffix - alphaSeparatorLen), 
-     String.sub lookupname (startSuffix - alphaSeparatorLen) 
-                           (len - startSuffix + alphaSeparatorLen),
-     int_of_string (String.sub lookupname startSuffix (len - startSuffix)))
-    
-
-let getAlphaPrefix ~(lookupname:string) : string = 
-  let p, _, _ = splitNameForAlpha ~lookupname:lookupname in
-  p
-      
-(* Undoes the changes as specified by the undolist *)
-let undoAlphaChanges ~(alphaTable: (string, 'a alphaTableData ref) H.t) 
-                     ~(undolist: 'a undoAlphaElement list) = 
-  List.iter
-    (function 
-        AlphaChangedSuffix (where, old) -> 
-          where := old
-      | AlphaAddedSuffix name -> 
-          if debugAlpha name then 
-            ignore (E.log "Removing %s from alpha table\n" name);
-          H.remove alphaTable name)
-    undolist
-
-let docAlphaTable () (alphaTable: (string, 'a alphaTableData ref) H.t) = 
-  let acc : (string * (int * (string * 'a) list)) list ref = ref [] in
-  H.iter (fun k d -> acc := (k, !d) :: !acc) alphaTable;
-  docList ~sep:line (fun (k, (d, _)) -> dprintf "  %s -> %d" k d) () !acc
-
diff --git a/cil/ocamlutil/alpha.mli b/cil/ocamlutil/alpha.mli
deleted file mode 100755
index e1e430dca..000000000
--- a/cil/ocamlutil/alpha.mli
+++ /dev/null
@@ -1,50 +0,0 @@
-(** {b ALPHA conversion} *)
-
-(** This is the type of the elements that are recorded by the alpha 
- * conversion functions in order to be able to undo changes to the tables 
- * they modify. Useful for implementing 
- * scoping *)
-type 'a undoAlphaElement
-
-(** This is the type of the elements of the alpha renaming table. These 
- * elements can carry some data associated with each occurrence of the name. *)
-type 'a alphaTableData
-
-
-(** Create a new name based on a given name. The new name is formed from a 
- * prefix (obtained from the given name by stripping a suffix consisting of _ 
- * followed by only digits), followed by a special separator and then by a 
- * positive integer suffix. The first argument is a table mapping name 
- * prefixes to some data that specifies what suffixes have been used and how 
- * to create the new one. This function updates the table with the new 
- * largest suffix generated. The "undolist" argument, when present, will be 
- * used by the function to record information that can be used by 
- * {!Alpha.undoAlphaChanges} to undo those changes. Note that the undo 
- * information will be in reverse order in which the action occurred. Returns 
- * the new name and, if different from the lookupname, the location of the 
- * previous occurrence. This function knows about the location implicitly 
- * from the {!Cil.currentLoc}. *)
-val newAlphaName: alphaTable:(string, 'a alphaTableData ref) Hashtbl.t ->
-                  undolist: 'a undoAlphaElement list ref option ->
-                  lookupname:string -> data:'a -> string * 'a
-
-
-(** Register a name with an alpha conversion table to ensure that when later 
-  * we call newAlphaName we do not end up generating this one *)
-val registerAlphaName: alphaTable:(string, 'a alphaTableData ref) Hashtbl.t -> 
-                       undolist: 'a undoAlphaElement list ref option ->
-                       lookupname:string -> data:'a -> unit
-
-(** Split the name in preparation for newAlphaName. The prefix returned is 
-    used to index into the hashtable. The next result value is a separator 
-    (either empty or the separator chosen to separate the original name from 
-     the index)  *)
-val docAlphaTable: unit -> 
-                  (string, 'a alphaTableData ref) Hashtbl.t -> Pretty.doc
-
-
-val getAlphaPrefix: lookupname:string -> string
-
-(** Undo the changes to a table *)
-val undoAlphaChanges: alphaTable:(string, 'a alphaTableData ref) Hashtbl.t -> 
-                      undolist:'a undoAlphaElement list -> unit
diff --git a/cil/ocamlutil/clist.ml b/cil/ocamlutil/clist.ml
deleted file mode 100644
index 80f0fd641..000000000
--- a/cil/ocamlutil/clist.ml
+++ /dev/null
@@ -1,183 +0,0 @@
-(*
- *
- * Copyright (c) 2001-2002, 
- *  George C. Necula    <necula@cs.berkeley.edu>
- *  Scott McPeak        <smcpeak@cs.berkeley.edu>
- *  Wes Weimer          <weimer@cs.berkeley.edu>
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. The names of the contributors may not be used to endorse or promote
- * products derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
- * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
- * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- *)
-
-open Pretty
-
-
-(* We often need to concatenate sequences and using lists for this purpose is 
- * expensive. So we define a kind of "concatenable lists" that are easier to 
- * concatenate *)
-type 'a clist = 
-  | CList of 'a list             (* This is the only representation for empty 
-                                  * *)
-  | CConsL of 'a * 'a clist
-  | CConsR of 'a clist * 'a 
-  | CSeq  of 'a clist * 'a clist (* We concatenate only two of them at this 
-                                  * time. Neither is CEmpty. To be sure 
-                                  * always use append to make these  *)
-
-let rec listifyOnto (tail: 'a list) = function
-    CList l -> l @ tail
-  | CConsL (x, l) -> x :: listifyOnto tail l
-  | CConsR (l, x) -> listifyOnto (x :: tail) l
-  | CSeq (l1, l2) -> listifyOnto (listifyOnto tail l2) l1
-        
-let toList l = listifyOnto [] l
-let fromList l = CList l
-    
-    
-let single x = CList [x]
-let empty = CList []
-    
-let checkBeforeAppend  (l1: 'a clist) (l2: 'a clist) : bool =
-  l1 != l2 || l1 = (CList [])
-
-let append l1 l2 =
-  if l1 = CList [] then l2 else
-  if l2 = CList [] then l1 else
-  begin
-    if l1 == l2 then 
-      raise (Failure "You should not use Clist.append to double a list");
-    CSeq (l1, l2)
-  end
-
-let rec length (acc: int) = function
-    CList l -> acc + (List.length l)
-  | CConsL (x, l) -> length (acc + 1) l
-  | CConsR (l, _) -> length (acc + 1) l
-  | CSeq (l1, l2) -> length (length acc l1) l2
-let length l = length 0 l  (* The external version *)
-    
-let map (f: 'a -> 'b) (l: 'a clist) : 'b clist = 
-  let rec loop = function
-      CList l -> CList (List.map f l)
-    | CConsL (x, l) -> let x' = f x in CConsL (x', loop l)
-    | CConsR (l, x) -> let l' = loop l in CConsR (l', f x)
-    | CSeq (l1, l2) -> let l1' = loop l1 in CSeq (l1', loop l2)
-  in
-  loop l
-    
-  
-let fold_left (f: 'acc -> 'a -> 'acc) (start: 'acc) (l: 'a clist) = 
-  let rec loop (start: 'acc) = function
-      CList l -> List.fold_left f start l
-    | CConsL (x, l) -> loop (f start x) l
-    | CConsR (l, x) -> let res = loop start l in f res x
-    | CSeq (l1, l2) -> 
-        let res1 = loop start l1 in
-        loop res1 l2
-  in
-  loop start l
-    
-let iter (f: 'a -> unit) (l: 'a clist) : unit = 
-  let rec loop = function
-      CList l -> List.iter f l
-    | CConsL (x, l) -> f x; loop l
-    | CConsR (l, x) -> loop l; f x
-    | CSeq (l1, l2) -> loop l1; loop l2
-  in
-  loop l
-    
-        
-let rec rev (revelem: 'a -> 'a) = function
-    CList l -> 
-      let rec revonto (tail: 'a list) = function
-          [] -> tail
-        | x :: rest -> revonto (revelem x :: tail) rest
-      in
-      CList (revonto [] l)
-
-  | CConsL (x, l) -> CConsR (rev revelem l, x)
-  | CConsR (l, x) -> CConsL (x, rev revelem l)
-  | CSeq (l1, l2) -> CSeq (rev revelem l2, rev revelem l1)
-
-
-let docCList (sep: doc) (doone: 'a -> doc) () (dl: 'a clist) = 
-  fold_left 
-    (fun (acc: doc) (elem: 'a) -> 
-      let elemd = doone elem in
-      if acc == nil then elemd else acc ++ sep ++ elemd)
-    nil
-    dl
-
-    
-(* let debugCheck (lst: 'a clist) : unit =*)
-(*   (* use a hashtable to store values encountered *)*)
-(*   let tbl : 'a bool H.t = (H.create 13) in*)
-
-(*   letrec recurse (node: 'a clist) =*)
-(*     (* have we seen*)*)
-
-(*     match node with*)
-(*     | CList*)
-
-
-(* --------------- testing ----------------- *)
-type boxedInt =
-  | BI of int
-  | SomethingElse
-
-let d_boxedInt () b =
-  match b with
-  | BI(i) -> (dprintf "%d" i)
-  | SomethingElse -> (text "somethingElse")
-
-
-(* sm: some simple tests of CLists 
-let testCList () : unit =
-begin
-  (trace "sm" (dprintf "in testCList\n"));
-
-  let clist1 = (fromList [BI(1); BI(2); BI(3)]) in
-  (trace "sm" (dprintf "length of clist1 is %d\n"
-                       (length clist1) ));
-
-  let flattened = (toList clist1) in
-  (trace "sm" (dprintf "flattened: %a\n"
-                       (docList ~sep:(chr ',' ++ break) (d_boxedInt ()))
-                       flattened));
-
-
-end
-1) in
-  (trace "sm" (dprintf "flattened: %a\n"
-                       (docList ~sep:(chr ',' ++ break) (d_boxedInt ()))
-                       flattened));
-
-
-end
-*)
diff --git a/cil/ocamlutil/clist.mli b/cil/ocamlutil/clist.mli
deleted file mode 100644
index c0378a608..000000000
--- a/cil/ocamlutil/clist.mli
+++ /dev/null
@@ -1,97 +0,0 @@
-(*
- *
- * Copyright (c) 2001-2002, 
- *  George C. Necula    <necula@cs.berkeley.edu>
- *  Scott McPeak        <smcpeak@cs.berkeley.edu>
- *  Wes Weimer          <weimer@cs.berkeley.edu>
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. The names of the contributors may not be used to endorse or promote
- * products derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
- * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
- * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- *)
-
-(** Utilities for managing "concatenable lists" (clists). We often need to
-    concatenate sequences, and using lists for this purpose is expensive. This
-    module provides routines to manage such lists more efficiently. In this
-    model, we never do cons or append explicitly. Instead we maintain
-    the elements of the list in a special data structure. Routines are provided
-    to convert to/from ordinary lists, and carry out common list operations.*)
-
-(** The clist datatype. A clist can be an ordinary list, or a clist preceded 
-    or followed by an element, or two clists implicitly appended together*)
-type 'a clist = 
-  | CList of 'a list             (** The only representation for the empty 
-                                     list. Try to use sparingly.  *)
-  | CConsL of 'a * 'a clist      (** Do not use this a lot because scanning 
-                                   * it is not tail recursive *)
-  | CConsR of 'a clist * 'a 
-  | CSeq of 'a clist * 'a clist (** We concatenate only two of them at this
-                                    time. Neither is the empty clist. To be
-                                    sure always use append to make these *)
-
-
-(** Convert a clist to an ordinary list *)
-val toList: 'a clist -> 'a list
-
-(** Convert an ordinary list to a clist *)  
-val fromList: 'a list -> 'a clist 
-
-(** Create a clist containing one element *)
-val single: 'a -> 'a clist        
-
-(** The empty clist *)
-val empty: 'a clist               
-
-
-(** Append two clists *)
-val append: 'a clist -> 'a clist -> 'a clist 
-                 
-(** A useful check to assert before an append. It checks that the two lists 
- * are not identically the same (Except if they are both empty) *)
-val checkBeforeAppend: 'a clist -> 'a clist -> bool
-
-(** Find the length of a clist *)
-val length: 'a clist -> int   
-
-(** Map a function over a clist. Returns another clist *)
-val map: ('a -> 'b) -> 'a clist -> 'b clist 
-
-
-(** A version of fold_left that works on clists *)
-val fold_left: ('acc -> 'a -> 'acc) -> 'acc -> 'a clist -> 'acc
-
-(** A version of iter that works on clists *)
-val iter: ('a -> unit) -> 'a clist -> unit
-
-(** Reverse a clist. The first function reverses an element.  *)
-val rev: ('a -> 'a) -> 'a clist -> 'a clist
-
-(** A document for printing a clist (similar to [docList]) *)
-val docCList: 
-    Pretty.doc -> ('a -> Pretty.doc) -> unit -> 'a clist -> Pretty.doc
- 
diff --git a/cil/ocamlutil/errormsg.ml b/cil/ocamlutil/errormsg.ml
deleted file mode 100644
index 07e935d43..000000000
--- a/cil/ocamlutil/errormsg.ml
+++ /dev/null
@@ -1,337 +0,0 @@
-(*
- *
- * Copyright (c) 2001-2002, 
- *  George C. Necula    <necula@cs.berkeley.edu>
- *  Scott McPeak        <smcpeak@cs.berkeley.edu>
- *  Wes Weimer          <weimer@cs.berkeley.edu>
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. The names of the contributors may not be used to endorse or promote
- * products derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
- * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
- * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- *)
-
-open Pretty
-
-
-
-let debugFlag  = ref false              (* If set then print debugging info *)
-let verboseFlag = ref false
-
-(**** Error reporting ****)  
-exception Error
-let s (d : 'a) = raise Error
-
-let hadErrors = ref false
-
-let errorContext = ref []
-let pushContext f = errorContext := f :: (!errorContext)
-let popContext () = 
-  match !errorContext with 
-    _ :: t -> errorContext := t
-  | [] -> s (eprintf "Bug: cannot pop error context")
-
-
-let withContext ctx f x = 
-  pushContext ctx;
-  try
-    let res = f x in
-    popContext ();
-    res
-  with e -> begin
-    popContext ();
-    raise e
-  end
-  
-                                        (* Make sure that showContext calls 
-                                         * each f with its appropriate 
-                                         * errorContext as it was when it was 
-                                         * pushed *)
-let showContext () = 
-  let rec loop = function
-      [] -> ()
-    | f :: rest -> (errorContext := rest; (* Just in case f raises an error *)
-                    ignore (eprintf "  Context : %t@!" f);
-                    loop rest)
-  in
-  let old = !errorContext in
-  try 
-    loop old;
-    errorContext := old
-  with e -> begin
-    errorContext := old;
-    raise e
-  end
-
-let contextMessage (name: string) (d: doc) = 
-  ignore (eprintf "@!%s: %a@!" name insert d);
-  showContext ()
-
-let warnFlag = ref false
-
-let logChannel : out_channel ref = ref stderr
-
-
-let bug (fmt : ('a,unit,doc,unit) format4) : 'a = 
-  let f d =  
-    hadErrors := true; contextMessage "Bug" d; 
-    flush !logChannel
-  in
-  Pretty.gprintf f fmt
-
-let error (fmt : ('a,unit,doc,unit) format4) : 'a = 
-  let f d = hadErrors := true; contextMessage "Error" d; 
-    flush !logChannel
-  in
-  Pretty.gprintf f fmt
-
-let unimp (fmt : ('a,unit,doc,unit) format4) : 'a = 
-  let f d = hadErrors := true; contextMessage "Unimplemented" d; 
-    flush !logChannel
-  in
-  Pretty.gprintf f fmt
-
-let warn (fmt : ('a,unit,doc,unit) format4) : 'a = 
-  let f d = contextMessage "Warning" d; flush !logChannel in
-  Pretty.gprintf f fmt
-
-let warnOpt (fmt : ('a,unit,doc,unit) format4) : 'a = 
-    let f d = 
-      if !warnFlag then contextMessage "Warning" d; 
-      flush !logChannel in
-    Pretty.gprintf f fmt
-
-
-let log (fmt : ('a,unit,doc,unit) format4) : 'a = 
-  let f d = fprint !logChannel 80 d; flush !logChannel in
-  Pretty.gprintf f fmt
-
-let logg (fmt : ('a,unit,doc,unit) format4) : 'a =
-  let f d = fprint !logChannel 10000000 d; flush !logChannel in
-  Pretty.gprintf f fmt
-
-let null (fmt : ('a,unit,doc,unit) format4) : 'a =
-  let f d = () in
-  Pretty.gprintf f fmt
-
-
-let theLexbuf = ref (Lexing.from_string "")
-
-let fail format = Pretty.gprintf (fun x -> Pretty.fprint stderr 80 x; 
-                                           raise (Failure "")) format
-
-
-
-(***** Handling parsing errors ********)
-type parseinfo =
-    { mutable  linenum: int      ; (* Current line *)
-      mutable  linestart: int    ; (* The position in the buffer where the 
-                                    * current line starts *)
-      mutable fileName : string   ; (* Current file *)
-      mutable hfile   : string   ; (* High-level file *)
-      mutable hline   : int;       (* High-level line *)
-      lexbuf          : Lexing.lexbuf;
-      inchan          : in_channel option; (* None, if from a string *)
-      mutable   num_errors : int;  (* Errors so far *)
-    }
-      
-let dummyinfo = 
-    { linenum   = 1;
-      linestart = 0;
-      fileName  = "" ;
-      lexbuf    = Lexing.from_string "";
-      inchan    = None;
-      hfile     = "";
-      hline     = 0;
-      num_errors = 0;
-    }
-
-let current = ref dummyinfo
-
-let setHLine (l: int) : unit =
-    !current.hline <- l
-let setHFile (f: string) : unit =
-    !current.hfile <- f
-    
-let rem_quotes str = String.sub str 1 ((String.length str) - 2)
-
-(* Change \ into / in file names. To avoid complications with escapes *)
-let cleanFileName str = 
-  let str1 = 
-    if str <> "" && String.get str 0 = '"' (* '"' ( *) 
-    then rem_quotes str else str in
-  let l = String.length str1 in
-  let rec loop (copyto: int) (i: int) = 
-    if i >= l then 
-      String.sub str1 0 copyto
-     else 
-       let c = String.get str1 i in
-       if c <> '\\' then begin
-          String.set str1 copyto c; loop (copyto + 1) (i + 1)
-       end else begin
-          String.set str1 copyto '/';
-          if i < l - 2 && String.get str1 (i + 1) = '\\' then
-              loop (copyto + 1) (i + 2)
-          else 
-              loop (copyto + 1) (i + 1)
-       end
-  in
-  loop 0 0
-
-let readingFromStdin = ref false
-
-let startParsing ?(useBasename=true) (fname: string) = 
-  (* We only support one open file at a time *)
-  if !current != dummyinfo then begin
-     s (error "Errormsg.startParsing supports only one open file: You want to open %s and %s is still open\n" fname !current.fileName); 
-  end; 
-  let inchan = 
-    try if fname = "-" then begin 
-           readingFromStdin := true;
-           stdin 
-        end else begin
-           readingFromStdin := false;
-           open_in fname 
-        end
-    with e -> s (error "Cannot find input file %s (exception %s" 
-                    fname (Printexc.to_string e)) in
-  let lexbuf = Lexing.from_channel inchan in
-  let i = 
-    { linenum = 1; linestart = 0; 
-      fileName = 
-        cleanFileName (if useBasename then Filename.basename fname else fname);
-      lexbuf = lexbuf; inchan = Some inchan;
-      hfile = ""; hline = 0;
-      num_errors = 0 } in
-
-  current := i;
-  lexbuf
-
-let startParsingFromString ?(file="<string>") ?(line=1) (str: string) = 
-  let lexbuf = Lexing.from_string str in
-  let i = 
-    { linenum = line; linestart = line - 1;
-      fileName = file;
-      hfile = ""; hline = 0;
-      lexbuf = lexbuf; 
-      inchan = None;
-      num_errors = 0 }
-  in
-  current := i;
-  lexbuf
-
-let finishParsing () = 
-  let i = !current in
-  (match i.inchan with Some c -> close_in c | _ -> ());
-  current := dummyinfo
-
-
-(* Call this function to announce a new line *)
-let newline () = 
-  let i = !current in
-  i.linenum <- 1 + i.linenum;
-  i.linestart <- Lexing.lexeme_start i.lexbuf
-
-let newHline () = 
-  let i = !current in
-  i.hline <- 1 + i.hline
-
-let setCurrentLine (i: int) = 
-  !current.linenum <- i
-
-let setCurrentFile (n: string) = 
-  !current.fileName <- cleanFileName n
-
-
-let max_errors = 20  (* Stop after 20 errors *)
-
-let parse_error (msg: string) : 'a =
-  (* Sometimes the Ocaml parser raises errors in symbol_start and symbol_end *)
-  let token_start, token_end = 
-    try Parsing.symbol_start (), Parsing.symbol_end ()
-    with e -> begin 
-      ignore (warn "Parsing raised %s\n" (Printexc.to_string e));
-      0, 0
-    end
-  in
-  let i = !current in
-  let adjStart = 
-    if token_start < i.linestart then 0 else token_start - i.linestart in
-  let adjEnd = 
-    if token_end < i.linestart then 0 else token_end - i.linestart in
-  output_string 
-    stderr
-    (i.fileName ^ "[" ^ (string_of_int i.linenum) ^ ":" 
-                        ^ (string_of_int adjStart) ^ "-" 
-                        ^ (string_of_int adjEnd) 
-                  ^ "]"
-     ^ " : " ^ msg);
-  output_string stderr "\n";
-  flush stderr ;
-  i.num_errors <- i.num_errors + 1;
-  if i.num_errors > max_errors then begin
-    output_string stderr "Too many errors. Aborting.\n" ;
-    exit 1 
-  end;
-  hadErrors := true;
-  raise Parsing.Parse_error
-
-
-
-
-(* More parsing support functions: line, file, char count *)
-let getPosition () : int * string * int = 
-  let i = !current in 
-  i.linenum, i.fileName, Lexing.lexeme_start i.lexbuf
-
-
-let getHPosition () = 
-  !current.hline, !current.hfile
-
-(** Type for source-file locations *)
-type location = 
-    { file: string; (** The file name *)
-      line: int;    (** The line number *)
-      hfile: string; (** The high-level file name, or "" if not present *)
-      hline: int;    (** The high-level line number, or 0 if not present *)
-    } 
-
-let d_loc () l = 
-  text (l.file ^ ":" ^ string_of_int l.line)
-    
-let d_hloc () (l: location) = 
-  dprintf "%s:%d%a" l.file l.line
-    insert (if l.hline > 0 then dprintf " (%s:%d)" l.hfile l.hline else nil)
-
-let locUnknown = { file = ""; hfile = ""; line = -1; hline = -1 }
-
-let getLocation () = 
-  let hl, hf = getHPosition () in
-  let l, f, c = getPosition () in
-  { hfile = hf; hline = hl;
-    file = f; line = l } 
-
diff --git a/cil/ocamlutil/errormsg.mli b/cil/ocamlutil/errormsg.mli
deleted file mode 100644
index 8d9c69799..000000000
--- a/cil/ocamlutil/errormsg.mli
+++ /dev/null
@@ -1,164 +0,0 @@
-(*
- *
- * Copyright (c) 2001-2002, 
- *  George C. Necula    <necula@cs.berkeley.edu>
- *  Scott McPeak        <smcpeak@cs.berkeley.edu>
- *  Wes Weimer          <weimer@cs.berkeley.edu>
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. The names of the contributors may not be used to endorse or promote
- * products derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
- * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
- * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- *)
-(** Utility functions for error-reporting *)
-
-(** A channel for printing log messages *)
-val logChannel : out_channel ref
-
-(** If set then print debugging info *)
-val debugFlag  : bool ref               
-
-val verboseFlag : bool ref
-
-
-(** Set to true if you want to see all warnings. *)
-val warnFlag: bool ref
-
-(** Error reporting functions raise this exception *)
-exception Error
-
-
-   (* Error reporting. All of these functions take same arguments as a 
-    * Pretty.eprintf. They set the hadErrors flag, but do not raise an 
-    * exception. Their return type is unit.
-    *)
-
-(** Prints an error message of the form [Error: ...]. 
-    Use in conjunction with s, for example: [E.s (E.error ... )]. *)
-val error:         ('a,unit,Pretty.doc,unit) format4 -> 'a
-
-(** Similar to [error] except that its output has the form [Bug: ...] *)
-val bug:           ('a,unit,Pretty.doc,unit) format4 -> 'a
-
-(** Similar to [error] except that its output has the form [Unimplemented: ...] *)
-val unimp:         ('a,unit,Pretty.doc,unit) format4 -> 'a
-
-(** Stop the execution by raising an Error. *)
-val s:             'a -> 'b
-
-(** This is set whenever one of the above error functions are called. It must
-    be cleared manually *)
-val hadErrors: bool ref  
-
-(** Like {!Errormsg.error} but does not raise the {!Errormsg.Error} 
- * exception. Return type is unit. *)
-val warn:    ('a,unit,Pretty.doc,unit) format4 -> 'a
-
-(** Like {!Errormsg.warn} but optional. Printed only if the 
- * {!Errormsg.warnFlag} is set *)
-val warnOpt: ('a,unit,Pretty.doc,unit) format4 -> 'a
-
-(** Print something to [logChannel] *)
-val log:           ('a,unit,Pretty.doc,unit) format4 -> 'a
-
-(** same as {!Errormsg.log} but do not wrap lines *)
-val logg:          ('a,unit,Pretty.doc,unit) format4 -> 'a
-
-   (* All of the error and warning reporting functions can also print a 
-    * context. To register a context printing function use "pushContext". To 
-    * remove the last registered one use "popContext". If one of the error 
-    * reporting functions is called it will invoke all currently registered 
-    * context reporting functions in the reverse order they were registered. *)
-
-(** Do not actually print (i.e. print to /dev/null) *)
-val null : ('a,unit,Pretty.doc,unit) format4 -> 'a
-
-(** Registers a context printing function *)
-val pushContext  : (unit -> Pretty.doc) -> unit
-
-(** Removes the last registered context printing function *)
-val popContext   : unit -> unit
-
-(** Show the context stack to stderr *)
-val showContext : unit -> unit
-
-(** To ensure that the context is registered and removed properly, use the 
-    function below *)
-val withContext  : (unit -> Pretty.doc) -> ('a -> 'b) -> 'a -> 'b
-
-
-
-val newline: unit -> unit  (* Call this function to announce a new line *)
-val newHline: unit -> unit 
-
-val getPosition: unit -> int * string * int (* Line number, file name, 
-                                               current byte count in file *)
-val getHPosition: unit -> int * string (** high-level position *)
-
-val setHLine: int -> unit
-val setHFile: string -> unit
-
-val setCurrentLine: int -> unit
-val setCurrentFile: string -> unit
-
-(** Type for source-file locations *)
-type location = 
-    { file: string; (** The file name *)
-      line: int;    (** The line number *)
-      hfile: string; (** The high-level file name, or "" if not present *)
-      hline: int;    (** The high-level line number, or 0 if not present *)
-    } 
-
-val d_loc: unit -> location -> Pretty.doc
-val d_hloc: unit -> location -> Pretty.doc
-    
-val getLocation: unit -> location
-
-val parse_error: string -> (* A message *) 
-                 'a
-
-(** An unknown location for use when you need one but you don't have one *)
-val locUnknown: location
-
-
-(** Records whether the stdin is open for reading the goal **)
-val readingFromStdin: bool ref
-
-
-(* Call this function to start parsing. useBasename is by default "true", 
- * meaning that the error information maintains only the basename. If the 
- * file name is - then it reads from stdin. *)
-val startParsing:  ?useBasename:bool -> string -> 
-  Lexing.lexbuf 
-
-val startParsingFromString: ?file:string -> ?line:int -> string
-                            -> Lexing.lexbuf
-
-val finishParsing: unit -> unit (* Call this function to finish parsing and 
-                                 * close the input channel *)
-
-
diff --git a/cil/ocamlutil/growArray.ml b/cil/ocamlutil/growArray.ml
deleted file mode 100644
index ccadc7627..000000000
--- a/cil/ocamlutil/growArray.ml
+++ /dev/null
@@ -1,191 +0,0 @@
-(** Growable Arrays *)
-
-type 'a fill =
-    Elem of 'a
-  | Susp of (int -> 'a)
-
-type 'a t = {
-            gaFill: 'a fill;
-            (** Stuff to use to fill in the array as it grows *)
-
-    mutable gaMaxInitIndex: int;
-            (** Maximum index that was written to. -1 if no writes have 
-             * been made.  *)
-
-    mutable gaData: 'a array;
-  } 
-
-let growTheArray (ga: 'a t) (len: int) 
-                 (toidx: int) (why: string) : unit = 
-  if toidx >= len then begin
-    (* Grow the array by 50% *)
-    let newlen = toidx + 1 + len  / 2 in
-(*
-    ignore (E.log "growing an array to idx=%d (%s)\n" toidx why);
-*)
-    let data' = begin match ga.gaFill with
-      Elem x ->
-	let data'' = Array.create newlen x in
-	Array.blit ga.gaData 0 data'' 0 len;
-	data''
-    | Susp f -> Array.init newlen
-	  (fun i -> if i < len then ga.gaData.(i) else f i)
-    end
-    in
-    ga.gaData <- data'
-  end
-
-let max_init_index (ga: 'a t) : int =
-  ga.gaMaxInitIndex
-
-let num_alloc_index (ga: 'a t) : int = 
-  Array.length ga.gaData
-
-let reset_max_init_index (ga: 'a t) : unit =
-  ga.gaMaxInitIndex <- -1
-
-let getg (ga: 'a t) (r: int) : 'a = 
-  let len = Array.length ga.gaData in
-  if r >= len then 
-    growTheArray ga len r "getg";
-
-  ga.gaData.(r)
-
-let setg (ga: 'a t) (r: int) (what: 'a) : unit = 
-  let len = Array.length ga.gaData in
-  if r >= len then 
-    growTheArray ga len r "setg";
-  if r > max_init_index ga then ga.gaMaxInitIndex <- r;
-  ga.gaData.(r) <- what
-
-let get (ga: 'a t) (r: int) : 'a = Array.get ga.gaData r
-
-let set (ga: 'a t) (r: int) (what: 'a) : unit = 
-  if r > max_init_index ga then ga.gaMaxInitIndex <- r;
-  Array.set ga.gaData r what
-
-let make (initsz: int) (fill: 'a fill) : 'a t = 
-  { gaFill = fill;
-    gaMaxInitIndex = -1;
-    gaData = begin match fill with
-      Elem x -> Array.create initsz x
-    | Susp f -> Array.init initsz f
-    end; }
-
-let clear (ga: 'a t) : unit =
-  (* This assumes the user hasn't used the raw "set" on any value past
-     max_init_index.  Maybe we shouldn't trust max_init_index here?? *) 
-  if ga.gaMaxInitIndex >= 0 then begin
-    begin match ga.gaFill with 
-        Elem x -> Array.fill ga.gaData 0 (ga.gaMaxInitIndex+1) x
-      | Susp f -> 
-          for i = 0 to ga.gaMaxInitIndex do 
-            Array.set ga.gaData i (f i)
-          done
-    end;
-    ga.gaMaxInitIndex <- -1
-  end
-
-let copy (ga: 'a t) : 'a t = 
-  { ga with gaData = Array.copy ga.gaData } 
-
-let deep_copy (ga: 'a t) (copy: 'a -> 'a): 'a t = 
-  { ga with gaData = Array.map copy ga.gaData } 
-
-(* An accumulating for loop. Used internally. *)
-let fold_for ~(init: 'a) ~(lo: int) ~(hi: int) (f: int -> 'a -> 'a) =
-  let rec forloop i acc =
-    if i > hi then acc
-    else forloop (i+1) (f i acc)
-  in
-  forloop lo init
-
-(** Iterate over the initialized elements of the array *)
-let iter (f: 'a -> unit) (ga: 'a t) = 
-  for i = 0 to max_init_index ga do 
-    f ga.gaData.(i)
-  done
-
-(** Iterate over the initialized elements of the array *)
-let iteri  (f: int -> 'a -> unit) (ga: 'a t) = 
-  for i = 0 to max_init_index ga do 
-    f i ga.gaData.(i)
-  done
-
-(** Iterate over the elements of 2 arrays *)
-let iter2  (f: int -> 'a -> 'b -> unit) (ga1: 'a t) (ga2: 'b t) = 
-  let len1 = max_init_index ga1 in
-  let len2 = max_init_index ga2 in
-  if len1 > -1 || len2 > -1 then begin
-    let max = if len1 > len2 then begin
-                  ignore(getg ga2 len1); (*grow ga2 to match ga1*)
-                  len1
-              end else begin
-                  ignore(getg ga1 len2); (*grow ga1 to match ga2*)
-                  len2
-              end in
-    for i = 0 to max do 
-      f i ga1.gaData.(i) ga2.gaData.(i)
-    done
-  end
-
-(** Fold left over the initialized elements of the array *)
-let fold_left (f: 'acc -> 'a -> 'acc) (acc: 'acc) (ga: 'a t) : 'acc = 
-  let rec loop (acc: 'acc) (idx: int) : 'acc = 
-    if idx > max_init_index ga then 
-      acc
-    else
-      loop (f acc ga.gaData.(idx)) (idx + 1)
-  in
-  loop acc 0
-
-
-(** Fold left over the initialized elements of the array *)
-let fold_lefti (f: 'acc -> int -> 'a -> 'acc) (acc: 'acc) (ga: 'a t) : 'acc = 
-  let rec loop (acc: 'acc) (idx: int) : 'acc = 
-    if idx > max_init_index ga then 
-      acc
-    else
-      loop (f acc idx ga.gaData.(idx)) (idx + 1)
-  in
-  loop acc 0
-
-(** Fold right over the initialized elements of the array *)
-let fold_right (f: 'a -> 'acc -> 'acc) (ga: 'a t) (acc: 'acc) : 'acc = 
-  let rec loop (acc: 'acc) (idx: int) : 'acc = 
-    if idx < 0 then 
-      acc
-    else
-      loop (f ga.gaData.(idx) acc) (idx - 1)
-  in
-  loop acc (max_init_index ga)
-
-(** Document generator *)
-let d_growarray (sep: Pretty.doc)
-                (doit:int -> 'a -> Pretty.doc)
-                ()
-                (elements: 'a t) =
-  Pretty.docArray ~sep:sep doit () elements.gaData
-
-let restoreGA ?deepCopy (ga: 'a t) : (unit -> unit) = 
-  let old = 
-    (match deepCopy with 
-         None -> copy ga
-       | Some f -> deep_copy ga f)
-  in
-  (fun () ->
-     if ga.gaFill != old.gaFill then
-       Errormsg.s 
-         (Errormsg.bug "restoreGA to an array with a different fill.");
-     ga.gaMaxInitIndex <- old.gaMaxInitIndex;
-     for i = 0 to max_init_index ga do 
-       set ga i (getg old i)
-     done)
-
-let find (ga: 'a t) (fn: 'a -> bool) : int option = 
-  let rec loop (i:int) : int option = 
-    if i > ga.gaMaxInitIndex then None
-    else if fn (get ga i) then Some i
-    else loop (i + 1)
-  in
-  loop 0
diff --git a/cil/ocamlutil/growArray.mli b/cil/ocamlutil/growArray.mli
deleted file mode 100644
index 4cb5f48f5..000000000
--- a/cil/ocamlutil/growArray.mli
+++ /dev/null
@@ -1,131 +0,0 @@
-(***********************************************************************)
-(* Growable Arrays                                                     *)
-(*                                                                     *)
-(* This a wrapper around the standard OCaml array, but will grow       *)
-(* automatically on get or set outside the current size of the         *)
-(* array.                                                              *)
-(*                                                                     *)
-(* The interface is the same as the standard OCaml array where         *)
-(* applicable (and implemented).                                       *)
-(***********************************************************************)
-
-(* $Id: growArray.mli,v 1.8 2005-01-06 15:37:36 necula Exp $ *)
-
-(** Array operations. *)
-
-(** The type of growable arrays *)
-type 'a t
-
-(** The default value to a new element of the growable array *)
-type 'a fill =
-    Elem of 'a
-    (* A default value *)
-  | Susp of (int -> 'a)
-    (* A function given an index to generate a default value *)
-
-val make : int -> 'a fill -> 'a t
-(** [GrowArray.make n x] returns a fresh growable array of size
-   at least [n] with default value specified by [x].
-
-   Raise [Invalid_argument] if [n < 0] or [n > Sys.max_array_length]. *)
-
-val num_alloc_index: 'a t -> int
-(** [GrowArray.num_alloc_index a] returns the number of allocated entries in 
- * the array **)
-
-val max_init_index : 'a t -> int
-(** [GrowArray.max_init_index a] returns the maximum index to
-    which has been written.
-
-    Returns -1 if no writes have been made. *)
-
-val reset_max_init_index : 'a t -> unit
-(** [GrowArray.reset_init a] resets the max_init_index. You should probably
-   use [GrowArray.clear a] instead if you also want to delete the contents. *)
-
-val getg : 'a t -> int -> 'a
-(** [GrowArray.getg a n] returns the element number [n] of array [a].
-   The first element has number 0.
-   The last element has number [GrowArray.length a - 1].
-
-   If [n] is outside the range 0 to [(GrowArray.max_init_index a)],
-   then the array grows to at least [n] and yields the default value. *)
-
-val setg : 'a t -> int -> 'a -> unit
-(** [GrowArray.setg a n x] modifies array [a] in place, replacing
-   element number [n] with [x].
-
-   If [n] is outside the range 0 to [(GrowArray.max_init_index a)],
-   then the array grows to at least [n] and yields the default value. *)
-
-val get : 'a t -> int -> 'a
-(** [GrowArray.get a n] returns the element number [n] of grow array [a].
-
-   Raise [Invalid_argument "Array.get"]  if [n] is outside the range
-   of the underlying array. *)
-
-val set : 'a t -> int -> 'a -> unit
-(** [GrowArray.set a n x] modifies grow array [a] in place, replacing
-   element number [n] with [x].
-
-   Raise [Invalid_argument "Array.set"] if [n] is outside the range
-   of the underlying array. *)
-        
-val clear: 'a t -> unit 
-(** [GrowArray.clear a] clears the contents of the array and sets 
-   max_init_index to -1.  Suspension thunks will be rerun to regenerate the 
-   initial values of the array. *)
-
-val copy : 'a t -> 'a t
-(** [GrowArray.copy a] returns a copy of [a], that is, a fresh array
-   containing the same elements as [a]. *)
-
-val deep_copy : 'a t -> ('a -> 'a) -> 'a t
-(** [GrowArray.copy a f] returns a deep copy of [a] using f to
-    copy elements of [a]. *)
-
-val iter : ('a -> unit) -> 'a t -> unit
-(** [GrowArray.iter f a] applies function [f] in turn to all
-   the elements of [a].  It is equivalent to
-   [f a.(0); f a.(1); ...; f a.(GrowArray.length a - 1); ()]. *)
-
-val iteri : (int -> 'a -> unit) -> 'a t -> unit
-(** Same as {!GrowArray.iter}, but the
-   function is applied to the index of the element as first argument,
-   and the element itself as second argument. *)
-
-val iter2 : (int -> 'a -> 'b -> unit) -> 'a t -> 'b t -> unit
-(** Same as {!GrowArray.iteri}, but the function is applied to two arrays.
-  [iter2 f a b]  is equivalent to
-  [f 0 a.(0) b.(0); f 1 a.(1) b.(1); ...;  f n a.(n) b.(n); ()]
-  where n is the larger of (max_init_index a) or (max_init_index b).
-  The shorter array will grow to match the longer.*)
-
-val fold_left : ('a -> 'b -> 'a) -> 'a -> 'b t -> 'a
-(** [GrowArray.fold_left f x a] computes
-   [f (... (f (f x a.(0)) a.(1)) ...) a.(n-1)],
-   where [n] is the length of the array [a]. *)
-
-val fold_lefti : ('a -> int -> 'b -> 'a) -> 'a -> 'b t -> 'a
-(** [GrowArray.fold_lefti f x a] computes
-   [f (... (f (f x 0 a.(0)) 1 a.(1)) ...) (n-1) a.(n-1)],
-   where [n] is the length of the array [a]. *)
-
-val fold_right : ('b -> 'a -> 'a) -> 'b t -> 'a -> 'a
-(** [GrowArray.fold_right f a x] computes
-   [f a.(0) (f a.(1) ( ... (f a.(n-1) x) ...))],
-   where [n] is the length of the array [a]. *)
-
-val d_growarray : Pretty.doc -> (int -> 'a -> Pretty.doc) -> unit -> 'a t
-                             -> Pretty.doc
-(** [GrowArray.d_growarray sep f () a] creates a {!Pretty.doc} for growable
-   array a using separator sep and element printer f. *)
-
-
-val restoreGA: ?deepCopy:('a -> 'a) -> 'a t -> unit -> unit
-(** Given a growable array, produce a thunk that later restores it to its
-    current value *)
-
-val find: 'a t -> ('a -> bool) -> int option
-(** Returns the index of the first element in the array that satisfies the
-    predicate, or None if there is no such element *)
diff --git a/cil/ocamlutil/inthash.ml b/cil/ocamlutil/inthash.ml
deleted file mode 100755
index b1ad0c07c..000000000
--- a/cil/ocamlutil/inthash.ml
+++ /dev/null
@@ -1,188 +0,0 @@
-(** A hash table specialized on integer keys *)
-type 'a t =
-  { mutable size: int;                        (* number of elements *)
-    mutable data: 'a bucketlist array } (* the buckets *)
-
-and 'a bucketlist =
-    Empty
-  | Cons of int * 'a * 'a bucketlist
-
-let hash key = key land 0x3fffffff
-
-let create initial_size =
-  let s = min (max 1 initial_size) Sys.max_array_length in
-  { size = 0; data = Array.make s Empty }
-
-let clear h =
-  for i = 0 to Array.length h.data - 1 do
-    h.data.(i) <- Empty
-  done;
-  h.size <- 0
-
-let copy h =
-  { size = h.size;
-    data = Array.copy h.data }
-
-let copy_into src dest = 
-  dest.size <- src.size;
-  dest.data <- Array.copy src.data
-
-let length h = h.size
-
-let resize tbl =
-  let odata = tbl.data in
-  let osize = Array.length odata in
-  let nsize = min (2 * osize + 1) Sys.max_array_length in
-  if nsize <> osize then begin
-    let ndata = Array.create nsize Empty in
-    let rec insert_bucket = function
-        Empty -> ()
-      | Cons(key, data, rest) ->
-          insert_bucket rest; (* preserve original order of elements *)
-          let nidx = (hash key) mod nsize in
-          ndata.(nidx) <- Cons(key, data, ndata.(nidx)) in
-    for i = 0 to osize - 1 do
-      insert_bucket odata.(i)
-    done;
-    tbl.data <- ndata;
-  end
-
-let add h key info =
-  let i = (hash key) mod (Array.length h.data) in
-  let bucket = Cons(key, info, h.data.(i)) in
-  h.data.(i) <- bucket;
-  h.size <- succ h.size;
-  if h.size > Array.length h.data lsl 1 then resize h
-
-let remove h key =
-  let rec remove_bucket = function
-      Empty ->
-        Empty
-    | Cons(k, i, next) ->
-        if k = key
-        then begin h.size <- pred h.size; next end
-        else Cons(k, i, remove_bucket next) in
-  let i = (hash key) mod (Array.length h.data) in
-  h.data.(i) <- remove_bucket h.data.(i)
-
-let remove_all h key =
-  let rec remove_bucket = function
-      Empty ->
-        Empty
-    | Cons(k, i, next) ->
-        if k = key
-        then begin h.size <- pred h.size; 
-	  remove_bucket next end
-        else Cons(k, i, remove_bucket next) in
-  let i = (hash key) mod (Array.length h.data) in
-  h.data.(i) <- remove_bucket h.data.(i)
-
-let rec find_rec key = function
-    Empty ->
-      raise Not_found
-  | Cons(k, d, rest) ->
-      if key = k then d else find_rec key rest
-
-let find h key =
-  match h.data.((hash key) mod (Array.length h.data)) with
-    Empty -> raise Not_found
-  | Cons(k1, d1, rest1) ->
-      if key = k1 then d1 else
-      match rest1 with
-        Empty -> raise Not_found
-      | Cons(k2, d2, rest2) ->
-          if key = k2 then d2 else
-          match rest2 with
-            Empty -> raise Not_found
-          | Cons(k3, d3, rest3) ->
-              if key = k3 then d3 else find_rec key rest3
-
-let find_all h key =
-  let rec find_in_bucket = function
-    Empty ->
-      []
-  | Cons(k, d, rest) ->
-      if k = key then d :: find_in_bucket rest else find_in_bucket rest in
-  find_in_bucket h.data.((hash key) mod (Array.length h.data))
-
-let replace h key info =
-  let rec replace_bucket = function
-      Empty ->
-        raise Not_found
-    | Cons(k, i, next) ->
-        if k = key
-        then Cons(k, info, next)
-        else Cons(k, i, replace_bucket next) in
-  let i = (hash key) mod (Array.length h.data) in
-  let l = h.data.(i) in
-  try
-    h.data.(i) <- replace_bucket l
-  with Not_found ->
-    h.data.(i) <- Cons(key, info, l);
-    h.size <- succ h.size;
-    if h.size > Array.length h.data lsl 1 then resize h
-
-let mem h key =
-  let rec mem_in_bucket = function
-  | Empty ->
-      false
-  | Cons(k, d, rest) ->
-      k = key || mem_in_bucket rest in
-  mem_in_bucket h.data.((hash key) mod (Array.length h.data))
-
-let iter (f: int -> 'a -> unit) (h: 'a t) : unit =
-  let rec do_bucket = function
-      Empty ->
-        ()
-    | Cons(k, d, rest) ->
-        f k d; do_bucket rest in
-  let d = h.data in
-  for i = 0 to Array.length d - 1 do
-    do_bucket d.(i)
-  done
-
-let fold (f: int -> 'a -> 'b -> 'b) (h: 'a t) (init: 'b) =
-  let rec do_bucket b accu =
-    match b with
-      Empty ->
-        accu
-    | Cons(k, d, rest) ->
-        do_bucket rest (f k d accu) in
-  let d = h.data in
-  let accu = ref init in
-  for i = 0 to Array.length d - 1 do
-    accu := do_bucket d.(i) !accu
-  done;
-  !accu
-
-
-let memoize (h: 'a t) (key: int) (f: int -> 'a) : 'a = 
-  let i = (hash key) mod (Array.length h.data) in
-  let rec find_rec key = function
-      Empty -> addit ()
-    | Cons(k, d, rest) ->
-        if key = k then d else find_rec key rest
-  and find_in_bucket key = function
-      Empty -> addit ()
-    | Cons(k1, d1, rest1) ->
-        if key = k1 then d1 else
-        match rest1 with
-          Empty -> addit ()
-        | Cons(k2, d2, rest2) ->
-            if key = k2 then d2 else
-            match rest2 with
-              Empty -> addit () 
-            | Cons(k3, d3, rest3) ->
-                if key = k3 then d3 else find_rec key rest3
-  and addit () = 
-    let it = f key in
-    h.data.(i) <- Cons(key, it, h.data.(i));
-    h.size <- succ h.size;
-    if h.size > Array.length h.data lsl 1 then resize h;
-    it
-  in
-  find_in_bucket key h.data.(i)
-                  
-  
-let tolist (h: 'a t) : (int * 'a) list = 
-  fold (fun k d acc -> (k, d) :: acc) h []
diff --git a/cil/ocamlutil/inthash.mli b/cil/ocamlutil/inthash.mli
deleted file mode 100755
index f62fcd2be..000000000
--- a/cil/ocamlutil/inthash.mli
+++ /dev/null
@@ -1,27 +0,0 @@
-type 'a t
-
-(* These functions behave the same as Hashtbl, but the key type is
-   always int.  (Specializing on int improves the performance) *)
-
-val create: int -> 'a t
-val clear: 'a t -> unit
-val length : 'a t -> int
-
-val copy: 'a t -> 'a t
-val copy_into: 'a t -> 'a t -> unit
-
-val add: 'a t -> int -> 'a -> unit
-val replace: 'a t -> int -> 'a -> unit
-val remove: 'a t -> int -> unit
-val remove_all: 'a t -> int -> unit
-
-val mem: 'a t -> int -> bool
-val find: 'a t -> int -> 'a
-val find_all: 'a t -> int -> 'a list
-
-val iter: (int -> 'a -> unit) -> 'a t -> unit
-val fold: (int -> 'a -> 'b -> 'b) -> 'a t -> 'b -> 'b
-
-val memoize: 'a t -> int -> (int -> 'a) -> 'a
-
-val tolist: 'a t -> (int * 'a) list
diff --git a/cil/ocamlutil/intmap.ml b/cil/ocamlutil/intmap.ml
deleted file mode 100755
index 00242bc13..000000000
--- a/cil/ocamlutil/intmap.ml
+++ /dev/null
@@ -1,171 +0,0 @@
-(***********************************************************************)
-(*                                                                     *)
-(*                           Objective Caml                            *)
-(*                                                                     *)
-(*            Xavier Leroy, projet Cristal, INRIA Rocquencourt         *)
-(*                                                                     *)
-(*  Copyright 1996 Institut National de Recherche en Informatique et   *)
-(*  en Automatique.  All rights reserved.  This file is distributed    *)
-(*  under the terms of the GNU Library General Public License, with    *)
-(*  the special exception on linking described in file ../LICENSE.     *)
-(*                                                                     *)
-(***********************************************************************)
-
-(* $Id: intmap.ml,v 1.2 2005-10-04 21:30:25 necula Exp $ *)
-
-(* specialized to integer keys by George Necula *)
-
-type 'a t =
-    Empty
-  | Node of 'a t * int * 'a * 'a t * int
-
-let height = function
-    Empty -> 0
-  | Node(_,_,_,_,h) -> h
-        
-let create l x d r =
-  let hl = height l and hr = height r in
-  Node(l, x, d, r, (if hl >= hr then hl + 1 else hr + 1))
-
-let bal l x d r =
-  let hl = match l with Empty -> 0 | Node(_,_,_,_,h) -> h in
-  let hr = match r with Empty -> 0 | Node(_,_,_,_,h) -> h in
-  if hl > hr + 2 then begin
-    match l with
-      Empty -> invalid_arg "Map.bal"
-    | Node(ll, lv, ld, lr, _) ->
-        if height ll >= height lr then
-          create ll lv ld (create lr x d r)
-        else begin
-          match lr with
-            Empty -> invalid_arg "Map.bal"
-          | Node(lrl, lrv, lrd, lrr, _)->
-              create (create ll lv ld lrl) lrv lrd (create lrr x d r)
-        end
-  end else if hr > hl + 2 then begin
-    match r with
-      Empty -> invalid_arg "Map.bal"
-    | Node(rl, rv, rd, rr, _) ->
-        if height rr >= height rl then
-          create (create l x d rl) rv rd rr
-        else begin
-          match rl with
-            Empty -> invalid_arg "Map.bal"
-          | Node(rll, rlv, rld, rlr, _) ->
-              create (create l x d rll) rlv rld (create rlr rv rd rr)
-        end
-  end else
-    Node(l, x, d, r, (if hl >= hr then hl + 1 else hr + 1))
-      
-let empty = Empty
-
-let is_empty = function Empty -> true | _ -> false
-    
-let rec add x data = function
-    Empty ->
-      Node(Empty, x, data, Empty, 1)
-  | Node(l, v, d, r, h) as t ->
-      if x = v then
-        Node(l, x, data, r, h)
-      else if x < v then
-        bal (add x data l) v d r
-      else
-        bal l v d (add x data r)
-          
-let rec find x = function
-    Empty ->
-      raise Not_found
-  | Node(l, v, d, r, _) ->
-      if x = v then d
-      else find x (if x < v then l else r)
-          
-let rec mem x = function
-    Empty ->
-      false
-  | Node(l, v, d, r, _) ->
-      x = v || mem x (if x < v then l else r)
-        
-let rec min_binding = function
-    Empty -> raise Not_found
-  | Node(Empty, x, d, r, _) -> (x, d)
-  | Node(l, x, d, r, _) -> min_binding l
-        
-let rec remove_min_binding = function
-    Empty -> invalid_arg "Map.remove_min_elt"
-  | Node(Empty, x, d, r, _) -> r
-  | Node(l, x, d, r, _) -> bal (remove_min_binding l) x d r
-
-let merge t1 t2 =
-  match (t1, t2) with
-    (Empty, t) -> t
-  | (t, Empty) -> t
-  | (_, _) ->
-      let (x, d) = min_binding t2 in
-      bal t1 x d (remove_min_binding t2)
-
-let rec remove x = function
-    Empty ->
-      Empty
-  | Node(l, v, d, r, h) as t ->
-      if x = v then
-        merge l r
-      else if x < v then
-        bal (remove x l) v d r
-      else
-        bal l v d (remove x r)
-
-let rec iter f = function
-    Empty -> ()
-  | Node(l, v, d, r, _) ->
-      iter f l; f v d; iter f r
-
-let rec map f = function
-    Empty               -> Empty
-  | Node(l, v, d, r, h) -> Node(map f l, v, f d, map f r, h)
-
-let rec mapi f = function
-    Empty               -> Empty
-  | Node(l, v, d, r, h) -> Node(mapi f l, v, f v d, mapi f r, h)
-
-let rec fold f m accu =
-  match m with
-    Empty -> accu
-  | Node(l, v, d, r, _) ->
-      fold f l (f v d (fold f r accu))
-
-type 'a enumeration = End | More of int * 'a * 'a t * 'a enumeration
-
-let rec cons_enum m e =
-  match m with
-    Empty -> e
-  | Node(l, v, d, r, _) -> cons_enum l (More(v, d, r, e))
-
-let compare cmp m1 m2 =
-  let rec compare_aux e1 e2 =
-    match (e1, e2) with
-      (End, End) -> 0
-    | (End, _)  -> -1
-    | (_, End) -> 1
-    | (More(v1, d1, r1, e1), More(v2, d2, r2, e2)) ->
-        if v1 <> v2 then if v1 < v2 then -1 else 1 else
-        let c = cmp d1 d2 in
-        if c <> 0 then c else
-        compare_aux (cons_enum r1 e1) (cons_enum r2 e2)
-in compare_aux (cons_enum m1 End) (cons_enum m2 End)
-
-let equal cmp m1 m2 =
-  let rec equal_aux e1 e2 =
-    match (e1, e2) with
-      (End, End) -> true
-    | (End, _)  -> false
-    | (_, End) -> false
-    | (More(v1, d1, r1, e1), More(v2, d2, r2, e2)) ->
-        v1 = v2 && cmp d1 d2 &&
-        equal_aux (cons_enum r1 e1) (cons_enum r2 e2)
-in equal_aux (cons_enum m1 End) (cons_enum m2 End)
-
-(** Some definitions for ML2Coq *)
-let _ = ignore "coq: 
-(* Some definitions for ML2Coq *)
-
-"
diff --git a/cil/ocamlutil/intmap.mli b/cil/ocamlutil/intmap.mli
deleted file mode 100755
index eef89b559..000000000
--- a/cil/ocamlutil/intmap.mli
+++ /dev/null
@@ -1,87 +0,0 @@
-(***********************************************************************)
-(*                                                                     *)
-(*                           Objective Caml                            *)
-(*                                                                     *)
-(*            Xavier Leroy, projet Cristal, INRIA Rocquencourt         *)
-(*                                                                     *)
-(*  Copyright 1996 Institut National de Recherche en Informatique et   *)
-(*  en Automatique.  All rights reserved.  This file is distributed    *)
-(*  under the terms of the GNU Library General Public License, with    *)
-(*  the special exception on linking described in file ../LICENSE.     *)
-(*                                                                     *)
-(***********************************************************************)
-
-(* $Id: intmap.mli,v 1.1 2005-02-28 16:24:00 necula Exp $ *)
-
-(** Specialized to integer keys by George Necula *)
-
-(** Association tables over ordered types.
-
-   This module implements applicative association tables, also known as
-   finite maps or dictionaries, given a total ordering function
-   over the keys.
-   All operations over maps are purely applicative (no side-effects).
-   The implementation uses balanced binary trees, and therefore searching
-   and insertion take time logarithmic in the size of the map. 
-*)
-
-type (+'a) t
-      (** The type of maps from type [key] to type ['a]. *)
-
-val empty: 'a t
-    (** The empty map. *)
-
-val is_empty: 'a t -> bool
-    (** Test whether a map is empty or not. *)
-
-val add: int -> 'a -> 'a t -> 'a t
-    (** [add x y m] returns a map containing the same bindings as
-       [m], plus a binding of [x] to [y]. If [x] was already bound
-       in [m], its previous binding disappears. *)
-
-val find: int -> 'a t -> 'a
-    (** [find x m] returns the current binding of [x] in [m],
-       or raises [Not_found] if no such binding exists. *)
-
-val remove: int -> 'a t -> 'a t
-    (** [remove x m] returns a map containing the same bindings as
-       [m], except for [x] which is unbound in the returned map. *)
-
-val mem: int -> 'a t -> bool
-    (** [mem x m] returns [true] if [m] contains a binding for [x],
-       and [false] otherwise. *)
-
-val iter: (int -> 'a -> unit) -> 'a t -> unit
-    (** [iter f m] applies [f] to all bindings in map [m].
-       [f] receives the key as first argument, and the associated value
-       as second argument.  The bindings are passed to [f] in increasing
-       order with respect to the ordering over the type of the keys.
-       Only current bindings are presented to [f]:
-       bindings hidden by more recent bindings are not passed to [f]. *)
-
-val map: ('a -> 'b) -> 'a t -> 'b t
-    (** [map f m] returns a map with same domain as [m], where the
-       associated value [a] of all bindings of [m] has been
-       replaced by the result of the application of [f] to [a].
-       The bindings are passed to [f] in increasing order
-       with respect to the ordering over the type of the keys. *)
-
-val mapi: (int -> 'a -> 'b) -> 'a t -> 'b t
-    (** Same as {!Map.S.map}, but the function receives as arguments both the
-       key and the associated value for each binding of the map. *)
-
-val fold: (int -> 'a -> 'b -> 'b) -> 'a t -> 'b -> 'b
-    (** [fold f m a] computes [(f kN dN ... (f k1 d1 a)...)],
-       where [k1 ... kN] are the keys of all bindings in [m]
-       (in increasing order), and [d1 ... dN] are the associated data. *)
-
-val compare: ('a -> 'a -> int) -> 'a t -> 'a t -> int
-    (** Total ordering between maps.  The first argument is a total ordering
-        used to compare data associated with equal keys in the two maps. *)
-
-val equal: ('a -> 'a -> bool) -> 'a t -> 'a t -> bool
-    (** [equal cmp m1 m2] tests whether the maps [m1] and [m2] are
-       equal, that is, contain equal keys and associate them with
-       equal data.  [cmp] is the equality predicate used to compare
-       the data associated with the keys. *)
-
diff --git a/cil/ocamlutil/perfcount.c.in b/cil/ocamlutil/perfcount.c.in
deleted file mode 100755
index ae532f697..000000000
--- a/cil/ocamlutil/perfcount.c.in
+++ /dev/null
@@ -1,184 +0,0 @@
-// -*- Mode: c -*-
-//
-/*
- * A module that allows the reading of performance counters on Pentium.
- *
- * This file contains both code that uses the performance counters to 
- * compute the number of cycles per second (to be used during ./configure) 
- * and also code to read the performance counters from Ocaml.
- *
- * Author: George Necula (necula@cs.berkeley.edu)
- */
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#if defined(__GNUC__)
-  #define longlong long long
-  // RDTSC puts the result in EAX and EDX. We tell gcc to use those registers
-  // for "low" and "high"
-  #if defined(__i386__)
-    #define GETCOUNTER(low,high) \
-            __asm__ volatile ("rdtsc" : "=a" (low), "=d" (high));
-  #else
-    #define GETCOUNTER(low,high) \
-            printf ("Reading of performance counters is supported only on Intel x86\n"); \
-            exit(1);
-  #endif
-#else
-  // Microsoft Visual Studio
-  #define longlong __int64
-  #define inline   __inline
-  #define GETCOUNTER(low,high) __asm { \
-    __asm rdtsc \
-    __asm mov low, eax \
-    __asm mov high, edx };
-#endif
-
-/* Store here the first value read from the performance counter */
-unsigned static longlong first_value;
-
-
-/* This is the function that actually reads the performance counter. */
-inline unsigned longlong read_ppc(void) {
-  unsigned long pclow, pchigh;
-  unsigned longlong lowhigh;
-
-  GETCOUNTER(pclow, pchigh);
-  
-  // printf ("Read low=0x%08lx high=0x%08lx\n", low, high);
-
-  // Put the 64-bit value together
-  lowhigh = ((unsigned longlong)pclow) | ((unsigned longlong)pchigh << 32);
-
-  if(first_value == 0) {
-    first_value = lowhigh;
-  }
-  return lowhigh - first_value;
-}
-
-
-/* sm: I want a version that is as fast as possible, dropping
- * bits that aren't very important to achieve it. *
- *
- * This version drops the low 20 bits and the high 14 bits so the
- * result is 30 bits (always a positive Ocaml int); this yields
- * megacycles, which for GHz machines will be something like
- * milliseconds. */
-static unsigned long sample_ppc_20(void)
-{
-  unsigned long pclow, pchigh;
-
-  GETCOUNTER(pclow, pchigh);
-
-  return ((pclow >> 20) | (pchigh << 12)) & 0x3FFFFFFF;
-}
-
-/* This version drops the low 10 bits, yielding something like
- * microseconds. */
-inline static unsigned long sample_ppc_10()
-{
-  unsigned long pclow, pchigh;
-
-  GETCOUNTER(pclow,pchigh);
-    
-  return ((pclow >> 10) | (pchigh << 22)) & 0x3FFFFFFF;
-}
-
-
-
-#ifndef CONFIGURATION_ONLY
-/*** This is the OCAML stub for the read_ppc ***/
-#include <caml/mlvalues.h>
-#include <caml/alloc.h>
-#include <caml/memory.h>
-
-#define CYCLES_PER_USEC @CYCLES_PER_USEC@
-value read_pentium_perfcount()
-{
-  double counter = (double)read_ppc() / (1000000.0 * CYCLES_PER_USEC);
-  return copy_double(counter);
-}
-
-/* The Ocaml system can use this function to figure out if there are
- * performance counters available */
-value has_performance_counters() {
-  // HAS_PERFCOUNT is set by the configuration code at the end of
-  // this file, during ./configure
-#if @HAS_PERFCOUNT@ != 0
-  return Val_true;
-#else
-  return Val_false;
-#endif
-}
-
-/* sm: interface to above from Ocaml */
-value sample_pentium_perfcount_20()
-{
-  return Val_long(sample_ppc_20());
-}
-
-value sample_pentium_perfcount_10()
-{
-  return Val_long(sample_ppc_10());
-}
-
-#endif
-
-
-/* Now we have a function that tries to compute the number of cycles per 
- * second (to be used during ./configure) */
-#ifdef CONFIGURATION_ONLY
-#include <sys/times.h>
-#include <unistd.h>
-#include <math.h>
-
-int main() {
-  struct tms t;
-  clock_t start, finish, diff;
-  unsigned longlong start_pc, finish_pc, diff_pc;
-  long clk_per_sec = sysconf(_SC_CLK_TCK);
-  double cycles_per_usec;
-  
-  if(clk_per_sec <= 0) {
-    printf("Cannot find clk_per_sec (got %ld)\n", clk_per_sec);
-    exit(1);
-  }
-  
-  times(&t); start = t.tms_utime;
-  start_pc = read_ppc();
-  // Do something for a while
-  {
-    int i;
-    double a = 5.678;
-    for(i=0;i<10000000;i++) {
-      a = (i & 1) ? (a * a) : (sqrt(a));
-    }
-  }
-  times(&t); finish = t.tms_utime;
-  finish_pc = read_ppc();
-  diff = finish - start;
-  diff_pc = finish_pc - start_pc;
-  if(diff == 0) {
-    printf("Cannot use Unix.times\n");
-    exit(1);
-  }
-  if(diff_pc == 0) {
-    printf("Invalid result from the peformance counters\n");
-    exit(1);
-  }
-  diff_pc /= 1000000; // We care about cycles per microsecond
-//  printf("diff = %ld, diff_pc = %ld, clk = %ld\n",
-//         (long)diff,
-//         (long)diff_pc, (long)clk_per_sec);
-
-  cycles_per_usec = (((double)diff_pc / (double)diff)
-                               * (double)clk_per_sec);
-
-  /* Whatever value we print here will be used as the CYCLES_PER_USEC
-   * below */
-  printf("%.3lf\n", cycles_per_usec);
-  exit(0);
-}
-#endif //defined CONFIGURATION_ONLY
-
diff --git a/cil/ocamlutil/pretty.ml b/cil/ocamlutil/pretty.ml
deleted file mode 100644
index 47d07ac40..000000000
--- a/cil/ocamlutil/pretty.ml
+++ /dev/null
@@ -1,859 +0,0 @@
-(* 
- *
- * Copyright (c) 2001-2002, 
- *  George C. Necula    <necula@cs.berkeley.edu>
- *  Scott McPeak        <smcpeak@cs.berkeley.edu>
- *  Wes Weimer          <weimer@cs.berkeley.edu>
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. The names of the contributors may not be used to endorse or promote
- * products derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
- * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
- * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- *)
-
-(******************************************************************************)
-(* Pretty printer 
-   This module contains several fast, but sub-optimal heuristics to pretty-print 
-   structured text. 
-*)
-
-let debug =  false
-
-(* Choose an algorithm *)
-type algo = George | Aman | Gap
-let  algo = George
-let fastMode       = ref false
-
-
-(** Whether to print identation or not (for faster printing and smaller 
-  * output) *)
-let printIndent = ref true
-
-(******************************************************************************)	
-(* The doc type and constructors *)
-
-type doc = 
-    Nil
-  | Text     of string
-  | Concat   of doc * doc
-  | CText    of doc * string
-  | Break
-  | Line 
-  | LeftFlush
-  | Align
-  | Unalign  
-  | Mark
-  | Unmark
-
-(* Break a string at \n *)
-let rec breakString (acc: doc) (str: string) : doc = 
-  try
-    (* Printf.printf "breaking string %s\n" str; *)
-    let r = String.index str '\n' in
-    (* Printf.printf "r=%d\n" r; *)
-    let len = String.length str in
-    if r > 0 then begin
-      (* Printf.printf "Taking %s\n" (String.sub str 0 r); *)
-      let acc' = Concat(CText (acc, String.sub str 0 r), Line) in
-      if r = len - 1 then (* The last one *)
-        acc'
-      else begin
-        (* Printf.printf "Continuing with %s\n" (String.sub str (r + 1) (len - r - 1)); *)
-        breakString acc'
-          (String.sub str (r + 1) (len - r - 1))
-      end
-    end else (* The first is a newline *)
-      breakString (Concat(acc, Line))
-        (String.sub str (r + 1) (len - r - 1))
-  with Not_found -> 
-    if acc = Nil then Text str else CText (acc, str)
-
-let nil           = Nil
-let text s        = breakString nil s
-let num  i        = text (string_of_int i)
-let real f        = text (string_of_float f)
-let chr  c        = text (String.make 1 c) 
-let align         = Align
-let unalign       = Unalign
-let line          = Line
-let leftflush     = LeftFlush
-let break         = Break  
-let mark          = Mark
-let unmark        = Unmark
-
-let d_int32 (i: int32) = text (Int32.to_string i)
-let f_int32 () i = d_int32 i
-
-let d_int64 (i: int64) = text (Int64.to_string i)
-let f_int64 () i = d_int64 i
-
-
-(* Note that the ++ operator in Ocaml are left-associative. This means 
- * that if you have a long list of ++ then the whole thing is very unbalanced 
- * towards the left side. This is the worst possible case since scanning the 
- * left side of a Concat is the non-tail recursive case. *)
-
-let (++) d1 d2 = Concat (d1, d2)
-let concat d1 d2 = Concat (d1, d2)
-
-(* Ben Liblit fix *)
-let indent n d = text (String.make n ' ') ++ (align ++ (d ++ unalign))
-
-let markup d = mark ++ d ++ unmark
-
-(* Format a sequence. The first argument is a separator *)
-let seq ~(sep:doc)  ~(doit:'a -> doc) ~(elements: 'a list) = 
-  let rec loop (acc: doc) = function
-      []     -> acc
-    | h :: t -> 
-        let fh = doit h in  (* Make sure this is done first *)
-        loop (acc ++ sep ++ fh) t
-  in
-  (match elements with
-    [] -> nil
-  | h :: t -> 
-      let fh = doit h in loop fh t)
-
-
-let docArray ?(sep=chr ',') (doit:int -> 'a -> doc) () (elements:'a array) = 
-  let len = Array.length elements in
-  if len = 0 then 
-    nil
-  else
-    let rec loop (acc: doc) i =
-      if i >= len then acc else
-      let fi = doit i elements.(i) in (* Make sure this is done first *)
-      loop (acc ++ sep ++ fi) (i + 1)
-    in
-    let f0 = doit 0 elements.(0) in
-    loop f0 1
-
-let docOpt delem () = function
-    None -> text "None"
-  | Some e -> text "Some(" ++ (delem e) ++ chr ')'
-
-
-
-let docList ?(sep=chr ',') (doit:'a -> doc) () (elements:'a list) = 
-  seq sep doit elements
-
-let insert () d = d
-
-
-let d_list (sep:string) (doit:unit -> 'a -> doc) () (elts:'a list) : doc =
-  (* thunk 'doit' to match docList's interface *)
-  let internalDoit (elt:'a) =
-    (doit () elt) in
-  (docList ~sep:(text sep) internalDoit () elts)
-
-(** Format maps *)
-module MakeMapPrinter =
-  functor (Map: sig 
-                  type key
-                  type 'a t
-                  val fold : (key -> 'a -> 'b -> 'b) -> 'a t -> 'b -> 'b
-                end) ->
-struct
-  let docMap ?(sep=chr ',')
-              (doit: Map.key -> 'a -> doc) () (maplets: 'a Map.t) : doc =
-    Map.fold
-      (fun k d acc ->
-	(if acc==nil then acc else acc ++ sep)
-	  ++ (doit k d))
-      maplets
-      nil
-
-  let dmaplet d0 d1 = d0 ++ (text " |-> ") ++ d1
-
-  let d_map ?(dmaplet=dmaplet) (sep:string) dkey dval =
-    let doit = fun k d -> dmaplet (dkey () k) (dval () d) in
-    docMap ~sep:(text sep) doit
-end
-
-(** Format sets *)
-module MakeSetPrinter =
-  functor (Set: sig 
-                  type elt
-                  type t
-                  val fold : (elt -> 'a -> 'a) -> t -> 'a -> 'a
-                end) ->
-struct
-  let docSet ?(sep=chr ',') (doit: Set.elt -> doc) () (set: Set.t) : doc =
-    Set.fold
-      (fun elt acc ->
-	(if acc==nil then acc else acc ++ sep)
-	  ++ (doit elt))
-      set
-      nil
-
-  let d_set (sep:string) delt =
-    docSet ~sep:(text sep) (delt ())
-end
-
-
-(******************************************************************************)	
-(* Some debugging stuff *)
-
-let dbgprintf x = Printf.fprintf stderr x
-
-let rec dbgPrintDoc = function
-    Nil -> dbgprintf "(Nil)"
-  | Text s -> dbgprintf "(Text %s)" s
-  | Concat (d1,d2) -> dbgprintf ""; dbgPrintDoc  d1; dbgprintf " ++\n "; 
-      dbgPrintDoc  d2; dbgprintf ""
-  | CText (d,s) -> dbgPrintDoc  d; dbgprintf " ++ \"%s\"" s; 
-  | Break -> dbgprintf "(Break)" 
-  | Line -> dbgprintf "(Line)"
-  | LeftFlush -> dbgprintf "(LeftFlush)"
-  | Align -> dbgprintf "(Align)"
-  | Unalign -> dbgprintf "(Unalign)"
-  | Mark -> dbgprintf "(Mark)"
-  | Unmark -> dbgprintf "(Unmark)"
-
-(******************************************************************************)	
-(* The "george" algorithm *)
-
-(* When we construct documents, most of the time they are heavily unbalanced 
- * towards the left. This is due to the left-associativity of ++ and also to 
- * the fact that constructors such as docList construct from the let of a 
- * sequence. We would prefer to shift the imbalance to the right to avoid 
- * consuming a lot of stack when we traverse the document *)
-let rec flatten (acc: doc) = function
-  | Concat (d1, d2) -> flatten (flatten acc d2) d1
-  | CText (d, s) -> flatten (Concat(Text s, acc)) d
-  | Nil -> acc (* Get rid of Nil *)
-  | d -> Concat(d, acc)
-
-(* We keep a stack of active aligns. *)
-type align = 
-    { mutable gainBreak: int;  (* This is the gain that is associated with 
-                                 * taking the break associated with this 
-                                 * alignment mark. If this is 0, then there 
-                                 * is no break associated with the mark *)
-      mutable isTaken: bool ref; (* If breakGain is > 0 then this is a ref 
-                                  * cell that must be set to true when the 
-                                  * break is taken. These ref cells are also 
-                                  * int the "breaks" list  *)
-            deltaFromPrev: int ref; (* The column of this alignment mark - 
-                                     * the column of the previous mark. 
-                                     * Shared with the deltaToNext of the 
-                                     * previous active align  *)
-             deltaToNext: int ref  (* The column of the next alignment mark - 
-                                    * the columns of this one. Shared with 
-                                    * deltaFromPrev of the next active align *)
-    } 
-      
-(* We use references to avoid the need to pass data around all the time *)
-let aligns: align list ref =  (* The current stack of active alignment marks, 
-                               * with the top at the head. Never empty.  *)
-  ref [{ gainBreak = 0; isTaken = ref false; 
-         deltaFromPrev = ref 0; deltaToNext = ref 0; }]
-
-let topAlignAbsCol = ref 0 (* The absolute column of the top alignment *)
-
-let pushAlign (abscol: int) = 
-  let topalign = List.hd !aligns in
-  let res = 
-    { gainBreak = 0; isTaken = ref false; 
-      deltaFromPrev = topalign.deltaToNext; (* Share with the previous *)
-      deltaToNext = ref 0; (* Allocate a new ref *)} in
-  aligns := res :: !aligns;
-  res.deltaFromPrev := abscol - !topAlignAbsCol;
-  topAlignAbsCol := abscol
-
-let popAlign () = 
-  match !aligns with
-    top :: t when t != [] -> 
-      aligns := t; 
-      topAlignAbsCol := !topAlignAbsCol - !(top.deltaFromPrev)
-  | _ -> failwith "Unmatched unalign\n"
-
-(** We keep a list of active markup sections. For each one we keep the column 
- * we are in *)
-let activeMarkups: int list ref = ref []
-
-
-(* Keep a list of ref cells for the breaks, in the same order that we see 
- * them in the document *)
-let breaks: bool ref list ref = ref []
-
-(* The maximum column that we should use *)
-let maxCol = ref 0
-
-(* Sometimes we take all the optional breaks *)
-let breakAllMode = ref false
-
-(* We are taking a newline and moving left *)
-let newline () =
-  let topalign = List.hd !aligns in (* aligns is never empty *)
-  if debug then
-    dbgprintf "Taking a newline: reseting gain of %d\n" topalign.gainBreak;
-  topalign.gainBreak <- 0;        (* Erase the current break info *)
-  if !breakAllMode && !topAlignAbsCol < !maxCol then 
-    breakAllMode := false;
-  !topAlignAbsCol                          (* This is the new column *)
-
-
-
-(* Choose the align with the best gain. We outght to find a better way to 
- * keep the aligns sorted, especially since they gain never changes (when the 
- * align is the top align) *)
-let chooseBestGain () : align option =        
-  let bestGain = ref 0 in
-  let rec loop (breakingAlign: align option) = function
-      [] -> breakingAlign
-    | a :: resta -> 
-        if debug then dbgprintf "Looking at align with gain %d\n" a.gainBreak;
-        if a.gainBreak > !bestGain then begin
-          bestGain := a.gainBreak;
-          loop (Some a) resta
-        end else
-          loop breakingAlign resta
-  in
-  loop None !aligns
-
-
-(* Another one that chooses the break associated with the current align only *)
-let chooseLastGain () : align option = 
-  let topalign = List.hd !aligns in
-  if topalign.gainBreak > 0 then Some topalign else None
-
-(* We have just advanced to a new column. See if we must take a line break *)
-let movingRight (abscol: int) : int = 
-  (* Keep taking the best break until we get back to the left of maxCol or no 
-   * more are left *)
-  let rec tryAgain abscol = 
-    if abscol <= !maxCol then abscol else 
-    begin
-      if debug then
-        dbgprintf "Looking for a break to take in column %d\n" abscol;
-      (* Find the best gain there is out there *)
-      match if !fastMode then None else chooseBestGain () with 
-        None -> begin
-          (* No breaks are available. Take all breaks from now on *)
-          breakAllMode := true;
-          if debug then
-            dbgprintf "Can't find any breaks\n";
-          abscol
-        end 
-      | Some breakingAlign -> begin
-          let topalign = List.hd !aligns in
-          let theGain = breakingAlign.gainBreak in
-          assert (theGain > 0);
-          if debug then dbgprintf "Taking break at %d. gain=%d\n" abscol theGain;
-          breakingAlign.isTaken := true;
-          breakingAlign.gainBreak <- 0;
-          if breakingAlign != topalign then begin
-            breakingAlign.deltaToNext := 
-               !(breakingAlign.deltaToNext) - theGain;
-            topAlignAbsCol := !topAlignAbsCol - theGain
-          end;
-          tryAgain (abscol - theGain)
-      end
-    end
-  in
-  tryAgain abscol
-
-
-(* Keep track of nested align in gprintf. Each gprintf format string must 
- * have properly nested align/unalign pairs. When the nesting depth surpasses 
- * !printDepth then we print ... and we skip until the matching unalign *)
-let printDepth = ref 10000000 (* WRW: must see whole thing *)
-let alignDepth = ref 0
-
-let useAlignDepth = true
-
-(** Start an align. Return true if we ahve just passed the threshhold *)
-let enterAlign () = 
-  incr alignDepth;
-  useAlignDepth && !alignDepth = !printDepth + 1
-
-(** Exit an align *)
-let exitAlign () = 
-  decr alignDepth
-
-(** See if we are at a low-enough align level (and we should be printing 
- * normally) *)
-let shallowAlign () = 
-  not useAlignDepth || !alignDepth <= !printDepth
-
-
-(* Pass the current absolute column and compute the new column *)
-let rec scan (abscol: int) (d: doc) : int = 
-  match d with 
-    Nil -> abscol
-  | Concat (d1, d2) -> scan (scan abscol d1) d2
-  | Text s when shallowAlign () -> 
-      let sl = String.length s in 
-      if debug then 
-        dbgprintf "Done string: %s from %d to %d\n" s abscol (abscol + sl);
-      movingRight (abscol + sl)
-  | CText (d, s) -> 
-      let abscol' = scan abscol d in
-      if shallowAlign () then begin
-        let sl = String.length s in 
-        if debug then 
-          dbgprintf "Done string: %s from %d to %d\n" s abscol' (abscol' + sl);
-        movingRight (abscol' + sl)
-      end else
-        abscol'
-
-  | Align -> 
-      pushAlign abscol; 
-      if enterAlign () then 
-        movingRight (abscol + 3) (* "..." *)
-      else
-        abscol
-
-  | Unalign -> exitAlign (); popAlign (); abscol 
-
-  | Line when shallowAlign () -> (* A forced line break *) 
-      if !activeMarkups != [] then 
-        failwith "Line breaks inside markup sections";
-      newline ()
-
-  | LeftFlush when shallowAlign ()  -> (* Keep cursor left-flushed *) 0
-
-  | Break when shallowAlign () -> (* An optional line break. Always a space 
-                                   * followed by an optional line break *)
-      if !activeMarkups != [] then 
-        failwith "Line breaks inside markup sections";
-      let takenref = ref false in
-      breaks := takenref :: !breaks;
-      let topalign = List.hd !aligns in (* aligns is never empty *)
-      if !breakAllMode then begin
-        takenref := true;
-        newline ()
-      end else begin
-        (* If there was a previous break there it stays not taken, forever. 
-         * So we overwrite it. *)
-        topalign.isTaken <- takenref;
-        topalign.gainBreak <- 1 + abscol - !topAlignAbsCol;
-        if debug then
-          dbgprintf "Registering a break at %d with gain %d\n" 
-            (1 + abscol) topalign.gainBreak;
-        movingRight (1 + abscol)
-      end
-
-  | Mark -> activeMarkups := abscol :: !activeMarkups;
-            abscol
-
-  | Unmark -> begin
-      match !activeMarkups with 
-        old :: rest -> activeMarkups := rest; 
-                       old
-      | [] -> failwith "Too many unmark"
-  end
-
-  | _ -> (* Align level is too deep *) abscol
-    
-
-(** Keep a running counter of the newlines we are taking. You can read and 
-  * reset this from user code, if you want *)
-let countNewLines = ref 0
-
-(* The actual function that takes a document and prints it *)
-let emitDoc 
-    (emitString: string -> int -> unit) (* emit a number of copies of a 
-                                         * string *)
-    (d: doc) = 
-  let aligns: int list ref = ref [0] in (* A stack of alignment columns *)
-
-  let wantIndent = ref false in
-  (* Use this function to take a newline *)
-  (* AB: modified it to flag wantIndent. The actual indentation is done only 
-     if leftflush is not encountered *)
-  let newline () =
-    match !aligns with
-      [] -> failwith "Ran out of aligns"
-    | x :: _ ->
-	emitString "\n" 1;
-        incr countNewLines;
-	wantIndent := true;
-	x
-  in
-  (* Print indentation if wantIndent was previously flagged ; reset this flag *)
-  let indentIfNeeded () =
-    if !printIndent && !wantIndent then ignore (
-      match !aligns with
-	[] -> failwith "Ran out of aligns"
-      | x :: _ -> 
-          if x > 0 then emitString " "  x;
-          x);
-    wantIndent := false	  
-  in
-  (* A continuation passing style loop *)
-  let rec loopCont (abscol: int) (d: doc) (cont: int -> unit) : unit 
-      (* the new column *) =
-    match d with
-      Nil -> cont abscol
-    | Concat (d1, d2) -> 
-        loopCont abscol d1 (fun abscol' -> loopCont abscol' d2 cont)
-
-    | Text s when shallowAlign () -> 
-        let sl = String.length s in
-	indentIfNeeded ();
-        emitString s 1;
-        cont (abscol + sl)
-
-    | CText (d, s) -> 
-        loopCont abscol d 
-          (fun abscol' -> 
-            if shallowAlign () then 
-              let sl = String.length s in
-	      indentIfNeeded ();
-              emitString s 1; 
-              cont (abscol' + sl)
-            else
-              cont abscol')
-
-    | Align -> 
-        aligns := abscol :: !aligns;
-        if enterAlign () then begin
-          indentIfNeeded ();
-          emitString "..." 1;
-          cont (abscol + 3)
-        end else
-          cont abscol
-
-    | Unalign -> begin
-        match !aligns with
-          [] -> failwith "Unmatched unalign"
-        | _ :: rest -> 
-            exitAlign ();
-            aligns := rest; cont abscol
-    end
-    | Line when shallowAlign ()  -> cont (newline ())
-    | LeftFlush when shallowAlign () -> wantIndent := false;  cont (0)
-    | Break when shallowAlign () -> begin
-        match !breaks with
-          [] -> failwith "Break without a takenref"
-        | istaken :: rest -> 
-            breaks := rest; (* Consume the break *)
-            if !istaken then cont (newline ())
-            else begin
-	      indentIfNeeded ();
-              emitString " " 1; 
-              cont (abscol + 1)
-            end
-    end
-
-    | Mark -> 
-        activeMarkups := abscol :: !activeMarkups;
-        cont abscol
-
-    | Unmark -> begin
-        match !activeMarkups with 
-          old :: rest -> activeMarkups := rest; 
-                         cont old
-        | [] -> failwith "Unmark without a mark"
-    end
-
-    | _ -> (* Align is too deep *)
-        cont abscol
-  in
-
-  loopCont 0 d (fun x -> ()) 
-
-
-(* Print a document on a channel *)
-let fprint (chn: out_channel) ~(width: int) doc =
-  (* Save some parameters, to allow for nested calls of these routines. *)
-  maxCol := width;
-  let old_breaks = !breaks in 
-  breaks := [];
-  let old_alignDepth = !alignDepth in 
-  alignDepth := 0;
-  let old_activeMarkups = !activeMarkups in 
-  activeMarkups := [];
-  ignore (scan 0 doc);
-  breaks := List.rev !breaks;
-  ignore (emitDoc 
-            (fun s nrcopies -> 
-              for i = 1 to nrcopies do
-                output_string chn s
-              done) doc);
-  activeMarkups := old_activeMarkups;
-  alignDepth := old_alignDepth;
-  breaks := old_breaks (* We must do this especially if we don't do emit 
-                        * (which consumes breaks) because otherwise we waste 
-                        * memory *)
-
-(* Print the document to a string *)
-let sprint ~(width : int)  doc : string = 
-  maxCol := width;
-  let old_breaks = !breaks in 
-  breaks := [];
-  let old_activeMarkups = !activeMarkups in 
-  activeMarkups := [];
-  let old_alignDepth = !alignDepth in 
-  alignDepth := 0;
-  ignore (scan 0 doc);
-  breaks := List.rev !breaks;
-  let buf = Buffer.create 1024 in
-  let rec add_n_strings str num =
-    if num <= 0 then ()
-    else begin Buffer.add_string buf str; add_n_strings str (num - 1) end
-  in
-  emitDoc add_n_strings doc;
-  breaks  := old_breaks;
-  activeMarkups := old_activeMarkups;
-  alignDepth := old_alignDepth;
-  Buffer.contents buf
-
-
-                                        (* The rest is based on printf.ml *)
-external format_int: string -> int -> string = "caml_format_int"
-external format_float: string -> float -> string = "caml_format_float"
-
-
-    
-let gprintf (finish : doc -> 'b)  
-            (format : ('a, unit, doc, 'b) format4) : 'a =
-  let format = (Obj.magic format : string) in
-
-  (* Record the starting align depth *)
-  let startAlignDepth = !alignDepth in
-  (* Special concatenation functions *)
-  let dconcat (acc: doc) (another: doc) = 
-    if !alignDepth > !printDepth then acc else acc ++ another in
-  let dctext1 (acc: doc) (str: string) = 
-    if !alignDepth > !printDepth then acc else 
-    CText(acc, str)
-  in
-  (* Special finish function *)
-  let dfinish (dc: doc) : 'b = 
-    if !alignDepth <> startAlignDepth then
-      prerr_string ("Unmatched align/unalign in " ^ format ^ "\n");
-    finish dc
-  in
-  let flen    = String.length format in
-                                        (* Reading a format character *)
-  let fget    = String.unsafe_get format in
-                                        (* Output a literal sequence of 
-                                         * characters, starting at i. The 
-                                         * character at i does not need to be 
-                                         * checked.  *) 
-  let rec literal acc i = 
-    let rec skipChars j = 
-      if j >= flen || 
-      (match fget j with 
-        '%' -> true 
-      | '@' -> true 
-      | '\n' -> true
-      | _ -> false) then
-        collect (dctext1 acc (String.sub format i (j-i))) j
-      else
-        skipChars (succ j)
-    in
-    skipChars (succ i)
-                                        (* the main collection function *)
-  and collect (acc: doc) (i: int) = 
-    if i >= flen then begin
-      Obj.magic (dfinish acc) 
-    end else begin
-      let c = fget i in
-      if c = '%' then begin
-        let j = skip_args (succ i) in
-        match fget j with
-          '%' -> literal acc j 
-        | 's' ->
-            Obj.magic(fun s ->
-              let str = 
-                if j <= i+1 then
-                  s
-                else
-                  let sl = String.length s in
-                  let p =
-                    try
-                      int_of_string (String.sub format (i+1) (j-i-1))
-                    with _ ->
-                      invalid_arg "fprintf: bad %s format" in
-                  if p > 0 && sl < p then
-                    (String.make (p - sl) ' ') ^ s
-                  else if p < 0 && sl < -p then
-                    s ^ (String.make (-p - sl) ' ')
-                  else
-                    s
-              in
-              collect (breakString acc str) (succ j))
-        | 'c' ->
-            Obj.magic(fun c ->
-              collect (dctext1 acc (String.make 1 c)) (succ j))
-        | 'd' | 'i' | 'o' | 'x' | 'X' | 'u' ->
-            Obj.magic(fun n ->
-              collect (dctext1 acc
-                         (format_int (String.sub format i 
-                                                  (j-i+1)) n))
-                (succ j))
-    (* L, l, and n are the Int64, Int32, and Nativeint modifiers to the integer
-       formats d,i,o,x,X,u.  For example, %Lo means print an Int64 in octal.*)
-	| 'L' ->
-	    if j != i + 1 then  (*Int64.format handles simple formats like %d.
-                     * Any special flags eaten by skip_args will confuse it. *)
-              invalid_arg ("dprintf: unimplemented format " 
-			   ^ (String.sub format i (j-i+1)));
-	    let j' = succ j in (* eat the d,i,x etc. *)
-	    let format_spec = "% " in
-	    String.set format_spec 1 (fget j'); (* format_spec = "%x", etc. *)
-            Obj.magic(fun n ->
-              collect (dctext1 acc
-                         (Int64.format format_spec n))
-                (succ j'))
-	| 'l' ->
-	    if j != i + 1 then invalid_arg ("dprintf: unimplemented format " 
-					    ^ (String.sub format i (j-i+1)));
-	    let j' = succ j in (* eat the d,i,x etc. *)
-	    let format_spec = "% " in
-	    String.set format_spec 1 (fget j'); (* format_spec = "%x", etc. *)
-            Obj.magic(fun n ->
-              collect (dctext1 acc
-                         (Int32.format format_spec n))
-                (succ j'))
-	| 'n' ->
-	    if j != i + 1 then invalid_arg ("dprintf: unimplemented format " 
-					    ^ (String.sub format i (j-i+1)));
-	    let j' = succ j in (* eat the d,i,x etc. *)
-	    let format_spec = "% " in
-	    String.set format_spec 1 (fget j'); (* format_spec = "%x", etc. *)
-            Obj.magic(fun n ->
-              collect (dctext1 acc
-                         (Nativeint.format format_spec n))
-                (succ j'))
-        | 'f' | 'e' | 'E' | 'g' | 'G' ->
-            Obj.magic(fun f ->
-              collect (dctext1 acc
-                         (format_float (String.sub format i (j-i+1)) f))
-                (succ j))
-        | 'b' | 'B' ->
-            Obj.magic(fun b ->
-              collect (dctext1 acc (string_of_bool b)) (succ j))
-        | 'a' ->
-            Obj.magic(fun pprinter arg ->
-              collect (dconcat acc (pprinter () arg)) (succ j))
-        | 't' ->
-            Obj.magic(fun pprinter ->
-              collect (dconcat acc (pprinter ())) (succ j))
-        | c ->
-            invalid_arg ("dprintf: unknown format %s" ^ String.make 1 c)
-
-      end else if c = '@' then begin
-        if i + 1 < flen then begin
-          match fget (succ i) with
-
-                                        (* Now the special format characters *)
-            '[' ->                      (* align *)
-              let newacc = 
-                if !alignDepth > !printDepth then
-                  acc
-                else if !alignDepth = !printDepth then
-                  CText(acc, "...")
-                else
-                  acc ++ align
-              in
-              incr alignDepth;
-              collect newacc (i + 2)
-                
-          | ']' ->                        (* unalign *)
-              decr alignDepth;
-              let newacc = 
-                if !alignDepth >= !printDepth then
-                  acc
-                else
-                  acc ++ unalign
-              in
-              collect newacc (i + 2)
-          | '!' ->                        (* hard-line break *)
-              collect (dconcat acc line) (i + 2)
-          | '?' ->                        (* soft line break *)
-              collect (dconcat acc (break)) (i + 2)
-          | '<' -> 
-              collect (dconcat acc mark) (i +1)
-          | '>' -> 
-              collect (dconcat acc unmark) (i +1)
-	  | '^' ->                        (* left-flushed *)
-	      collect (dconcat acc (leftflush)) (i + 2)
-          | '@' -> 
-              collect (dctext1 acc "@") (i + 2)
-          | c ->
-              invalid_arg ("dprintf: unknown format @" ^ String.make 1 c)
-        end else
-          invalid_arg "dprintf: incomplete format @"
-      end else if c = '\n' then begin
-        collect (dconcat acc line) (i + 1)
-      end else
-        literal acc i
-    end
-
-  and skip_args j =
-    match String.unsafe_get format j with
-      '0' .. '9' | ' ' | '.' | '-' -> skip_args (succ j)
-    | c -> j
-
-  in
-  collect Nil 0
-
-let withPrintDepth dp thunk = 
-  let opd = !printDepth in
-  printDepth := dp;
-  thunk ();
-  printDepth := opd
-
-
-
-let flushOften = ref false
-
-let dprintf format     = gprintf (fun x -> x) format
-let fprintf chn format = 
-  let f d = fprint chn 80 d; d in
-	(* weimeric hack begins -- flush output to streams *)
-  let res = gprintf f format in
-	(* save the value we would have returned, flush the channel and then 
-         * return it -- this allows us to see debug input near infinite loops 
-         * *)
-  if !flushOften then flush chn;
-  res
-	(* weimeric hack ends *)
-
-let printf format = fprintf stdout format
-let eprintf format = fprintf stderr format
-
-
-
-(******************************************************************************)
-let getAlgoName = function
-    George -> "George"
-  | Aman   -> "Aman"
-  | Gap    -> "Gap"
-
-let getAboutString () : string =
-  "(Pretty: ALGO=" ^ (getAlgoName algo) ^ ")"
-
-
-(************************************************)
-let auto_printer (typ: string) = 
-  failwith ("Pretty.auto_printer \"" ^ typ ^ "\" only works with you use -pp \"camlp4o pa_prtype.cmo\" when you compile")
diff --git a/cil/ocamlutil/pretty.mli b/cil/ocamlutil/pretty.mli
deleted file mode 100644
index 5422432d1..000000000
--- a/cil/ocamlutil/pretty.mli
+++ /dev/null
@@ -1,316 +0,0 @@
-(*
- *
- * Copyright (c) 2001 by
- *  George C. Necula	necula@cs.berkeley.edu
- *  Scott McPeak        smcpeak@cs.berkeley.edu
- *  Wes Weimer          weimer@cs.berkeley.edu
- *   
- * All rights reserved.  Permission to use, copy, modify and distribute
- * this software for research purposes only is hereby granted, 
- * provided that the following conditions are met: 
- * 1. Redistributions of source code must retain the above copyright notice, 
- * this list of conditions and the following disclaimer. 
- * 2. Redistributions in binary form must reproduce the above copyright notice, 
- * this list of conditions and the following disclaimer in the documentation 
- * and/or other materials provided with the distribution. 
- * 3. The name of the authors may not be used to endorse or promote products 
- * derived from  this software without specific prior written permission. 
- *
- * DISCLAIMER:
- * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR 
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
- * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS 
- * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
- * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- *)
-
-(** Utility functions for pretty-printing. The major features provided by 
-    this module are 
-- An [fprintf]-style interface with support for user-defined printers
-- The printout is fit to a width by selecting some of the optional newlines
-- Constructs for alignment and indentation
-- Print ellipsis starting at a certain nesting depth
-- Constructs for printing lists and arrays
-
- Pretty-printing occurs in two stages:
-- Construct a {!Pretty.doc} object that encodes all of the elements to be 
-  printed 
-  along with alignment specifiers and optional and mandatory newlines
-- Format the {!Pretty.doc} to a certain width and emit it as a string, to an 
-  output stream or pass it to a user-defined function
-
- The formatting algorithm is not optimal but it does a pretty good job while 
- still operating in linear time. The original version was based on a pretty 
- printer by Philip Wadler which turned out to not scale to large jobs. 
-*)
-
-(** API *)
-
-(** The type of unformated documents. Elements of this type can be 
- * constructed in two ways. Either with a number of constructor shown below, 
- * or using the {!Pretty.dprintf} function with a [printf]-like interface. 
- * The {!Pretty.dprintf} method is slightly slower so we do not use it for 
- * large jobs such as the output routines for a compiler. But we use it for 
- * small jobs such as logging and error messages. *)
-type doc
-
-
-
-(** Constructors for the doc type. *)
-
-
-
-
-(** Constructs an empty document *)
-val nil          : doc
-
-
-(** Concatenates two documents. This is an infix operator that associates to 
-    the left. *)
-val (++)         : doc -> doc -> doc 
-val concat       : doc -> doc -> doc
-
-(** A document that prints the given string *)
-val text         : string -> doc
-
-
-(** A document that prints an integer in decimal form *)
-val num          : int    -> doc
-
-
-(** A document that prints a real number *)
-val real         : float  -> doc
-
-(** A document that prints a character. This is just like {!Pretty.text}
-    with a one-character string. *)
-val chr          : char   -> doc
-
-
-(** A document that consists of a mandatory newline. This is just like [(text
-    "\n")]. The new line will be indented to the current indentation level,
-    unless you use {!Pretty.leftflush} right after this. *)
-val line         : doc
-
-(** Use after a {!Pretty.line} to prevent the indentation. Whatever follows 
- * next will be flushed left. Indentation resumes on the next line. *)
-val leftflush    : doc
-
-
-(** A document that consists of either a space or a line break. Also called
-    an optional line break. Such a break will be
-    taken only if necessary to fit the document in a given width. If the break
-    is not taken a space is printed instead. *)
-val break: doc
-
-(** Mark the current column as the current indentation level. Does not print
-    anything. All taken line breaks will align to this column. The previous
-    alignment level is saved on a stack. *)
-val align: doc
-
-(** Reverts to the last saved indentation level. *)
-val unalign: doc
-
-
-(** Mark the beginning of a markup section. The width of a markup section is 
- * considered 0 for the purpose of computing identation *)
-val mark: doc
-
-(** The end of a markup section *)
-val unmark: doc
-
-(************* Now some syntactic sugar *****************)
-(** Syntactic sugar *)
-
-(** Indents the document. Same as [((text "  ") ++ align ++ doc ++ unalign)],
-    with the specified number of spaces. *)
-val indent: int -> doc -> doc
-
-(** Prints a document as markup. The marked document cannot contain line 
- * breaks or alignment constructs. *)
-val markup: doc -> doc
-
-(** Formats a sequence. [sep] is a separator, [doit] is a function that 
- * converts an element to a document. *)
-val seq: sep:doc -> doit:('a ->doc) -> elements:'a list -> doc
-
-
-(** An alternative function for printing a list. The [unit] argument is there 
- * to make this function more easily usable with the {!Pretty.dprintf} 
- * interface. The first argument is a separator, by default a comma. *)
-val docList: ?sep:doc -> ('a -> doc) -> unit -> 'a list -> doc
-
-(** sm: Yet another list printer.  This one accepts the same kind of
-  * printing function that {!Pretty.dprintf} does, and itself works 
-  * in the dprintf context.  Also accepts
-  * a string as the separator since that's by far the most common.  *)
-val d_list: string -> (unit -> 'a -> doc) -> unit -> 'a list -> doc
-
-(** Formats an array. A separator and a function that prints an array
-    element. The default separator is a comma. *)
-val docArray: ?sep:doc -> (int -> 'a -> doc) -> unit -> 'a array -> doc
-
-(** Prints an ['a option] with [None] or [Some] *)
-val docOpt: ('a -> doc) -> unit -> 'a option -> doc
-
-
-(** Print an int32 *)
-val d_int32: int32 -> doc
-val f_int32: unit -> int32 -> doc
-
-val d_int64: int64 -> doc
-val f_int64: unit -> int64 -> doc
-
-(** Format maps. *)
-module MakeMapPrinter :
-  functor (Map: sig
-                  type key
-                  type 'a t
-                  val fold : (key -> 'a -> 'b -> 'b) -> 'a t -> 'b -> 'b
-                end) ->
-sig
-    (** Format a map, analogous to docList. *)
-    val docMap: ?sep:doc -> (Map.key -> 'a -> doc) -> unit -> 'a Map.t -> doc
-
-    (** Format a map, analogous to d_list. *)
-    val d_map: ?dmaplet:(doc -> doc -> doc)
-               -> string
-               -> (unit -> Map.key -> doc)
-               -> (unit -> 'a -> doc)
-               -> unit
-               -> 'a Map.t
-               -> doc
-  end
-
-(** Format sets. *)
-module MakeSetPrinter :
-  functor (Set: sig 
-                  type elt
-                  type t
-                  val fold : (elt -> 'a -> 'a) -> t -> 'a -> 'a
-                end) ->
-sig
-    (** Format a set, analogous to docList. *)
-    val docSet: ?sep:doc -> (Set.elt -> doc) -> unit -> Set.t -> doc
-
-    (** Format a set, analogous to d_list. *)
-    val d_set: string
-               -> (unit -> Set.elt -> doc)
-               -> unit
-               -> Set.t
-               -> doc
-end
-
-(** A function that is useful with the [printf]-like interface *)
-val insert: unit -> doc -> doc
-
-val dprintf: ('a, unit, doc, doc) format4 -> 'a  
-(** This function provides an alternative method for constructing 
-    [doc] objects. The first argument for this function is a format string 
-    argument (of type [('a, unit, doc) format]; if you insist on 
-    understanding what that means see the module [Printf]). The format string 
-    is like that for the [printf] function in C, except that it understands a 
-    few more formatting controls, all starting with the @ character. 
-
-    See the gprintf function if you want to pipe the result of dprintf into 
-    some other functions.
-
- The following special formatting characters are understood (these do not 
- correspond to arguments of the function):
--  @\[ Inserts an {!Pretty.align}. Every format string must have matching 
-        {!Pretty.align} and {!Pretty.unalign}. 
--  @\] Inserts an {!Pretty.unalign}.
--  @!  Inserts a {!Pretty.line}. Just like "\n"
--  @?  Inserts a {!Pretty.break}.
--  @<  Inserts a {!Pretty.mark}. 
--  @>  Inserts a {!Pretty.unmark}.
--  @^  Inserts a {!Pretty.leftflush}
-       Should be used immediately after @! or "\n".
--  @@ : inserts a @ character
-
- In addition to the usual [printf] % formatting characters the following two 
- new characters are supported:
-- %t Corresponds to an argument of type [unit -> doc]. This argument is 
-     invoked to produce a document
-- %a Corresponds to {b two} arguments. The first of type [unit -> 'a -> doc] 
-     and the second of type ['a]. (The extra [unit] is do to the 
-     peculiarities of the built-in support for format strings in Ocaml. It 
-     turns out that it is not a major problem.) Here is an example of how 
-     you use this:
-
-{v dprintf "Name=%s, SSN=%7d, Children=\@\[%a\@\]\n"
-             pers.name pers.ssn (docList (chr ',' ++ break) text)
-             pers.children v}
-
- The result of [dprintf] is a {!Pretty.doc}. You can format the document and 
- emit it using the functions {!Pretty.fprint} and {!Pretty.sprint}.
-
-*)
-
-(** Like {!Pretty.dprintf} but more general. It also takes a function that is 
- * invoked on the constructed document but before any formatting is done. The 
- * type of the format argument means that 'a is the type of the parameters of 
- * this function, unit is the type of the first argument to %a and %t 
- * formats, doc is the type of the intermediate result, and 'b is the type of 
- * the result of gprintf. *)
-val gprintf: (doc -> 'b) -> ('a, unit, doc, 'b) format4 -> 'a
-
-(** Format the document to the given width and emit it to the given channel *)
-val fprint: out_channel -> width:int -> doc -> unit
-
-(** Format the document to the given width and emit it as a string *)
-val sprint: width:int -> doc -> string
-
-(** Like {!Pretty.dprintf} followed by {!Pretty.fprint} *)
-val fprintf: out_channel -> ('a, unit, doc) format -> 'a  
-
-(** Like {!Pretty.fprintf} applied to [stdout] *)
-val printf: ('a, unit, doc) format -> 'a 
-
-(** Like {!Pretty.fprintf} applied to [stderr] *)
-val eprintf: ('a, unit, doc) format -> 'a 
-
-                                                                     
-(* sm: arg!  why can't I write this function?! *)
-(* * Like {!Pretty.dprintf} but yielding a string with no newlines *)
-(*val sprintf: (doc, unit, doc) format -> string*)
-
-(* sm: different tack.. *)
-(* doesn't work either.  well f it anyway *)
-(*val failwithf: ('a, unit, doc) format -> 'a*)
-
-
-(** Invokes a thunk, with printDepth temporarily set to the specified value *)
-val withPrintDepth : int -> (unit -> unit) -> unit
-
-(** The following variables can be used to control the operation of the printer *)
-
-(** Specifies the nesting depth of the [align]/[unalign] pairs at which 
-    everything is replaced with ellipsis *)
-val printDepth   : int ref
-
-val printIndent  : bool ref  (** If false then does not indent *)
-
-
-(** If set to [true] then optional breaks are taken only when the document 
-    has exceeded the given width. This means that the printout will looked 
-    more ragged but it will be faster *)
-val fastMode  : bool ref 
-
-val flushOften   : bool ref  (** If true the it flushes after every print *)
-
-
-(** Keep a running count of the taken newlines. You can read and write this 
-  * from the client code if you want *)
-val countNewLines : int ref
-
-
-(** A function that when used at top-level in a module will direct 
- * the pa_prtype module generate automatically the printing functions for a 
- * type *)
-val auto_printer: string -> 'b
diff --git a/cil/ocamlutil/stats.ml b/cil/ocamlutil/stats.ml
deleted file mode 100644
index 8bbb7d05d..000000000
--- a/cil/ocamlutil/stats.ml
+++ /dev/null
@@ -1,146 +0,0 @@
-(* The following functions are implemented in perfcount.c *) 
-
-(* Returns true is we have the performance counters *)
-external has_performance_counters: unit -> bool = "has_performance_counters"
-
-(* Returns number of seconds since the first read *)
-external read_pentium_perfcount : unit -> float = "read_pentium_perfcount"
-
-(* Returns current cycle counter, divided by 1^20, and truncated to 30 bits *)
-external sample_pentium_perfcount_20 : unit -> int = "sample_pentium_perfcount_20"
-
-(* Returns current cycle counter, divided by 1^10, and truncated to 30 bits *)
-external sample_pentium_perfcount_10 : unit -> int = "sample_pentium_perfcount_10"
-
-
-(* Whether to use the performance counters (on Pentium only) *)
-
-(* The performance counters are disabled by default. *)
-let do_use_performance_counters = ref false
-
-                                        (* A hierarchy of timings *)
-
-type t = { name : string;
-           mutable time : float; (* In seconds *)
-           mutable sub  : t list}
-
-                                        (* Create the top level *)
-let top = { name = "TOTAL";
-            time = 0.0;
-            sub  = []; }
-
-                                        (* The stack of current path through 
-                                         * the hierarchy. The first is the 
-                                         * leaf. *)
-let current : t list ref = ref [top]
-
-exception NoPerfCount
-let reset (perfcount: bool) = 
-  top.sub <- [];
-  if perfcount then begin
-    if not (has_performance_counters ()) then begin
-      raise NoPerfCount
-    end
-  end;
-  do_use_performance_counters := perfcount
-
-
-
-let print chn msg = 
-  (* Total up *)
-  top.time <- List.fold_left (fun sum f -> sum +. f.time) 0.0 top.sub;
-  let rec prTree ind node = 
-    if !do_use_performance_counters then 
-      (Printf.fprintf chn "%s%-20s          %8.5f s\n" 
-         (String.make ind ' ') node.name node.time)
-    else
-      (Printf.fprintf chn "%s%-20s          %6.3f s\n" 
-         (String.make ind ' ') node.name node.time);
-
-   List.iter (prTree (ind + 2)) (List.rev node.sub)
-  in
-  Printf.fprintf chn "%s" msg; 
-  List.iter (prTree 0) [ top ];
-  Printf.fprintf chn "Timing used %s\n"
-    (if !do_use_performance_counters then "Pentium performance counters"
-     else "Unix.time");
-  let gc = Gc.quick_stat () in 
-  let printM (w: float) : string = 
-    Printf.sprintf "%.2fMb" (w *. 4.0 /. 1000000.0)
-  in
-  Printf.fprintf chn 
-    "Memory statistics: total=%s, max=%s, minor=%s, major=%s, promoted=%s\n    minor collections=%d  major collections=%d compactions=%d\n"
-    (printM (gc.Gc.minor_words +. gc.Gc.major_words 
-               -. gc.Gc.promoted_words))
-    (printM (float_of_int gc.Gc.top_heap_words))
-    (printM gc.Gc.minor_words)
-    (printM gc.Gc.major_words)
-    (printM gc.Gc.promoted_words)
-    gc.Gc.minor_collections
-    gc.Gc.major_collections
-    gc.Gc.compactions;
-    
-  ()
-        
-  
-
-(* Get the current time, in seconds *)
-let get_current_time () : float = 
-  if !do_use_performance_counters then 
-    read_pentium_perfcount ()
-  else
-    (Unix.times ()).Unix.tms_utime
-
-let repeattime limit str f arg = 
-                                        (* Find the right stat *)
-  let stat : t = 
-    let curr = match !current with h :: _ -> h | _ -> assert false in
-    let rec loop = function
-        h :: _ when h.name = str -> h
-      | _ :: rest -> loop rest
-      | [] -> 
-          let nw = {name = str; time = 0.0; sub = []} in
-          curr.sub <- nw :: curr.sub;
-          nw
-    in
-    loop curr.sub
-  in
-  let oldcurrent = !current in
-  current := stat :: oldcurrent;
-  let start = get_current_time () in
-  let rec repeatf count = 
-    let res   = f arg in
-    let diff = get_current_time () -. start in
-    if diff < limit then
-      repeatf (count + 1)
-    else begin
-      stat.time <- stat.time +. (diff /. float(count));
-      current := oldcurrent;                (* Pop the current stat *)
-      res                                   (* Return the function result *)
-    end
-  in
-  repeatf 1
-
-
-let time str f arg = repeattime 0.0 str f arg
-    
-
-let lastTime = ref 0.0
-let timethis (f: 'a -> 'b) (arg: 'a) : 'b = 
-  let start = get_current_time () in
-  let res = f arg in 
-  lastTime := get_current_time () -. start; 
-  res
-  
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/cil/ocamlutil/stats.mli b/cil/ocamlutil/stats.mli
deleted file mode 100644
index 9ed98e56a..000000000
--- a/cil/ocamlutil/stats.mli
+++ /dev/null
@@ -1,72 +0,0 @@
-(*
- *
- * Copyright (c) 2001 by
- *  George C. Necula	necula@cs.berkeley.edu
- *  Scott McPeak        smcpeak@cs.berkeley.edu
- *  Wes Weimer          weimer@cs.berkeley.edu
- *   
- * All rights reserved.  Permission to use, copy, modify and distribute
- * this software for research purposes only is hereby granted, 
- * provided that the following conditions are met: 
- * 1. Redistributions of source code must retain the above copyright notice, 
- * this list of conditions and the following disclaimer. 
- * 2. Redistributions in binary form must reproduce the above copyright notice, 
- * this list of conditions and the following disclaimer in the documentation 
- * and/or other materials provided with the distribution. 
- * 3. The name of the authors may not be used to endorse or promote products 
- * derived from  this software without specific prior written permission. 
- *
- * DISCLAIMER:
- * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR 
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
- * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS 
- * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
- * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- *)
-
-(** Utilities for maintaining timing statistics *)
-
-(** Resets all the timings. Invoke with "true" if you want to switch to using 
- * the hardware performance counters from now on. You get an exception if 
- * there are not performance counters available *)
-val reset: bool -> unit
-exception NoPerfCount
-
-(** Check if we have performance counters *)
-val has_performance_counters: unit -> bool
-                           
-(** Sample the current cycle count, in megacycles. *)
-val sample_pentium_perfcount_20: unit -> int
-
-(** Sample the current cycle count, in kilocycles. *)
-val sample_pentium_perfcount_10: unit -> int
-
-(** Time a function and associate the time with the given string. If some
-    timing information is already associated with that string, then accumulate
-    the times. If this function is invoked within another timed function then
-    you can have a hierarchy of timings *)
-val time : string -> ('a -> 'b) -> 'a -> 'b 
-
-(** repeattime is like time but runs the function several times until the total
-    running time is greater or equal to the first argument. The total time is
-    then divided by the number of times the function was run. *)
-val repeattime : float -> string -> ('a -> 'b) -> 'a -> 'b
-
-(** Print the current stats preceeded by a message *)
-val print : out_channel -> string -> unit
-
-
-
-(** Time a function and set lastTime to the time it took *)
-val lastTime: float ref
-val timethis: ('a -> 'b) -> 'a -> 'b
-
-
-
-
diff --git a/cil/ocamlutil/trace.ml b/cil/ocamlutil/trace.ml
deleted file mode 100644
index b42928657..000000000
--- a/cil/ocamlutil/trace.ml
+++ /dev/null
@@ -1,169 +0,0 @@
-(*
- *
- * Copyright (c) 2001-2002, 
- *  George C. Necula    <necula@cs.berkeley.edu>
- *  Scott McPeak        <smcpeak@cs.berkeley.edu>
- *  Wes Weimer          <weimer@cs.berkeley.edu>
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. The names of the contributors may not be used to endorse or promote
- * products derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
- * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
- * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- *)
-
-(* Trace module implementation
- * see trace.mli
- *)
-
-open Pretty;;
-
-
-(* --------- traceSubsystems --------- *)
-(* this is the list of tags (usually subsystem names) for which
- * trace output will appear *)
-let traceSubsystems : string list ref = ref [];;
-
-
-let traceAddSys (subsys : string) : unit =
-  (* (ignore (printf "traceAddSys %s\n" subsys)); *)
-  traceSubsystems := subsys :: !traceSubsystems
-;;
-
-
-let traceActive (subsys : string) : bool =
-  (* (List.mem elt list) returns true if something in list equals ('=') elt *)
-  (List.mem subsys !traceSubsystems)
-;;
-
-
-let rec parseString (str : string) (delim : char) : string list =
-begin
-  if (not (String.contains str delim)) then 
-    if ((String.length str) = 0) then
-      [] 
-    else
-      [str]
-
-  else
-    let d = ((String.index str delim) + 1) in
-    if (d = 1) then
-      (* leading delims are eaten *)
-      (parseString (String.sub str d ((String.length str) - d)) delim)
-    else
-      (String.sub str 0 (d-1)) ::
-        (parseString (String.sub str d ((String.length str) - d)) delim)
-end;;
-
-let traceAddMulti (systems : string) : unit =
-begin
-  let syslist = (parseString systems ',') in
-  (List.iter traceAddSys syslist)
-end;;
-
-
-
-(* --------- traceIndent --------- *)
-let traceIndentLevel : int ref = ref 0;;
-
-
-let traceIndent (sys : string) : unit =
-  if (traceActive sys) then
-    traceIndentLevel := !traceIndentLevel + 2
-;;
-
-let traceOutdent (sys : string) : unit =
-  if ((traceActive sys) &&
-      (!traceIndentLevel >= 2)) then
-    traceIndentLevel := !traceIndentLevel - 2
-;;
-
-
-(* --------- trace --------- *)
-(* return a tag to prepend to a trace output
- * e.g. "  %%% mysys: "
- *)
-let traceTag (sys : string) : Pretty.doc =
-  (* return string of 'i' spaces *)
-  let rec ind (i : int) : string =
-    if (i <= 0) then
-      ""
-    else
-      " " ^ (ind (i-1))
-
-  in
-  (text ((ind !traceIndentLevel) ^ "%%% " ^ sys ^ ": "))
-;;
-
-
-(* this is the trace function; its first argument is a string
- * tag, and subsequent arguments are like printf formatting
- * strings ("%a" and whatnot) *)
-let trace
-    (subsys : string)                   (* subsystem identifier for enabling tracing *)
-    (d : Pretty.doc)                    (* something made by 'dprintf' *)
-    : unit =                            (* no return value *)
-  (* (ignore (printf "trace %s\n" subsys)); *)
-
-  (* see if the subsystem's tracing is turned on *)
-  if (traceActive subsys) then
-    begin
-      (fprint stderr 80			(* print it *)
-         ((traceTag subsys) ++ d));	(* with prepended subsys tag *)
-      (* mb: flush after every message; useful if the program hangs in an
-	 infinite loop... *)
-      (flush stderr)
-    end
-  else
-    ()			                         (* eat it *)
-;;
-
-
-let tracei (sys : string) (d : Pretty.doc) : unit =
-  (* trace before indent *)
-  (trace sys d);
-  (traceIndent sys)
-;;
-
-let traceu (sys : string) (d : Pretty.doc) : unit =
-  (* trace after outdent *)
-  (* no -- I changed my mind -- I want trace *then* outdent *)
-  (trace sys d);
-  (traceOutdent sys)
-;;
-
-
-
-
-(* -------------------------- trash --------------------- *)
-(* TRASH START
-
-(* sm: more experimenting *)
-(trace "no" (dprintf "no %d\n" 5));
-(trace "yes" (dprintf "yes %d\n" 6));
-(trace "maybe" (dprintf "maybe %d\n" 7));
-
-TRASH END *)
diff --git a/cil/ocamlutil/trace.mli b/cil/ocamlutil/trace.mli
deleted file mode 100644
index 46ca6523b..000000000
--- a/cil/ocamlutil/trace.mli
+++ /dev/null
@@ -1,106 +0,0 @@
-(*
- *
- * Copyright (c) 2001-2002, 
- *  George C. Necula    <necula@cs.berkeley.edu>
- *  Scott McPeak        <smcpeak@cs.berkeley.edu>
- *  Wes Weimer          <weimer@cs.berkeley.edu>
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. The names of the contributors may not be used to endorse or promote
- * products derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
- * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
- * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- *)
-
-(* Trace module
- * Scott McPeak, 5/4/00
- *
- * The idea is to pepper the source with debugging printfs,
- * and be able to select which ones to actually display at
- * runtime.
- *
- * It is built on top of the Pretty module for printing data
- * structures.
- *
- * To a first approximation, this is needed to compensate for
- * the lack of a debugger that does what I want...
- *)
-
-
-(* this is the list of tags (usually subsystem names) for which
- * trace output will appear *)
-val traceSubsystems : string list ref
-
-(* interface to add a new subsystem to trace (slightly more
- * convenient than direclty changing 'tracingSubsystems') *)
-val traceAddSys : string -> unit
-
-(* query whether a particular subsystem is being traced *)
-val traceActive : string -> bool
-   
-(* add several systems, separated by commas *)
-val traceAddMulti : string -> unit
-
-
-(* current indentation level for tracing *)
-val traceIndentLevel : int ref
-
-(* bump up or down the indentation level, if the given subsys
- * is being traced *)
-val traceIndent : string -> unit
-val traceOutdent : string -> unit
-
-
-(* this is the trace function; its first argument is a string
- * tag, and second argument is a 'doc' (which is what 'dprintf'
- * returns).
- *
- * so a sample usage might be
- *   (trace "mysubsys" (dprintf "something neat happened %d times\n" counter))
- *)
-val trace : string -> Pretty.doc -> unit
-
-
-(* special flavors that indent/outdent as well.  the indent version
- * indents *after* printing, while the outdent version outdents
- * *before* printing.  thus, a sequence like
- *
- *   (tracei "foo" (dprintf "beginning razzle-dazzle\n"))
- *     ..razzle..
- *     ..dazzle..
- *   (traceu "foo" (dprintf "done with razzle-dazzle\n"))
- *
- * will do the right thing
- *
- * update -- I changed my mind!  I decided I prefer it like this
- *   %%% sys: (myfunc args)
- *     %%% ...inner stuff...
- *     %%% sys: myfunc returning 56
- *
- * so now they both print before in/outdenting
- *)
-val tracei : string -> Pretty.doc -> unit
-val traceu : string -> Pretty.doc -> unit
diff --git a/cil/ocamlutil/util.ml b/cil/ocamlutil/util.ml
deleted file mode 100755
index e6c2c6791..000000000
--- a/cil/ocamlutil/util.ml
+++ /dev/null
@@ -1,815 +0,0 @@
-(** Utility functions for Coolaid *)
-module E = Errormsg
-module H = Hashtbl
-module IH = Inthash
-
-open Pretty
-
-exception GotSignal of int
-
-let withTimeout (secs: float) (* Seconds for timeout *)
-                (handler: int -> 'b) (* What to do if we have a timeout. The 
-                                        * argument passed is the signal number 
-                                        * received. *)
-                (f: 'a -> 'b) (* The function to run *)
-                (arg: 'a) (* And its argument *)
-   : 'b = 
-  let oldHandler = 
-    Sys.signal Sys.sigalrm 
-      (Sys.Signal_handle 
-         (fun i -> 
-           ignore (E.log "Got signal %d\n" i);
-           raise (GotSignal i)))
-  in
-  let reset_sigalrm () = 
-    ignore (Unix.setitimer Unix.ITIMER_REAL { Unix.it_value = 0.0;
-                                              Unix.it_interval = 0.0;});
-    Sys.set_signal Sys.sigalrm oldHandler;
-  in
-  ignore (Unix.setitimer Unix.ITIMER_REAL 
-            { Unix.it_value    = secs;
-              Unix.it_interval = 0.0;});
-  (* ignore (Unix.alarm 2); *)
-  try
-    let res = f arg in 
-    reset_sigalrm ();
-    res
-  with exc -> begin
-    reset_sigalrm ();
-    ignore (E.log "Got an exception\n");
-    match exc with 
-      GotSignal i -> 
-        handler i
-    | _ -> raise exc
-  end
-
-(** Print a hash table *)
-let docHash ?(sep=chr ',') (one: 'a -> 'b -> doc) () (h: ('a, 'b) H.t) = 
-  (H.fold 
-     (fun key data acc -> 
-       if acc == align then acc ++ one key data
-       else acc ++ sep ++ one key data)
-     h
-     align) ++ unalign
-    
-
-
-let hash_to_list (h: ('a, 'b) H.t) : ('a * 'b) list =
-  H.fold
-    (fun key data acc -> (key, data) :: acc)
-    h
-    []
-
-let keys (h: ('a, 'b) H.t) : 'a list =
-  H.fold
-    (fun key data acc -> key :: acc)
-    h
-    []
-
-let hash_copy_into (hfrom: ('a, 'b) H.t) (hto: ('a, 'b) H.t) : unit = 
-  H.clear hto;
-  H.iter (H.add hto) hfrom
-
-let anticompare a b = compare b a
-;;
-
-
-let rec list_drop (n : int) (xs : 'a list) : 'a list =
-  if n < 0 then invalid_arg "Util.list_drop";
-  if n = 0 then 
-    xs
-  else begin 
-    match xs with
-    | [] -> invalid_arg "Util.list_drop"
-    | y::ys -> list_drop (n-1) ys
-  end
-
-let list_droptail (n : int) (xs : 'a list) : 'a list =
-  if n < 0 then invalid_arg "Util.list_droptail";
-  let (ndrop,r) =
-    List.fold_right
-      (fun x (ndrop,acc) ->
-	if ndrop = 0 then (ndrop, x :: acc)
-	else (ndrop-1, acc))
-      xs
-      (n,[])
-  in
-  if ndrop > 0 then invalid_arg "Util.listdroptail"
-  else r
-
-let rec list_span (p : 'a -> bool) (xs : 'a list) : 'a list * 'a list = 
-  begin match xs with
-  | [] -> ([],[])
-  | x::xs' -> 
-      if p x then
-        let (ys,zs) = list_span p xs' in (x::ys,zs)
-      else ([],xs)
-  end
-;;
-
-let rec list_rev_append revxs ys =
-  begin match revxs with
-  | [] -> ys
-  | x::xs -> list_rev_append xs (x::ys)
-  end
-;;
-let list_insert_by (cmp : 'a -> 'a -> int) 
-    (x : 'a) (xs : 'a list) : 'a list =
-  let rec helper revhs ts =
-    begin match ts with
-    | [] -> List.rev (x::revhs)
-    | t::ts' -> 
-        if cmp x t >= 0 then helper (t::revhs) ts'
-        else list_rev_append (x::revhs) ts
-    end
-  in
-  helper [] xs
-;;
-
-let list_head_default (d : 'a) (xs : 'a list) : 'a =
-  begin match xs with
-  | [] -> d
-  | x::_ -> x
-  end
-;;
-
-let rec list_iter3 f xs ys zs =
-  begin match xs, ys, zs with
-  | [], [], [] -> ()
-  | x::xs, y::ys, z::zs -> f x y z; list_iter3 f xs ys zs
-  | _ -> invalid_arg "Util.list_iter3"
-  end
-;;
-  
-let rec get_some_option_list (xs : 'a option list) : 'a list =
-  begin match xs with
-  | [] -> []
-  | None::xs  -> get_some_option_list xs
-  | Some x::xs -> x :: get_some_option_list xs
-  end
-;;
-
-(* tail-recursive append: reverses xs twice *)
-let list_append (xs: 'a list) (ys: 'a list): 'a list =
-  match xs with (* optimize some common cases *)
-      [] -> ys
-    | [x] -> x::ys
-    | _ -> list_rev_append (List.rev xs) ys
-
-let list_iteri (f: int -> 'a -> unit) (l: 'a list) : unit = 
-  let rec loop (i: int) (l: 'a list) : unit = 
-    match l with 
-      [] -> ()
-    | h :: t -> f i h; loop (i + 1) t
-  in
-  loop 0 l
-
-let list_mapi (f: int -> 'a -> 'b) (l: 'a list) : 'b list = 
-  let rec loop (i: int) (l: 'a list) : 'b list = 
-    match l with 
-      [] -> []
-    | h :: t -> 
-	let headres = f i h in
-	headres :: loop (i + 1) t
-  in
-  loop 0 l
-
-let list_fold_lefti (f: 'acc -> int -> 'a -> 'acc) (start: 'acc) 
-                   (l: 'a list) : 'acc = 
-  let rec loop (i, acc) l = 
-    match l with
-      [] -> acc
-    | h :: t -> loop (i + 1, f acc i h) t
-  in
-  loop (0, start) l
-
-
-let list_init (len : int) (init_fun : int -> 'a) : 'a list =
-  let rec loop n acc =
-    if n < 0 then acc
-    else loop (n-1) ((init_fun n)::acc)
-  in
-  loop (len - 1) []
-;;
-
-
-let rec list_find_first (l: 'a list) (f: 'a -> 'b option) : 'b option = 
-  match l with 
-    [] -> None
-  | h :: t -> begin
-      match f h with 
-        None -> list_find_first t f
-      | r -> r
-  end
-  
-(** Generates the range of integers starting with a and ending with b *)
-let int_range_list (a: int) (b: int) = 
-  list_init (b - a + 1) (fun i -> a + i)
-
-
-(** Some handling of registers *)
-type 'a growArrayFill =
-    Elem of 'a
-  | Susp of (int -> 'a)
-
-type 'a growArray = {
-            gaFill: 'a growArrayFill;
-            (** Stuff to use to fill in the array as it grows *)
-
-    mutable gaMaxInitIndex: int;
-            (** Maximum index that was written to. -1 if no writes have 
-             * been made.  *)
-
-    mutable gaData: 'a array;
-  } 
-
-let growTheArray (ga: 'a growArray) (len: int) 
-                 (toidx: int) (why: string) : unit = 
-  if toidx >= len then begin
-    (* Grow the array by 50% *)
-    let newlen = toidx + 1 + len  / 2 in
-(*
-    ignore (E.log "growing an array to idx=%d (%s)\n" toidx why);
-*)
-    let data' = begin match ga.gaFill with
-      Elem x ->
-
-	let data'' = Array.create newlen x in
-	Array.blit ga.gaData 0 data'' 0 len;
-	data''
-    | Susp f -> Array.init newlen
-	  (fun i -> if i < len then ga.gaData.(i) else f i)
-    end
-    in
-    ga.gaData <- data'
-  end
-
-let getReg (ga: 'a growArray) (r: int) : 'a = 
-  let len = Array.length ga.gaData in
-  if r >= len then 
-    growTheArray ga len r "get";
-
-  ga.gaData.(r)
-
-let setReg (ga: 'a growArray) (r: int) (what: 'a) : unit = 
-  let len = Array.length ga.gaData in
-  if r >= len then 
-    growTheArray ga len r "set";
-  if r > ga.gaMaxInitIndex then ga.gaMaxInitIndex <- r;
-  ga.gaData.(r) <- what
-
-let newGrowArray (initsz: int) (fill: 'a growArrayFill) : 'a growArray = 
-  { gaFill = fill;
-    gaMaxInitIndex = -1;
-    gaData = begin match fill with
-      Elem x -> Array.create initsz x
-    | Susp f -> Array.init initsz f
-    end; }
-
-let copyGrowArray (ga: 'a growArray) : 'a growArray = 
-  { ga with gaData = Array.copy ga.gaData } 
-
-let deepCopyGrowArray (ga: 'a growArray) (copy: 'a -> 'a): 'a growArray = 
-  { ga with gaData = Array.map copy ga.gaData } 
-
-
-
-(** Iterate over the initialized elements of the array *)
-let growArray_iteri  (f: int -> 'a -> unit) (ga: 'a growArray) = 
-  for i = 0 to ga.gaMaxInitIndex do 
-    f i ga.gaData.(i)
-  done
-
-
-(** Fold left over the initialized elements of the array *)
-let growArray_foldl (f: 'acc -> 'a -> 'acc) 
-                    (acc: 'acc) (ga: 'a growArray) : 'acc = 
-  let rec loop (acc: 'acc) (idx: int) : 'acc = 
-    if idx > ga.gaMaxInitIndex then 
-      acc
-    else
-      loop (f acc ga.gaData.(idx)) (idx + 1)
-  in
-  loop acc 0
-
-
-
-
-let hasPrefix (prefix: string) (what: string) : bool = 
-  let pl = String.length prefix in
-  try String.sub what 0 pl = prefix 
-  with Invalid_argument _ -> false
-
-
-
-let restoreRef ?(deepCopy=(fun x -> x)) (r: 'a ref) : (unit -> unit) = 
-  let old = deepCopy !r in
-  (fun () -> r := old)
-
-let restoreHash ?deepCopy (h: ('a, 'b) H.t) : (unit -> unit) = 
-  let old = 
-    match deepCopy with 
-      None -> H.copy h 
-    | Some f -> 
-        let old = H.create (H.length h) in 
-        H.iter (fun k d -> H.add old k (f d)) h;
-        old
-  in
-  (fun () -> hash_copy_into old h)
-
-let restoreIntHash ?deepCopy (h: 'a IH.t) : (unit -> unit) = 
-  let old = 
-    match deepCopy with 
-      None -> IH.copy h 
-    | Some f -> 
-        let old = IH.create 13 in 
-        IH.iter (fun k d -> IH.add old k (f d)) h;
-        old
-  in
-  (fun () -> 
-    IH.clear old;
-    IH.iter (fun i k -> IH.add old i k) h)
-
-let restoreArray ?deepCopy (a: 'a array) : (unit -> unit) = 
-  let old = Array.copy a in
-  (match deepCopy with 
-    None -> ()
-  | Some f -> Array.iteri (fun i v -> old.(i) <- f v) old);
-  (fun () -> Array.blit old 0 a 0 (Array.length a))
-
-let runThunks (l: (unit -> unit) list) : (unit -> unit) = 
-  fun () -> List.iter (fun f -> f ()) l
-
-
-
-(* Memoize *)
-let memoize (h: ('a, 'b) Hashtbl.t) 
-            (arg: 'a) 
-            (f: 'a -> 'b) : 'b = 
-  try
-    Hashtbl.find h arg
-  with Not_found -> begin
-    let res = f arg in
-    Hashtbl.add h arg res;
-    res
-  end
-
-(* Just another name for memoize *)
-let findOrAdd h arg f = memoize h arg f
-
-(* A tryFinally function *)
-let tryFinally 
-    (main: 'a -> 'b) (* The function to run *)
-    (final: 'b option -> unit)  (* Something to run at the end *)
-    (arg: 'a) : 'b = 
-  try
-    let res: 'b = main arg in
-    final (Some res);
-    res
-  with e -> begin
-    final None;
-    raise e
-  end
-
-
-
-
-let valOf : 'a option -> 'a = function
-    None -> raise (Failure "Util.valOf")
-  | Some x -> x
-
-(**
- * An accumulating for loop.
- *
- * Initialize the accumulator with init.  The current index and accumulator
- * from the previous iteration is passed to f.
- *)
-let fold_for ~(init: 'a) ~(lo: int) ~(hi: int) (f: int -> 'a -> 'a) =
-  let rec forloop i acc =
-    if i > hi then acc
-    else forloop (i+1) (f i acc)
-  in
-  forloop lo init
-
-(************************************************************************)
-
-module type STACK = sig
-  type 'a t
-  (** The type of stacks containing elements of type ['a]. *)
-
-  exception Empty
-  (** Raised when {!Stack.pop} or {!Stack.top} is applied to an empty stack. *)
-
-  val create : unit -> 'a t
-  (** Return a new stack, initially empty. *)
-
-  val push : 'a -> 'a t -> unit
-  (** [push x s] adds the element [x] at the top of stack [s]. *)
-
-  val pop : 'a t -> 'a
-  (** [pop s] removes and returns the topmost element in stack [s],
-     or raises [Empty] if the stack is empty. *)
-
-  val top : 'a t -> 'a
-  (** [top s] returns the topmost element in stack [s],
-     or raises [Empty] if the stack is empty. *)
-  
-  val clear : 'a t -> unit
-  (** Discard all elements from a stack. *)
-  
-  val copy : 'a t -> 'a t
-  (** Return a copy of the given stack. *)
-  
-  val is_empty : 'a t -> bool
-  (** Return [true] if the given stack is empty, [false] otherwise. *)
-  
-  val length : 'a t -> int
-  (** Return the number of elements in a stack. *)
-  
-  val iter : ('a -> unit) -> 'a t -> unit
-  (** [iter f s] applies [f] in turn to all elements of [s],
-     from the element at the top of the stack to the element at the
-     bottom of the stack. The stack itself is unchanged. *)
-end
-
-module Stack = struct
-
-  type 'a t = { mutable length : int;
-                stack : 'a Stack.t; }
-
-  exception Empty
-
-  let create () = { length = 0;
-                    stack = Stack.create(); }
-
-  let push x s =
-    s.length <- s.length + 1;
-    Stack.push x s.stack
-
-  let pop s =
-    s.length <- s.length - 1;
-    Stack.pop s.stack
-
-  let top s =
-    Stack.top s.stack
-
-  let clear s =
-    s.length <- 0;
-    Stack.clear s.stack
-
-  let copy s = { length = s.length;
-		 stack = Stack.copy s.stack; }
-    
-  let is_empty s =
-    Stack.is_empty s.stack
-
-  let length s = s.length
-
-  let iter f s =
-    Stack.iter f s.stack
-
-end
-
-(************************************************************************)
-
-let absoluteFilename (fname: string) = 
-  if Filename.is_relative fname then 
-    Filename.concat (Sys.getcwd ()) fname
-  else
-    fname
-
-
-(* mapNoCopy is like map but avoid copying the list if the function does not 
- * change the elements. *)
-let rec mapNoCopy (f: 'a -> 'a) = function
-    [] -> []
-  | (i :: resti) as li -> 
-      let i' = f i in
-      let resti' = mapNoCopy f resti in
-      if i' != i || resti' != resti then i' :: resti' else li 
-
-let rec mapNoCopyList (f: 'a -> 'a list) = function
-    [] -> []
-  | (i :: resti) as li -> 
-      let il' = f i in
-      let resti' = mapNoCopyList f resti in
-      match il' with
-        [i'] when i' == i && resti' == resti -> li
-      | _ -> il' @ resti'
-
-
-(* Use a filter function that does not rewrite the list unless necessary *)
-let rec filterNoCopy (f: 'a -> bool) (l: 'a list) : 'a list = 
-  match l with 
-    [] -> []
-  | h :: rest when not (f h) -> filterNoCopy f rest 
-  | h :: rest -> 
-      let rest' = filterNoCopy f rest in
-      if rest == rest' then l else h :: rest'
-
-(** Join a list of strings *)
-let rec joinStrings (sep: string) (sl: string list) = 
-  match sl with 
-    [] -> ""
-  | [s1] -> s1
-  | s1 :: ((_ :: _) as rest) -> s1 ^ sep ^ joinStrings sep rest
-
-
-(************************************************************************
-
- Configuration 
-
- ************************************************************************)
-(** The configuration data can be of several types **)
-type configData = 
-    ConfInt of int
-  | ConfBool of bool
-  | ConfFloat of float
-  | ConfString of string
-  | ConfList of configData list
-
-
-(* Store here window configuration file *)
-let configurationData: (string, configData) H.t = H.create 13
-
-let clearConfiguration () = H.clear configurationData
-
-let setConfiguration (key: string) (c: configData) = 
-  H.replace configurationData key c
-
-let findConfiguration (key: string) : configData = 
-  H.find configurationData key 
-
-let findConfigurationInt (key: string) : int = 
-  match findConfiguration key with 
-    ConfInt i -> i
-  | _ -> 
-      ignore (E.warn "Configuration %s is not an integer" key);
-      raise Not_found
-
-let useConfigurationInt (key: string) (f: int -> unit) = 
-  try f (findConfigurationInt key)
-  with Not_found -> ()
-
-let findConfigurationString (key: string) : string = 
-  match findConfiguration key with 
-    ConfString s -> s
-  | _ -> 
-      ignore (E.warn "Configuration %s is not a string" key);
-      raise Not_found
-
-let useConfigurationString (key: string) (f: string -> unit) = 
-  try f (findConfigurationString key)
-  with Not_found -> ()
-
-
-let findConfigurationBool (key: string) : bool = 
-  match findConfiguration key with 
-    ConfBool b -> b
-  | _ -> 
-      ignore (E.warn "Configuration %s is not a boolean" key);
-      raise Not_found
-
-let useConfigurationBool (key: string) (f: bool -> unit) = 
-  try f (findConfigurationBool key)
-  with Not_found -> ()
-
-let findConfigurationList (key: string) : configData list  = 
-  match findConfiguration key with 
-    ConfList l -> l
-  | _ -> 
-      ignore (E.warn "Configuration %s is not a list" key);
-      raise Not_found
-
-let useConfigurationList (key: string) (f: configData list -> unit) = 
-  try f (findConfigurationList key)
-  with Not_found -> ()
-
-
-let saveConfiguration (fname: string) = 
-  (** Convert configuration data to a string, for saving externally *)
-  let configToString (c: configData) : string = 
-    let buff = Buffer.create 80 in
-    let rec loop (c: configData) : unit = 
-      match c with 
-        ConfInt i -> 
-          Buffer.add_char buff 'i';
-          Buffer.add_string buff (string_of_int i);
-          Buffer.add_char buff ';'
-            
-      | ConfBool b -> 
-          Buffer.add_char buff 'b';
-          Buffer.add_string buff (string_of_bool b);
-          Buffer.add_char buff ';'
-            
-      | ConfFloat f -> 
-          Buffer.add_char buff 'f';
-          Buffer.add_string buff (string_of_float f);
-          Buffer.add_char buff ';'
-            
-      | ConfString s -> 
-          if String.contains s '"' then 
-            E.s (E.unimp "Guilib: configuration string contains quotes");
-          Buffer.add_char buff '"';
-          Buffer.add_string buff s;
-          Buffer.add_char buff '"'; (* '"' *)
-          
-      | ConfList l -> 
-          Buffer.add_char buff '[';
-          List.iter loop l;
-          Buffer.add_char buff ']'
-    in
-    loop c;
-    Buffer.contents buff
-  in
-  try 
-    let oc = open_out fname in
-    ignore (E.log "Saving configuration to %s\n" (absoluteFilename fname));
-    H.iter (fun k c -> 
-      output_string oc (k ^ "\n");
-      output_string oc ((configToString c) ^ "\n"))
-      configurationData;
-    close_out oc
-  with _ -> 
-    ignore (E.warn "Cannot open configuration file %s\n" fname)
-
-
-(** Make some regular expressions early *)
-let intRegexp = Str.regexp "i\\([0-9]+\\);"
-let floatRegexp = Str.regexp "f\\([0-9]+\\.[0-9]+\\);"
-let boolRegexp = Str.regexp "b\\(\\(true\\)\\|\\(false\\)\\);"
-let stringRegexp = Str.regexp "\"\\([^\"]*\\)\""
-
-let loadConfiguration (fname: string) : unit = 
-  H.clear configurationData;
-
-  let stringToConfig (s: string) : configData = 
-    let idx = ref 0 in (** the current index *)
-    let l = String.length s in 
-    
-    let rec getOne () : configData = 
-      if !idx >= l then raise Not_found;
-      
-      if Str.string_match intRegexp s !idx then begin
-        idx := Str.match_end ();
-        ConfInt (int_of_string (Str.matched_group 1 s))
-      end else if Str.string_match floatRegexp s !idx then begin
-        idx := Str.match_end ();
-        ConfFloat (float_of_string (Str.matched_group 1 s))
-      end else if Str.string_match boolRegexp s !idx then begin
-        idx := Str.match_end ();
-        ConfBool (bool_of_string (Str.matched_group 1 s))
-      end else if  Str.string_match stringRegexp s !idx then begin
-        idx := Str.match_end ();
-        ConfString (Str.matched_group 1 s)
-      end else if String.get s !idx = '[' then begin
-        (* We are starting a list *)
-        incr idx;
-        let rec loop (acc: configData list) : configData list = 
-          if !idx >= l then begin
-            ignore (E.warn "Non-terminated list in configuration %s" s);
-            raise Not_found
-          end;
-          if String.get s !idx = ']' then begin
-            incr idx;
-            List.rev acc
-          end else
-            loop (getOne () :: acc)
-        in
-        ConfList (loop [])
-      end else begin
-        ignore (E.warn "Bad configuration element in a list: %s\n"
-                  (String.sub s !idx (l - !idx)));
-        raise Not_found
-      end
-    in
-    getOne ()
-  in
-  (try 
-    let ic = open_in fname in
-    ignore (E.log "Loading configuration from %s\n" (absoluteFilename fname));
-    (try 
-      while true do
-        let k = input_line ic in
-        let s = input_line ic in
-        try 
-          let c = stringToConfig s in 
-          setConfiguration k c
-        with Not_found -> ()
-      done
-    with End_of_file -> ());
-    close_in ic;
-  with _ -> () (* no file, ignore *));
-  
-  ()
-
-   
- 
-(*********************************************************************)
-type symbol = int
-
-(**{ Registering symbol names} *)
-let registeredSymbolNames: (string, symbol) H.t = H.create 113
-let symbolNames: string IH.t = IH.create 113 
-let nextSymbolId = ref 0 
-
-(* When we register symbol ranges, we store a naming function for use later 
- * when we print the symbol *)
-let symbolRangeNaming: (int * int * (int -> string)) list ref = ref []
-
-(* Reset the symbols. We want to allow the registration of symbols at the 
- * top-level. This means that we cannot simply clear the hash tables. The 
- * first time we call "reset" we actually remember the state. *)
-let resetThunk: (unit -> unit) option ref = ref None
-
-let snapshotSymbols () : unit -> unit = 
-  runThunks [ restoreIntHash symbolNames;
-              restoreRef nextSymbolId;
-              restoreHash registeredSymbolNames;
-              restoreRef symbolRangeNaming ]
-
-let resetSymbols () = 
-  match !resetThunk with 
-    None -> resetThunk := Some (snapshotSymbols ())
-  | Some t -> t ()
-  
-
-let dumpSymbols () = 
-  ignore (E.log "Current symbols\n");
-  IH.iter (fun i k -> ignore (E.log " %s -> %d\n" k i)) symbolNames;
-  ()
-
-let newSymbol (n: string) : symbol = 
-  assert(not (H.mem registeredSymbolNames n));
-  let id = !nextSymbolId in
-  incr nextSymbolId;
-  H.add registeredSymbolNames n id;
-  IH.add symbolNames id n;
-  id
-
-let registerSymbolName (n: string) : symbol = 
-  try H.find registeredSymbolNames n
-  with Not_found -> begin
-    newSymbol n
-  end
-
-(** Register a range of symbols. The mkname function will be invoked for 
- * indices starting at 0 *)
-let registerSymbolRange (count: int) (mkname: int -> string) : symbol = 
-  if count < 0 then E.s (E.bug "registerSymbolRange: invalid counter");
-  let first = !nextSymbolId in
-  nextSymbolId := !nextSymbolId + count;
-  symbolRangeNaming := 
-    (first, !nextSymbolId - 1, mkname) :: !symbolRangeNaming;
-  first
-    
-let symbolName (id: symbol) : string = 
-  try IH.find symbolNames id
-  with Not_found -> 
-    (* Perhaps it is one of the lazily named symbols *)
-    try 
-      let (fst, _, mkname) = 
-        List.find 
-          (fun (fst,lst,_) -> fst <= id && id <= lst) 
-          !symbolRangeNaming in
-      let n = mkname (id - fst) in
-      IH.add symbolNames id n;
-      n
-    with Not_found ->
-      ignore (E.warn "Cannot find the name of symbol %d" id);
-      "symbol" ^ string_of_int id
-
-(************************************************************************)
-
-(** {1 Int32 Operators} *)
-
-module Int32Op = struct
-   exception IntegerTooLarge
-   let to_int (i: int32) = 
-     let i' = Int32.to_int i in (* Silently drop the 32nd bit *)
-     if i = Int32.of_int i' then i'
-     else raise IntegerTooLarge
-
-   let (<%) = (fun x y -> (Int32.compare x y) < 0)
-   let (<=%) = (fun x y -> (Int32.compare x y) <= 0)
-   let (>%) = (fun x y -> (Int32.compare x y) > 0)
-   let (>=%) = (fun x y -> (Int32.compare x y) >= 0)
-   let (<>%) = (fun x y -> (Int32.compare x y) <> 0)
-   
-   let (+%) = Int32.add
-   let (-%) = Int32.sub
-   let ( *% ) = Int32.mul
-   let (/%) = Int32.div
-   let (~-%) = Int32.neg
-
-   (* We cannot use the <<% because it trips camlp4 *)
-   let sll = fun i j -> Int32.shift_left i (to_int j)
-   let (>>%) = fun i j -> Int32.shift_right i (to_int j)
-   let (>>>%) = fun i j -> Int32.shift_right_logical i (to_int j)
-end
-
-
-(*********************************************************************)
-
-let equals x1 x2 : bool =
-  (compare x1 x2) = 0
diff --git a/cil/ocamlutil/util.mli b/cil/ocamlutil/util.mli
deleted file mode 100644
index d701c65f4..000000000
--- a/cil/ocamlutil/util.mli
+++ /dev/null
@@ -1,311 +0,0 @@
-(** A bunch of generally useful functions *)
-
-exception GotSignal of int
-
-val withTimeout : float -> (* Seconds for timeout *)
-                (int -> 'b) -> (* What to do if we have a timeout. The 
-                                        * argument passed is the signal number 
-                                        * received. *)
-                ('a -> 'b) -> (* The function to run *)
-                'a -> (* And its argument *)
-   'b
-
-val docHash : ?sep:Pretty.doc -> ('a -> 'b -> Pretty.doc) -> unit -> 
-  (('a, 'b) Hashtbl.t) -> Pretty.doc 
-
-
-val hash_to_list: ('a, 'b) Hashtbl.t -> ('a * 'b) list
-
-val keys: ('a, 'b) Hashtbl.t -> 'a list
-
-
-(** Copy a hash table into another *)
-val hash_copy_into: ('a, 'b) Hashtbl.t -> ('a, 'b) Hashtbl.t -> unit
-
-(** First, a few utility functions I wish were in the standard prelude *)
-
-val anticompare: 'a -> 'a -> int
-
-val list_drop : int -> 'a list -> 'a list
-val list_droptail : int -> 'a list -> 'a list
-val list_span: ('a -> bool) -> ('a list) -> 'a list * 'a list
-val list_insert_by: ('a -> 'a -> int) -> 'a -> 'a list -> 'a list
-val list_head_default: 'a -> 'a list -> 'a
-val list_iter3 : ('a -> 'b -> 'c -> unit) ->
-  'a list -> 'b list -> 'c list -> unit
-val get_some_option_list : 'a option list -> 'a list
-val list_append: ('a list) -> ('a list) -> ('a list) (* tail-recursive append*)
-
-(** Iterate over a list passing the index as you go *)
-val list_iteri: (int -> 'a -> unit) -> 'a list -> unit
-val list_mapi: (int -> 'a -> 'b) -> 'a list -> 'b list
-
-(** Like fold_left but pass the index into the list as well *)
-val list_fold_lefti: ('acc -> int -> 'a -> 'acc) -> 'acc -> 'a list -> 'acc
-
-(** Generates the range of integers starting with a and ending with b *)
-val int_range_list : int -> int -> int list
-
-(* Create a list of length l *)
-val list_init : int -> (int -> 'a) -> 'a list
-
-(** Find the first element in a list that returns Some *)
-val list_find_first: 'a list -> ('a -> 'b option) -> 'b option 
-
-(** mapNoCopy is like map but avoid copying the list if the function does not 
- * change the elements *)
-
-val mapNoCopy: ('a -> 'a) -> 'a list -> 'a list
-
-val mapNoCopyList: ('a -> 'a list) -> 'a list -> 'a list
-
-val filterNoCopy: ('a -> bool) -> 'a list -> 'a list
-
-
-(** Join a list of strings *)
-val joinStrings: string -> string list -> string
-
-
-(**** Now in growArray.mli
-
-(** Growable arrays *)
-type 'a growArrayFill =
-    Elem of 'a
-  | Susp of (int -> 'a)
-
-type 'a growArray = {
-            gaFill: 'a growArrayFill;
-            (** Stuff to use to fill in the array as it grows *)
-
-    mutable gaMaxInitIndex: int;
-            (** Maximum index that was written to. -1 if no writes have 
-             * been made.  *)
-
-    mutable gaData: 'a array;
-  } 
-
-val newGrowArray: int -> 'a growArrayFill -> 'a growArray
-(** [newGrowArray initsz fillhow] *)
-
-val getReg: 'a growArray -> int -> 'a
-val setReg: 'a growArray -> int -> 'a -> unit
-val copyGrowArray: 'a growArray -> 'a growArray
-val deepCopyGrowArray: 'a growArray -> ('a -> 'a) -> 'a growArray
-
-
-val growArray_iteri:  (int -> 'a -> unit) -> 'a growArray -> unit
-(** Iterate over the initialized elements of the array *)
-
-val growArray_foldl: ('acc -> 'a -> 'acc) -> 'acc ->'a growArray -> 'acc
-(** Fold left over the initialized elements of the array *)
-
-****)
-
-(** hasPrefix prefix str returns true with str starts with prefix *)
-val hasPrefix: string -> string -> bool
-
-
-(** Given a ref cell, produce a thunk that later restores it to its current value *)
-val restoreRef: ?deepCopy:('a -> 'a) -> 'a ref -> unit -> unit
-
-(** Given a hash table, produce a thunk that later restores it to its current value *)
-val restoreHash: ?deepCopy:('b -> 'b) -> ('a, 'b) Hashtbl.t -> unit -> unit
-
-(** Given an integer hash table, produce a thunk that later restores it to 
- * its current value *)
-val restoreIntHash: ?deepCopy:('b -> 'b) -> 'b Inthash.t -> unit -> unit
-
-(** Given an array, produce a thunk that later restores it to its current value *)
-val restoreArray: ?deepCopy:('a -> 'a) -> 'a array -> unit -> unit
-
-
-(** Given a list of thunks, produce a thunk that runs them all *)
-val runThunks: (unit -> unit) list -> unit -> unit
-
-
-val memoize: ('a, 'b) Hashtbl.t ->
-            'a ->
-            ('a -> 'b) -> 'b
-
-(** Just another name for memoize *)
-val findOrAdd: ('a, 'b) Hashtbl.t ->
-            'a ->
-            ('a -> 'b) -> 'b
-
-val tryFinally: 
-    ('a -> 'b) -> (* The function to run *)
-    ('b option -> unit) -> (* Something to run at the end. The None case is 
-                          * used when an exception is thrown *)
-    'a -> 'b
-
-
-
-
-(** Get the value of an option.  Raises Failure if None *)
-val valOf : 'a option -> 'a
-
-(**
- * An accumulating for loop.
- *
- * Initialize the accumulator with init.  The current index and accumulator
- * from the previous iteration is passed to f.
- *)
-val fold_for : init:'a -> lo:int -> hi:int -> (int -> 'a -> 'a) -> 'a
-
-(************************************************************************)
-
-module type STACK = sig
-  type 'a t
-  (** The type of stacks containing elements of type ['a]. *)
-
-  exception Empty
-  (** Raised when {!Util.Stack.pop} or {!Util.Stack.top} is applied to an 
-   * empty stack. *)
-
-  val create : unit -> 'a t
-
-
-  val push : 'a -> 'a t -> unit
-  (** [push x s] adds the element [x] at the top of stack [s]. *)
-
-  val pop : 'a t -> 'a
-  (** [pop s] removes and returns the topmost element in stack [s],
-     or raises [Empty] if the stack is empty. *)
-
-  val top : 'a t -> 'a
-  (** [top s] returns the topmost element in stack [s],
-     or raises [Empty] if the stack is empty. *)
-  
-  val clear : 'a t -> unit
-  (** Discard all elements from a stack. *)
-  
-  val copy : 'a t -> 'a t
-  (** Return a copy of the given stack. *)
-  
-  val is_empty : 'a t -> bool
-  (** Return [true] if the given stack is empty, [false] otherwise. *)
-  
-  val length : 'a t -> int
-  (** Return the number of elements in a stack. *)
-  
-  val iter : ('a -> unit) -> 'a t -> unit
-  (** [iter f s] applies [f] in turn to all elements of [s],
-     from the element at the top of the stack to the element at the
-     bottom of the stack. The stack itself is unchanged. *)
-end
-
-module Stack : STACK
-
-(************************************************************************
-   Configuration 
-************************************************************************)
-(** The configuration data can be of several types **)
-type configData = 
-    ConfInt of int
-  | ConfBool of bool
-  | ConfFloat of float
-  | ConfString of string
-  | ConfList of configData list
-
-
-(** Load the configuration from a file *)
-val loadConfiguration: string -> unit
-
-(** Save the configuration in a file. Overwrites the previous values *)
-val saveConfiguration: string -> unit
-
-
-(** Clear all configuration data *)
-val clearConfiguration: unit -> unit
-
-(** Set a configuration element, with a key. Overwrites the previous values *)
-val setConfiguration: string -> configData -> unit
-
-(** Find a configuration elements, given a key. Raises Not_found if it canont 
- * find it *)
-val findConfiguration: string -> configData
-
-(** Like findConfiguration but extracts the integer *)
-val findConfigurationInt: string -> int
-
-(** Looks for an integer configuration element, and if it is found, it uses 
- * the given function. Otherwise, does nothing *)
-val useConfigurationInt: string -> (int -> unit) -> unit
-
-
-val findConfigurationBool: string -> bool
-val useConfigurationBool: string -> (bool -> unit) -> unit
-
-val findConfigurationString: string -> string
-val useConfigurationString: string -> (string -> unit) -> unit
-
-val findConfigurationList: string -> configData list
-val useConfigurationList: string -> (configData list -> unit) -> unit
-
-
-(************************************************************************)
-
-(** Symbols are integers that are uniquely associated with names *)
-type symbol = int
-
-(** Get the name of a symbol *)
-val symbolName: symbol -> string
-
-(** Register a symbol name and get the symbol for it *)
-val registerSymbolName: string -> symbol
-
-(** Register a number of consecutive symbol ids. The naming function will be 
- * invoked with indices from 0 to the counter - 1. Returns the id of the 
- * first symbol created. The naming function is invoked lazily, only when the 
- * name of the symbol is required. *)
-val registerSymbolRange: int -> (int -> string) -> symbol
-
-
-(** Make a fresh symbol. Give the name also, which ought to be distinct from 
- * existing symbols. This is different from registerSymbolName in that it 
- * always creates a new symbol. *)
-val newSymbol: string -> symbol
-
-(** Reset the state of the symbols to the program startup state *)
-val resetSymbols: unit -> unit
-
-(** Take a snapshot of the symbol state. Returns a thunk that restores the 
- * state. *)
-val snapshotSymbols: unit -> unit -> unit
-
-
-(** Dump the list of registered symbols *)
-val dumpSymbols: unit -> unit
-
-(************************************************************************)
-
-(** {1 Int32 Operators} *)
-
-module Int32Op : sig
-   val (<%) : int32 -> int32 -> bool
-   val (<=%) : int32 -> int32 -> bool
-   val (>%) : int32 -> int32 -> bool
-   val (>=%) : int32 -> int32 -> bool
-   val (<>%) : int32 -> int32 -> bool
-   
-   val (+%) : int32 -> int32 -> int32
-   val (-%) : int32 -> int32 -> int32
-   val ( *% ) : int32 -> int32 -> int32
-   val (/%) : int32 -> int32 -> int32
-   val (~-%) : int32 -> int32
-
-   val sll : int32 -> int32 -> int32
-   val (>>%) : int32 -> int32 -> int32
-   val (>>>%) : int32 -> int32 -> int32
-
-   exception IntegerTooLarge
-   val to_int : int32 -> int
-end
-
-(************************************************************************)
-
-(** This has the semantics of (=) on OCaml 3.07 and earlier.  It can
-   handle cyclic values as long as a structure in the cycle has a unique
-   name or id in some field that occurs before any fields that have cyclic
-   pointers. *)
-val equals: 'a -> 'a -> bool
diff --git a/cil/src/check.ml b/cil/src/check.ml
deleted file mode 100644
index 4dc8850a3..000000000
--- a/cil/src/check.ml
+++ /dev/null
@@ -1,1017 +0,0 @@
-(* MODIF: Loop constructor replaced by 3 constructors: While, DoWhile, For. *)
-
-(* 
- *
- * Copyright (c) 2001-2002, 
- *  George C. Necula    <necula@cs.berkeley.edu>
- *  Scott McPeak        <smcpeak@cs.berkeley.edu>
- *  Wes Weimer          <weimer@cs.berkeley.edu>
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. The names of the contributors may not be used to endorse or promote
- * products derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
- * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
- * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- *)
-
-(* A consistency checker for CIL *)
-open Cil
-module E = Errormsg
-module H = Hashtbl
-open Pretty
-
-
-(* A few parameters to customize the checking *)
-type checkFlags = 
-    NoCheckGlobalIds   (* Do not check that the global ids have the proper 
-                        * hash value *)
-
-let checkGlobalIds = ref true
-
-  (* Attributes must be sorted *)
-type ctxAttr = 
-    CALocal                             (* Attribute of a local variable *)
-  | CAGlobal                            (* Attribute of a global variable *)
-  | CAType                              (* Attribute of a type *)
-
-let valid = ref true
-
-let warn fmt =
-  valid := false;
-  Cil.warn fmt
-
-let warnContext fmt =
-  valid := false;
-  Cil.warnContext fmt
-
-let checkAttributes (attrs: attribute list) : unit = 
-  let rec loop lastname = function
-      [] -> ()
-    | Attr(an, _) :: resta -> 
-        if an < lastname then
-          ignore (warn "Attributes not sorted");
-        loop an resta
-  in
-  loop "" attrs
-
-
-  (* Keep track of defined types *)
-let typeDefs : (string, typ) H.t = H.create 117
-
-
-  (* Keep track of all variables names, enum tags and type names *)
-let varNamesEnv : (string, unit) H.t = H.create 117
-
-  (* We also keep a map of variables indexed by id, to ensure that only one 
-   * varinfo has a given id *)
-let varIdsEnv: (int, varinfo) H.t = H.create 117
-
-  (* And keep track of all varinfo's to check the uniqueness of the 
-   * identifiers *)
-let allVarIds: (int, varinfo) H.t = H.create 117
-
- (* Also keep a list of environments. We place an empty string in the list to 
-  * mark the start of a local environment (i.e. a function) *)
-let varNamesList : (string * int) list ref = ref []
-let defineName s = 
-  if s = "" then
-    E.s (bug "Empty name\n"); 
-  if H.mem varNamesEnv s then
-    ignore (warn "Multiple definitions for %s\n" s);
-  H.add varNamesEnv s ()
-
-let defineVariable vi = 
-  defineName vi.vname;
-  varNamesList := (vi.vname, vi.vid) :: !varNamesList;
-  (* Check the id *)
-  if H.mem allVarIds vi.vid then
-    ignore (warn "Id %d is already defined (%s)\n" vi.vid vi.vname);
-  H.add allVarIds vi.vid vi;
-  (* And register it in the current scope also *)
-  H.add varIdsEnv vi.vid vi
-
-(* Check that a varinfo has already been registered *)
-let checkVariable vi = 
-  try
-    (* Check in the current scope only *)
-    if vi != H.find varIdsEnv vi.vid then
-      ignore (warnContext "varinfos for %s not shared\n" vi.vname);
-  with Not_found -> 
-    ignore (warn "Unknown id (%d) for %s\n" vi.vid vi.vname)
-
-
-let startEnv () = 
-  varNamesList := ("", -1) :: !varNamesList
-
-let endEnv () = 
-  let rec loop = function
-      [] -> E.s (bug "Cannot find start of env")
-    | ("", _) :: rest -> varNamesList := rest
-    | (s, id) :: rest -> begin
-        H.remove varNamesEnv s;
-        H.remove varIdsEnv id;
-        loop rest
-    end
-  in
-  loop !varNamesList
-    
-
-    
-(* The current function being checked *)
-let currentReturnType : typ ref = ref voidType
-
-(* A map of labels in the current function *)
-let labels: (string, unit) H.t = H.create 17
-
-(* A list of statements seen in the current function *)
-let statements: stmt list ref = ref []
-
-(* A list of the targets of Gotos *)
-let gotoTargets: (string * stmt) list ref = ref []
-
-(*** TYPES ***)
-(* Cetain types can only occur in some contexts, so keep a list of context *)
-type ctxType = 
-    CTStruct                            (* In a composite type *)
-  | CTUnion
-  | CTFArg                              (* In a function argument type *)
-  | CTFRes                              (* In a function result type *)
-  | CTArray                             (* In an array type *)
-  | CTPtr                               (* In a pointer type *)
-  | CTExp                               (* In an expression, as the type of 
-                                         * the result of binary operators, or 
-                                         * in a cast *)
-  | CTSizeof                            (* In a sizeof *)
-  | CTDecl                              (* In a typedef, or a declaration *)
-
-let d_context () = function
-    CTStruct -> text "CTStruct"
-  | CTUnion -> text "CTUnion"
-  | CTFArg -> text "CTFArg"
-  | CTFRes -> text "CTFRes"
-  | CTArray -> text "CTArray"
-  | CTPtr -> text "CTPtr"
-  | CTExp -> text "CTExp"
-  | CTSizeof -> text "CTSizeof"
-  | CTDecl -> text "CTDecl"
-
-
-(* Keep track of all tags that we use. For each tag remember also the info 
- * structure and a flag whether it was actually defined or just used. A 
- * forward declaration acts as a definition. *)
-type defuse = 
-    Defined (* We actually have seen a definition of this tag *)
-  | Forward (* We have seen a forward declaration for it. This is done using 
-             * a GType with an empty type name *)
-  | Used    (* Only uses *)
-let compUsed : (int, compinfo * defuse ref) H.t = H.create 117
-let enumUsed : (string, enuminfo * defuse ref) H.t = H.create 117
-let typUsed  : (string, typeinfo * defuse ref) H.t = H.create 117
- 
-(* For composite types we also check that the names are unique *)
-let compNames : (string, unit) H.t = H.create 17
-    
-
-  (* Check a type *)
-let rec checkType (t: typ) (ctx: ctxType) = 
-  (* Check that it appears in the right context *)
-  let rec checkContext = function
-      TVoid _ -> ctx = CTPtr || ctx = CTFRes || ctx = CTDecl
-    | TNamed (ti, a) -> checkContext ti.ttype
-    | TArray _ -> 
-        (ctx = CTStruct || ctx = CTUnion 
-         || ctx = CTSizeof || ctx = CTDecl || ctx = CTArray || ctx = CTPtr)
-    | TComp _ -> ctx <> CTExp 
-    | _ -> true
-  in
-  if not (checkContext t) then 
-    ignore (warn "Type (%a) used in wrong context. Expected context: %a"
-              d_plaintype t d_context ctx);
-  match t with
-    (TVoid a | TBuiltin_va_list a) -> checkAttributes a
-  | TInt (ik, a) -> checkAttributes a
-  | TFloat (_, a) -> checkAttributes a
-  | TPtr (t, a) -> checkAttributes a;  checkType t CTPtr
-
-  | TNamed (ti, a) ->
-      checkAttributes a;
-      if ti.tname = "" then 
-        ignore (warnContext "Using a typeinfo for an empty-named type\n");
-      checkTypeInfo Used ti
-
-  | TComp (comp, a) ->
-      checkAttributes a;
-      (* Mark it as a forward. We'll check it later. If we try to check it 
-       * now we might encounter undefined types *)
-      checkCompInfo Used comp
-
-
-  | TEnum (enum, a) -> begin
-      checkAttributes a;
-      checkEnumInfo Used enum
-  end
-
-  | TArray(bt, len, a) -> 
-      checkAttributes a;
-      checkType bt CTArray;
-      (match len with
-        None -> ()
-      | Some l -> begin
-          let t = checkExp true l in
-          match t with 
-            TInt((IInt|IUInt), _) -> ()
-          | _ -> E.s (bug "Type of array length is not integer")
-      end)
-
-  | TFun (rt, targs, isva, a) -> 
-      checkAttributes a;
-      checkType rt CTFRes;
-      List.iter 
-        (fun (an, at, aa) -> 
-          checkType at CTFArg;
-          checkAttributes aa) (argsToList targs)
-
-(* Check that a type is a promoted integral type *)
-and checkIntegralType (t: typ) = 
-  checkType t CTExp;
-  match unrollType t with
-    TInt _ -> ()
-  | _ -> ignore (warn "Non-integral type")
-
-(* Check that a type is a promoted arithmetic type *)
-and checkArithmeticType (t: typ) = 
-  checkType t CTExp;
-  match unrollType t with
-    TInt _ | TFloat _ -> ()
-  | _ -> ignore (warn "Non-arithmetic type")
-
-(* Check that a type is a promoted boolean type *)
-and checkBooleanType (t: typ) = 
-  checkType t CTExp;
-  match unrollType t with
-    TInt _ | TFloat _ | TPtr _ -> ()
-  | _ -> ignore (warn "Non-boolean type")
-
-
-(* Check that a type is a pointer type *)
-and checkPointerType (t: typ) = 
-  checkType t CTExp;
-  match unrollType t with
-    TPtr _ -> ()
-  | _ -> ignore (warn "Non-pointer type")
-
-
-and typeMatch (t1: typ) (t2: typ) = 
-  if typeSig t1 <> typeSig t2 then
-    match unrollType t1, unrollType t2 with
-    (* Allow free interchange of TInt and TEnum *)
-      TInt (IInt, _), TEnum _ -> ()
-    | TEnum _, TInt (IInt, _) -> ()
-
-    | _, _ -> ignore (warn "Type mismatch:@!    %a@!and %a@!" 
-                        d_type t1 d_type t2)
-
-and checkCompInfo (isadef: defuse) comp = 
-  let fullname = compFullName comp in
-  try
-    let oldci, olddef = H.find compUsed comp.ckey in
-    (* Check that it is the same *)
-    if oldci != comp then 
-      ignore (warnContext "compinfo for %s not shared\n" fullname);
-    (match !olddef, isadef with 
-    | Defined, Defined -> 
-        ignore (warnContext "Multiple definition of %s\n" fullname)
-    | _, Defined -> olddef := Defined
-    | Defined, _ -> ()
-    | _, Forward -> olddef := Forward
-    | _, _ -> ())
-  with Not_found -> begin (* This is the first time we see it *)
-    (* Check that the name is not empty *)
-    if comp.cname = "" then 
-      E.s (bug "Compinfo with empty name");
-    (* Check that the name is unique *)
-    if H.mem compNames fullname then
-      ignore (warn "Duplicate name %s" fullname);
-    (* Add it to the map before we go on *)
-    H.add compUsed comp.ckey (comp, ref isadef);
-    H.add compNames fullname ();
-    (* Do not check the compinfo unless this is a definition. Otherwise you 
-     * might run into undefined types. *)
-    if isadef = Defined then begin
-      checkAttributes comp.cattr;
-      let fctx = if comp.cstruct then CTStruct else CTUnion in
-      let rec checkField f =
-        if not 
-            (f.fcomp == comp &&  (* Each field must share the self cell of 
-             * the host *)
-             f.fname <> "") then
-          ignore (warn "Self pointer not set in field %s of %s" 
-                    f.fname fullname);
-        checkType f.ftype fctx;
-        (* Check the bitfields *)
-        (match unrollType f.ftype, f.fbitfield with
-        | TInt (ik, a), Some w -> 
-            checkAttributes a;
-            if w < 0 || w >= bitsSizeOf (TInt(ik, a)) then
-              ignore (warn "Wrong width (%d) in bitfield" w)
-        | _, Some w -> 
-            ignore (E.error "Bitfield on a non integer type\n")
-        | _ -> ());
-        checkAttributes f.fattr
-      in
-      List.iter checkField comp.cfields
-    end
-  end
-
-
-and checkEnumInfo (isadef: defuse) enum = 
-  if enum.ename = "" then 
-    E.s (bug "Enuminfo with empty name");
-  try
-    let oldei, olddef = H.find enumUsed enum.ename in
-    (* Check that it is the same *)
-    if oldei != enum then 
-      ignore (warnContext "enuminfo for %s not shared\n" enum.ename);
-    (match !olddef, isadef with 
-      Defined, Defined -> 
-        ignore (warnContext "Multiple definition of enum %s\n" enum.ename)
-    | _, Defined -> olddef := Defined
-    | Defined, _ -> ()
-    | _, Forward -> olddef := Forward
-    | _, _ -> ())
-  with Not_found -> begin (* This is the first time we see it *)
-    (* Add it to the map before we go on *)
-    H.add enumUsed enum.ename (enum, ref isadef);
-    checkAttributes enum.eattr;
-    List.iter (fun (tn, _, _) -> defineName tn) enum.eitems;
-  end
-
-and checkTypeInfo (isadef: defuse) ti = 
-  try
-    let oldti, olddef = H.find typUsed ti.tname in
-    (* Check that it is the same *)
-    if oldti != ti then 
-      ignore (warnContext "typeinfo for %s not shared\n" ti.tname);
-    (match !olddef, isadef with 
-      Defined, Defined -> 
-        ignore (warnContext "Multiple definition of type %s\n" ti.tname)
-    | Defined, Used -> ()
-    | Used, Defined -> 
-        ignore (warnContext "Use of type %s before its definition\n" ti.tname)
-    | _, _ -> 
-        ignore (warnContext "Bug in checkTypeInfo for %s\n" ti.tname))
-  with Not_found -> begin (* This is the first time we see it *)
-    if ti.tname = "" then
-      ignore (warnContext "typeinfo with empty name");
-    checkType ti.ttype CTDecl;
-    (* Add it to the map before we go on *)
-    H.add typUsed ti.tname (ti, ref isadef);
-  end
-
-(* Check an lvalue. If isconst then the lvalue appears in a context where 
- * only a compile-time constant can appear. Return the type of the lvalue. 
- * See the typing rule from cil.mli *)
-and checkLval (isconst: bool) (lv: lval) : typ = 
-  match lv with
-    Var vi, off -> 
-      checkVariable vi; 
-      checkOffset vi.vtype off
-
-  | Mem addr, off -> begin
-      if isconst then
-        ignore (warn "Memory operation in constant");
-      let ta = checkExp false addr in
-      match unrollType ta with
-        TPtr (t, _) -> checkOffset t off
-      | _ -> E.s (bug "Mem on a non-pointer")
-  end
-
-(* Check an offset. The basetype is the type of the object referenced by the 
- * base. Return the type of the lvalue constructed from a base value of right 
- * type and the offset. See the typing rules from cil.mli *)
-and checkOffset basetyp : offset -> typ = function
-    NoOffset -> basetyp
-  | Index (ei, o) -> 
-      checkExpType false ei intType; 
-      begin
-        match unrollType basetyp with
-          TArray (t, _, _) -> checkOffset t o
-        | t -> E.s (bug "typeOffset: Index on a non-array: %a" d_plaintype t)
-      end
-
-  | Field (fi, o) -> 
-      (* Now check that the host is shared propertly *)
-      checkCompInfo Used fi.fcomp;
-      (* Check that this exact field is part of the host *)
-      if not (List.exists (fun f -> f == fi) fi.fcomp.cfields) then
-        ignore (warn "Field %s not part of %s" 
-                  fi.fname (compFullName fi.fcomp));
-      checkOffset fi.ftype o
-        
-and checkExpType (isconst: bool) (e: exp) (t: typ) =
-  let t' = checkExp isconst e in (* compute the type *)
-  if isconst then begin (* For initializers allow a string to initialize an 
-                         * array of characters  *)
-    if typeSig t' <> typeSig t then 
-      match e, t with
-      | _ -> typeMatch t' t
-  end else
-    typeMatch t' t
-
-(* Check an expression. isconst specifies if the expression occurs in a 
- * context where only a compile-time constant can occur. Return the computed 
- * type of the expression *)
-and checkExp (isconst: bool) (e: exp) : typ = 
-  E.withContext 
-    (fun _ -> dprintf "check%s: %a" 
-        (if isconst then "Const" else "Exp") d_exp e)
-    (fun _ ->
-      match e with
-      | Const(CInt64 (_, ik, _)) -> TInt(ik, [])
-      | Const(CChr _) -> charType
-      | Const(CStr s) -> charPtrType
-      | Const(CWStr s) -> TPtr(!wcharType,[])
-      | Const(CReal (_, fk, _)) -> TFloat(fk, [])
-      | Const(CEnum (_, _, ei)) -> TEnum(ei, [])
-      | Lval(lv) -> 
-          if isconst then
-            ignore (warn "Lval in constant");
-          checkLval isconst lv
-
-      | SizeOf(t) -> begin
-          (* Sizeof cannot be applied to certain types *)
-          checkType t CTSizeof;
-          (match unrollType t with
-            (TFun _ | TVoid _) -> 
-              ignore (warn "Invalid operand for sizeof")
-          | _ ->());
-          uintType
-      end
-      | SizeOfE(e) ->
-          (* The expression in a sizeof can be anything *)
-          let te = checkExp false e in
-          checkExp isconst (SizeOf(te))
-
-      | SizeOfStr s -> uintType
-
-      | AlignOf(t) -> begin
-          (* Sizeof cannot be applied to certain types *)
-          checkType t CTSizeof;
-          (match unrollType t with
-            (TFun _ | TVoid _) -> 
-              ignore (warn "Invalid operand for sizeof")
-          | _ ->());
-          uintType
-      end
-      | AlignOfE(e) ->
-          (* The expression in an AlignOfE can be anything *)
-          let te = checkExp false e in
-          checkExp isconst (AlignOf(te))
-
-      | UnOp (Neg, e, tres) -> 
-          checkArithmeticType tres; checkExpType isconst e tres; tres
-
-      | UnOp (BNot, e, tres) -> 
-          checkIntegralType tres; checkExpType isconst e tres; tres
-
-      | UnOp (LNot, e, tres) -> 
-          let te = checkExp isconst e in
-          checkBooleanType te;
-          checkIntegralType tres; (* Must check that t is well-formed *)
-          typeMatch tres intType;
-          tres
-
-      | BinOp (bop, e1, e2, tres) -> begin
-          let t1 = checkExp isconst e1 in
-          let t2 = checkExp isconst e2 in
-          match bop with
-            (Mult | Div) -> 
-              typeMatch t1 t2; checkArithmeticType tres; 
-              typeMatch t1 tres; tres
-          | (Eq|Ne|Lt|Le|Ge|Gt) -> 
-              typeMatch t1 t2; checkArithmeticType t1; 
-              typeMatch tres intType; tres
-          | Mod|BAnd|BOr|BXor -> 
-              typeMatch t1 t2; checkIntegralType tres;
-              typeMatch t1 tres; tres
-          | LAnd | LOr -> 
-              typeMatch t1 t2; checkBooleanType tres;
-              typeMatch t1 tres; tres
-          | Shiftlt | Shiftrt -> 
-              typeMatch t1 tres; checkIntegralType t1; 
-              checkIntegralType t2; tres
-          | (PlusA | MinusA) -> 
-                typeMatch t1 t2; typeMatch t1 tres;
-                checkArithmeticType tres; tres
-          | (PlusPI | MinusPI | IndexPI) -> 
-              checkPointerType tres;
-              typeMatch t1 tres;
-              checkIntegralType t2;
-              tres
-          | MinusPP  -> 
-              checkPointerType t1; checkPointerType t2;
-              typeMatch t1 t2;
-              typeMatch tres intType;
-              tres
-      end
-      | AddrOf (lv) -> begin
-          let tlv = checkLval isconst lv in
-          (* Only certain types can be in AddrOf *)
-          match unrollType tlv with
-          | TVoid _ -> 
-              E.s (bug "AddrOf on improper type");
-              
-          | (TInt _ | TFloat _ | TPtr _ | TComp _ | TFun _ | TArray _ ) -> 
-              TPtr(tlv, [])
-
-          | TEnum _ -> intPtrType
-          | _ -> E.s (bug "AddrOf on unknown type")
-      end
-
-      | StartOf lv -> begin
-          let tlv = checkLval isconst lv in
-          match unrollType tlv with
-            TArray (t,_, _) -> TPtr(t, [])
-          | _ -> E.s (bug "StartOf on a non-array")
-      end
-            
-      | CastE (tres, e) -> begin
-          let et = checkExp isconst e in
-          checkType tres CTExp;
-          (* Not all types can be cast *)
-          match unrollType et with
-            TArray _ -> E.s (bug "Cast of an array type")
-          | TFun _ -> E.s (bug "Cast of a function type")
-          | TComp _ -> E.s (bug "Cast of a composite type")
-          | TVoid _ -> E.s (bug "Cast of a void type")
-          | _ -> tres
-      end)
-    () (* The argument of withContext *)
-
-and checkInit  (i: init) : typ = 
-  E.withContext 
-    (fun _ -> dprintf "checkInit: %a" d_init i)
-    (fun _ ->
-      match i with
-        SingleInit e -> checkExp true e
-(*
-      | ArrayInit (bt, len, initl) -> begin
-          checkType bt CTSizeof;
-          if List.length initl > len then 
-            ignore (warn "Too many initializers in array");
-          List.iter (fun i -> checkInitType i bt) initl;
-          TArray(bt, Some (integer len), [])
-      end
-*)
-      | CompoundInit (ct, initl) -> begin
-          checkType ct CTSizeof;
-          (match unrollType ct with
-            TArray(bt, Some (Const(CInt64(len, _, _))), _) -> 
-              let rec loopIndex i = function
-                  [] -> 
-                    if i <> len then 
-                      ignore (warn "Wrong number of initializers in array")
-
-                | (Index(Const(CInt64(i', _, _)), NoOffset), ei) :: rest -> 
-                    if i' <> i then 
-                      ignore (warn "Initializer for index %s when %s was expected\n"
-                                (Int64.format "%d" i') (Int64.format "%d" i));
-                    checkInitType ei bt;
-                    loopIndex (Int64.succ i) rest
-                | _ :: rest -> 
-                    ignore (warn "Malformed initializer for array element")
-              in
-              loopIndex Int64.zero initl
-          | TArray(_, _, _) -> 
-              ignore (warn "Malformed initializer for array")
-          | TComp (comp, _) -> 
-              if comp.cstruct then
-                let rec loopFields 
-                    (nextflds: fieldinfo list) 
-                    (initl: (offset * init) list) : unit = 
-                  match nextflds, initl with 
-                    [], [] -> ()   (* We are done *)
-                  | f :: restf, (Field(f', NoOffset), i) :: resti -> 
-                      if f.fname <> f'.fname then 
-                        ignore (warn "Expected initializer for field %s and found one for %s\n" f.fname f'.fname);
-                      checkInitType i f.ftype;
-                      loopFields restf resti
-                  | [], _ :: _ -> 
-                      ignore (warn "Too many initializers for struct")
-                  | _ :: _, [] -> 
-                      ignore (warn "Too few initializers for struct")
-                  | _, _ -> 
-                      ignore (warn "Malformed initializer for struct")
-                in
-                loopFields
-                  (List.filter (fun f -> f.fname <> missingFieldName) 
-                     comp.cfields) 
-                  initl
-
-              else (* UNION *)
-                if comp.cfields == [] then begin
-                  if initl != [] then 
-                    ignore (warn "Initializer for empty union not empty");
-                end else begin
-                  match initl with 
-                    [(Field(f, NoOffset), ei)] -> 
-                      if f.fcomp != comp then 
-                        ignore (bug "Wrong designator for union initializer");
-                      if !msvcMode && f != List.hd comp.cfields then
-                        ignore (warn "On MSVC you can only initialize the first field of a union");
-                      checkInitType ei f.ftype
-                      
-                  | _ -> 
-                      ignore (warn "Malformed initializer for union")
-                end
-          | _ -> 
-              E.s (warn "Type of Compound is not array or struct or union"));
-          ct
-      end)
-    () (* The arguments of withContext *)
-
-
-and checkInitType (i: init) (t: typ) : unit = 
-  let it = checkInit i in
-  typeMatch it t
-  
-and checkStmt (s: stmt) = 
-  E.withContext 
-    (fun _ -> 
-      (* Print context only for certain small statements *)
-      match s.skind with 
-        (*Loop _*) While _ | DoWhile _ | For _ | If _ | Switch _  -> nil
-      | _ -> dprintf "checkStmt: %a" d_stmt s)
-    (fun _ -> 
-      (* Check the labels *)
-      let checkLabel = function
-          Label (ln, l, _) -> 
-            if H.mem labels ln then
-              ignore (warn "Multiply defined label %s" ln);
-            H.add labels ln ()
-        | Case (e, _) -> checkExpType true e intType
-        | _ -> () (* Not yet implemented *)
-      in
-      List.iter checkLabel s.labels;
-      (* See if we have seen this statement before *)
-      if List.memq s !statements then 
-        ignore (warn "Statement is shared");
-      (* Remember that we have seen this one *)
-      statements := s :: !statements;
-      match s.skind with
-        Break _ | Continue _ -> ()
-      | Goto (gref, l) -> 
-          currentLoc := l;
-          (* Find a label *)
-          let lab = 
-            match List.filter (function Label _ -> true | _ -> false) 
-                  !gref.labels with
-              Label (lab, _, _) :: _ -> lab
-            | _ -> 
-                ignore (warn "Goto to block without a label\n");
-                "<missing label>"
-          in
-          (* Remember it as a target *)
-          gotoTargets := (lab, !gref) :: !gotoTargets
-            
-
-      | Return (re,l) -> begin
-          currentLoc := l;
-          match re, !currentReturnType with
-            None, TVoid _  -> ()
-          | _, TVoid _ -> ignore (warn "Invalid return value")
-          | None, _ -> ignore (warn "Invalid return value")
-          | Some re', rt' -> checkExpType false re' rt'
-        end
-(*
-      | Loop (b, l, _, _) -> checkBlock b
-*)
-      | While (e, b, l) ->
-          currentLoc := l;
-          let te = checkExp false e in
-          checkBooleanType te;
-          checkBlock b;
-      | DoWhile (e, b, l) ->
-          currentLoc := l;
-          let te = checkExp false e in
-          checkBooleanType te;
-          checkBlock b;
-      | For (bInit, e, bIter, b, l) ->
-          currentLoc := l;
-	  checkBlock bInit;
-	  let te = checkExp false e in
-          checkBooleanType te;
-	  checkBlock bIter;
-          checkBlock b;
-      | Block b -> checkBlock b
-      | If (e, bt, bf, l) -> 
-          currentLoc := l;
-          let te = checkExp false e in
-          checkBooleanType te;
-          checkBlock bt;
-          checkBlock bf
-      | Switch (e, b, cases, l) -> 
-          currentLoc := l;
-          checkExpType false e intType;
-          (* Remember the statements so far *)
-          let prevStatements = !statements in
-          checkBlock b;
-          (* Now make sure that all the cases do occur in that block *)
-          List.iter
-            (fun c -> 
-              if not (List.exists (function Case _ -> true | _ -> false) 
-                        c.labels) then
-                ignore (warn "Case in switch statment without a \"case\"\n");
-              (* Make sure it is in there *)
-              let rec findCase = function
-                | l when l == prevStatements -> (* Not found *)
-                    ignore (warnContext 
-                              "Cannot find target of switch statement")
-                | [] -> E.s (E.bug "Check: findCase")
-                | c' :: rest when c == c' -> () (* Found *)
-                | _ :: rest -> findCase rest
-              in
-              findCase !statements)
-            cases;
-      | TryFinally (b, h, l) -> 
-          currentLoc := l;
-          checkBlock b;
-          checkBlock h
-
-      | TryExcept (b, (il, e), h, l) -> 
-          currentLoc := l;
-          checkBlock b;
-          List.iter checkInstr il;
-          checkExpType false e intType;
-          checkBlock h
-
-      | Instr il -> List.iter checkInstr il)
-    () (* argument of withContext *)
-
-and checkBlock (b: block) : unit = 
-  List.iter checkStmt b.bstmts
-
-
-and checkInstr (i: instr) = 
-  match i with 
-  | Set (dest, e, l) -> 
-      currentLoc := l;
-      let t = checkLval false dest in
-      (* Not all types can be assigned to *)
-      (match unrollType t with
-        TFun _ -> ignore (warn "Assignment to a function type")
-      | TArray _ -> ignore (warn "Assignment to an array type")
-      | TVoid _ -> ignore (warn "Assignment to a void type")
-      | _ -> ());
-      checkExpType false e t
-            
-  | Call(dest, what, args, l) -> 
-      currentLoc := l;
-      let (rt, formals, isva) = 
-        match checkExp false what with
-          TFun(rt, formals, isva, _) -> rt, formals, isva
-        | _ -> E.s (bug "Call to a non-function")
-      in
-          (* Now check the return value*)
-      (match dest, unrollType rt with
-        None, TVoid _ -> ()
-      | Some _, TVoid _ -> ignore (warn "void value is assigned")
-      | None, _ -> () (* "Call of function is not assigned" *)
-      | Some destlv, rt' -> 
-          let desttyp = checkLval false destlv in
-          if typeSig desttyp <> typeSig rt then begin
-            (* Not all types can be assigned to *)
-            (match unrollType desttyp with
-              TFun _ -> ignore (warn "Assignment to a function type")
-            | TArray _ -> ignore (warn "Assignment to an array type")
-            | TVoid _ -> ignore (warn "Assignment to a void type")
-            | _ -> ());
-            (* Not all types can be cast *)
-            (match rt' with
-              TArray _ -> ignore (warn "Cast of an array type")
-            | TFun _ -> ignore (warn "Cast of a function type")
-            | TComp _ -> ignore (warn "Cast of a composite type")
-            | TVoid _ -> ignore (warn "Cast of a void type")
-                  
-            | _ -> ())
-          end);
-          (* Now check the arguments *)
-      let rec loopArgs formals args = 
-        match formals, args with
-          [], _ when (isva || args = []) -> ()
-        | (fn,ft,_) :: formals, a :: args -> 
-            checkExpType false a ft;
-            loopArgs formals args
-        | _, _ -> ignore (warn "Not enough arguments")
-      in
-      if formals = None then 
-        ignore (warn "Call to function without prototype\n")
-      else
-        loopArgs (argsToList formals) args
-        
-  | Asm _ -> ()  (* Not yet implemented *)
-  
-let rec checkGlobal = function
-    GAsm _ -> ()
-  | GPragma _ -> ()
-  | GText _ -> ()
-  | GType (ti, l) -> 
-      currentLoc := l;
-      E.withContext (fun _ -> dprintf "GType(%s)" ti.tname)
-        (fun _ ->
-          checkTypeInfo Defined ti;
-          if ti.tname <> "" then defineName ti.tname)
-        ()
-
-  | GCompTag (comp, l) -> 
-      currentLoc := l;
-      checkCompInfo Defined comp;
-
-  | GCompTagDecl (comp, l) -> 
-      currentLoc := l;
-      checkCompInfo Forward comp;
-
-  | GEnumTag (enum, l) -> 
-      currentLoc := l;
-      checkEnumInfo Defined enum
-
-  | GEnumTagDecl (enum, l) -> 
-      currentLoc := l;
-      checkEnumInfo Forward enum
-
-  | GVarDecl (vi, l) -> 
-      currentLoc := l;
-      (* We might have seen it already *)
-      E.withContext (fun _ -> dprintf "GVarDecl(%s)" vi.vname)
-        (fun _ -> 
-          (* If we have seen this vid already then it must be for the exact 
-           * same varinfo *)
-          if H.mem varIdsEnv vi.vid then
-            checkVariable vi
-          else begin
-            defineVariable vi; 
-            checkAttributes vi.vattr;
-            checkType vi.vtype CTDecl;
-            if not (vi.vglob &&
-                    vi.vstorage <> Register) then
-              E.s (bug "Invalid declaration of %s" vi.vname)
-          end)
-        ()
-        
-  | GVar (vi, init, l) -> 
-      currentLoc := l;
-      (* Maybe this is the first occurrence *)
-      E.withContext (fun _ -> dprintf "GVar(%s)" vi.vname)
-        (fun _ -> 
-          checkGlobal (GVarDecl (vi, l));
-          (* Check the initializer *)
-          begin match init.init with
-            None -> ()
-          | Some i -> ignore (checkInitType i vi.vtype)
-          end;
-          (* Cannot be a function *)
-          if isFunctionType vi.vtype then
-            E.s (bug "GVar for a function (%s)\n" vi.vname);
-          )
-        ()
-        
-
-  | GFun (fd, l) -> begin
-      currentLoc := l;
-      (* Check if this is the first occurrence *)
-      let vi = fd.svar in
-      let fname = vi.vname in
-      E.withContext (fun _ -> dprintf "GFun(%s)" fname)
-        (fun _ -> 
-          checkGlobal (GVarDecl (vi, l));
-          (* Check that the argument types in the type are identical to the 
-           * formals *)
-          let rec loopArgs targs formals = 
-            match targs, formals with
-              [], [] -> ()
-            | (fn, ft, fa) :: targs, fo :: formals -> 
-                if fn <> fo.vname || ft != fo.vtype || fa != fo.vattr then 
-                  ignore (warnContext 
-                            "Formal %s not shared (type + locals) in %s" 
-                            fo.vname fname);
-                loopArgs targs formals
-
-            | _ -> 
-                E.s (bug "Type has different number of formals for %s" 
-                       fname)
-          in
-          begin match vi.vtype with
-            TFun (rt, args, isva, a) -> begin
-              currentReturnType := rt;
-              loopArgs (argsToList args) fd.sformals
-            end
-          | _ -> E.s (bug "Function %s does not have a function type" 
-                        fname)
-          end;
-          ignore (fd.smaxid >= 0 || E.s (bug "smaxid < 0 for %s" fname));
-          (* Now start a new environment, in a finally clause *)
-          begin try
-            startEnv ();
-            (* Do the locals *)
-            let doLocal tctx v = 
-              if v.vglob then
-                ignore (warnContext
-                          "Local %s has the vglob flag set" v.vname);
-              if v.vstorage <> NoStorage && v.vstorage <> Register then
-                ignore (warnContext
-                          "Local %s has storage %a\n" v.vname
-                          d_storage v.vstorage);
-              checkType v.vtype tctx;
-              checkAttributes v.vattr;
-              defineVariable v
-            in
-            List.iter (doLocal CTFArg) fd.sformals;
-            List.iter (doLocal CTDecl) fd.slocals;
-            statements := [];
-            gotoTargets := [];
-            checkBlock fd.sbody;
-            H.clear labels;
-            (* Now verify that we have scanned all targets *)
-            List.iter 
-              (fun (lab, t) -> if not (List.memq t !statements) then 
-                ignore (warnContext
-                          "Target of \"goto %s\" statement does not appear in function body" lab))
-              !gotoTargets;
-            statements := [];
-            gotoTargets := [];
-            (* Done *)
-            endEnv ()
-          with e -> 
-            endEnv ();
-            raise e
-          end;
-          ())
-        () (* final argument of withContext *)
-  end
-
-
-let checkFile flags fl = 
-  if !E.verboseFlag then ignore (E.log "Checking file %s\n" fl.fileName);
-  valid := true;
-  List.iter 
-    (function
-        NoCheckGlobalIds -> checkGlobalIds := false)
-    flags;
-  iterGlobals fl (fun g -> try checkGlobal g with _ -> ());
-  (* Check that for all struct/union tags there is a definition *)
-  H.iter 
-    (fun k (comp, isadef) -> 
-      if !isadef = Used then 
-	begin
-	  valid := false;
-          ignore (E.warn "Compinfo %s is referenced but not defined" 
-                    (compFullName comp))
-	end)
-    compUsed;
-  (* Check that for all enum tags there is a definition *)
-  H.iter 
-    (fun k (enum, isadef) -> 
-      if !isadef = Used then 
-	begin
-	  valid := false;
-          ignore (E.warn "Enuminfo %s is referenced but not defined" 
-                    enum.ename)
-	end)
-    enumUsed;
-  (* Clean the hashes to let the GC do its job *)
-  H.clear typeDefs;
-  H.clear varNamesEnv;
-  H.clear varIdsEnv;
-  H.clear allVarIds;
-  H.clear compNames;
-  H.clear compUsed;
-  H.clear enumUsed;
-  H.clear typUsed;
-  varNamesList := [];
-  if !E.verboseFlag then 
-    ignore (E.log "Finished checking file %s\n" fl.fileName);
-  !valid
-  
diff --git a/cil/src/check.mli b/cil/src/check.mli
deleted file mode 100644
index fdcb8b82c..000000000
--- a/cil/src/check.mli
+++ /dev/null
@@ -1,45 +0,0 @@
-(* 
- *
- * Copyright (c) 2001-2002, 
- *  George C. Necula    <necula@cs.berkeley.edu>
- *  Scott McPeak        <smcpeak@cs.berkeley.edu>
- *  Wes Weimer          <weimer@cs.berkeley.edu>
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. The names of the contributors may not be used to endorse or promote
- * products derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
- * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
- * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- *)
- 
-    (* Checks the well-formedness of the file. Prints warnings and
-     * returns false if errors are found *)
-
-type checkFlags = 
-    NoCheckGlobalIds   (* Do not check that the global ids have the proper 
-                        * hash value *) 
- 
-val checkFile: checkFlags list -> Cil.file -> bool
diff --git a/cil/src/cil.ml b/cil/src/cil.ml
deleted file mode 100644
index 2c4e12a71..000000000
--- a/cil/src/cil.ml
+++ /dev/null
@@ -1,6427 +0,0 @@
-(* MODIF: Loop constructor replaced by 3 constructors: While, DoWhile, For. *)
-(* MODIF: useLogicalOperators flag set to true by default. *)
-
-(*
- *
- * Copyright (c) 2001-2003,
- *  George C. Necula    <necula@cs.berkeley.edu>
- *  Scott McPeak        <smcpeak@cs.berkeley.edu>
- *  Wes Weimer          <weimer@cs.berkeley.edu>
- *  Ben Liblit          <liblit@cs.berkeley.edu>
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. The names of the contributors may not be used to endorse or promote
- * products derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
- * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
- * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- *)
-
-open Escape
-open Pretty
-open Trace      (* sm: 'trace' function *)
-module E = Errormsg
-module H = Hashtbl
-module IH = Inthash
-
-(*
- * CIL: An intermediate language for analyzing C progams.
- *
- * Version Tue Dec 12 15:21:52 PST 2000 
- * Scott McPeak, George Necula, Wes Weimer
- *
- *)
-
-(* The module Cilversion is generated automatically by Makefile from 
- * information in configure.in *)
-let cilVersion         = Cilversion.cilVersion
-let cilVersionMajor    = Cilversion.cilVersionMajor
-let cilVersionMinor    = Cilversion.cilVersionMinor
-let cilVersionRevision = Cilversion.cilVersionRev
-
-(* A few globals that control the interpretation of C source *)
-let msvcMode = ref false              (* Whether the pretty printer should 
-                                       * print output for the MS VC 
-                                       * compiler. Default is GCC *)
-
-let useLogicalOperators = ref (*false*) true
-
-
-module M = Machdep
-(* Cil.initCil will set this to the current machine description.
-   Makefile.cil generates the file obj/@ARCHOS@/machdep.ml,
-   which contains the descriptions of gcc and msvc. *)
-let theMachine : M.mach ref = ref M.gcc
-
-
-let lowerConstants: bool ref = ref true
-    (** Do lower constants (default true) *)
-let insertImplicitCasts: bool ref = ref true
-    (** Do insert implicit casts (default true) *)
-
-
-let little_endian = ref true
-let char_is_unsigned = ref false
-let underscore_name = ref false
-
-type lineDirectiveStyle =
-  | LineComment
-  | LinePreprocessorInput
-  | LinePreprocessorOutput
-
-let lineDirectiveStyle = ref (Some LinePreprocessorInput)
- 
-let print_CIL_Input = ref false
-           
-let printCilAsIs = ref false
-
-let lineLength = ref 80
-                      
-(* sm: return the string 's' if we're printing output for gcc, suppres
- * it if we're printing for CIL to parse back in.  the purpose is to
- * hide things from gcc that it complains about, but still be able
- * to do lossless transformations when CIL is the consumer *)
-let forgcc (s: string) : string =
-  if (!print_CIL_Input) then "" else s
-
-
-let debugConstFold = false
-
-(** The Abstract Syntax of CIL *)
-
-
-(** The top-level representation of a CIL source file. Its main contents is 
-    the list of global declarations and definitions. *)
-type file = 
-    { mutable fileName: string;   (** The complete file name *)
-      mutable globals: global list; (** List of globals as they will appear 
-                                        in the printed file *)
-      mutable globinit: fundec option;  
-      (** An optional global initializer function. This is a function where 
-       * you can put stuff that must be executed before the program is 
-       * started. This function, is conceptually at the end of the file, 
-       * although it is not part of the globals list. Use {!Cil.getGlobInit} 
-       * to create/get one. *)
-      mutable globinitcalled: bool;     
-      (** Whether the global initialization function is called in main. This 
-          should always be false if there is no global initializer. When 
-          you create a global initialization CIL will try to insert code in 
-          main to call it. *)
-    } 
-
-and comment = location * string
-
-(** The main type for representing global declarations and definitions. A list 
-    of these form a CIL file. The order of globals in the file is generally 
-    important. *)
-and global =
-  | GType of typeinfo * location    
-    (** A typedef. All uses of type names (through the [TNamed] constructor) 
-        must be preceeded in the file by a definition of the name. The string 
-        is the defined name and always not-empty. *)
-
-  | GCompTag of compinfo * location     
-    (** Defines a struct/union tag with some fields. There must be one of 
-        these for each struct/union tag that you use (through the [TComp] 
-        constructor) since this is the only context in which the fields are 
-        printed. Consequently nested structure tag definitions must be 
-        broken into individual definitions with the innermost structure 
-        defined first. *)
-
-  | GCompTagDecl of compinfo * location
-    (** Declares a struct/union tag. Use as a forward declaration. This is 
-      * printed without the fields.  *)
-
-  | GEnumTag of enuminfo * location
-   (** Declares an enumeration tag with some fields. There must be one of 
-      these for each enumeration tag that you use (through the [TEnum] 
-      constructor) since this is the only context in which the items are 
-      printed. *)
-
-  | GEnumTagDecl of enuminfo * location
-    (** Declares an enumeration tag. Use as a forward declaration. This is 
-      * printed without the items.  *)
-
-  | GVarDecl of varinfo * location
-   (** A variable declaration (not a definition). If the variable has a 
-       function type then this is a prototype. There can be several 
-       declarations and at most one definition for a given variable. If both 
-       forms appear then they must share the same varinfo structure. A 
-       prototype shares the varinfo with the fundec of the definition. Either 
-       has storage Extern or there must be a definition in this file *)
-
-  | GVar  of varinfo * initinfo * location
-     (** A variable definition. Can have an initializer. The initializer is 
-      * updateable so that you can change it without requiring to recreate 
-      * the list of globals. There can be at most one definition for a 
-      * variable in an entire program. Cannot have storage Extern or function 
-      * type. *)
-
-
-  | GFun of fundec * location           
-     (** A function definition. *)
-
-  | GAsm of string * location           (** Global asm statement. These ones 
-                                            can contain only a template *)
-  | GPragma of attribute * location     (** Pragmas at top level. Use the same 
-                                            syntax as attributes *)
-  | GText of string                     (** Some text (printed verbatim) at 
-                                            top level. E.g., this way you can 
-                                            put comments in the output.  *)
-
-
-(** The various types available. Every type is associated with a list of 
- * attributes, which are always kept in sorted order. Use {!Cil.addAttribute} 
- * and {!Cil.addAttributes} to construct list of attributes. If you want to 
- * inspect a type, you should use {!Cil.unrollType} to see through the uses 
- * of named types. *)
-and typ =
-    TVoid of attributes   (** Void type *)
-  | TInt of ikind * attributes (** An integer type. The kind specifies 
-                                       the sign and width. *)
-  | TFloat of fkind * attributes (** A floating-point type. The kind 
-                                         specifies the precision. *)
-
-  | TPtr of typ * attributes  
-           (** Pointer type. *)
-
-  | TArray of typ * exp option * attributes
-           (** Array type. It indicates the base type and the array length. *)
-
-  | TFun of typ * (string * typ * attributes) list option * bool * attributes
-          (** Function type. Indicates the type of the result, the name, type 
-           * and name attributes of the formal arguments ([None] if no 
-           * arguments were specified, as in a function whose definition or 
-           * prototype we have not seen; [Some \[\]] means void). Use 
-           * {!Cil.argsToList} to obtain a list of arguments. The boolean 
-           * indicates if it is a variable-argument function. If this is the 
-           * type of a varinfo for which we have a function declaration then 
-           * the information for the formals must match that in the 
-           * function's sformals. *)
-
-  | TNamed of typeinfo * attributes 
-          (* The use of a named type. All uses of the same type name must 
-           * share the typeinfo. Each such type name must be preceeded 
-           * in the file by a [GType] global. This is printed as just the 
-           * type name. The actual referred type is not printed here and is 
-           * carried only to simplify processing. To see through a sequence 
-           * of named type references, use {!Cil.unrollType}. The attributes 
-           * are in addition to those given when the type name was defined. *)
-
-  | TComp of compinfo * attributes
-          (** A reference to a struct or a union type. All references to the 
-             same struct or union must share the same compinfo among them and 
-             with a [GCompTag] global that preceeds all uses (except maybe 
-             those that are pointers to the composite type). The attributes 
-             given are those pertaining to this use of the type and are in 
-             addition to the attributes that were given at the definition of 
-             the type and which are stored in the compinfo.  *)
-
-  | TEnum of enuminfo * attributes
-           (** A reference to an enumeration type. All such references must
-               share the enuminfo among them and with a [GEnumTag] global that 
-               preceeds all uses. The attributes refer to this use of the 
-               enumeration and are in addition to the attributes of the 
-               enumeration itself, which are stored inside the enuminfo  *)
-
-
-  
-  | TBuiltin_va_list of attributes
-            (** This is the same as the gcc's type with the same name *)
-
-(** Various kinds of integers *)
-and ikind = 
-    IChar       (** [char] *)
-  | ISChar      (** [signed char] *)
-  | IUChar      (** [unsigned char] *)
-  | IInt        (** [int] *)
-  | IUInt       (** [unsigned int] *)
-  | IShort      (** [short] *)
-  | IUShort     (** [unsigned short] *)
-  | ILong       (** [long] *)
-  | IULong      (** [unsigned long] *)
-  | ILongLong   (** [long long] (or [_int64] on Microsoft Visual C) *)
-  | IULongLong  (** [unsigned long long] (or [unsigned _int64] on Microsoft 
-                    Visual C) *)
-
-(** Various kinds of floating-point numbers*)
-and fkind = 
-    FFloat      (** [float] *)
-  | FDouble     (** [double] *)
-  | FLongDouble (** [long double] *)
-
-(** An attribute has a name and some optional parameters *)
-and attribute = Attr of string * attrparam list
-
-(** Attributes are lists sorted by the attribute name *)
-and attributes = attribute list
-
-(** The type of parameters in attributes *)
-and attrparam = 
-  | AInt of int                          (** An integer constant *)
-  | AStr of string                       (** A string constant *)
-  | ACons of string * attrparam list       (** Constructed attributes. These 
-                                             are printed [foo(a1,a2,...,an)]. 
-                                             The list of parameters can be 
-                                             empty and in that case the 
-                                             parentheses are not printed. *)
-  | ASizeOf of typ                       (** A way to talk about types *)
-  | ASizeOfE of attrparam
-  | ASizeOfS of typsig                   (** Replacement for ASizeOf in type
-                                             signatures.  Only used for
-                                             attributes inside typsigs.*)
-  | AAlignOf of typ
-  | AAlignOfE of attrparam
-  | AAlignOfS of typsig
-  | AUnOp of unop * attrparam
-  | ABinOp of binop * attrparam * attrparam
-  | ADot of attrparam * string           (** a.foo **)
-
-
-(** Information about a composite type (a struct or a union). Use 
-    {!Cil.mkCompInfo} 
-    to create non-recursive or (potentially) recursive versions of this. Make 
-    sure you have a [GCompTag] for each one of these.  *)
-and compinfo = {
-    mutable cstruct: bool;              (** True if struct, False if union *)
-    mutable cname: string;              (** The name. Always non-empty. Use 
-                                         * {!Cil.compFullName} to get the 
-                                         * full name of a comp (along with 
-                                         * the struct or union) *)
-    mutable ckey: int;                  (** A unique integer constructed from 
-                                         * the name. Use {!Hashtbl.hash} on 
-                                         * the string returned by 
-                                         * {!Cil.compFullName}. All compinfo 
-                                         * for a given key are shared. *)
-    mutable cfields: fieldinfo list;    (** Information about the fields *) 
-    mutable cattr:   attributes;        (** The attributes that are defined at
-                                            the same time as the composite
-                                            type *)
-    mutable cdefined: bool;             (** Whether this is a defined 
-                                         * compinfo. *)
-    mutable creferenced: bool;          (** True if used. Initially set to 
-                                         * false *)
-  }
-
-(** Information about a struct/union field *)
-and fieldinfo = { 
-    mutable fcomp: compinfo;            (** The compinfo of the host. Note 
-                                            that this must be shared with the 
-                                            host since there can be only one 
-                                            compinfo for a given id *)
-    mutable fname: string;              (** The name of the field. Might be 
-                                         * the value of 
-                                         * {!Cil.missingFieldName} in which 
-                                         * case it must be a bitfield and is 
-                                         * not printed and it does not 
-                                         * participate in initialization *)
-    mutable ftype: typ;                 (** The type *)
-    mutable fbitfield: int option;      (** If a bitfield then ftype should be 
-                                            an integer type *)
-    mutable fattr: attributes;          (** The attributes for this field 
-                                          * (not for its type) *)
-    mutable floc: location;             (** The location where this field
-                                          * is defined *)
-}
-
-
-
-(** Information about an enumeration. This is shared by all references to an
-    enumeration. Make sure you have a [GEnumTag] for each of of these.   *)
-and enuminfo = {
-    mutable ename: string;              (** The name. Always non-empty *)
-    mutable eitems: (string * exp * location) list; (** Items with names
-                                                      and values. This list
-                                                      should be
-                                                      non-empty. The item
-                                                      values must be
-                                                      compile-time
-                                                      constants. *) 
-    mutable eattr: attributes;         (** Attributes *)
-    mutable ereferenced: bool;         (** True if used. Initially set to false*)
-}
-
-(** Information about a defined type *)
-and typeinfo = {
-    mutable tname: string;              
-    (** The name. Can be empty only in a [GType] when introducing a composite 
-     * or enumeration tag. If empty cannot be refered to from the file *)
-    mutable ttype: typ;
-    (** The actual type. *)
-    mutable treferenced: bool;         
-    (** True if used. Initially set to false*)
-}
-
-
-(** Information about a variable. These structures are shared by all 
- * references to the variable. So, you can change the name easily, for 
- * example. Use one of the {!Cil.makeLocalVar}, {!Cil.makeTempVar} or 
- * {!Cil.makeGlobalVar} to create instances of this data structure. *)
-and varinfo = { 
-    mutable vname: string;		(** The name of the variable. Cannot 
-                                          * be empty. *)
-    mutable vtype: typ;                 (** The declared type of the 
-                                          * variable. *)
-    mutable vattr: attributes;          (** A list of attributes associated 
-                                          * with the variable. *)
-    mutable vstorage: storage;          (** The storage-class *)
-    (* The other fields are not used in varinfo when they appear in the formal 
-     * argument list in a [TFun] type *)
-
-
-    mutable vglob: bool;	        (** True if this is a global variable*)
-
-    (** Whether this varinfo is for an inline function. *)
-    mutable vinline: bool;
-
-    mutable vdecl: location;            (** Location of variable declaration *)
-
-    mutable vid: int;  (** A unique integer identifier.  *)
-    mutable vaddrof: bool;              (** True if the address of this
-                                            variable is taken. CIL will set 
-                                         * these flags when it parses C, but 
-                                         * you should make sure to set the 
-                                         * flag whenever your transformation 
-                                         * create [AddrOf] expression. *)
-
-    mutable vreferenced: bool;          (** True if this variable is ever 
-                                            referenced. This is computed by 
-                                            [removeUnusedVars]. It is safe to 
-                                            just initialize this to False *)
-}
-
-(** Storage-class information *)
-and storage = 
-    NoStorage |                         (** The default storage. Nothing is 
-                                         * printed  *)
-    Static |                           
-    Register |                          
-    Extern                              
-
-
-(** Expressions (Side-effect free)*)
-and exp =
-    Const      of constant              (** Constant *)
-  | Lval       of lval                  (** Lvalue *)
-  | SizeOf     of typ                   (** sizeof(<type>). Has [unsigned 
-                                         * int] type (ISO 6.5.3.4). This is 
-                                         * not turned into a constant because 
-                                         * some transformations might want to 
-                                         * change types *)
-
-  | SizeOfE    of exp                   (** sizeof(<expression>) *)
-  | SizeOfStr  of string
-    (** sizeof(string_literal). We separate this case out because this is the 
-      * only instance in which a string literal should not be treated as 
-      * having type pointer to character. *)
-
-  | AlignOf    of typ                   (** Has [unsigned int] type *)
-  | AlignOfE   of exp 
-
-                                        
-  | UnOp       of unop * exp * typ      (** Unary operation. Includes 
-                                            the type of the result *)
-
-  | BinOp      of binop * exp * exp * typ
-                                        (** Binary operation. Includes the 
-                                            type of the result. The arithemtic
-                                            conversions are made  explicit
-                                            for the arguments *)
-  | CastE      of typ * exp            (** Use {!Cil.mkCast} to make casts *)
-
-  | AddrOf     of lval                 (** Always use {!Cil.mkAddrOf} to 
-                                        * construct one of these. Apply to an 
-                                        * lvalue of type [T] yields an 
-                                        * expression of type [TPtr(T)] *)
-
-  | StartOf    of lval   (** There is no C correspondent for this. C has 
-                          * implicit coercions from an array to the address 
-                          * of the first element. [StartOf] is used in CIL to 
-                          * simplify type checking and is just an explicit 
-                          * form of the above mentioned implicit conversion. 
-                          * It is not printed. Given an lval of type 
-                          * [TArray(T)] produces an expression of type 
-                          * [TPtr(T)]. *)
-
-
-(** Literal constants *)
-and constant =
-  | CInt64 of int64 * ikind * string option 
-                 (** Integer constant. Give the ikind (see ISO9899 6.1.3.2) 
-                  * and the textual representation, if available. Use 
-                  * {!Cil.integer} or {!Cil.kinteger} to create these. Watch 
-                  * out for integers that cannot be represented on 64 bits. 
-                  * OCAML does not give Overflow exceptions. *)
-  | CStr of string (** String constant (of pointer type) *)
-  | CWStr of int64 list (** Wide string constant (of type "wchar_t *") *)
-  | CChr of char (** Character constant.  This has type int, so use
-                  *  charConstToInt to read the value in case
-                  *  sign-extension is needed. *)
-  | CReal of float * fkind * string option (** Floating point constant. Give
-                                               the fkind (see ISO 6.4.4.2) and
-                                               also the textual representation,
-                                               if available *)
-  | CEnum of exp * string * enuminfo
-     (** An enumeration constant with the given value, name, from the given 
-      * enuminfo. This is not used if {!Cil.lowerEnum} is false (default). 
-      * Use {!Cillower.lowerEnumVisitor} to replace these with integer 
-      * constants. *)
-
-(** Unary operators *)
-and unop =
-    Neg                                 (** Unary minus *)
-  | BNot                                (** Bitwise complement (~) *)
-  | LNot                                (** Logical Not (!) *)
-
-(** Binary operations *)
-and binop =
-    PlusA                               (** arithmetic + *)
-  | PlusPI                              (** pointer + integer *)
-  | IndexPI                             (** pointer + integer but only when 
-                                         * it arises from an expression 
-                                         * [e\[i\]] when [e] is a pointer and 
-                                         * not an array. This is semantically 
-                                         * the same as PlusPI but CCured uses 
-                                         * this as a hint that the integer is 
-                                         * probably positive. *)
-  | MinusA                              (** arithmetic - *)
-  | MinusPI                             (** pointer - integer *)
-  | MinusPP                             (** pointer - pointer *)
-  | Mult                                (** * *)
-  | Div                                 (** / *)
-  | Mod                                 (** % *)
-  | Shiftlt                             (** shift left *)
-  | Shiftrt                             (** shift right *)
-
-  | Lt                                  (** <  (arithmetic comparison) *)
-  | Gt                                  (** >  (arithmetic comparison) *)  
-  | Le                                  (** <= (arithmetic comparison) *)
-  | Ge                                  (** >  (arithmetic comparison) *)
-  | Eq                                  (** == (arithmetic comparison) *)
-  | Ne                                  (** != (arithmetic comparison) *)            
-  | BAnd                                (** bitwise and *)
-  | BXor                                (** exclusive-or *)
-  | BOr                                 (** inclusive-or *)
-
-  | LAnd                                (** logical and *)
-  | LOr                                 (** logical or *)
-
-
-
-
-(** An lvalue denotes the contents of a range of memory addresses. This range 
- * is denoted as a host object along with an offset within the object. The 
- * host object can be of two kinds: a local or global variable, or an object 
- * whose address is in a pointer expression. We distinguish the two cases so 
- * that we can tell quickly whether we are accessing some component of a 
- * variable directly or we are accessing a memory location through a pointer.*)
-and lval =
-    lhost * offset
-
-(** The host part of an {!Cil.lval}. *)
-and lhost = 
-  | Var        of varinfo    
-    (** The host is a variable. *)
-
-  | Mem        of exp        
-    (** The host is an object of type [T] when the expression has pointer 
-     * [TPtr(T)]. *)
-
-
-(** The offset part of an {!Cil.lval}. Each offset can be applied to certain 
-  * kinds of lvalues and its effect is that it advances the starting address 
-  * of the lvalue and changes the denoted type, essentially focussing to some 
-  * smaller lvalue that is contained in the original one. *)
-and offset = 
-  | NoOffset          (** No offset. Can be applied to any lvalue and does 
-                        * not change either the starting address or the type. 
-                        * This is used when the lval consists of just a host 
-                        * or as a terminator in a list of other kinds of 
-                        * offsets. *)
-
-  | Field      of fieldinfo * offset    
-                      (** A field offset. Can be applied only to an lvalue 
-                       * that denotes a structure or a union that contains 
-                       * the mentioned field. This advances the offset to the 
-                       * beginning of the mentioned field and changes the 
-                       * type to the type of the mentioned field. *)
-
-  | Index    of exp * offset
-                     (** An array index offset. Can be applied only to an 
-                       * lvalue that denotes an array. This advances the 
-                       * starting address of the lval to the beginning of the 
-                       * mentioned array element and changes the denoted type 
-                       * to be the type of the array element *)
-
-
-
-(* The following equivalences hold *)
-(* Mem(AddrOf(Mem a, aoff)), off   = Mem a, aoff + off                *)
-(* Mem(AddrOf(Var v, aoff)), off   = Var v, aoff + off                *)
-(* AddrOf (Mem a, NoOffset)        = a                                *)
-
-(** Initializers for global variables.  You can create an initializer with 
- * {!Cil.makeZeroInit}. *)
-and init = 
-  | SingleInit   of exp   (** A single initializer *)
-  | CompoundInit   of typ * (offset * init) list
-            (** Used only for initializers of structures, unions and arrays. 
-             * The offsets are all of the form [Field(f, NoOffset)] or 
-             * [Index(i, NoOffset)] and specify the field or the index being 
-             * initialized. For structures all fields
-             * must have an initializer (except the unnamed bitfields), in 
-             * the proper order. This is necessary since the offsets are not 
-             * printed. For arrays the list must contain a prefix of the 
-             * initializers; the rest are 0-initialized. 
-             * For unions there must be exactly one initializer. If 
-             * the initializer is not for the first field then a field 
-             * designator is printed, so you better be on GCC since MSVC does 
-             * not understand this. You can scan an initializer list with 
-             * {!Cil.foldLeftCompound}. *)
-
-(** We want to be able to update an initializer in a global variable, so we 
- * define it as a mutable field *)
-and initinfo = {
-    mutable init : init option;
-  } 
-
-
-(** Function definitions. *)
-and fundec =
-    { mutable svar:     varinfo;        
-         (** Holds the name and type as a variable, so we can refer to it 
-          * easily from the program. All references to this function either 
-          * in a function call or in a prototype must point to the same 
-          * varinfo. *)
-      mutable sformals: varinfo list;   
-        (** Formals. These must be shared with the formals that appear in the 
-         * type of the function. Use {!Cil.setFormals} or 
-         * {!Cil.setFunctionType} to set these 
-         * formals and ensure that they are reflected in the function type. 
-         * Do not make copies of these because the body refers to them. *)
-      mutable slocals: varinfo list;    
-        (** Locals. Does not include the sformals. Do not make copies of 
-         * these because the body refers to them. *)
-      mutable smaxid: int;           (** Max local id. Starts at 0. *)
-      mutable sbody: block;          (** The function body. *)
-      mutable smaxstmtid: int option;  (** max id of a (reachable) statement 
-                                        * in this function, if we have 
-                                        * computed it. range = 0 ... 
-                                        * (smaxstmtid-1). This is computed by 
-                                        * {!Cil.computeCFGInfo}. *)
-      mutable sallstmts: stmt list;   (** After you call {!Cil.computeCFGInfo} 
-                                      * this field is set to contain all 
-                                      * statements in the function *)
-    }
-
-
-(** A block is a sequence of statements with the control falling through from 
-    one element to the next *)
-and block = 
-   { mutable battrs: attributes;      (** Attributes for the block *)
-     mutable bstmts: stmt list;       (** The statements comprising the block*)
-   } 
-
-
-(** Statements. 
-    The statement is the structural unit in the control flow graph. Use mkStmt 
-    to make a statement and then fill in the fields. *)
-and stmt = {
-    mutable labels: label list;        (** Whether the statement starts with 
-                                           some labels, case statements or 
-                                           default statement *)
-    mutable skind: stmtkind;           (** The kind of statement *)
-
-    (* Now some additional control flow information. Initially this is not 
-     * filled in. *)
-    mutable sid: int;                  (** A number (>= 0) that is unique 
-                                           in a function. *)
-    mutable succs: stmt list;          (** The successor statements. They can 
-                                           always be computed from the skind 
-                                           and the context in which this 
-                                           statement appears *)
-    mutable preds: stmt list;          (** The inverse of the succs function*)
-  } 
-
-(** Labels *)
-and label = 
-    Label of string * location * bool   
-          (** A real label. If the bool is "true", the label is from the 
-           * input source program. If the bool is "false", the label was 
-           * created by CIL or some other transformation *)
-  | Case of exp * location              (** A case statement *)
-  | Default of location                 (** A default statement *)
-
-
-
-(* The various kinds of statements *)
-and stmtkind = 
-  | Instr  of instr list               (** A group of instructions that do not 
-                                           contain control flow. Control
-                                           implicitly falls through. *)
-  | Return of exp option * location     (** The return statement. This is a 
-                                            leaf in the CFG. *)
-
-  | Goto of stmt ref * location         (** A goto statement. Appears from 
-                                            actual goto's in the code. *)
-  | Break of location                   (** A break to the end of the nearest 
-                                             enclosing loop or Switch *)
-  | Continue of location                (** A continue to the start of the 
-                                            nearest enclosing loop *)
-  | If of exp * block * block * location (** A conditional. 
-                                             Two successors, the "then" and 
-                                             the "else" branches. Both 
-                                             branches  fall-through to the 
-                                             successor of the If statement *)
-  | Switch of exp * block * (stmt list) * location  
-                                       (** A switch statement. The block 
-                                           contains within all of the cases. 
-                                           We also have direct pointers to the 
-                                           statements that implement the 
-                                           cases. Which cases they implement 
-                                           you can get from the labels of the 
-                                           statement *)
-
-(*
-  | Loop of block * location * (stmt option) * (stmt option) 
-                                           (** A [while(1)] loop. The 
-                                            * termination test is implemented 
-                                            * in the body of a loop using a 
-                                            * [Break] statement. If 
-                                            * prepareCFG has been called, the 
-                                            * first stmt option will point to 
-                                            * the stmt containing the 
-                                            * continue label for this loop 
-                                            * and the second will point to 
-                                            * the stmt containing the break 
-                                            * label for this loop. *)
-*)
-  | While of exp * block * location                 (** A while loop. *)
-  | DoWhile of exp * block * location               (** A do...while loop. *)
-  | For of block * exp * block * block * location   (** A for loop. *)
-
-  | Block of block                      (** Just a block of statements. Use it 
-                                            as a way to keep some attributes 
-                                            local *)
-    (** On MSVC we support structured exception handling. This is what you 
-     * might expect. Control can get into the finally block either from the 
-     * end of the body block, or if an exception is thrown. The location 
-     * corresponds to the try keyword. *)
-  | TryFinally of block * block * location
-
-    (** On MSVC we support structured exception handling. The try/except 
-     * statement is a bit tricky: 
-         __try { blk } 
-         __except (e) {
-            handler
-         }
-
-         The argument to __except  must be an expression. However, we keep a 
-         list of instructions AND an expression in case you need to make 
-         function calls. We'll print those as a comma expression. The control 
-         can get to the __except expression only if an exception is thrown. 
-         After that, depending on the value of the expression the control 
-         goes to the handler, propagates the exception, or retries the 
-         exception !!! The location corresponds to the try keyword. 
-     *)      
-  | TryExcept of block * (instr list * exp) * block * location
-    
-
-(** Instructions. They may cause effects directly but may not have control
-    flow.*)
-and instr =
-    Set        of lval * exp * location  (** An assignment. A cast is present 
-                                             if the exp has different type 
-                                             from lval *)
-  | Call       of lval option * exp * exp list * location
- 			 (** optional: result is an lval. A cast might be 
-                             necessary if the declared result type of the 
-                             function is not the same as that of the 
-                             destination. If the function is declared then 
-                             casts are inserted for those arguments that 
-                             correspond to declared formals. (The actual 
-                             number of arguments might be smaller or larger 
-                             than the declared number of arguments. C allows 
-                             this.) If the type of the result variable is not 
-                             the same as the declared type of the function 
-                             result then an implicit cast exists. *)
-
-                         (* See the GCC specification for the meaning of ASM. 
-                          * If the source is MS VC then only the templates 
-                          * are used *)
-                         (* sm: I've added a notes.txt file which contains more
-                          * information on interpreting Asm instructions *)
-  | Asm        of attributes * (* Really only const and volatile can appear 
-                               * here *)
-                  string list *         (* templates (CR-separated) *)
-                  (string * lval) list * (* outputs must be lvals with 
-                                          * constraints. I would like these 
-                                          * to be actually variables, but I 
-                                          * run into some trouble with ASMs 
-                                          * in the Linux sources  *)
-                  (string * exp) list * (* inputs with constraints *)
-                  string list *         (* register clobbers *)
-                  location
-        (** An inline assembly instruction. The arguments are (1) a list of 
-            attributes (only const and volatile can appear here and only for 
-            GCC), (2) templates (CR-separated), (3) a list of 
-            outputs, each of which is an lvalue with a constraint, (4) a list 
-            of input expressions along with constraints, (5) clobbered 
-            registers, and (5) location information *)
-
-
-
-(** Describes a location in a source file *)
-and location = { 
-    line: int;		   (** The line number. -1 means "do not know" *)
-    file: string;          (** The name of the source file*)
-    byte: int;             (** The byte position in the source file *)
-}
-
-(* Type signatures. Two types are identical iff they have identical 
- * signatures *)
-and typsig = 
-    TSArray of typsig * int64 option * attribute list
-  | TSPtr of typsig * attribute list
-  | TSComp of bool * string * attribute list
-  | TSFun of typsig * typsig list * bool * attribute list
-  | TSEnum of string * attribute list
-  | TSBase of typ
-
-
-
-(** To be able to add/remove features easily, each feature should be package 
-   * as an interface with the following interface. These features should be *)
-type featureDescr = {
-    fd_enabled: bool ref; 
-    (** The enable flag. Set to default value  *)
-
-    fd_name: string; 
-    (** This is used to construct an option "--doxxx" and "--dontxxx" that 
-     * enable and disable the feature  *)
-
-    fd_description: string; 
-    (* A longer name that can be used to document the new options  *)
-
-    fd_extraopt: (string * Arg.spec * string) list; 
-    (** Additional command line options *)
-
-    fd_doit: (file -> unit);
-    (** This performs the transformation *)
-
-    fd_post_check: bool; 
-    (* Whether to perform a CIL consistency checking after this stage, if 
-     * checking is enabled (--check is passed to cilly) *)
-}
-
-let locUnknown = { line = -1; 
-		   file = ""; 
-		   byte = -1;}
-
-(* A reference to the current location *)
-let currentLoc : location ref = ref locUnknown
-
-(* A reference to the current global being visited *)
-let currentGlobal: global ref = ref (GText "dummy")
-
-
-let compareLoc (a: location) (b: location) : int =
-  let namecmp = compare a.file b.file in
-  if namecmp != 0 
-  then namecmp
-  else
-    let linecmp = a.line - b.line in
-    if linecmp != 0 
-    then linecmp
-    else a.byte - b.byte
-
-let argsToList : (string * typ * attributes) list option 
-                  -> (string * typ * attributes) list 
-    = function
-    None -> []
-  | Some al -> al
-
-
-(* A hack to allow forward reference of d_exp *)
-let pd_exp : (unit -> exp -> doc) ref = 
-  ref (fun _ -> E.s (E.bug "pd_exp not initialized"))
-
-(** Different visiting actions. 'a will be instantiated with [exp], [instr],
-    etc. *)
-type 'a visitAction = 
-    SkipChildren                        (** Do not visit the children. Return 
-                                            the node as it is. *)
-  | DoChildren                          (** Continue with the children of this 
-                                            node. Rebuild the node on return 
-                                            if any of the children changes 
-                                            (use == test) *)
-  | ChangeTo of 'a                      (** Replace the expression with the 
-                                            given one *)
-  | ChangeDoChildrenPost of 'a * ('a -> 'a) (** First consider that the entire 
-                                           exp is replaced by the first 
-                                           parameter. Then continue with 
-                                           the children. On return rebuild 
-                                           the node if any of the children 
-                                           has changed and then apply the 
-                                           function on the node *)
-
-
-
-(* sm/gn: cil visitor interface for traversing Cil trees. *)
-(* Use visitCilStmt and/or visitCilFile to use this. *)
-(* Some of the nodes are changed in place if the children are changed. Use 
- * one of Change... actions if you want to copy the node *)
-
-(** A visitor interface for traversing CIL trees. Create instantiations of 
- * this type by specializing the class {!Cil.nopCilVisitor}. *)
-class type cilVisitor = object
-
-  method vvdec: varinfo -> varinfo visitAction  
-    (** Invoked for each variable declaration. The subtrees to be traversed 
-     * are those corresponding to the type and attributes of the variable. 
-     * Note that variable declarations are all the [GVar], [GVarDecl], [GFun], 
-     * all the [varinfo] in formals of function types, and the formals and 
-     * locals for function definitions. This means that the list of formals 
-     * in a function definition will be traversed twice, once as part of the 
-     * function type and second as part of the formals in a function 
-     * definition. *)
-
-  method vvrbl: varinfo -> varinfo visitAction  
-    (** Invoked on each variable use. Here only the [SkipChildren] and 
-     * [ChangeTo] actions make sense since there are no subtrees. Note that 
-     * the type and attributes of the variable are not traversed for a 
-     * variable use *)
-
-  method vexpr: exp -> exp visitAction          
-    (** Invoked on each expression occurence. The subtrees are the 
-     * subexpressions, the types (for a [Cast] or [SizeOf] expression) or the 
-     * variable use. *)
-
-  method vlval: lval -> lval visitAction        
-    (** Invoked on each lvalue occurence *)
-
-  method voffs: offset -> offset visitAction    
-    (** Invoked on each offset occurrence that is *not* as part
-      * of an initializer list specification, i.e. in an lval or
-      * recursively inside an offset. *)
-
-  method vinitoffs: offset -> offset visitAction
-    (** Invoked on each offset appearing in the list of a 
-      * CompoundInit initializer.  *)
-
-  method vinst: instr -> instr list visitAction 
-    (** Invoked on each instruction occurrence. The [ChangeTo] action can 
-     * replace this instruction with a list of instructions *)
-
-  method vstmt: stmt -> stmt visitAction        
-    (** Control-flow statement. *)
-
-  method vblock: block -> block visitAction     (** Block. Replaced in 
-                                                    place. *)
-  method vfunc: fundec -> fundec visitAction    (** Function definition. 
-                                                    Replaced in place. *)
-  method vglob: global -> global list visitAction (** Global (vars, types,
-                                                      etc.)  *)
-  method vinit: init -> init visitAction        (** Initializers for globals *)
-  method vtype: typ -> typ visitAction          (** Use of some type. Note 
-                                                 * that for structure/union 
-                                                 * and enumeration types the 
-                                                 * definition of the 
-                                                 * composite type is not 
-                                                 * visited. Use [vglob] to 
-                                                 * visit it.  *)
-  method vattr: attribute -> attribute list visitAction 
-    (** Attribute. Each attribute can be replaced by a list *)
-  method vattrparam: attrparam -> attrparam visitAction 
-    (** Attribute parameters. *)
-
-    (** Add here instructions while visiting to queue them to 
-     * preceede the current statement or instruction being processed *)
-  method queueInstr: instr list -> unit
-
-    (** Gets the queue of instructions and resets the queue *)
-  method unqueueInstr: unit -> instr list
-
-end
-
-(* the default visitor does nothing at each node, but does *)
-(* not stop; hence they return true *)
-class nopCilVisitor : cilVisitor = object
-  method vvrbl (v:varinfo) = DoChildren (* variable *)
-  method vvdec (v:varinfo) = DoChildren (* variable 
-                                                               * declaration *)
-  method vexpr (e:exp) = DoChildren   (* expression *) 
-  method vlval (l:lval) = DoChildren  (* lval (base is 1st 
-                                                         * field)  *)
-  method voffs (o:offset) = DoChildren      (* lval or recursive offset *)
-  method vinitoffs (o:offset) = DoChildren  (* initializer offset *)
-  method vinst (i:instr) = DoChildren       (* imperative instruction *)
-  method vstmt (s:stmt) = DoChildren        (* constrol-flow statement *)
-  method vblock (b: block) = DoChildren
-  method vfunc (f:fundec) = DoChildren      (* function definition *)
-  method vglob (g:global) = DoChildren      (* global (vars, types, etc.) *)
-  method vinit (i:init) = DoChildren        (* global initializers *)
-  method vtype (t:typ) = DoChildren         (* use of some type *)
-  method vattr (a: attribute) = DoChildren
-  method vattrparam (a: attrparam) = DoChildren
-
-  val mutable instrQueue = []
-      
-  method queueInstr (il: instr list) = 
-    List.iter (fun i -> instrQueue <- i :: instrQueue) il
-
-  method unqueueInstr () = 
-    let res = List.rev instrQueue in
-    instrQueue <- [];
-    res
-
-end
-
-let assertEmptyQueue vis =
-  if vis#unqueueInstr () <> [] then 
-    (* Either a visitor inserted an instruction somewhere that it shouldn't
-       have (i.e. at the top level rather than inside of a statement), or
-       there's a bug in the visitor engine. *)
-    E.s (E.bug "Visitor's instruction queue is not empty.\n  You should only use queueInstr inside a function body!");
-  ()
-
-
-let lu = locUnknown
-
-(* sm: utility *)
-let startsWith (prefix: string) (s: string) : bool =
-(
-  let prefixLen = (String.length prefix) in
-  (String.length s) >= prefixLen &&
-  (String.sub s 0 prefixLen) = prefix
-)
-
-
-let get_instrLoc (inst : instr) =
-  match inst with
-      Set(_, _, loc) -> loc
-    | Call(_, _, _, loc) -> loc
-    | Asm(_, _, _, _, _, loc) -> loc
-let get_globalLoc (g : global) =
-  match g with
-  | GFun(_,l) -> (l)
-  | GType(_,l) -> (l)
-  | GEnumTag(_,l) -> (l) 
-  | GEnumTagDecl(_,l) -> (l) 
-  | GCompTag(_,l) -> (l) 
-  | GCompTagDecl(_,l) -> (l) 
-  | GVarDecl(_,l) -> (l) 
-  | GVar(_,_,l) -> (l)
-  | GAsm(_,l) -> (l)
-  | GPragma(_,l) -> (l) 
-  | GText(_) -> locUnknown
-
-let rec get_stmtLoc (statement : stmtkind) =
-  match statement with 
-      Instr([]) -> lu
-    | Instr(hd::tl) -> get_instrLoc(hd)
-    | Return(_, loc) -> loc
-    | Goto(_, loc) -> loc
-    | Break(loc) -> loc
-    | Continue(loc) -> loc
-    | If(_, _, _, loc) -> loc
-    | Switch (_, _, _, loc) -> loc
-(*
-    | Loop (_, loc, _, _) -> loc
-*)
-    | While (_, _, loc) -> loc
-    | DoWhile (_, _, loc) -> loc
-    | For (_, _, _, _, loc) -> loc
-    | Block b -> if b.bstmts == [] then lu 
-                 else get_stmtLoc ((List.hd b.bstmts).skind)
-    | TryFinally (_, _, l) -> l
-    | TryExcept (_, _, _, l) -> l
-
-
-(* The next variable identifier to use. Counts up *)
-let nextGlobalVID = ref 1
-
-(* The next compindo identifier to use. Counts up. *)
-let nextCompinfoKey = ref 1
-
-(* Some error reporting functions *)
-let d_loc (_: unit) (loc: location) : doc =  
-  text loc.file ++ chr ':' ++ num loc.line
-
-let d_thisloc (_: unit) : doc = d_loc () !currentLoc
-
-let error (fmt : ('a,unit,doc) format) : 'a = 
-  let f d = 
-    E.hadErrors := true; 
-    ignore (eprintf "@!%t: Error: %a@!" 
-              d_thisloc insert d);
-    nil
-  in
-  Pretty.gprintf f fmt
-
-let unimp (fmt : ('a,unit,doc) format) : 'a = 
-  let f d = 
-    E.hadErrors := true; 
-    ignore (eprintf "@!%t: Unimplemented: %a@!" 
-              d_thisloc insert d);
-    nil
-  in
-  Pretty.gprintf f fmt
-
-let bug (fmt : ('a,unit,doc) format) : 'a = 
-  let f d = 
-    E.hadErrors := true; 
-    ignore (eprintf "@!%t: Bug: %a@!" 
-              d_thisloc insert d);
-    E.showContext ();
-    nil
-  in
-  Pretty.gprintf f fmt
-
-let errorLoc (loc: location) (fmt : ('a,unit,doc) format) : 'a = 
-  let f d = 
-    E.hadErrors := true; 
-    ignore (eprintf "@!%a: Error: %a@!" 
-              d_loc loc insert d);
-    E.showContext ();
-    nil
-  in
-  Pretty.gprintf f fmt
-
-let warn (fmt : ('a,unit,doc) format) : 'a = 
-  let f d =
-    ignore (eprintf "@!%t: Warning: %a@!" 
-              d_thisloc insert d);
-    nil
-  in
-  Pretty.gprintf f fmt
-
-
-let warnOpt (fmt : ('a,unit,doc) format) : 'a = 
-  let f d =
-    if !E.warnFlag then 
-      ignore (eprintf "@!%t: Warning: %a@!" 
-                d_thisloc insert d);
-    nil
-  in
-  Pretty.gprintf f fmt
-
-let warnContext (fmt : ('a,unit,doc) format) : 'a = 
-  let f d =
-    ignore (eprintf "@!%t: Warning: %a@!" 
-              d_thisloc insert d);
-    E.showContext ();
-    nil
-  in
-  Pretty.gprintf f fmt
-
-let warnContextOpt (fmt : ('a,unit,doc) format) : 'a = 
-  let f d =
-    if !E.warnFlag then 
-      ignore (eprintf "@!%t: Warning: %a@!" 
-                d_thisloc insert d);
-    E.showContext ();
-    nil
-  in
-  Pretty.gprintf f fmt
-
-let warnLoc (loc: location) (fmt : ('a,unit,doc) format) : 'a = 
-  let f d =
-    ignore (eprintf "@!%a: Warning: %a@!" 
-              d_loc loc insert d);
-    E.showContext ();
-    nil
-  in
-  Pretty.gprintf f fmt
-
-
-
-(* Construct an integer. Use only for values that fit on 31 bits.
-   For larger values, use kinteger *)
-let integer (i: int) = Const (CInt64(Int64.of_int i, IInt, None))
-            
-let zero      = integer 0
-let one       = integer 1
-let mone      = integer (-1)
-
-(** Given the character c in a (CChr c), sign-extend it to 32 bits.
-  (This is the official way of interpreting character constants, according to
-  ISO C 6.4.4.4.10, which says that character constants are chars cast to ints)
-  Returns CInt64(sign-extened c, IInt, None) *)
-let charConstToInt (c: char) : constant =
-  let c' = Char.code c in
-  let value = 
-    if c' < 128 
-    then Int64.of_int c'
-    else Int64.of_int (c' - 256)
-  in
-  CInt64(value, IInt, None)
-  
-  
-let rec isInteger = function
-  | Const(CInt64 (n,_,_)) -> Some n
-  | Const(CChr c) -> isInteger (Const (charConstToInt c))  (* sign-extend *) 
-  | Const(CEnum(v, s, ei)) -> isInteger v
-  | CastE(_, e) -> isInteger e
-  | _ -> None
-        
-
-
-let rec isZero (e: exp) : bool = isInteger e = Some Int64.zero
-
-let voidType = TVoid([])
-let intType = TInt(IInt,[])
-let uintType = TInt(IUInt,[])
-let longType = TInt(ILong,[])
-let ulongType = TInt(IULong,[])
-let charType = TInt(IChar, [])
-
-let charPtrType = TPtr(charType,[])
-let charConstPtrType = TPtr(TInt(IChar, [Attr("const", [])]),[])
-let stringLiteralType = ref charPtrType
-
-let voidPtrType = TPtr(voidType, [])
-let intPtrType = TPtr(intType, [])
-let uintPtrType = TPtr(uintType, [])
-
-let doubleType = TFloat(FDouble, [])
-
-
-(* An integer type that fits pointers. Initialized by initCIL *)
-let upointType = ref voidType 
-
-(* An integer type that fits wchar_t. Initialized by initCIL *)
-let wcharKind = ref IChar
-let wcharType = ref voidType 
-
-
-(* An integer type that is the type of sizeof. Initialized by initCIL *)
-let typeOfSizeOf = ref voidType
-let kindOfSizeOf = ref IUInt
-
-let initCIL_called = ref false
-
-(** Returns true if and only if the given integer type is signed. *)
-let isSigned = function
-  | IUChar
-  | IUShort
-  | IUInt
-  | IULong
-  | IULongLong ->
-      false
-  | ISChar
-  | IShort
-  | IInt
-  | ILong
-  | ILongLong ->
-      true
-  | IChar ->
-      not !theMachine.M.char_is_unsigned
-
-let mkStmt (sk: stmtkind) : stmt = 
-  { skind = sk;
-    labels = [];
-    sid = -1; succs = []; preds = [] }
-
-let mkBlock (slst: stmt list) : block = 
-  { battrs = []; bstmts = slst; }
-
-let mkEmptyStmt () = mkStmt (Instr [])
-let mkStmtOneInstr (i: instr) = mkStmt (Instr [i])
-
-let dummyInstr = (Asm([], ["dummy statement!!"], [], [], [], lu))
-let dummyStmt =  mkStmt (Instr [dummyInstr])
-
-let compactStmts (b: stmt list) : stmt list =  
-      (* Try to compress statements. Scan the list of statements and remember 
-       * the last instrunction statement encountered, along with a Clist of 
-       * instructions in it. *)
-  let rec compress (lastinstrstmt: stmt) (* Might be dummStmt *)
-                   (lastinstrs: instr Clist.clist) 
-                   (body: stmt list) =
-    let finishLast (tail: stmt list) : stmt list = 
-      if lastinstrstmt == dummyStmt then tail
-      else begin
-        lastinstrstmt.skind <- Instr (Clist.toList lastinstrs);
-        lastinstrstmt :: tail
-      end
-    in
-    match body with 
-      [] -> finishLast []
-    | ({skind=Instr il} as s) :: rest ->
-        let ils = Clist.fromList il in
-        if lastinstrstmt != dummyStmt && s.labels == [] then
-          compress lastinstrstmt (Clist.append lastinstrs ils) rest
-        else
-          finishLast (compress s ils rest)
-
-    | s :: rest -> 
-        let res = s :: compress dummyStmt Clist.empty rest in
-        finishLast res
-  in
-  compress dummyStmt Clist.empty b
-
-
-(** Construct sorted lists of attributes ***)
-let rec addAttribute (Attr(an, _) as a: attribute) (al: attributes) = 
-  let rec insertSorted = function
-      [] -> [a]
-    | ((Attr(an0, _) as a0) :: rest) as l -> 
-        if an < an0 then a :: l
-        else if Util.equals a a0 then l (* Do not add if already in there *)
-        else a0 :: insertSorted rest (* Make sure we see all attributes with 
-                                      * this name *)
-  in
-  insertSorted al
-
-(** The second attribute list is sorted *)
-and addAttributes al0 (al: attributes) : attributes = 
-    if al0 == [] then al else
-    List.fold_left (fun acc a -> addAttribute a acc) al al0
-
-and dropAttribute (an: string) (al: attributes) = 
-  List.filter (fun (Attr(an', _)) -> an <> an') al
-
-and dropAttributes (anl: string list) (al: attributes) = 
-  List.fold_left (fun acc an -> dropAttribute an acc) al anl
-  
-and filterAttributes (s: string) (al: attribute list) : attribute list = 
-  List.filter (fun (Attr(an, _)) -> an = s) al
-
-(* sm: *)
-let hasAttribute s al =
-  (filterAttributes s al <> [])
-
-
-type attributeClass = 
-    AttrName of bool 
-        (* Attribute of a name. If argument is true and we are on MSVC then 
-         * the attribute is printed using __declspec as part of the storage 
-         * specifier  *)
-  | AttrFunType of bool 
-        (* Attribute of a function type. If argument is true and we are on 
-         * MSVC then the attribute is printed just before the function name *)
-
-  | AttrType  (* Attribute of a type *)
-
-(* This table contains the mapping of predefined attributes to classes. 
- * Extend this table with more attributes as you need. This table is used to 
- * determine how to associate attributes with names or type during cabs2cil 
- * conversion *)
-let attributeHash: (string, attributeClass) H.t = 
-  let table = H.create 13 in
-  List.iter (fun a -> H.add table a (AttrName false))
-    [ "section"; "constructor"; "destructor"; "unused"; "used"; "weak"; 
-      "no_instrument_function"; "alias"; "no_check_memory_usage";
-      "exception"; "model"; (* "restrict"; *)
-      "aconst"; "__asm__" (* Gcc uses this to specifiy the name to be used in 
-                           * assembly for a global  *)];
-
-  (* Now come the MSVC declspec attributes *)
-  List.iter (fun a -> H.add table a (AttrName true))
-    [ "thread"; "naked"; "dllimport"; "dllexport";
-      "selectany"; "allocate"; "nothrow"; "novtable"; "property";  "noreturn";
-      "uuid"; "align" ];
-
-  List.iter (fun a -> H.add table a (AttrFunType false))
-    [ "format"; "regparm"; "longcall"; 
-      "noinline"; "always_inline"; ];
-
-  List.iter (fun a -> H.add table a (AttrFunType true))
-    [ "stdcall";"cdecl"; "fastcall" ];
-
-  List.iter (fun a -> H.add table a AttrType)
-    [ "const"; "volatile"; "restrict"; "mode" ];
-  table
-      
-
-(* Partition the attributes into classes *)
-let partitionAttributes 
-    ~(default:attributeClass)  
-    (attrs:  attribute list) :
-    attribute list * attribute list * attribute list = 
-  let rec loop (n,f,t) = function
-      [] -> n, f, t
-    | (Attr(an, _) as a) :: rest -> 
-        match (try H.find attributeHash an with Not_found -> default) with 
-          AttrName _ -> loop (addAttribute a n, f, t) rest
-        | AttrFunType _ -> 
-            loop (n, addAttribute a f, t) rest
-        | AttrType -> loop (n, f, addAttribute a t) rest
-  in
-  loop ([], [], []) attrs
-
-
-(* Get the full name of a comp *)
-let compFullName comp = 
-  (if comp.cstruct then "struct " else "union ") ^ comp.cname
-
- 
-let missingFieldName = "___missing_field_name"
-
-(** Creates a a (potentially recursive) composite type. Make sure you add a 
-  * GTag for it to the file! **)
-let mkCompInfo
-      (isstruct: bool) 
-      (n: string)  
-      (* fspec is a function that when given a forward 
-       * representation of the structure type constructs the type of 
-       * the fields. The function can ignore this argument if not 
-       * constructing a recursive type.  *)
-       (mkfspec: compinfo -> (string * typ * int option * attribute list *
-                             location) list)   
-       (a: attribute list) : compinfo =
-
-  (* make an new name for anonymous structs *)
-   if n = "" then 
-     E.s (E.bug "mkCompInfo: missing structure name\n");
-   (* Make a new self cell and a forward reference *)
-   let comp = 
-     { cstruct = isstruct; cname = ""; ckey = 0; cfields = [];
-       cattr = a; creferenced = false; 
-       (* Make this compinfo undefined by default *)
-       cdefined = false; } 
-   in
-   comp.cname <- n;
-   comp.ckey <- !nextCompinfoKey;
-   incr nextCompinfoKey;
-   let flds = 
-       List.map (fun (fn, ft, fb, fa, fl) -> 
-          { fcomp = comp;
-            ftype = ft;
-            fname = fn;
-            fbitfield = fb;
-            fattr = fa;
-            floc = fl}) (mkfspec comp) in
-   comp.cfields <- flds;
-   if flds <> [] then comp.cdefined <- true;
-   comp
-
-(** Make a copy of a compinfo, changing the name and the key *)
-let copyCompInfo (ci: compinfo) (n: string) : compinfo = 
-  let ci' = {ci with cname = n; 
-                     ckey = !nextCompinfoKey; } in
-  incr nextCompinfoKey;
-  (* Copy the fields and set the new pointers to parents *)
-  ci'.cfields <- List.map (fun f -> {f with fcomp = ci'}) ci'.cfields;
-  ci'
-
-(**** Utility functions ******)
-
-let rec typeAttrs = function
-    TVoid a -> a
-  | TInt (_, a) -> a
-  | TFloat (_, a) -> a
-  | TNamed (t, a) -> addAttributes a (typeAttrs t.ttype)
-  | TPtr (_, a) -> a
-  | TArray (_, _, a) -> a
-  | TComp (comp, a) -> addAttributes comp.cattr a
-  | TEnum (enum, a) -> addAttributes enum.eattr a
-  | TFun (_, _, _, a) -> a
-  | TBuiltin_va_list a -> a
-
-
-let setTypeAttrs t a =
-  match t with
-    TVoid _ -> TVoid a
-  | TInt (i, _) -> TInt (i, a)
-  | TFloat (f, _) -> TFloat (f, a)
-  | TNamed (t, _) -> TNamed(t, a)
-  | TPtr (t', _) -> TPtr(t', a)
-  | TArray (t', l, _) -> TArray(t', l, a)
-  | TComp (comp, _) -> TComp (comp, a)
-  | TEnum (enum, _) -> TEnum (enum, a)
-  | TFun (r, args, v, _) -> TFun(r,args,v,a)
-  | TBuiltin_va_list _ -> TBuiltin_va_list a
-
-
-let typeAddAttributes a0 t =
-begin
-  match a0 with
-  | [] ->
-      (* no attributes, keep same type *)
-      t
-  | _ ->
-      (* anything else: add a0 to existing attributes *)
-      let add (a: attributes) = addAttributes a0 a in
-      match t with
-        TVoid a -> TVoid (add a)
-      | TInt (ik, a) -> TInt (ik, add a)
-      | TFloat (fk, a) -> TFloat (fk, add a)
-      | TEnum (enum, a) -> TEnum (enum, add a)
-      | TPtr (t, a) -> TPtr (t, add a)
-      | TArray (t, l, a) -> TArray (t, l, add a)
-      | TFun (t, args, isva, a) -> TFun(t, args, isva, add a)
-      | TComp (comp, a) -> TComp (comp, add a)
-      | TNamed (t, a) -> TNamed (t, add a)
-      | TBuiltin_va_list a -> TBuiltin_va_list (add a)
-end
-
-let typeRemoveAttributes (anl: string list) t = 
-  let drop (al: attributes) = dropAttributes anl al in
-  match t with 
-    TVoid a -> TVoid (drop a)
-  | TInt (ik, a) -> TInt (ik, drop a)
-  | TFloat (fk, a) -> TFloat (fk, drop a)
-  | TEnum (enum, a) -> TEnum (enum, drop a)
-  | TPtr (t, a) -> TPtr (t, drop a)
-  | TArray (t, l, a) -> TArray (t, l, drop a)
-  | TFun (t, args, isva, a) -> TFun(t, args, isva, drop a)
-  | TComp (comp, a) -> TComp (comp, drop a)
-  | TNamed (t, a) -> TNamed (t, drop a)
-  | TBuiltin_va_list a -> TBuiltin_va_list (drop a)
-
-let unrollType (t: typ) : typ = 
-  let rec withAttrs (al: attributes) (t: typ) : typ =     
-    match t with 
-      TNamed (r, a') -> withAttrs (addAttributes al a') r.ttype
-    | x -> typeAddAttributes al x
-  in
-  withAttrs [] t
-
-let rec unrollTypeDeep (t: typ) : typ = 
-  let rec withAttrs (al: attributes) (t: typ) : typ =     
-    match t with 
-      TNamed (r, a') -> withAttrs (addAttributes al a') r.ttype
-    | TPtr(t, a') -> TPtr(unrollTypeDeep t, addAttributes al a')
-    | TArray(t, l, a') -> TArray(unrollTypeDeep t, l, addAttributes al a')
-    | TFun(rt, args, isva, a') -> 
-        TFun (unrollTypeDeep rt, 
-              (match args with 
-                None -> None
-              | Some argl -> 
-                  Some (List.map (fun (an,at,aa) -> 
-                  (an, unrollTypeDeep at, aa)) argl)), 
-              isva, 
-              addAttributes al a')
-    | x -> typeAddAttributes al x
-  in
-  withAttrs [] t
-
-let isVoidType t = 
-  match unrollType t with
-    TVoid _ -> true
-  | _ -> false
-let isVoidPtrType t = 
-  match unrollType t with
-    TPtr(tau,_) when isVoidType tau -> true
-  | _ -> false
-
-let var vi : lval = (Var vi, NoOffset)
-(* let assign vi e = Instrs(Set (var vi, e), lu) *)
-
-let mkString s = Const(CStr s)
-
-
-let mkWhile ~(guard:exp) ~(body: stmt list) : stmt list = 
-  (* Do it like this so that the pretty printer recognizes it *)
-(*
-  [ mkStmt (Loop (mkBlock (mkStmt (If(guard, 
-                                      mkBlock [ mkEmptyStmt () ], 
-                                      mkBlock [ mkStmt (Break lu)], lu)) ::
-                           body), lu, None, None)) ]
-*)
-  [ mkStmt (While (guard, mkBlock body, lu)) ]
-
-
-
-let mkFor ~(start: stmt list) ~(guard: exp) ~(next: stmt list) 
-          ~(body: stmt list) : stmt list = 
-  (start @ 
-     (mkWhile guard (body @ next)))
-
-    
-let mkForIncr ~(iter : varinfo) ~(first: exp) ~stopat:(past: exp) ~(incr: exp) 
-    ~(body: stmt list) : stmt list = 
-      (* See what kind of operator we need *)
-  let compop, nextop = 
-    match unrollType iter.vtype with
-      TPtr _ -> Lt, PlusPI
-    | _ -> Lt, PlusA
-  in
-  mkFor 
-    [ mkStmt (Instr [(Set (var iter, first, lu))]) ]
-    (BinOp(compop, Lval(var iter), past, intType))
-    [ mkStmt (Instr [(Set (var iter, 
-                           (BinOp(nextop, Lval(var iter), incr, iter.vtype)),
-                           lu))])] 
-    body
-  
-
-let rec stripCasts (e: exp) = 
-  match e with CastE(_, e') -> stripCasts e' | _ -> e
-
-
-
-(* the name of the C function we call to get ccgr ASTs
-external parse : string -> file = "cil_main"
-*)
-(* 
-  Pretty Printing
- *)
-
-let d_ikind () = function
-    IChar -> text "char"
-  | ISChar -> text "signed char"
-  | IUChar -> text "unsigned char"
-  | IInt -> text "int"
-  | IUInt -> text "unsigned int"
-  | IShort -> text "short"
-  | IUShort -> text "unsigned short"
-  | ILong -> text "long"
-  | IULong -> text "unsigned long"
-  | ILongLong -> 
-      if !msvcMode then text "__int64" else text "long long"
-  | IULongLong -> 
-      if !msvcMode then text "unsigned __int64" 
-      else text "unsigned long long"
-
-let d_fkind () = function
-    FFloat -> text "float"
-  | FDouble -> text "double"
-  | FLongDouble -> text "long double"
-
-let d_storage () = function
-    NoStorage -> nil
-  | Static -> text "static "
-  | Extern -> text "extern "
-  | Register -> text "register "
-
-(* sm: need this value below *)
-let mostNeg32BitInt : int64 = (Int64.of_string "-0x80000000")
-let mostNeg64BitInt : int64 = (Int64.of_string "-0x8000000000000000")
-
-(* constant *)
-let d_const () c = 
-  match c with
-    CInt64(_, _, Some s) -> text s (* Always print the text if there is one *)
-  | CInt64(i, ik, None) -> 
-      (** We must make sure to capture the type of the constant. For some 
-       * constants this is done with a suffix, for others with a cast prefix.*)
-      let suffix : string = 
-        match ik with
-          IUInt -> "U"
-        | ILong -> "L"
-        | IULong -> "UL"
-        | ILongLong -> if !msvcMode then "L" else "LL"
-        | IULongLong -> if !msvcMode then "UL" else "ULL"
-        | _ -> ""
-      in
-      let prefix : string = 
-        if suffix <> "" then "" 
-        else if ik = IInt then ""
-        else "(" ^ (sprint !lineLength (d_ikind () ik)) ^ ")"
-      in
-      (* Watch out here for negative integers that we should be printing as 
-       * large positive ones *)
-      if i < Int64.zero 
-          && (match ik with 
-            IUInt | IULong | IULongLong | IUChar | IUShort -> true | _ -> false) then
-        let high = Int64.shift_right i 32 in
-        if ik <> IULongLong && ik <> ILongLong && high = Int64.of_int (-1) then
-          (* Print only the low order 32 bits *)
-          text (prefix ^ "0x" ^ 
-                (Int64.format "%x" 
-                  (Int64.logand i (Int64.shift_right_logical high 32))
-                ^ suffix))
-        else
-          text (prefix ^ "0x" ^ Int64.format "%x" i ^ suffix)
-      else (
-        if (i = mostNeg32BitInt) then
-          (* sm: quirk here: if you print -2147483648 then this is two tokens *)
-          (* in C, and the second one is too large to represent in a signed *)
-          (* int.. so we do what's done in limits.h, and print (-2147483467-1); *)
-          (* in gcc this avoids a warning, but it might avoid a real problem *)
-          (* on another compiler or a 64-bit architecture *)
-          text (prefix ^ "(-0x7FFFFFFF-1)")
-        else if (i = mostNeg64BitInt) then
-          (* The same is true of the largest 64-bit negative. *)
-          text (prefix ^ "(-0x7FFFFFFFFFFFFFFF-1)")
-        else
-          text (prefix ^ (Int64.to_string i ^ suffix))
-      )
-
-  | CStr(s) -> text ("\"" ^ escape_string s ^ "\"")
-  | CWStr(s) -> 
-      (* text ("L\"" ^ escape_string s ^ "\"")  *)
-      (List.fold_left (fun acc elt -> 
-        acc ++ 
-        if (elt >= Int64.zero &&
-            elt <= (Int64.of_int 255)) then 
-          text (escape_char (Char.chr (Int64.to_int elt)))
-        else
-          ( text (Printf.sprintf "\\x%LX\"" elt) ++ break ++
-            (text "\""))
-      ) (text "L\"") s ) ++ text "\""
-      (* we cannot print L"\xabcd" "feedme" as L"\xabcdfeedme" --
-       * the former has 7 wide characters and the later has 3. *)
-
-  | CChr(c) -> text ("'" ^ escape_char c ^ "'")
-  | CReal(_, _, Some s) -> text s
-  | CReal(f, _, None) -> text (string_of_float f)
-  | CEnum(_, s, ei) -> text s
-
-
-(* Parentheses level. An expression "a op b" is printed parenthesized if its 
- * parentheses level is >= that that of its context. Identifiers have the 
- * lowest level and weakly binding operators (e.g. |) have the largest level. 
- * The correctness criterion is that a smaller level MUST correspond to a 
- * stronger precedence!
- *)
-let derefStarLevel = 20
-let indexLevel = 20
-let arrowLevel = 20
-let addrOfLevel = 30
-let additiveLevel = 60
-let comparativeLevel = 70
-let bitwiseLevel = 75
-let getParenthLevel = function
-  | BinOp((LAnd | LOr), _,_,_) -> 80
-                                        (* Bit operations. *)
-  | BinOp((BOr|BXor|BAnd),_,_,_) -> bitwiseLevel (* 75 *)
-
-                                        (* Comparisons *)
-  | BinOp((Eq|Ne|Gt|Lt|Ge|Le),_,_,_) ->
-      comparativeLevel (* 70 *)
-                                        (* Additive. Shifts can have higher 
-                                         * level than + or - but I want 
-                                         * parentheses around them *)
-  | BinOp((MinusA|MinusPP|MinusPI|PlusA|
-           PlusPI|IndexPI|Shiftlt|Shiftrt),_,_,_)  
-    -> additiveLevel (* 60 *)
-
-                                        (* Multiplicative *)
-  | BinOp((Div|Mod|Mult),_,_,_) -> 40
-
-                                        (* Unary *)
-  | CastE(_,_) -> 30
-  | AddrOf(_) -> 30
-  | StartOf(_) -> 30
-  | UnOp((Neg|BNot|LNot),_,_) -> 30
-
-                                        (* Lvals *)
-  | Lval(Mem _ , _) -> 20                   
-  | Lval(Var _, (Field _|Index _)) -> 20
-  | SizeOf _ | SizeOfE _ | SizeOfStr _ -> 20
-  | AlignOf _ | AlignOfE _ -> 20
-
-  | Lval(Var _, NoOffset) -> 0        (* Plain variables *)
-  | Const _ -> 0                        (* Constants *)
-
-
-
-(* Separate out the storage-modifier name attributes *)
-let separateStorageModifiers (al: attribute list) = 
-  let isstoragemod (Attr(an, _): attribute) : bool =
-    try 
-      match H.find attributeHash an with
-        AttrName issm -> issm
-      | _ -> E.s (E.bug "separateStorageModifier: %s is not a name attribute" an)
-    with Not_found -> false
-  in
-    let stom, rest = List.partition isstoragemod al in
-    if not !msvcMode then
-      stom, rest
-    else
-      (* Put back the declspec. Put it without the leading __ since these will 
-       * be added later *)
-      let stom' = 
-	List.map (fun (Attr(an, args)) -> 
-          Attr("declspec", [ACons(an, args)])) stom in
-      stom', rest
-
-
-let isIntegralType t = 
-  match unrollType t with
-    (TInt _ | TEnum _) -> true
-  | _ -> false
-
-let isArithmeticType t = 
-  match unrollType t with
-    (TInt _ | TEnum _ | TFloat _) -> true
-  | _ -> false
-    
-
-let isPointerType t = 
-  match unrollType t with
-    TPtr _ -> true
-  | _ -> false
-
-let isFunctionType t = 
-  match unrollType t with
-    TFun _ -> true
-  | _ -> false
-
-(**** Compute the type of an expression ****)
-let rec typeOf (e: exp) : typ = 
-  match e with
-  | Const(CInt64 (_, ik, _)) -> TInt(ik, [])
-
-    (* Character constants have type int.  ISO/IEC 9899:1999 (E),
-     * section 6.4.4.4 [Character constants], paragraph 10, if you
-     * don't believe me. *)
-  | Const(CChr _) -> intType
-
-    (* The type of a string is a pointer to characters ! The only case when 
-     * you would want it to be an array is as an argument to sizeof, but we 
-     * have SizeOfStr for that *)
-  | Const(CStr s) -> !stringLiteralType
-
-  | Const(CWStr s) -> TPtr(!wcharType,[])
-
-  | Const(CReal (_, fk, _)) -> TFloat(fk, [])
-
-  | Const(CEnum(_, _, ei)) -> TEnum(ei, [])
-
-  | Lval(lv) -> typeOfLval lv
-  | SizeOf _ | SizeOfE _ | SizeOfStr _ -> !typeOfSizeOf
-  | AlignOf _ | AlignOfE _ -> !typeOfSizeOf
-  | UnOp (_, _, t) -> t
-  | BinOp (_, _, _, t) -> t
-  | CastE (t, _) -> t
-  | AddrOf (lv) -> TPtr(typeOfLval lv, [])
-  | StartOf (lv) -> begin
-      match unrollType (typeOfLval lv) with
-        TArray (t,_, _) -> TPtr(t, [])
-     | _ -> E.s (E.bug "typeOf: StartOf on a non-array")
-  end
-      
-and typeOfInit (i: init) : typ = 
-  match i with 
-    SingleInit e -> typeOf e
-  | CompoundInit (t, _) -> t
-
-and typeOfLval = function
-    Var vi, off -> typeOffset vi.vtype off
-  | Mem addr, off -> begin
-      match unrollType (typeOf addr) with
-        TPtr (t, _) -> typeOffset t off
-      | _ -> E.s (bug "typeOfLval: Mem on a non-pointer")
-  end
-
-and typeOffset basetyp =
-  let blendAttributes baseAttrs =
-    let (_, _, contageous) = 
-      partitionAttributes ~default:(AttrName false) baseAttrs in
-    typeAddAttributes contageous
-  in
-  function
-    NoOffset -> basetyp
-  | Index (_, o) -> begin
-      match unrollType basetyp with
-        TArray (t, _, baseAttrs) ->
-	  let elementType = typeOffset t o in
-	  blendAttributes baseAttrs elementType
-      | t -> E.s (E.bug "typeOffset: Index on a non-array")
-  end 
-  | Field (fi, o) ->
-      match unrollType basetyp with
-        TComp (_, baseAttrs) ->
-	  let fieldType = typeOffset fi.ftype o in
-	  blendAttributes baseAttrs fieldType
-      | _ -> E.s (bug "typeOffset: Field on a non-compound")
-
-
-(**
- **
- ** MACHINE DEPENDENT PART
- **
- **)
-exception SizeOfError of string * typ
-
-        
-(* Get the minimum aligment in bytes for a given type *)
-let rec alignOf_int = function
-  | TInt((IChar|ISChar|IUChar), _) -> 1
-  | TInt((IShort|IUShort), _) -> !theMachine.M.alignof_short
-  | TInt((IInt|IUInt), _) -> !theMachine.M.alignof_int
-  | TInt((ILong|IULong), _) -> !theMachine.M.alignof_long
-  | TInt((ILongLong|IULongLong), _) -> !theMachine.M.alignof_longlong
-  | TEnum _ -> !theMachine.M.alignof_enum
-  | TFloat(FFloat, _) -> !theMachine.M.alignof_float 
-  | TFloat(FDouble, _) -> !theMachine.M.alignof_double
-  | TFloat(FLongDouble, _) -> !theMachine.M.alignof_longdouble
-  | TNamed (t, _) -> alignOf_int t.ttype
-  | TArray (t, _, _) -> alignOf_int t
-  | TPtr _ | TBuiltin_va_list _ -> !theMachine.M.alignof_ptr
-
-        (* For composite types get the maximum alignment of any field inside *)
-  | TComp (c, _) ->
-      (* On GCC the zero-width fields do not contribute to the alignment. On 
-       * MSVC only those zero-width that _do_ appear after other 
-       * bitfields contribute to the alignment. So we drop those that 
-       * do not occur after othe bitfields *)
-      let rec dropZeros (afterbitfield: bool) = function
-        | f :: rest when f.fbitfield = Some 0 && not afterbitfield -> 
-            dropZeros afterbitfield rest
-        | f :: rest -> f :: dropZeros (f.fbitfield <> None) rest
-        | [] -> []
-      in
-      let fields = dropZeros false c.cfields in
-      List.fold_left 
-        (fun sofar f -> 
-          (* Bitfields with zero width do not contribute to the alignment in 
-           * GCC *)
-          if not !msvcMode && f.fbitfield = Some 0 then sofar else
-          max sofar (alignOf_int f.ftype)) 1 fields
-        (* These are some error cases *)
-  | TFun _ when not !msvcMode -> !theMachine.M.alignof_fun
-      
-  | TFun _ as t -> raise (SizeOfError ("function", t))
-  | TVoid _ as t -> raise (SizeOfError ("void", t))
-      
-
-let bitsSizeOfInt (ik: ikind): int = 
-  match ik with 
-  | IChar | ISChar | IUChar -> 8 
-  | IInt | IUInt -> 8 * !theMachine.M.sizeof_int
-  | IShort | IUShort -> 8 * !theMachine.M.sizeof_short
-  | ILong | IULong -> 8 * !theMachine.M.sizeof_long
-  | ILongLong | IULongLong -> 8 * !theMachine.M.sizeof_longlong
-
-(* Represents an integer as for a given kind. 
-   Returns a flag saying whether the value was changed
-   during truncation (because it was too large to fit in k). *)
-let truncateInteger64 (k: ikind) (i: int64) : int64 * bool = 
-  let nrBits = bitsSizeOfInt k in
-  let signed = isSigned k in
-  if nrBits = 64 then 
-    i, false
-  else begin
-    let i1 = Int64.shift_left i (64 - nrBits) in
-    let i2 = 
-      if signed then Int64.shift_right i1 (64 - nrBits) 
-      else Int64.shift_right_logical i1 (64 - nrBits)
-    in
-    let truncated =
-      if i2 = i then false
-      else
-        (* Examine the bits that we chopped off.  If they are all zero, then
-         * any difference between i2 and i is due to a simple sign-extension.
-         *   e.g. casting the constant 0x80000000 to int makes it
-         *        0xffffffff80000000.
-         * Suppress the truncation warning in this case.      *)
-        let chopped = Int64.shift_right_logical i (64 - nrBits)
-        in chopped <> Int64.zero
-    in
-    i2, truncated
-  end
-
-(* Construct an integer constant with possible truncation *)
-let kinteger64 (k: ikind) (i: int64) : exp = 
-  let i', truncated = truncateInteger64 k i in
-  if truncated then 
-    ignore (warnOpt "Truncating integer %s to %s\n" 
-              (Int64.format "0x%x" i) (Int64.format "0x%x" i'));
-  Const (CInt64(i', k,  None))
-
-(* Construct an integer of a given kind. *)
-let kinteger (k: ikind) (i: int) = kinteger64 k (Int64.of_int i)
-
-     
-type offsetAcc = 
-    { oaFirstFree: int;        (* The first free bit *)
-      oaLastFieldStart: int;   (* Where the previous field started *)
-      oaLastFieldWidth: int;   (* The width of the previous field. Might not 
-                                * be same as FirstFree - FieldStart because 
-                                * of internal padding *)
-      oaPrevBitPack: (int * ikind * int) option; (* If the previous fields 
-                                                   * were packed bitfields, 
-                                                   * the bit where packing 
-                                                   * has started, the ikind 
-                                                   * of the bitfield and the 
-                                                   * width of the ikind *)
-    } 
-
-
-(* GCC version *)
-(* Does not use the sofar.oaPrevBitPack *)
-let rec offsetOfFieldAcc_GCC (fi: fieldinfo) 
-                             (sofar: offsetAcc) : offsetAcc = 
-  (* field type *)
-  let ftype = unrollType fi.ftype in
-  let ftypeAlign = 8 * alignOf_int ftype in
-  let ftypeBits = bitsSizeOf ftype in
-(*
-  if fi.fcomp.cname = "comp2468" ||
-     fi.fcomp.cname = "comp2469" ||
-     fi.fcomp.cname = "comp2470" ||
-     fi.fcomp.cname = "comp2471" ||
-     fi.fcomp.cname = "comp2472" ||
-     fi.fcomp.cname = "comp2473" ||
-     fi.fcomp.cname = "comp2474" ||
-     fi.fcomp.cname = "comp2475" ||
-     fi.fcomp.cname = "comp2476" ||
-     fi.fcomp.cname = "comp2477" ||
-     fi.fcomp.cname = "comp2478" then
-
-    ignore (E.log "offsetOfFieldAcc_GCC(%s of %s:%a%a,firstFree=%d,pack=%a)\n" 
-              fi.fname fi.fcomp.cname 
-              d_type ftype
-              insert
-              (match fi.fbitfield with
-                None -> nil
-              | Some wdthis -> dprintf ":%d" wdthis)
-              sofar.oaFirstFree 
-              insert
-              (match sofar.oaPrevBitPack with 
-                None -> text "None"
-              | Some (packstart, _, wdpack) -> 
-                  dprintf "Some(packstart=%d,wd=%d)"
-                    packstart wdpack));
-*)
-  match ftype, fi.fbitfield with
-    (* A width of 0 means that we must end the current packing. It seems that 
-     * GCC pads only up to the alignment boundary for the type of this field. 
-     * *)
-  | _, Some 0 -> 
-      let firstFree      = addTrailing sofar.oaFirstFree ftypeAlign in
-      { oaFirstFree      = firstFree;
-        oaLastFieldStart = firstFree;
-        oaLastFieldWidth = 0;
-        oaPrevBitPack    = None }
-
-    (* A bitfield cannot span more alignment boundaries of its type than the 
-     * type itself *)
-  | _, Some wdthis 
-      when (sofar.oaFirstFree + wdthis + ftypeAlign - 1) / ftypeAlign 
-            - sofar.oaFirstFree / ftypeAlign > ftypeBits / ftypeAlign -> 
-          let start = addTrailing sofar.oaFirstFree ftypeAlign in    
-          { oaFirstFree      = start + wdthis;
-            oaLastFieldStart = start;
-            oaLastFieldWidth = wdthis;
-            oaPrevBitPack    = None }
-        
-   (* Try a simple method. Just put the field down *)
-  | _, Some wdthis -> 
-      { oaFirstFree      = sofar.oaFirstFree + wdthis;
-        oaLastFieldStart = sofar.oaFirstFree; 
-        oaLastFieldWidth = wdthis;
-        oaPrevBitPack    = None
-      } 
-
-     (* Non-bitfield *)
-  | _, None -> 
-      (* Align this field *)
-      let newStart = addTrailing sofar.oaFirstFree ftypeAlign  in
-      { oaFirstFree = newStart + ftypeBits;
-        oaLastFieldStart = newStart;
-        oaLastFieldWidth = ftypeBits;
-        oaPrevBitPack = None;
-      } 
-
-(* MSVC version *)
-and offsetOfFieldAcc_MSVC (fi: fieldinfo) 
-                              (sofar: offsetAcc) : offsetAcc = 
-  (* field type *)
-  let ftype = unrollType fi.ftype in
-  let ftypeAlign = 8 * alignOf_int ftype in
-  let ftypeBits = bitsSizeOf ftype in
-(*
-  ignore (E.log "offsetOfFieldAcc_MSVC(%s of %s:%a%a,firstFree=%d, pack=%a)\n" 
-            fi.fname fi.fcomp.cname 
-            d_type ftype
-            insert
-            (match fi.fbitfield with
-              None -> nil
-            | Some wdthis -> dprintf ":%d" wdthis)
-            sofar.oaFirstFree 
-            insert
-            (match sofar.oaPrevBitPack with 
-              None -> text "None"
-            | Some (prevpack, _, wdpack) -> dprintf "Some(prev=%d,wd=%d)"
-                  prevpack wdpack));
-*)
-  match ftype, fi.fbitfield, sofar.oaPrevBitPack with
-    (* Ignore zero-width bitfields that come after non-bitfields *)
-  | TInt (ikthis, _), Some 0, None -> 
-      let firstFree      = sofar.oaFirstFree in
-      { oaFirstFree      = firstFree;
-        oaLastFieldStart = firstFree;
-        oaLastFieldWidth = 0;
-        oaPrevBitPack    = None }
-
-    (* If we are in a bitpack and we see a bitfield for a type with the 
-     * different width than the pack, then we finish the pack and retry *)
-  | _, Some _, Some (packstart, _, wdpack) when wdpack != ftypeBits ->
-      let firstFree = 
-        if sofar.oaFirstFree = packstart then packstart else
-        packstart + wdpack
-      in
-      offsetOfFieldAcc_MSVC fi
-        { oaFirstFree      = addTrailing firstFree ftypeAlign;
-          oaLastFieldStart = sofar.oaLastFieldStart;
-          oaLastFieldWidth = sofar.oaLastFieldWidth;
-          oaPrevBitPack    = None }
-
-    (* A width of 0 means that we must end the current packing. *)
-  | TInt (ikthis, _), Some 0, Some (packstart, _, wdpack) -> 
-      let firstFree = 
-        if sofar.oaFirstFree = packstart then packstart else
-        packstart + wdpack
-      in
-      let firstFree      = addTrailing firstFree ftypeAlign in
-      { oaFirstFree      = firstFree;
-        oaLastFieldStart = firstFree;
-        oaLastFieldWidth = 0;
-        oaPrevBitPack    = Some (firstFree, ikthis, ftypeBits) }
-
-   (* Check for a bitfield that fits in the current pack after some other 
-    * bitfields *)
-  | TInt(ikthis, _), Some wdthis, Some (packstart, ikprev, wdpack)
-      when  packstart + wdpack >= sofar.oaFirstFree + wdthis ->
-              { oaFirstFree = sofar.oaFirstFree + wdthis;
-                oaLastFieldStart = sofar.oaFirstFree; 
-                oaLastFieldWidth = wdthis;
-                oaPrevBitPack = sofar.oaPrevBitPack
-              } 
-
-
-  | _, _, Some (packstart, _, wdpack) -> (* Finish up the bitfield pack and 
-                                          * restart. *)
-      let firstFree = 
-        if sofar.oaFirstFree = packstart then packstart else
-        packstart + wdpack
-      in
-      offsetOfFieldAcc_MSVC fi
-        { oaFirstFree      = addTrailing firstFree ftypeAlign;
-          oaLastFieldStart = sofar.oaLastFieldStart;
-          oaLastFieldWidth = sofar.oaLastFieldWidth;
-          oaPrevBitPack    = None }
-
-        (* No active bitfield pack. But we are seeing a bitfield. *)
-  | TInt(ikthis, _), Some wdthis, None -> 
-      let firstFree     = addTrailing sofar.oaFirstFree ftypeAlign in
-      { oaFirstFree     = firstFree + wdthis;
-        oaLastFieldStart = firstFree;
-        oaLastFieldWidth = wdthis;
-        oaPrevBitPack = Some (firstFree, ikthis, ftypeBits); }
-
-     (* No active bitfield pack. Non-bitfield *)
-  | _, None, None -> 
-      (* Align this field *)
-      let firstFree = addTrailing sofar.oaFirstFree ftypeAlign  in
-      { oaFirstFree = firstFree + ftypeBits;
-        oaLastFieldStart = firstFree;
-        oaLastFieldWidth = ftypeBits;
-        oaPrevBitPack = None;
-      } 
-
-  | _, Some _, None -> E.s (E.bug "offsetAcc")
-
-
-and offsetOfFieldAcc ~(fi: fieldinfo) 
-                     ~(sofar: offsetAcc) : offsetAcc = 
-  if !msvcMode then offsetOfFieldAcc_MSVC fi sofar
-  else offsetOfFieldAcc_GCC fi sofar
-
-(* The size of a type, in bits. If struct or array then trailing padding is 
- * added *)
-and bitsSizeOf t = 
-  if not !initCIL_called then 
-    E.s (E.error "You did not call Cil.initCIL before using the CIL library");
-  match t with 
-  | TInt (ik,_) -> bitsSizeOfInt ik
-  | TFloat(FDouble, _) -> 8 * !theMachine.M.sizeof_double
-  | TFloat(FLongDouble, _) -> 8 * !theMachine.M.sizeof_longdouble
-  | TFloat _ -> 8 * !theMachine.M.sizeof_float
-  | TEnum _ -> 8 * !theMachine.M.sizeof_enum
-  | TPtr _ -> 8 * !theMachine.M.sizeof_ptr
-  | TBuiltin_va_list _ -> 8 * !theMachine.M.sizeof_ptr
-  | TNamed (t, _) -> bitsSizeOf t.ttype
-  | TComp (comp, _) when comp.cfields == [] -> begin
-      (* Empty structs are allowed in msvc mode *)
-      if not comp.cdefined && not !msvcMode then
-        raise (SizeOfError ("abstract type", t)) (*abstract type*)
-      else
-        0
-  end
-
-  | TComp (comp, _) when comp.cstruct -> (* Struct *)
-        (* Go and get the last offset *)
-      let startAcc = 
-        { oaFirstFree = 0;
-          oaLastFieldStart = 0;
-          oaLastFieldWidth = 0;
-          oaPrevBitPack = None;
-        } in
-      let lastoff = 
-        List.fold_left (fun acc fi -> offsetOfFieldAcc ~fi ~sofar:acc) 
-          startAcc comp.cfields 
-      in
-      if !msvcMode && lastoff.oaFirstFree = 0 && comp.cfields <> [] then
-          (* On MSVC if we have just a zero-width bitfields then the length 
-           * is 32 and is not padded  *)
-        32
-      else
-        addTrailing lastoff.oaFirstFree (8 * alignOf_int t)
-        
-  | TComp (comp, _) -> (* when not comp.cstruct *)
-        (* Get the maximum of all fields *)
-      let startAcc = 
-        { oaFirstFree = 0;
-          oaLastFieldStart = 0;
-          oaLastFieldWidth = 0;
-          oaPrevBitPack = None;
-        } in
-      let max = 
-        List.fold_left (fun acc fi -> 
-          let lastoff = offsetOfFieldAcc ~fi ~sofar:startAcc in
-          if lastoff.oaFirstFree > acc then
-            lastoff.oaFirstFree else acc) 0 comp.cfields in
-        (* Add trailing by simulating adding an extra field *)
-      addTrailing max (8 * alignOf_int t)
-
-  | TArray(t, Some len, _) -> begin
-      match constFold true len with 
-        Const(CInt64(l,_,_)) -> 
-          addTrailing ((bitsSizeOf t) * (Int64.to_int l)) (8 * alignOf_int t)
-      | _ -> raise (SizeOfError ("array non-constant length", t))
-  end
-
-
-  | TVoid _ -> 8 * !theMachine.M.sizeof_void
-  | TFun _ when not !msvcMode -> (* On GCC the size of a function is defined *)
-      8 * !theMachine.M.sizeof_fun
-
-  | TArray (_, None, _) -> (* it seems that on GCC the size of such an 
-                            * array is 0 *) 
-      0
-
-  | TFun _ -> raise (SizeOfError ("function", t))
-
-
-and addTrailing nrbits roundto = 
-    (nrbits + roundto - 1) land (lnot (roundto - 1))
-
-and sizeOf t = 
-  try
-    integer ((bitsSizeOf t) lsr 3)
-  with SizeOfError _ -> SizeOf(t)
-
- 
-and bitsOffset (baset: typ) (off: offset) : int * int = 
-  let rec loopOff (baset: typ) (width: int) (start: int) = function
-      NoOffset -> start, width
-    | Index(e, off) -> begin
-        let ei = 
-          match isInteger e with
-            Some i64 -> Int64.to_int i64
-          | None -> raise (SizeOfError ("index not constant", baset))
-        in
-        let bt = 
-          match unrollType baset with
-            TArray(bt, _, _) -> bt
-          | _ -> E.s (E.bug "bitsOffset: Index on a non-array")
-        in
-        let bitsbt = bitsSizeOf bt in
-        loopOff bt bitsbt (start + ei * bitsbt) off
-    end
-    | Field(f, off) when not f.fcomp.cstruct -> 
-        (* All union fields start at offset 0 *)
-        loopOff f.ftype (bitsSizeOf f.ftype) start off
-
-    | Field(f, off) -> 
-        (* Construct a list of fields preceeding and including this one *)
-        let prevflds = 
-          let rec loop = function
-              [] -> E.s (E.bug "bitsOffset: Cannot find field %s in %s\n" 
-                           f.fname f.fcomp.cname)
-            | fi' :: _ when fi' == f -> [fi']
-            | fi' :: rest -> fi' :: loop rest
-          in
-          loop f.fcomp.cfields
-        in
-        let lastoff =
-          List.fold_left (fun acc fi' -> offsetOfFieldAcc ~fi:fi' ~sofar:acc)
-            { oaFirstFree      = 0; (* Start at 0 because each struct is done 
-                                     * separately *)
-              oaLastFieldStart = 0;
-              oaLastFieldWidth = 0;
-              oaPrevBitPack    = None } prevflds
-        in
-        (* ignore (E.log "Field %s of %s: start=%d, lastFieldStart=%d\n"
-                  f.fname f.fcomp.cname start lastoff.oaLastFieldStart); *)
-        loopOff f.ftype lastoff.oaLastFieldWidth 
-               (start + lastoff.oaLastFieldStart) off
-  in
-  loopOff baset (bitsSizeOf baset) 0 off
-        
-
-
-
-(*** Constant folding. If machdep is true then fold even sizeof operations ***)
-and constFold (machdep: bool) (e: exp) : exp = 
-  match e with
-    BinOp(bop, e1, e2, tres) -> constFoldBinOp machdep bop e1 e2 tres
-  | UnOp(unop, e1, tres) -> begin
-      try
-        let tk = 
-          match unrollType tres with
-            TInt(ik, _) -> ik
-          | TEnum _ -> IInt
-          | _ -> raise Not_found (* probably a float *)
-        in
-        match constFold machdep e1 with
-          Const(CInt64(i,ik,_)) -> begin
-            match unop with 
-              Neg -> kinteger64 tk (Int64.neg i)
-            | BNot -> kinteger64 tk (Int64.lognot i)
-            | LNot -> if i = Int64.zero then one else zero
-            end
-        | e1c -> UnOp(unop, e1c, tres)
-      with Not_found -> e
-  end
-        (* Characters are integers *)
-  | Const(CChr c) -> Const(charConstToInt c)
-  | Const(CEnum (v, _, _)) -> constFold machdep v
-  | SizeOf t when machdep -> begin
-      try
-        let bs = bitsSizeOf t in
-        kinteger !kindOfSizeOf (bs / 8)
-      with SizeOfError _ -> e
-  end
-  | SizeOfE e when machdep -> constFold machdep (SizeOf (typeOf e))
-  | SizeOfStr s when machdep -> kinteger !kindOfSizeOf (1 + String.length s)
-  | AlignOf t when machdep -> kinteger !kindOfSizeOf (alignOf_int t)
-  | AlignOfE e when machdep -> begin
-      (* The alignmetn of an expression is not always the alignment of its 
-       * type. I know that for strings this is not true *)
-      match e with 
-        Const (CStr _) when not !msvcMode -> 
-          kinteger !kindOfSizeOf !theMachine.M.alignof_str
-            (* For an array, it is the alignment of the array ! *)
-      | _ -> constFold machdep (AlignOf (typeOf e))
-  end
-
-  | CastE(it, 
-          AddrOf (Mem (CastE(TPtr(bt, _), z)), off)) 
-    when machdep && isZero z -> begin
-      try 
-        let start, width = bitsOffset bt off in
-        if start mod 8 <> 0 then 
-          E.s (error "Using offset of bitfield\n");
-        constFold machdep (CastE(it, (integer (start / 8))))
-      with SizeOfError _ -> e
-  end
-
- 
-  | CastE (t, e) -> begin
-      match constFold machdep e, unrollType t with 
-        (* Might truncate silently *)
-        Const(CInt64(i,k,_)), TInt(nk,_) -> 
-          let i', _ = truncateInteger64 nk i in
-          Const(CInt64(i', nk, None))
-      | e', _ -> CastE (t, e')
-  end
-
-  | _ -> e
-
-and constFoldBinOp (machdep: bool) bop e1 e2 tres = 
-  let e1' = constFold machdep e1 in
-  let e2' = constFold machdep e2 in
-  if isIntegralType tres then begin
-    let newe = 
-      let rec mkInt = function
-          Const(CChr c) -> Const(charConstToInt c)
-        | Const(CEnum (v, s, ei)) -> mkInt v
-        | CastE(TInt (ik, ta), e) -> begin
-            match mkInt e with
-              Const(CInt64(i, _, _)) -> 
-                let i', _ = truncateInteger64 ik i in
-                Const(CInt64(i', ik, None))
-
-            | e' -> CastE(TInt(ik, ta), e')
-        end
-        | e -> e
-      in
-      let tk = 
-        match unrollType tres with
-          TInt(ik, _) -> ik
-        | TEnum _ -> IInt
-        | _ -> E.s (bug "constFoldBinOp")
-      in
-      (* See if the result is unsigned *)
-      let isunsigned typ = not (isSigned typ) in
-      let ge (unsigned: bool) (i1: int64) (i2: int64) : bool = 
-        if unsigned then 
-          let l1 = Int64.shift_right_logical i1 1 in
-          let l2 = Int64.shift_right_logical i2 1 in (* Both positive now *)
-          (l1 > l2) || (l1 = l2 && 
-                        Int64.logand i1 Int64.one >= Int64.logand i2 Int64.one)
-        else i1 >= i2
-      in
-      let shiftInBounds i2 =
-        (* We only try to fold shifts if the second arg is positive and 
-           less than 64.  Otherwise, the semantics are processor-dependent,
-           so let the compiler sort it out. *)
-        i2 >= Int64.zero && i2 < (Int64.of_int 64)
-      in
-      (* Assume that the necessary promotions have been done *)
-      match bop, mkInt e1', mkInt e2' with
-      | PlusA, Const(CInt64(z,_,_)), e2'' when z = Int64.zero -> e2''
-      | PlusA, e1'', Const(CInt64(z,_,_)) when z = Int64.zero -> e1''
-      | PlusPI, e1'', Const(CInt64(z,_,_)) when z = Int64.zero -> e1''
-      | IndexPI, e1'', Const(CInt64(z,_,_)) when z = Int64.zero -> e1''
-      | MinusPI, e1'', Const(CInt64(z,_,_)) when z = Int64.zero -> e1''
-      | PlusA, Const(CInt64(i1,ik1,_)),Const(CInt64(i2,ik2,_)) when ik1 = ik2 -> 
-          kinteger64 tk (Int64.add i1 i2)
-      | MinusA, Const(CInt64(i1,ik1,_)),Const(CInt64(i2,ik2,_)) when ik1 = ik2 -> 
-          kinteger64 tk (Int64.sub i1 i2)
-      | Mult, Const(CInt64(i1,ik1,_)), Const(CInt64(i2,ik2,_)) when ik1 = ik2 -> 
-          kinteger64 tk (Int64.mul i1 i2)
-      | Mult, Const(CInt64(0L,_,_)), _ -> zero
-      | Mult, Const(CInt64(1L,_,_)), e2'' -> e2''
-      | Mult, _,    Const(CInt64(0L,_,_)) -> zero
-      | Mult, e1'', Const(CInt64(1L,_,_)) -> e1''
-      | Div, Const(CInt64(i1,ik1,_)),Const(CInt64(i2,ik2,_)) when ik1 = ik2 -> begin
-          try kinteger64 tk (Int64.div i1 i2)
-          with Division_by_zero -> BinOp(bop, e1', e2', tres)
-      end
-      | Div, e1'', Const(CInt64(1L,_,_)) -> e1''
-
-      | Mod, Const(CInt64(i1,ik1,_)),Const(CInt64(i2,ik2,_)) when ik1 = ik2 -> begin
-          try kinteger64 tk (Int64.rem i1 i2)
-          with Division_by_zero -> BinOp(bop, e1', e2', tres) 
-      end
-      | BAnd, Const(CInt64(i1,ik1,_)),Const(CInt64(i2,ik2,_)) when ik1 = ik2 -> 
-          kinteger64 tk (Int64.logand i1 i2)
-      | BAnd, Const(CInt64(0L,_,_)), _ -> zero
-      | BAnd, _, Const(CInt64(0L,_,_)) -> zero
-      | BOr, Const(CInt64(i1,ik1,_)),Const(CInt64(i2,ik2,_)) when ik1 = ik2 -> 
-          kinteger64 tk (Int64.logor i1 i2)
-      | BOr, _, _ when isZero e1' -> e2'
-      | BOr, _, _ when isZero e2' -> e1'
-      | BXor, Const(CInt64(i1,ik1,_)),Const(CInt64(i2,ik2,_)) when ik1 = ik2 -> 
-          kinteger64 tk (Int64.logxor i1 i2)
-
-      | Shiftlt, Const(CInt64(i1,ik1,_)),Const(CInt64(i2,_,_)) when shiftInBounds i2 -> 
-          kinteger64 tk (Int64.shift_left i1 (Int64.to_int i2))
-      | Shiftlt, Const(CInt64(0L,_,_)), _ -> zero
-      | Shiftlt, e1'', Const(CInt64(0L,_,_)) -> e1''
-
-      | Shiftrt, Const(CInt64(i1,ik1,_)),Const(CInt64(i2,_,_)) when shiftInBounds i2 -> 
-          if isunsigned ik1 then 
-            kinteger64 tk (Int64.shift_right_logical i1 (Int64.to_int i2))
-          else
-            kinteger64 tk (Int64.shift_right i1 (Int64.to_int i2))
-      | Shiftrt, Const(CInt64(0L,_,_)), _ -> zero
-      | Shiftrt, e1'', Const(CInt64(0L,_,_)) -> e1''
-
-      | Eq, Const(CInt64(i1,ik1,_)),Const(CInt64(i2,ik2,_)) when ik1 = ik2 -> 
-          integer (if i1 = i2 then 1 else 0)
-      | Ne, Const(CInt64(i1,ik1,_)),Const(CInt64(i2,ik2,_)) when ik1 = ik2 -> 
-          integer (if i1 <> i2 then 1 else 0)
-      | Le, Const(CInt64(i1,ik1,_)),Const(CInt64(i2,ik2,_)) when ik1 = ik2 ->
-          integer (if ge (isunsigned ik1) i2 i1 then 1 else 0)
-
-      | Ge, Const(CInt64(i1,ik1,_)),Const(CInt64(i2,ik2,_)) when ik1 = ik2 ->
-          integer (if ge (isunsigned ik1) i1 i2 then 1 else 0)
-
-      | Lt, Const(CInt64(i1,ik1,_)),Const(CInt64(i2,ik2,_)) when ik1 = ik2 ->
-          integer (if i1 <> i2 && ge (isunsigned ik1) i2 i1 then 1 else 0)
-
-      | Gt, Const(CInt64(i1,ik1,_)),Const(CInt64(i2,ik2,_)) when ik1 = ik2 ->
-          integer (if i1 <> i2 && ge (isunsigned ik1) i1 i2 then 1 else 0)
-      | LAnd, _, _ when isZero e1' || isZero e2' -> zero
-      | LOr, _, _ when isZero e1' -> e2'
-      | LOr, _, _ when isZero e2' -> e1'
-      | _ -> BinOp(bop, e1', e2', tres)
-    in
-    if debugConstFold then 
-      ignore (E.log "Folded %a to %a\n" 
-                (!pd_exp) (BinOp(bop, e1', e2', tres)) (!pd_exp) newe);
-    newe
-  end else
-    BinOp(bop, e1', e2', tres)
-
-
-
-let parseInt (str: string) : exp = 
-  let hasSuffix str = 
-    let l = String.length str in
-    fun s -> 
-      let ls = String.length s in
-      l >= ls && s = String.uppercase (String.sub str (l - ls) ls)
-  in
-  let l = String.length str in
-  (* See if it is octal or hex *)
-  let octalhex = (l >= 1 && String.get str 0 = '0') in 
-  (* The length of the suffix and a list of possible kinds. See ISO 
-  * 6.4.4.1 *)
-  let hasSuffix = hasSuffix str in
-  let suffixlen, kinds = 
-    if hasSuffix "ULL" || hasSuffix "LLU" then 
-      3, [IULongLong]
-    else if hasSuffix "LL" then
-      2, if octalhex then [ILongLong; IULongLong] else [ILongLong]
-    else if hasSuffix "UL" || hasSuffix "LU" then
-      2, [IULong; IULongLong]
-    else if hasSuffix "L" then
-      1, if octalhex then [ILong; IULong; ILongLong; IULongLong] 
-      else [ILong; ILongLong]
-    else if hasSuffix "U" then
-      1, [IUInt; IULong; IULongLong]
-    else if (!msvcMode && hasSuffix "UI64") then
-      4, [IULongLong]
-    else if (!msvcMode && hasSuffix "I64") then
-      3, [ILongLong]
-    else
-      0, if octalhex || true (* !!! This is against the ISO but it 
-        * is what GCC and MSVC do !!! *)
-      then [IInt; IUInt; ILong; IULong; ILongLong; IULongLong]
-      else [IInt; ILong; IUInt; ILongLong]
-  in
-  (* Convert to integer. To prevent overflow we do the arithmetic 
-  * on Int64 and we take care of overflow. We work only with 
-  * positive integers since the lexer takes care of the sign *)
-  let rec toInt (base: int64) (acc: int64) (idx: int) : int64 = 
-    let doAcc (what: int) = 
-      let acc' = 
-        Int64.add (Int64.mul base acc)  (Int64.of_int what) in
-      if acc < Int64.zero || (* We clearly overflow since base >= 2 
-      * *)
-      (acc' > Int64.zero && acc' < acc) then 
-        E.s (unimp "Cannot represent on 64 bits the integer %s\n"
-               str)
-      else
-        toInt base acc' (idx + 1)
-    in 
-    if idx >= l - suffixlen then begin
-      acc
-    end else 
-      let ch = String.get str idx in
-      if ch >= '0' && ch <= '9' then
-        doAcc (Char.code ch - Char.code '0')
-      else if  ch >= 'a' && ch <= 'f'  then
-        doAcc (10 + Char.code ch - Char.code 'a')
-      else if  ch >= 'A' && ch <= 'F'  then
-        doAcc (10 + Char.code ch - Char.code 'A')
-      else
-        E.s (bug "Invalid integer constant: %s (char %c at idx=%d)" 
-               str ch idx)
-  in
-  try
-    let i = 
-      if octalhex then
-        if l >= 2 && 
-          (let c = String.get str 1 in c = 'x' || c = 'X') then
-          toInt (Int64.of_int 16) Int64.zero 2
-        else
-          toInt (Int64.of_int 8) Int64.zero 1
-      else
-        toInt (Int64.of_int 10) Int64.zero 0
-    in
-    (* Construct an integer of the first kinds that fits. i must be 
-    * POSITIVE  *)
-    let res = 
-      let rec loop = function
-        | ((IInt | ILong) as k) :: _ 
-                  when i < Int64.shift_left (Int64.of_int 1) 31 ->
-                    kinteger64 k i
-        | ((IUInt | IULong) as k) :: _ 
-                  when i < Int64.shift_left (Int64.of_int 1) 32
-          ->  kinteger64 k i
-        | (ILongLong as k) :: _ 
-                 when i <= Int64.sub (Int64.shift_left 
-                                              (Int64.of_int 1) 63) 
-                                          (Int64.of_int 1) 
-          -> 
-            kinteger64 k i
-        | (IULongLong as k) :: _ -> kinteger64 k i
-        | _ :: rest -> loop rest
-        | [] -> E.s (E.unimp "Cannot represent the integer %s\n" 
-                       (Int64.to_string i))
-      in
-      loop kinds 
-    in
-    res
-  with e -> begin
-    ignore (E.log "int_of_string %s (%s)\n" str 
-              (Printexc.to_string e));
-    zero
-  end
-
-
-
-let d_unop () u =
-  match u with
-    Neg -> text "-"
-  | BNot -> text "~"
-  | LNot -> text "!"
-
-let d_binop () b =
-  match b with
-    PlusA | PlusPI | IndexPI -> text "+"
-  | MinusA | MinusPP | MinusPI -> text "-"
-  | Mult -> text "*"
-  | Div -> text "/"
-  | Mod -> text "%"
-  | Shiftlt -> text "<<"
-  | Shiftrt -> text ">>"
-  | Lt -> text "<"
-  | Gt -> text ">"
-  | Le -> text "<="
-  | Ge -> text ">="
-  | Eq -> text "=="
-  | Ne -> text "!="
-  | BAnd -> text "&"
-  | BXor -> text "^"
-  | BOr -> text "|"
-  | LAnd -> text "&&"
-  | LOr -> text "||"
-
-let invalidStmt = mkStmt (Instr [])
-
-(** Construct a hash with the builtins *)
-let gccBuiltins : (string, typ * typ list * bool) H.t = 
-  let h = H.create 17 in
-  (* See if we have builtin_va_list *)
-  let hasbva = M.gccHas__builtin_va_list in
-  let ulongLongType = TInt(IULongLong, []) in
-  let floatType = TFloat(FFloat, []) in
-  let longDoubleType = TFloat (FLongDouble, []) in
-  let voidConstPtrType = TPtr(TVoid [Attr ("const", [])], []) in
-  let sizeType = uintType in
-
-  H.add h "__builtin___fprintf_chk" (intType, [ voidPtrType; intType; charConstPtrType ], true) (* first argument is really FILE*, not void*, but we don't want to build in the definition for FILE *);
-  H.add h "__builtin___memcpy_chk" (voidPtrType, [ voidPtrType; voidConstPtrType; sizeType; sizeType ], false);
-  H.add h "__builtin___memmove_chk" (voidPtrType, [ voidPtrType; voidConstPtrType; sizeType; sizeType ], false);
-  H.add h "__builtin___mempcpy_chk" (voidPtrType, [ voidPtrType; voidConstPtrType; sizeType; sizeType ], false);
-  H.add h "__builtin___memset_chk" (voidPtrType, [ voidPtrType; intType; sizeType; sizeType ], false);
-  H.add h "__builtin___printf_chk" (intType, [ intType; charConstPtrType ], true);
-  H.add h "__builtin___snprintf_chk" (intType, [ charPtrType; sizeType; intType; sizeType; charConstPtrType ], true);
-  H.add h "__builtin___sprintf_chk" (intType, [ charPtrType; intType; sizeType; charConstPtrType ], true);
-  H.add h "__builtin___stpcpy_chk" (charPtrType, [ charPtrType; charConstPtrType; sizeType ], false);
-  H.add h "__builtin___strcat_chk" (charPtrType, [ charPtrType; charConstPtrType; sizeType ], false);
-  H.add h "__builtin___strcpy_chk" (charPtrType, [ charPtrType; charConstPtrType; sizeType ], false);
-  H.add h "__builtin___strncat_chk" (charPtrType, [ charPtrType; charConstPtrType; sizeType; sizeType ], false);
-  H.add h "__builtin___strncpy_chk" (charPtrType, [ charPtrType; charConstPtrType; sizeType; sizeType ], false);
-  H.add h "__builtin___vfprintf_chk" (intType, [ voidPtrType; intType; charConstPtrType; TBuiltin_va_list [] ], false) (* first argument is really FILE*, not void*, but we don't want to build in the definition for FILE *);
-  H.add h "__builtin___vprintf_chk" (intType, [ intType; charConstPtrType; TBuiltin_va_list [] ], false);
-  H.add h "__builtin___vsnprintf_chk" (intType, [ charPtrType; sizeType; intType; sizeType; charConstPtrType; TBuiltin_va_list [] ], false);
-  H.add h "__builtin___vsprintf_chk" (intType, [ charPtrType; intType; sizeType; charConstPtrType; TBuiltin_va_list [] ], false);
-
-  H.add h "__builtin_acos" (doubleType, [ doubleType ], false);
-  H.add h "__builtin_acosf" (floatType, [ floatType ], false);
-  H.add h "__builtin_acosl" (longDoubleType, [ longDoubleType ], false);
-
-  H.add h "__builtin_alloca" (voidPtrType, [ uintType ], false);
-  
-  H.add h "__builtin_asin" (doubleType, [ doubleType ], false);
-  H.add h "__builtin_asinf" (floatType, [ floatType ], false);
-  H.add h "__builtin_asinl" (longDoubleType, [ longDoubleType ], false);
-
-  H.add h "__builtin_atan" (doubleType, [ doubleType ], false);
-  H.add h "__builtin_atanf" (floatType, [ floatType ], false);
-  H.add h "__builtin_atanl" (longDoubleType, [ longDoubleType ], false);
-
-  H.add h "__builtin_atan2" (doubleType, [ doubleType; doubleType ], false);
-  H.add h "__builtin_atan2f" (floatType, [ floatType; floatType ], false);
-  H.add h "__builtin_atan2l" (longDoubleType, [ longDoubleType; 
-                                                longDoubleType ], false);
-
-  H.add h "__builtin_ceil" (doubleType, [ doubleType ], false);
-  H.add h "__builtin_ceilf" (floatType, [ floatType ], false);
-  H.add h "__builtin_ceill" (longDoubleType, [ longDoubleType ], false);
-
-  H.add h "__builtin_cos" (doubleType, [ doubleType ], false);
-  H.add h "__builtin_cosf" (floatType, [ floatType ], false);
-  H.add h "__builtin_cosl" (longDoubleType, [ longDoubleType ], false);
-
-  H.add h "__builtin_cosh" (doubleType, [ doubleType ], false);
-  H.add h "__builtin_coshf" (floatType, [ floatType ], false);
-  H.add h "__builtin_coshl" (longDoubleType, [ longDoubleType ], false);
-
-  H.add h "__builtin_clz" (intType, [ uintType ], false);
-  H.add h "__builtin_clzl" (intType, [ ulongType ], false);
-  H.add h "__builtin_clzll" (intType, [ ulongLongType ], false);
-  H.add h "__builtin_constant_p" (intType, [ intType ], false);
-  H.add h "__builtin_ctz" (intType, [ uintType ], false);
-  H.add h "__builtin_ctzl" (intType, [ ulongType ], false);
-  H.add h "__builtin_ctzll" (intType, [ ulongLongType ], false);
-
-  H.add h "__builtin_exp" (doubleType, [ doubleType ], false);
-  H.add h "__builtin_expf" (floatType, [ floatType ], false);
-  H.add h "__builtin_expl" (longDoubleType, [ longDoubleType ], false);
-
-  H.add h "__builtin_expect" (longType, [ longType; longType ], false);
-
-  H.add h "__builtin_fabs" (doubleType, [ doubleType ], false);
-  H.add h "__builtin_fabsf" (floatType, [ floatType ], false);
-  H.add h "__builtin_fabsl" (longDoubleType, [ longDoubleType ], false);
-
-  H.add h "__builtin_ffs" (intType, [ uintType ], false);
-  H.add h "__builtin_ffsl" (intType, [ ulongType ], false);
-  H.add h "__builtin_ffsll" (intType, [ ulongLongType ], false);
-  H.add h "__builtin_frame_address" (voidPtrType, [ uintType ], false);
-
-  H.add h "__builtin_floor" (doubleType, [ doubleType ], false);
-  H.add h "__builtin_floorf" (floatType, [ floatType ], false);
-  H.add h "__builtin_floorl" (longDoubleType, [ longDoubleType ], false);
-
-  H.add h "__builtin_huge_val" (doubleType, [], false);
-  H.add h "__builtin_huge_valf" (floatType, [], false);
-  H.add h "__builtin_huge_vall" (longDoubleType, [], false);
-  H.add h "__builtin_inf" (doubleType, [], false);
-  H.add h "__builtin_inff" (floatType, [], false);
-  H.add h "__builtin_infl" (longDoubleType, [], false);
-  H.add h "__builtin_memcpy" (voidPtrType, [ voidPtrType; voidConstPtrType; uintType ], false);
-  H.add h "__builtin_mempcpy" (voidPtrType, [ voidPtrType; voidConstPtrType; sizeType ], false);
-
-  H.add h "__builtin_fmod" (doubleType, [ doubleType ], false);
-  H.add h "__builtin_fmodf" (floatType, [ floatType ], false);
-  H.add h "__builtin_fmodl" (longDoubleType, [ longDoubleType ], false);
-
-  H.add h "__builtin_frexp" (doubleType, [ doubleType; intPtrType ], false);
-  H.add h "__builtin_frexpf" (floatType, [ floatType; intPtrType  ], false);
-  H.add h "__builtin_frexpl" (longDoubleType, [ longDoubleType; 
-                                                intPtrType  ], false);
-
-  H.add h "__builtin_ldexp" (doubleType, [ doubleType; intType ], false);
-  H.add h "__builtin_ldexpf" (floatType, [ floatType; intType  ], false);
-  H.add h "__builtin_ldexpl" (longDoubleType, [ longDoubleType; 
-                                                intType  ], false);
-
-  H.add h "__builtin_log" (doubleType, [ doubleType ], false);
-  H.add h "__builtin_logf" (floatType, [ floatType ], false);
-  H.add h "__builtin_logl" (longDoubleType, [ longDoubleType ], false);
-
-  H.add h "__builtin_log10" (doubleType, [ doubleType ], false);
-  H.add h "__builtin_log10f" (floatType, [ floatType ], false);
-  H.add h "__builtin_log10l" (longDoubleType, [ longDoubleType ], false);
-
-  H.add h "__builtin_modff" (floatType, [ floatType; 
-                                          TPtr(floatType,[]) ], false);
-  H.add h "__builtin_modfl" (longDoubleType, [ longDoubleType; 
-                                               TPtr(longDoubleType, []) ], 
-                             false);
-
-  H.add h "__builtin_nan" (doubleType, [ charConstPtrType ], false);
-  H.add h "__builtin_nanf" (floatType, [ charConstPtrType ], false);
-  H.add h "__builtin_nanl" (longDoubleType, [ charConstPtrType ], false);
-  H.add h "__builtin_nans" (doubleType, [ charConstPtrType ], false);
-  H.add h "__builtin_nansf" (floatType, [ charConstPtrType ], false);
-  H.add h "__builtin_nansl" (longDoubleType, [ charConstPtrType ], false);
-  H.add h "__builtin_next_arg" ((if hasbva then TBuiltin_va_list [] else voidPtrType), [], false) (* When we parse builtin_next_arg we drop the second argument *);
-  H.add h "__builtin_object_size" (sizeType, [ voidPtrType; intType ], false);
-
-  H.add h "__builtin_parity" (intType, [ uintType ], false);
-  H.add h "__builtin_parityl" (intType, [ ulongType ], false);
-  H.add h "__builtin_parityll" (intType, [ ulongLongType ], false);
-
-  H.add h "__builtin_popcount" (intType, [ uintType ], false);
-  H.add h "__builtin_popcountl" (intType, [ ulongType ], false);
-  H.add h "__builtin_popcountll" (intType, [ ulongLongType ], false);
-
-  H.add h "__builtin_powi" (doubleType, [ doubleType; intType ], false);
-  H.add h "__builtin_powif" (floatType, [ floatType; intType ], false);
-  H.add h "__builtin_powil" (longDoubleType, [ longDoubleType; intType ], false);
-  H.add h "__builtin_prefetch" (voidType, [ voidConstPtrType ], true);
-  H.add h "__builtin_return" (voidType, [ voidConstPtrType ], false);
-  H.add h "__builtin_return_address" (voidPtrType, [ uintType ], false);
-
-  H.add h "__builtin_sin" (doubleType, [ doubleType ], false);
-  H.add h "__builtin_sinf" (floatType, [ floatType ], false);
-  H.add h "__builtin_sinl" (longDoubleType, [ longDoubleType ], false);
-
-  H.add h "__builtin_sinh" (doubleType, [ doubleType ], false);
-  H.add h "__builtin_sinhf" (floatType, [ floatType ], false);
-  H.add h "__builtin_sinhl" (longDoubleType, [ longDoubleType ], false);
-
-  H.add h "__builtin_sqrt" (doubleType, [ doubleType ], false);
-  H.add h "__builtin_sqrtf" (floatType, [ floatType ], false);
-  H.add h "__builtin_sqrtl" (longDoubleType, [ longDoubleType ], false);
-
-  H.add h "__builtin_stpcpy" (charPtrType, [ charPtrType; charConstPtrType ], false);
-  H.add h "__builtin_strchr" (charPtrType, [ charPtrType; charType ], false);
-  H.add h "__builtin_strcmp" (intType, [ charConstPtrType; charConstPtrType ], false);
-  H.add h "__builtin_strcpy" (charPtrType, [ charPtrType; charConstPtrType ], false);
-  H.add h "__builtin_strcspn" (uintType, [ charConstPtrType; charConstPtrType ], false);
-  H.add h "__builtin_strncat" (charPtrType, [ charPtrType; charConstPtrType; sizeType ], false);
-  H.add h "__builtin_strncmp" (intType, [ charConstPtrType; charConstPtrType; sizeType ], false);
-  H.add h "__builtin_strncpy" (charPtrType, [ charPtrType; charConstPtrType; sizeType ], false);
-  H.add h "__builtin_strspn" (intType, [ charConstPtrType; charConstPtrType ], false);
-  H.add h "__builtin_strpbrk" (charPtrType, [ charConstPtrType; charConstPtrType ], false);
-  (* When we parse builtin_types_compatible_p, we change its interface *)
-  H.add h "__builtin_types_compatible_p"
-                              (intType, [ uintType; (* Sizeof the type *)
-                                          uintType  (* Sizeof the type *) ],
-                               false);
-  H.add h "__builtin_tan" (doubleType, [ doubleType ], false);
-  H.add h "__builtin_tanf" (floatType, [ floatType ], false);
-  H.add h "__builtin_tanl" (longDoubleType, [ longDoubleType ], false);
-
-  H.add h "__builtin_tanh" (doubleType, [ doubleType ], false);
-  H.add h "__builtin_tanhf" (floatType, [ floatType ], false);
-  H.add h "__builtin_tanhl" (longDoubleType, [ longDoubleType ], false);
-
-
-  if hasbva then begin
-    H.add h "__builtin_va_end" (voidType, [ TBuiltin_va_list [] ], false);
-    H.add h "__builtin_varargs_start" 
-      (voidType, [ TBuiltin_va_list [] ], false);
-    H.add h "__builtin_va_start" (voidType, [ TBuiltin_va_list [] ], false);
-    (* When we parse builtin_stdarg_start, we drop the second argument *)
-    H.add h "__builtin_stdarg_start" (voidType, [ TBuiltin_va_list []; ],
-                                      false);
-    (* When we parse builtin_va_arg we change its interface *)
-    H.add h "__builtin_va_arg" (voidType, [ TBuiltin_va_list [];
-                                            uintType; (* Sizeof the type *)
-                                            voidPtrType; (* Ptr to res *) ],
-                               false);
-    H.add h "__builtin_va_copy" (voidType, [ TBuiltin_va_list [];
-					     TBuiltin_va_list [] ],
-                                false);
-  end;
-  h
-
-(** Construct a hash with the builtins *)
-let msvcBuiltins : (string, typ * typ list * bool) H.t = 
-  (* These are empty for now but can be added to depending on the application*)
-  let h = H.create 17 in
-  (** Take a number of wide string literals *)
-  H.add h "__annotation" (voidType, [ ], true);
-  h
-
-
-
-let pTypeSig : (typ -> typsig) ref =
-  ref (fun _ -> E.s (E.bug "pTypeSig not initialized"))
-
-
-(** A printer interface for CIL trees. Create instantiations of 
- * this type by specializing the class {!Cil.defaultCilPrinter}. *)
-class type cilPrinter = object
-  method pVDecl: unit -> varinfo -> doc
-    (** Invoked for each variable declaration. Note that variable 
-     * declarations are all the [GVar], [GVarDecl], [GFun], all the [varinfo] 
-     * in formals of function types, and the formals and locals for function 
-     * definitions. *)
-
-  method pVar: varinfo -> doc
-    (** Invoked on each variable use. *)
-
-  method pLval: unit -> lval -> doc
-    (** Invoked on each lvalue occurence *)
-
-  method pOffset: doc -> offset -> doc
-    (** Invoked on each offset occurence. The second argument is the base. *)
-
-  method pInstr: unit -> instr -> doc
-    (** Invoked on each instruction occurrence. *)
-
-  method pStmt: unit -> stmt -> doc
-    (** Control-flow statement. This is used by 
-     * {!Cil.printGlobal} and by {!Cil.dumpGlobal}. *)
-
-  method dStmt: out_channel -> int -> stmt -> unit
-    (** Dump a control-flow statement to a file with a given indentation. This is used by 
-     * {!Cil.dumpGlobal}. *)
-
-  method dBlock: out_channel -> int -> block -> unit
-    (** Dump a control-flow block to a file with a given indentation. This is 
-     * used by {!Cil.dumpGlobal}. *)
-
-  method pBlock: unit -> block -> Pretty.doc
-    (** Print a block. *)
-
-  method pGlobal: unit -> global -> doc
-    (** Global (vars, types, etc.). This can be slow and is used only by 
-     * {!Cil.printGlobal} but by {!Cil.dumpGlobal} for everything else except 
-     * [GVar] and [GFun]. *)
-
-  method dGlobal: out_channel -> global -> unit
-    (** Dump a global to a file. This is used by {!Cil.dumpGlobal}. *)
-
-  method pFieldDecl: unit -> fieldinfo -> doc
-    (** A field declaration *)
-
-  method pType: doc option -> unit -> typ -> doc  
-  (* Use of some type in some declaration. The first argument is used to print 
-   * the declared element, or is None if we are just printing a type with no 
-   * name being decalred. Note that for structure/union and enumeration types 
-   * the definition of the composite type is not visited. Use [vglob] to 
-   * visit it.  *)
-
-  method pAttr: attribute -> doc * bool
-    (** Attribute. Also return an indication whether this attribute must be 
-      * printed inside the __attribute__ list or not. *)
-   
-  method pAttrParam: unit -> attrparam -> doc 
-    (** Attribute paramter *)
-   
-  method pAttrs: unit -> attributes -> doc
-    (** Attribute lists *)
-
-  method pLabel: unit -> label -> doc
-    (** Label *)
-
-  method pLineDirective: ?forcefile:bool -> location -> Pretty.doc
-    (** Print a line-number. This is assumed to come always on an empty line. 
-     * If the forcefile argument is present and is true then the file name 
-     * will be printed always. Otherwise the file name is printed only if it 
-     * is different from the last time time this function is called. The last 
-     * file name is stored in a private field inside the cilPrinter object. *)
-
-  method pStmtKind : stmt -> unit -> stmtkind -> Pretty.doc
-    (** Print a statement kind. The code to be printed is given in the
-     * {!Cil.stmtkind} argument.  The initial {!Cil.stmt} argument
-     * records the statement which follows the one being printed;
-     * {!Cil.defaultCilPrinterClass} uses this information to prettify
-     * statement printing in certain special cases. *)
-
-  method pExp: unit -> exp -> doc
-    (** Print expressions *) 
-
-  method pInit: unit -> init -> doc
-    (** Print initializers. This can be slow and is used by 
-     * {!Cil.printGlobal} but not by {!Cil.dumpGlobal}. *)
-
-  method dInit: out_channel -> int -> init -> unit
-    (** Dump a global to a file with a given indentation. This is used by 
-     * {!Cil.dumpGlobal}. *)
-end
-
-
-class defaultCilPrinterClass : cilPrinter = object (self)
-  val mutable currentFormals : varinfo list = []
-  method private getLastNamedArgument (s: string) : exp =
-    match List.rev currentFormals with 
-      f :: _ -> Lval (var f)
-    | [] -> 
-        E.s (warn "Cannot find the last named argument when priting call to %s\n" s)
-
-  (*** VARIABLES ***)
-  (* variable use *)
-  method pVar (v:varinfo) = text v.vname
-
-  (* variable declaration *)
-  method pVDecl () (v:varinfo) =
-    let stom, rest = separateStorageModifiers v.vattr in
-    (* First the storage modifiers *)
-    text (if v.vinline then "__inline " else "")
-      ++ d_storage () v.vstorage
-      ++ (self#pAttrs () stom)
-      ++ (self#pType (Some (text v.vname)) () v.vtype)
-      ++ text " "
-      ++ self#pAttrs () rest
-
-  (*** L-VALUES ***)
-  method pLval () (lv:lval) =  (* lval (base is 1st field)  *)
-    match lv with
-      Var vi, o -> self#pOffset (self#pVar vi) o
-    | Mem e, Field(fi, o) ->
-        self#pOffset
-          ((self#pExpPrec arrowLevel () e) ++ text ("->" ^ fi.fname)) o
-    | Mem e, o ->
-        self#pOffset
-          (text "(*" ++ self#pExpPrec derefStarLevel () e ++ text ")") o
-
-  (** Offsets **)
-  method pOffset (base: doc) = function
-    | NoOffset -> base
-    | Field (fi, o) -> 
-        self#pOffset (base ++ text "." ++ text fi.fname) o
-    | Index (e, o) ->
-        self#pOffset (base ++ text "[" ++ self#pExp () e ++ text "]") o
-
-  method private pLvalPrec (contextprec: int) () lv = 
-    if getParenthLevel (Lval(lv)) >= contextprec then
-      text "(" ++ self#pLval () lv ++ text ")"
-    else
-      self#pLval () lv
-
-  (*** EXPRESSIONS ***)
-  method pExp () (e: exp) : doc = 
-    let level = getParenthLevel e in
-    match e with
-      Const(c) -> d_const () c
-    | Lval(l) -> self#pLval () l
-    | UnOp(u,e1,_) -> 
-        (d_unop () u) ++ chr ' ' ++ (self#pExpPrec level () e1)
-          
-    | BinOp(b,e1,e2,_) -> 
-        align 
-          ++ (self#pExpPrec level () e1)
-          ++ chr ' ' 
-          ++ (d_binop () b)
-          ++ chr ' '
-          ++ (self#pExpPrec level () e2)
-          ++ unalign
-
-    | CastE(t,e) -> 
-        text "(" 
-          ++ self#pType None () t
-          ++ text ")"
-          ++ self#pExpPrec level () e
-
-    | SizeOf (t) -> 
-        text "sizeof(" ++ self#pType None () t ++ chr ')'
-    | SizeOfE (e) ->  
-        text "sizeof(" ++ self#pExp () e ++ chr ')'
-
-    | SizeOfStr s -> 
-        text "sizeof(" ++ d_const () (CStr s) ++ chr ')'
-
-    | AlignOf (t) -> 
-        text "__alignof__(" ++ self#pType None () t ++ chr ')'
-    | AlignOfE (e) -> 
-        text "__alignof__(" ++ self#pExp () e ++ chr ')'
-    | AddrOf(lv) -> 
-        text "& " ++ (self#pLvalPrec addrOfLevel () lv)
-          
-    | StartOf(lv) -> self#pLval () lv
-
-  method private pExpPrec (contextprec: int) () (e: exp) = 
-    let thisLevel = getParenthLevel e in
-    let needParens =
-      if thisLevel >= contextprec then
-	true
-      else if contextprec == bitwiseLevel then
-        (* quiet down some GCC warnings *)
-	thisLevel == additiveLevel || thisLevel == comparativeLevel
-      else
-	false
-    in
-    if needParens then
-      chr '(' ++ self#pExp () e ++ chr ')'
-    else
-      self#pExp () e
-
-  method pInit () = function 
-      SingleInit e -> self#pExp () e
-    | CompoundInit (t, initl) -> 
-      (* We do not print the type of the Compound *)
-(*
-      let dinit e = d_init () e in
-      dprintf "{@[%a@]}"
-        (docList ~sep:(chr ',' ++ break) dinit) initl
-*)
-        let printDesignator = 
-          if not !msvcMode then begin
-            (* Print only for union when we do not initialize the first field *)
-            match unrollType t, initl with
-              TComp(ci, _), [(Field(f, NoOffset), _)] -> 
-                if not (ci.cstruct) && ci.cfields != [] && 
-                  (List.hd ci.cfields) != f then
-                  true
-                else
-                  false
-            | _ -> false
-          end else 
-            false 
-        in
-        let d_oneInit = function
-            Field(f, NoOffset), i -> 
-              (if printDesignator then 
-                text ("." ^ f.fname ^ " = ") 
-              else nil) ++ self#pInit () i
-          | Index(e, NoOffset), i -> 
-              (if printDesignator then 
-                text "[" ++ self#pExp () e ++ text "] = " else nil) ++ 
-                self#pInit () i
-          | _ -> E.s (unimp "Trying to print malformed initializer")
-        in
-        chr '{' ++ (align 
-                      ++ ((docList ~sep:(chr ',' ++ break) d_oneInit) () initl) 
-                      ++ unalign)
-          ++ chr '}'
-(*
-    | ArrayInit (_, _, il) -> 
-        chr '{' ++ (align 
-                      ++ ((docList (chr ',' ++ break) (self#pInit ())) () il) 
-                      ++ unalign)
-          ++ chr '}'
-*)
-  (* dump initializers to a file. *)
-  method dInit (out: out_channel) (ind: int) (i: init) = 
-    (* Dump an array *)
-    let dumpArray (bt: typ) (il: 'a list) (getelem: 'a -> init) = 
-      let onALine = (* How many elements on a line *)
-        match unrollType bt with TComp _ | TArray _ -> 1 | _ -> 4
-      in
-      let rec outputElements (isfirst: bool) (room_on_line: int) = function
-          [] -> output_string out "}"
-        | (i: 'a) :: rest -> 
-            if not isfirst then output_string out ", ";
-            let new_room_on_line = 
-              if room_on_line == 0 then begin 
-                output_string out "\n"; output_string out (String.make ind ' ');
-                onALine - 1
-              end else 
-                room_on_line - 1
-            in
-            self#dInit out (ind + 2) (getelem i);
-            outputElements false new_room_on_line rest
-      in
-      output_string out "{ ";
-      outputElements true onALine il
-    in
-    match i with 
-      SingleInit e -> 
-        fprint out !lineLength (indent ind (self#pExp () e))
-    | CompoundInit (t, initl) -> begin 
-        match unrollType t with 
-          TArray(bt, _, _) -> 
-            dumpArray bt initl (fun (_, i) -> i)
-        | _ -> 
-            (* Now a structure or a union *)
-            fprint out !lineLength (indent ind (self#pInit () i))
-    end
-(*
-    | ArrayInit (bt, len, initl) -> begin
-        (* If the base type does not contain structs then use the pInit 
-        match unrollType bt with 
-          TComp _ | TArray _ -> 
-            dumpArray bt initl (fun x -> x)
-        | _ -> *)
-            fprint out !lineLength (indent ind (self#pInit () i))
-    end
-*)
-        
-  (** What terminator to print after an instruction. sometimes we want to 
-   * print sequences of instructions separated by comma *)
-  val mutable printInstrTerminator = ";"
-
-  (*** INSTRUCTIONS ****)
-  method pInstr () (i:instr) =       (* imperative instruction *)
-    match i with
-    | Set(lv,e,l) -> begin
-        (* Be nice to some special cases *)
-        match e with
-          BinOp((PlusA|PlusPI|IndexPI),Lval(lv'), Const(CInt64(one,_,_)),_)
-            when Util.equals lv lv' && one = Int64.one && not !printCilAsIs ->
-              self#pLineDirective l
-                ++ self#pLval () lv
-                ++ text (" ++" ^ printInstrTerminator)
-
-        | BinOp((MinusA|MinusPI),Lval(lv'),
-                Const(CInt64(one,_,_)), _) 
-            when Util.equals lv lv' && one = Int64.one && not !printCilAsIs ->
-                  self#pLineDirective l
-                    ++ self#pLval () lv
-                    ++ text (" --" ^ printInstrTerminator) 
-
-        | BinOp((PlusA|PlusPI|IndexPI),Lval(lv'),Const(CInt64(mone,_,_)),_)
-            when Util.equals lv lv' && mone = Int64.minus_one 
-                && not !printCilAsIs ->
-              self#pLineDirective l
-                ++ self#pLval () lv
-                ++ text (" --" ^ printInstrTerminator)
-
-        | BinOp((PlusA|PlusPI|IndexPI|MinusA|MinusPP|MinusPI|BAnd|BOr|BXor|
-          Mult|Div|Mod|Shiftlt|Shiftrt) as bop,
-                Lval(lv'),e,_) when Util.equals lv lv' ->
-                  self#pLineDirective l
-                    ++ self#pLval () lv
-                    ++ text " " ++ d_binop () bop
-                    ++ text "= "
-                    ++ self#pExp () e
-                    ++ text printInstrTerminator
-                    
-        | _ ->
-            self#pLineDirective l
-              ++ self#pLval () lv
-              ++ text " = "
-              ++ self#pExp () e
-              ++ text printInstrTerminator
-              
-    end
-      (* In cabs2cil we have turned the call to builtin_va_arg into a 
-       * three-argument call: the last argument is the address of the 
-       * destination *)
-    | Call(None, Lval(Var vi, NoOffset), [dest; SizeOf t; adest], l) 
-        when vi.vname = "__builtin_va_arg" && not !printCilAsIs -> 
-          let destlv = match stripCasts adest with 
-            AddrOf destlv -> destlv
-          | _ -> E.s (E.error "Encountered unexpected call to %s\n" vi.vname)
-          in
-          self#pLineDirective l
-	    ++ self#pLval () destlv ++ text " = "
-                   
-            (* Now the function name *)
-            ++ text "__builtin_va_arg"
-            ++ text "(" ++ (align
-                              (* Now the arguments *)
-                              ++ self#pExp () dest 
-                              ++ chr ',' ++ break 
-                              ++ self#pType None () t
-                              ++ unalign)
-            ++ text (")" ^ printInstrTerminator)
-
-      (* In cabs2cil we have dropped the last argument in the call to 
-       * __builtin_stdarg_start. *)
-    | Call(None, Lval(Var vi, NoOffset), [marker], l) 
-        when vi.vname = "__builtin_stdarg_start" && not !printCilAsIs -> begin
-          let last = self#getLastNamedArgument vi.vname in
-          self#pInstr () (Call(None,Lval(Var vi,NoOffset),[marker; last],l))
-        end
-
-      (* In cabs2cil we have dropped the last argument in the call to 
-       * __builtin_next_arg. *)
-    | Call(res, Lval(Var vi, NoOffset), [ ], l) 
-        when vi.vname = "__builtin_next_arg" && not !printCilAsIs -> begin
-          let last = self#getLastNamedArgument vi.vname in
-          self#pInstr () (Call(res,Lval(Var vi,NoOffset),[last],l))
-        end
-
-      (* In cparser we have turned the call to 
-       * __builtin_types_compatible_p(t1, t2) into 
-       * __builtin_types_compatible_p(sizeof t1, sizeof t2), so that we can
-       * represent the types as expressions. 
-       * Remove the sizeofs when printing. *)
-    | Call(dest, Lval(Var vi, NoOffset), [SizeOf t1; SizeOf t2], l) 
-        when vi.vname = "__builtin_types_compatible_p" && not !printCilAsIs -> 
-        self#pLineDirective l
-          (* Print the destination *)
-        ++ (match dest with
-              None -> nil
-            | Some lv -> self#pLval () lv ++ text " = ")
-          (* Now the call itself *)
-        ++ dprintf "%s(%a, %a)" vi.vname
-             (self#pType None) t1  (self#pType None) t2
-        ++ text printInstrTerminator
-    | Call(_, Lval(Var vi, NoOffset), _, l) 
-        when vi.vname = "__builtin_types_compatible_p" && not !printCilAsIs -> 
-        E.s (bug "__builtin_types_compatible_p: cabs2cil should have added sizeof to the arguments.")
-          
-    | Call(dest,e,args,l) ->
-        self#pLineDirective l
-          ++ (match dest with
-            None -> nil
-          | Some lv -> 
-              self#pLval () lv ++ text " = " ++
-                (* Maybe we need to print a cast *)
-                (let destt = typeOfLval lv in
-                match unrollType (typeOf e) with
-                  TFun (rt, _, _, _) 
-                      when not (Util.equals (!pTypeSig rt)
-                                            (!pTypeSig destt)) ->
-                    text "(" ++ self#pType None () destt ++ text ")"
-                | _ -> nil))
-          (* Now the function name *)
-          ++ (let ed = self#pExp () e in
-              match e with 
-                Lval(Var _, _) -> ed
-              | _ -> text "(" ++ ed ++ text ")")
-          ++ text "(" ++ 
-          (align
-             (* Now the arguments *)
-             ++ (docList ~sep:(chr ',' ++ break) 
-                   (self#pExp ()) () args)
-             ++ unalign)
-        ++ text (")" ^ printInstrTerminator)
-
-    | Asm(attrs, tmpls, outs, ins, clobs, l) ->
-        if !msvcMode then
-          self#pLineDirective l
-            ++ text "__asm {"
-            ++ (align
-                  ++ (docList ~sep:line text () tmpls)
-                  ++ unalign)
-            ++ text ("}" ^ printInstrTerminator)
-        else
-          self#pLineDirective l
-            ++ text ("__asm__ ") 
-            ++ self#pAttrs () attrs 
-            ++ text " ("
-            ++ (align
-                  ++ (docList ~sep:line
-                        (fun x -> text ("\"" ^ escape_string x ^ "\""))
-                        () tmpls)
-                  ++
-                  (if outs = [] && ins = [] && clobs = [] then
-                    chr ':'
-                else
-                  (text ": "
-                     ++ (docList ~sep:(chr ',' ++ break)
-                           (fun (c, lv) ->
-                             text ("\"" ^ escape_string c ^ "\" (")
-                               ++ self#pLval () lv
-                               ++ text ")") () outs)))
-                ++
-                  (if ins = [] && clobs = [] then
-                    nil
-                  else
-                    (text ": "
-                       ++ (docList ~sep:(chr ',' ++ break)
-                             (fun (c, e) ->
-                               text ("\"" ^ escape_string c ^ "\" (")
-                                 ++ self#pExp () e
-                                 ++ text ")") () ins)))
-                  ++
-                  (if clobs = [] then nil
-                  else
-                    (text ": "
-                       ++ (docList ~sep:(chr ',' ++ break)
-                             (fun c -> text ("\"" ^ escape_string c ^ "\""))
-                             ()
-                             clobs)))
-                  ++ unalign)
-            ++ text (")" ^ printInstrTerminator)
-            
-
-  (**** STATEMENTS ****)
-  method pStmt () (s:stmt) =        (* control-flow statement *)
-    self#pStmtNext invalidStmt () s
-
-  method dStmt (out: out_channel) (ind: int) (s:stmt) : unit = 
-    fprint out !lineLength (indent ind (self#pStmt () s))
-
-  method dBlock (out: out_channel) (ind: int) (b:block) : unit = 
-    fprint out !lineLength (indent ind (align ++ self#pBlock () b))
-
-  method private pStmtNext (next: stmt) () (s: stmt) =
-    (* print the labels *)
-    ((docList ~sep:line (fun l -> self#pLabel () l)) () s.labels)
-      (* print the statement itself. If the labels are non-empty and the
-      * statement is empty, print a semicolon  *)
-      ++ 
-      (if s.skind = Instr [] && s.labels <> [] then
-        text ";"
-      else
-        (if s.labels <> [] then line else nil) 
-          ++ self#pStmtKind next () s.skind)
-
-  method private pLabel () = function
-      Label (s, _, true) -> text (s ^ ": ")
-    | Label (s, _, false) -> text (s ^ ": /* CIL Label */ ")
-    | Case (e, _) -> text "case " ++ self#pExp () e ++ text ": "
-    | Default _ -> text "default: "
-
-  (* The pBlock will put the unalign itself *)
-  method pBlock () (blk: block) = 
-    let rec dofirst () = function
-        [] -> nil
-      | [x] -> self#pStmtNext invalidStmt () x
-      | x :: rest -> dorest nil x rest
-    and dorest acc prev = function
-        [] -> acc ++ (self#pStmtNext invalidStmt () prev)
-      | x :: rest -> 
-          dorest (acc ++ (self#pStmtNext x () prev) ++ line)
-            x rest
-    in
-    (* Let the host of the block decide on the alignment. The d_block will 
-     * pop the alignment as well  *)
-    text "{" 
-      ++ 
-      (if blk.battrs <> [] then 
-        self#pAttrsGen true blk.battrs
-      else nil)
-      ++ line
-      ++ (dofirst () blk.bstmts)
-      ++ unalign ++ line ++ text "}"
-
-  
-  (* Store here the name of the last file printed in a line number. This is 
-   * private to the object *)
-  val mutable lastFileName = ""
-  (* Make sure that you only call self#pLineDirective on an empty line *)
-  method pLineDirective ?(forcefile=false) l = 
-    currentLoc := l;
-    match !lineDirectiveStyle with
-    | Some style when l.line > 0 ->
-	let directive =
-	  match style with
-	  | LineComment -> text "//#line "
-	  | LinePreprocessorOutput when not !msvcMode -> chr '#'
-	  | _ -> text "#line"
-	in
-	let filename =
-          if forcefile || l.file <> lastFileName then
-	    begin
-	      lastFileName <- l.file;
-	      text " \"" ++ text l.file ++ text "\""
-            end
-	  else
-	    nil
-	in
-	leftflush ++ directive ++ chr ' ' ++ num l.line ++ filename ++ line
-    | _ ->
-	nil
-
-
-  method private pStmtKind (next: stmt) () = function
-      Return(None, l) ->
-        self#pLineDirective l
-          ++ text "return;"
-
-    | Return(Some e, l) ->
-        self#pLineDirective l
-          ++ text "return ("
-          ++ self#pExp () e
-          ++ text ");"
-          
-    | Goto (sref, l) -> begin
-        (* Grab one of the labels *)
-        let rec pickLabel = function
-            [] -> None
-          | Label (l, _, _) :: _ -> Some l
-          | _ :: rest -> pickLabel rest
-        in
-        match pickLabel !sref.labels with
-          Some l -> text ("goto " ^ l ^ ";")
-        | None -> 
-            ignore (error "Cannot find label for target of goto\n");
-            text "goto __invalid_label;"
-    end
-
-    | Break l ->
-        self#pLineDirective l
-          ++ text "break;"
-
-    | Continue l -> 
-        self#pLineDirective l
-          ++ text "continue;"
-
-    | Instr il ->
-        align
-          ++ (docList ~sep:line (fun i -> self#pInstr () i) () il)
-          ++ unalign
-
-    | If(be,t,{bstmts=[];battrs=[]},l) when not !printCilAsIs ->
-        self#pLineDirective l
-          ++ text "if"
-          ++ (align
-                ++ text " ("
-                ++ self#pExp () be
-                ++ text ") "
-                ++ self#pBlock () t)
-          
-    | If(be,t,{bstmts=[{skind=Goto(gref,_);labels=[]}];
-                battrs=[]},l)
-     when !gref == next && not !printCilAsIs ->
-       self#pLineDirective l
-         ++ text "if"
-         ++ (align
-               ++ text " ("
-               ++ self#pExp () be
-               ++ text ") "
-               ++ self#pBlock () t)
-
-    | If(be,{bstmts=[];battrs=[]},e,l) when not !printCilAsIs ->
-        self#pLineDirective l
-          ++ text "if"
-          ++ (align
-                ++ text " ("
-                ++ self#pExp () (UnOp(LNot,be,intType))
-                ++ text ") "
-                ++ self#pBlock () e)
-
-    | If(be,{bstmts=[{skind=Goto(gref,_);labels=[]}];
-           battrs=[]},e,l)
-      when !gref == next && not !printCilAsIs ->
-        self#pLineDirective l
-          ++ text "if"
-          ++ (align
-                ++ text " ("
-                ++ self#pExp () (UnOp(LNot,be,intType))
-                ++ text ") "
-                ++ self#pBlock () e)
-          
-    | If(be,t,e,l) ->
-        self#pLineDirective l
-          ++ (align
-                ++ text "if"
-                ++ (align
-                      ++ text " ("
-                      ++ self#pExp () be
-                      ++ text ") "
-                      ++ self#pBlock () t)
-                ++ text " "   (* sm: indent next code 2 spaces (was 4) *)
-                ++ (align
-                      ++ text "else "
-                      ++ self#pBlock () e)
-          ++ unalign)
-          
-    | Switch(e,b,_,l) ->
-        self#pLineDirective l
-          ++ (align
-                ++ text "switch ("
-                ++ self#pExp () e
-                ++ text ") "
-                ++ self#pBlock () b)
-
-(*
-    | Loop(b, l, _, _) -> begin
-        (* Maybe the first thing is a conditional. Turn it into a WHILE *)
-        try
-          let term, bodystmts =
-            let rec skipEmpty = function
-                [] -> []
-              | {skind=Instr [];labels=[]} :: rest -> skipEmpty rest
-              | x -> x
-            in
-            (* Bill McCloskey: Do not remove the If if it has labels *)
-            match skipEmpty b.bstmts with
-              {skind=If(e,tb,fb,_); labels=[]} :: rest 
-                                              when not !printCilAsIs -> begin
-                match skipEmpty tb.bstmts, skipEmpty fb.bstmts with
-                  [], {skind=Break _; labels=[]} :: _  -> e, rest
-                | {skind=Break _; labels=[]} :: _, [] 
-                                     -> UnOp(LNot, e, intType), rest
-                | _ -> raise Not_found
-              end
-            | _ -> raise Not_found
-          in
-          self#pLineDirective l
-            ++ text "wh"
-            ++ (align
-                  ++ text "ile ("
-                  ++ self#pExp () term
-                  ++ text ") "
-                  ++ self#pBlock () {bstmts=bodystmts; battrs=b.battrs})
-
-        with Not_found ->
-          self#pLineDirective l
-            ++ text "wh"
-            ++ (align
-                  ++ text "ile (1) "
-                  ++ self#pBlock () b)
-    end
-*)
-
-    | While (e, b, l) ->
-        self#pLineDirective l
-          ++ (align
-                ++ text "while ("
-                ++ self#pExp () e
-                ++ text ") "
-                ++ self#pBlock () b)
-
-    | DoWhile (e, b, l) ->
-        self#pLineDirective l
-          ++ (align
-                ++ text "do "
-                ++ self#pBlock () b
-                ++ text " while ("
-                ++ self#pExp () e
-                ++ text ");")
-
-    | For (bInit, e, bIter, b, l) ->
-	ignore (E.warn
-		  "in for loops, the 1st and 3rd expressions are not printed");
-          self#pLineDirective l
-            ++ (align
-                  ++ text "for ("
-                  ++ text "/* ??? */"   (* self#pBlock () bInit *)
-                  ++ text "; "
-                  ++ self#pExp () e
-                  ++ text "; "
-                  ++ text "/* ??? */"   (* self#pBlock() bIter *)
-                  ++ text ") "
-                  ++ self#pBlock () b)
-
-    | Block b -> align ++ self#pBlock () b
-      
-    | TryFinally (b, h, l) -> 
-        self#pLineDirective l 
-          ++ text "__try "
-          ++ align 
-          ++ self#pBlock () b
-          ++ text " __fin" ++ align ++ text "ally "
-          ++ self#pBlock () h
-
-    | TryExcept (b, (il, e), h, l) -> 
-        self#pLineDirective l 
-          ++ text "__try "
-          ++ align 
-          ++ self#pBlock () b
-          ++ text " __e" ++ align ++ text "xcept(" ++ line
-          ++ align
-          (* Print the instructions but with a comma at the end, instead of 
-           * semicolon *)
-          ++ (printInstrTerminator <- ","; 
-              let res = 
-                (docList ~sep:line (self#pInstr ())
-                   () il) 
-              in
-              printInstrTerminator <- ";";
-              res)
-          ++ self#pExp () e
-          ++ text ") " ++ unalign
-          ++ self#pBlock () h
-
-
-  (*** GLOBALS ***)
-  method pGlobal () (g:global) : doc =       (* global (vars, types, etc.) *)
-    match g with 
-    | GFun (fundec, l) ->
-        (* If the function has attributes then print a prototype because 
-        * GCC cannot accept function attributes in a definition *)
-        let oldattr = fundec.svar.vattr in
-        (* Always pring the file name before function declarations *)
-        let proto = 
-          if oldattr <> [] then 
-            (self#pLineDirective l) ++ (self#pVDecl () fundec.svar) 
-              ++ chr ';' ++ line 
-          else nil in
-        (* Temporarily remove the function attributes *)
-        fundec.svar.vattr <- [];
-        let body = (self#pLineDirective ~forcefile:true l) 
-                      ++ (self#pFunDecl () fundec) in
-        fundec.svar.vattr <- oldattr;
-        proto ++ body ++ line
-          
-    | GType (typ, l) ->
-        self#pLineDirective ~forcefile:true l ++
-          text "typedef "
-          ++ (self#pType (Some (text typ.tname)) () typ.ttype)
-          ++ text ";\n"
-
-    | GEnumTag (enum, l) ->
-        self#pLineDirective l ++
-          text "enum" ++ align ++ text (" " ^ enum.ename) ++
-          text " {" ++ line
-          ++ (docList ~sep:(chr ',' ++ line)
-                (fun (n,i, loc) -> 
-                  text (n ^ " = ") 
-                    ++ self#pExp () i)
-                () enum.eitems)
-          ++ unalign ++ line ++ text "} " 
-          ++ self#pAttrs () enum.eattr ++ text";\n"
-
-    | GEnumTagDecl (enum, l) -> (* This is a declaration of a tag *)
-        self#pLineDirective l ++
-          text ("enum " ^ enum.ename ^ ";\n")
-
-    | GCompTag (comp, l) -> (* This is a definition of a tag *)
-        let n = comp.cname in
-        let su, su1, su2 =
-          if comp.cstruct then "struct", "str", "uct"
-          else "union",  "uni", "on"
-        in
-        let sto_mod, rest_attr = separateStorageModifiers comp.cattr in
-        self#pLineDirective ~forcefile:true l ++
-          text su1 ++ (align ++ text su2 ++ chr ' ' ++ (self#pAttrs () sto_mod)
-                         ++ text n
-                         ++ text " {" ++ line
-                         ++ ((docList ~sep:line (self#pFieldDecl ())) () 
-                               comp.cfields)
-                         ++ unalign)
-          ++ line ++ text "}" ++
-          (self#pAttrs () rest_attr) ++ text ";\n"
-
-    | GCompTagDecl (comp, l) -> (* This is a declaration of a tag *)
-        self#pLineDirective l ++
-          text (compFullName comp) ++ text ";\n"
-
-    | GVar (vi, io, l) ->
-        self#pLineDirective ~forcefile:true l ++
-          self#pVDecl () vi
-          ++ chr ' '
-          ++ (match io.init with
-            None -> nil
-          | Some i -> text " = " ++ 
-                (let islong = 
-                  match i with
-                    CompoundInit (_, il) when List.length il >= 8 -> true
-                  | _ -> false 
-                in
-                if islong then 
-                  line ++ self#pLineDirective l ++ text "  " 
-                else nil) ++
-                (self#pInit () i))
-          ++ text ";\n"
-      
-    (* print global variable 'extern' declarations, and function prototypes *)    
-    | GVarDecl (vi, l) ->
-        self#pLineDirective l ++
-          (self#pVDecl () vi)
-          ++ text ";\n"
-
-    | GAsm (s, l) ->
-        self#pLineDirective l ++
-          text ("__asm__(\"" ^ escape_string s ^ "\");\n")
-
-    | GPragma (Attr(an, args), l) ->
-        (* sm: suppress printing pragmas that gcc does not understand *)
-        (* assume anything starting with "ccured" is ours *)
-        (* also don't print the 'combiner' pragma *)
-        (* nor 'cilnoremove' *)
-        let suppress =
-          not !print_CIL_Input && 
-          not !msvcMode &&
-          ((startsWith "box" an) ||
-           (startsWith "ccured" an) ||
-           (an = "merger") ||
-           (an = "cilnoremove")) in
-        let d =
-	  match an, args with
-	  | _, [] ->
-              text an
-	  | "weak", [ACons (symbol, [])] ->
-	      text "weak " ++ text symbol
-	  | _ ->
-            text (an ^ "(")
-              ++ docList ~sep:(chr ',') (self#pAttrParam ()) () args
-              ++ text ")"
-        in
-        self#pLineDirective l 
-          ++ (if suppress then text "/* " else text "")
-          ++ (text "#pragma ")
-          ++ d
-          ++ (if suppress then text " */\n" else text "\n")
-
-    | GText s  -> 
-        if s <> "//" then 
-          text s ++ text "\n"
-        else
-          nil
-
-
-   method dGlobal (out: out_channel) (g: global) : unit = 
-     (* For all except functions and variable with initializers, use the 
-      * pGlobal *)
-     match g with 
-       GFun (fdec, l) -> 
-         (* If the function has attributes then print a prototype because 
-          * GCC cannot accept function attributes in a definition *)
-         let oldattr = fdec.svar.vattr in
-         let proto = 
-           if oldattr <> [] then 
-             (self#pLineDirective l) ++ (self#pVDecl () fdec.svar) 
-               ++ chr ';' ++ line
-           else nil in
-         fprint out !lineLength
-           (proto ++ (self#pLineDirective ~forcefile:true l));
-         (* Temporarily remove the function attributes *)
-         fdec.svar.vattr <- [];
-         fprint out !lineLength (self#pFunDecl () fdec);               
-         fdec.svar.vattr <- oldattr;
-         output_string out "\n"
-
-     | GVar (vi, {init = Some i}, l) -> begin
-         fprint out !lineLength 
-           (self#pLineDirective ~forcefile:true l ++
-              self#pVDecl () vi
-              ++ text " = " 
-              ++ (let islong = 
-                match i with
-                  CompoundInit (_, il) when List.length il >= 8 -> true
-                | _ -> false 
-              in
-              if islong then 
-                line ++ self#pLineDirective l ++ text "  " 
-              else nil)); 
-         self#dInit out 3 i;
-         output_string out ";\n"
-     end
-
-     | g -> fprint out !lineLength (self#pGlobal () g)
-
-   method pFieldDecl () fi = 
-     (self#pType
-        (Some (text (if fi.fname = missingFieldName then "" else fi.fname)))
-        () 
-        fi.ftype)
-       ++ text " "
-       ++ (match fi.fbitfield with None -> nil 
-       | Some i -> text ": " ++ num i ++ text " ")
-       ++ self#pAttrs () fi.fattr
-       ++ text ";"
-       
-  method private pFunDecl () f =
-      self#pVDecl () f.svar
-      ++  line
-      ++ text "{ "
-      ++ (align
-            (* locals. *)
-            ++ (docList ~sep:line (fun vi -> self#pVDecl () vi ++ text ";") 
-                  () f.slocals)
-            ++ line ++ line
-            (* the body *)
-            ++ ((* remember the declaration *) currentFormals <- f.sformals; 
-                let body = self#pBlock () f.sbody in
-                currentFormals <- [];
-                body))
-      ++ line
-      ++ text "}"
-
-  (***** PRINTING DECLARATIONS and TYPES ****)
-    
-  method pType (nameOpt: doc option) (* Whether we are declaring a name or 
-                                      * we are just printing a type *)
-               () (t:typ) =       (* use of some type *)
-    let name = match nameOpt with None -> nil | Some d -> d in
-    let printAttributes (a: attributes) = 
-      let pa = self#pAttrs () a in
-      match nameOpt with 
-      | None when not !print_CIL_Input && not !msvcMode -> 
-          (* Cannot print the attributes in this case because gcc does not 
-           * like them here, except if we are printing for CIL, or for MSVC. 
-           * In fact, for MSVC we MUST print attributes such as __stdcall *)
-          if pa = nil then nil else 
-          text "/*" ++ pa ++ text "*/"
-      | _ -> pa
-    in
-    match t with 
-      TVoid a ->
-        text "void"
-          ++ self#pAttrs () a 
-          ++ text " " 
-          ++ name
-
-    | TInt (ikind,a) -> 
-        d_ikind () ikind 
-          ++ self#pAttrs () a 
-          ++ text " "
-          ++ name
-
-    | TFloat(fkind, a) -> 
-        d_fkind () fkind 
-          ++ self#pAttrs () a 
-          ++ text " " 
-          ++ name
-
-    | TComp (comp, a) -> (* A reference to a struct *)
-        let su = if comp.cstruct then "struct" else "union" in
-        text (su ^ " " ^ comp.cname ^ " ") 
-          ++ self#pAttrs () a 
-          ++ name
-          
-    | TEnum (enum, a) -> 
-        text ("enum " ^ enum.ename ^ " ")
-          ++ self#pAttrs () a 
-          ++ name
-    | TPtr (bt, a)  -> 
-        (* Parenthesize the ( * attr name) if a pointer to a function or an 
-         * array. However, on MSVC the __stdcall modifier must appear right 
-         * before the pointer constructor "(__stdcall *f)". We push them into 
-         * the parenthesis. *)
-        let (paren: doc option), (bt': typ) = 
-          match bt with 
-            TFun(rt, args, isva, fa) when !msvcMode -> 
-              let an, af', at = partitionAttributes ~default:AttrType fa in
-              (* We take the af' and we put them into the parentheses *)
-              Some (text "(" ++ printAttributes af'), 
-              TFun(rt, args, isva, addAttributes an at)
-
-          | TFun _ | TArray _ -> Some (text "("), bt
-
-          | _ -> None, bt
-        in
-        let name' = text "*" ++ printAttributes a ++ name in
-        let name'' = (* Put the parenthesis *)
-          match paren with 
-            Some p -> p ++ name' ++ text ")" 
-          | _ -> name' 
-        in
-        self#pType 
-          (Some name'')
-          () 
-          bt'
-
-    | TArray (elemt, lo, a) -> 
-        (* ignore the const attribute for arrays *)
-        let a' = dropAttributes [ "const" ] a in 
-        let name' = 
-          if a' == [] then name else
-          if nameOpt == None then printAttributes a' else 
-          text "(" ++ printAttributes a' ++ name ++ text ")" 
-        in
-        self#pType 
-          (Some (name'
-                   ++ text "[" 
-                   ++ (match lo with None -> nil | Some e -> self#pExp () e)
-                   ++ text "]"))
-          ()
-          elemt
-          
-    | TFun (restyp, args, isvararg, a) -> 
-        let name' = 
-          if a == [] then name else 
-          if nameOpt == None then printAttributes a else
-          text "(" ++ printAttributes a ++ name ++ text ")" 
-        in
-        self#pType 
-          (Some
-             (name'
-                ++ text "("
-                ++ (align 
-                      ++ 
-                      (if args = Some [] && isvararg then 
-                        text "..."
-                      else
-                        (if args = None then nil 
-                        else if args = Some [] then text "void"
-                        else 
-                          let pArg (aname, atype, aattr) = 
-                            let stom, rest = separateStorageModifiers aattr in
-                            (* First the storage modifiers *)
-                            (self#pAttrs () stom)
-                              ++ (self#pType (Some (text aname)) () atype)
-                              ++ text " "
-                              ++ self#pAttrs () rest
-                          in
-                          (docList ~sep:(chr ',' ++ break) pArg) () 
-                            (argsToList args))
-                          ++ (if isvararg then break ++ text ", ..." else nil))
-                      ++ unalign)
-                ++ text ")"))
-          ()
-          restyp
-
-  | TNamed (t, a) ->
-      text t.tname ++ self#pAttrs () a ++ text " " ++ name
-
-  | TBuiltin_va_list a -> 
-      text "__builtin_va_list"
-       ++ self#pAttrs () a 
-        ++ text " " 
-        ++ name
-
-
-  (**** PRINTING ATTRIBUTES *********)
-  method pAttrs () (a: attributes) = 
-    self#pAttrsGen false a
-
-
-  (* Print one attribute. Return also an indication whether this attribute 
-   * should be printed inside the __attribute__ list *)
-  method pAttr (Attr(an, args): attribute) : doc * bool =
-    (* Recognize and take care of some known cases *)
-    match an, args with 
-      "const", [] -> text "const", false
-          (* Put the aconst inside the attribute list *)
-    | "aconst", [] when not !msvcMode -> text "__const__", true
-    | "thread", [] when not !msvcMode -> text "__thread", false
-(*
-    | "used", [] when not !msvcMode -> text "__attribute_used__", false 
-*)
-    | "volatile", [] -> text "volatile", false
-    | "restrict", [] -> text "__restrict", false
-    | "missingproto", [] -> text "/* missing proto */", false
-    | "cdecl", [] when !msvcMode -> text "__cdecl", false
-    | "stdcall", [] when !msvcMode -> text "__stdcall", false
-    | "fastcall", [] when !msvcMode -> text "__fastcall", false
-    | "declspec", args when !msvcMode -> 
-        text "__declspec(" 
-          ++ docList (self#pAttrParam ()) () args
-          ++ text ")", false
-    | "w64", [] when !msvcMode -> text "__w64", false
-    | "asm", args -> 
-        text "__asm__(" 
-          ++ docList (self#pAttrParam ()) () args
-          ++ text ")", false
-    (* we suppress printing mode(__si__) because it triggers an *)
-    (* internal compiler error in all current gcc versions *)
-    (* sm: I've now encountered a problem with mode(__hi__)... *)
-    (* I don't know what's going on, but let's try disabling all "mode"..*)
-    | "mode", [ACons(tag,[])] -> 
-        text "/* mode(" ++ text tag ++ text ") */", false
-
-    (* sm: also suppress "format" because we seem to print it in *)
-    (* a way gcc does not like *)
-    | "format", _ -> text "/* format attribute */", false
-
-    (* sm: here's another one I don't want to see gcc warnings about.. *)
-    | "mayPointToStack", _ when not !print_CIL_Input 
-    (* [matth: may be inside another comment.]
-      -> text "/*mayPointToStack*/", false 
-    *)
-      -> text "", false
-
-    | _ -> (* This is the dafault case *)
-        (* Add underscores to the name *)
-        let an' = if !msvcMode then "__" ^ an else "__" ^ an ^ "__" in
-        if args = [] then 
-          text an', true
-        else
-          text (an' ^ "(") 
-            ++ (docList (self#pAttrParam ()) () args)
-            ++ text ")", 
-          true
-
-  method pAttrParam () = function 
-    | AInt n -> num n
-    | AStr s -> text ("\"" ^ escape_string s ^ "\"")
-    | ACons(s, []) -> text s
-    | ACons(s,al) ->
-        text (s ^ "(")
-          ++ (docList (self#pAttrParam ()) () al)
-          ++ text ")"
-    | ASizeOfE a -> text "sizeof(" ++ self#pAttrParam () a ++ text ")"
-    | ASizeOf t -> text "sizeof(" ++ self#pType None () t ++ text ")"
-    | ASizeOfS ts -> text "sizeof(<typsig>)"
-    | AAlignOfE a -> text "__alignof__(" ++ self#pAttrParam () a ++ text ")"
-    | AAlignOf t -> text "__alignof__(" ++ self#pType None () t ++ text ")"
-    | AAlignOfS ts -> text "__alignof__(<typsig>)"
-    | AUnOp(u,a1) -> 
-        (d_unop () u) ++ text " (" ++ (self#pAttrParam () a1) ++ text ")"
-
-    | ABinOp(b,a1,a2) -> 
-        align 
-          ++ text "(" 
-          ++ (self#pAttrParam () a1)
-          ++ text ") "
-          ++ (d_binop () b)
-          ++ break 
-          ++ text " (" ++ (self#pAttrParam () a2) ++ text ") "
-          ++ unalign
-    | ADot (ap, s) -> (self#pAttrParam () ap) ++ text ("." ^ s)
-          
-  (* A general way of printing lists of attributes *)
-  method private pAttrsGen (block: bool) (a: attributes) = 
-    (* Scan all the attributes and separate those that must be printed inside 
-     * the __attribute__ list *)
-    let rec loop (in__attr__: doc list) = function
-        [] -> begin 
-          match in__attr__ with
-            [] -> nil
-          | _ :: _->
-              (* sm: added 'forgcc' calls to not comment things out
-               * if CIL is the consumer; this is to address a case
-               * Daniel ran into where blockattribute(nobox) was being
-               * dropped by the merger
-               *)
-              (if block then 
-                text (" " ^ (forgcc "/*") ^ " __blockattribute__(")
-               else
-                 text "__attribute__((")
-
-                ++ (docList ~sep:(chr ',' ++ break)
-                      (fun a -> a)) () in__attr__
-                ++ text ")"
-                ++ (if block then text (forgcc "*/") else text ")")
-        end
-      | x :: rest -> 
-          let dx, ina = self#pAttr x in
-          if ina then 
-            loop (dx :: in__attr__) rest
-          else
-            dx ++ text " " ++ loop in__attr__ rest
-    in
-    let res = loop [] a in
-    if res = nil then
-      res
-    else
-      text " " ++ res ++ text " "
-
-end (* class defaultCilPrinterClass *)
-
-let defaultCilPrinter = new defaultCilPrinterClass
-
-(* Top-level printing functions *)
-let printType (pp: cilPrinter) () (t: typ) : doc = 
-  pp#pType None () t
-  
-let printExp (pp: cilPrinter) () (e: exp) : doc = 
-  pp#pExp () e
-
-let printLval (pp: cilPrinter) () (lv: lval) : doc = 
-  pp#pLval () lv
-
-let printGlobal (pp: cilPrinter) () (g: global) : doc = 
-  pp#pGlobal () g
-
-let dumpGlobal (pp: cilPrinter) (out: out_channel) (g: global) : unit = 
-  pp#dGlobal out g
-
-let printAttr (pp: cilPrinter) () (a: attribute) : doc = 
-  let ad, _ = pp#pAttr a in ad
-
-let printAttrs (pp: cilPrinter) () (a: attributes) : doc = 
-  pp#pAttrs () a
-
-let printInstr (pp: cilPrinter) () (i: instr) : doc = 
-  pp#pInstr () i
-
-let printStmt (pp: cilPrinter) () (s: stmt) : doc = 
-  pp#pStmt () s
-
-let printBlock (pp: cilPrinter) () (b: block) : doc = 
-  (* We must add the alignment ourselves, beucase pBlock will pop it *)
-  align ++ pp#pBlock () b
-
-let dumpStmt (pp: cilPrinter) (out: out_channel) (ind: int) (s: stmt) : unit = 
-  pp#dStmt out ind s
-
-let dumpBlock (pp: cilPrinter) (out: out_channel) (ind: int) (b: block) : unit = 
-  pp#dBlock out ind b
-
-let printInit (pp: cilPrinter) () (i: init) : doc = 
-  pp#pInit () i
-
-let dumpInit (pp: cilPrinter) (out: out_channel) (ind: int) (i: init) : unit = 
-  pp#dInit out ind i
-
-(* Now define some short cuts *)
-let d_exp () e = printExp defaultCilPrinter () e
-let _ = pd_exp := d_exp
-let d_lval () lv = printLval defaultCilPrinter () lv
-let d_offset base () off = defaultCilPrinter#pOffset base off
-let d_init () i = printInit defaultCilPrinter () i
-let d_type () t = printType defaultCilPrinter () t
-let d_global () g = printGlobal defaultCilPrinter () g
-let d_attrlist () a = printAttrs defaultCilPrinter () a 
-let d_attr () a = printAttr defaultCilPrinter () a
-let d_attrparam () e = defaultCilPrinter#pAttrParam () e
-let d_label () l = defaultCilPrinter#pLabel () l
-let d_stmt () s = printStmt defaultCilPrinter () s
-let d_block () b = printBlock defaultCilPrinter () b
-let d_instr () i = printInstr defaultCilPrinter () i
-
-let d_shortglobal () = function
-    GPragma (Attr(an, _), _) -> dprintf "#pragma %s" an
-  | GType (ti, _) -> dprintf "typedef %s" ti.tname
-  | GVarDecl (vi, _) -> dprintf "declaration of %s" vi.vname
-  | GVar (vi, _, _) -> dprintf "definition of %s" vi.vname
-  | GCompTag(ci,_) -> dprintf "definition of %s" (compFullName ci)
-  | GCompTagDecl(ci,_) -> dprintf "declaration of %s" (compFullName ci)
-  | GEnumTag(ei,_) -> dprintf "definition of enum %s" ei.ename
-  | GEnumTagDecl(ei,_) -> dprintf "declaration of enum %s" ei.ename
-  | GFun(fd, _) -> dprintf "definition of %s" fd.svar.vname
-  | GText _ -> text "GText"
-  | GAsm _ -> text "GAsm"
-
-
-(* sm: given an ordinary CIL object printer, yield one which
- * behaves the same, except it never prints #line directives
- * (this is useful for debugging printfs) *)
-let dn_obj (func: unit -> 'a -> doc) : (unit -> 'a -> doc) =
-begin
-  (* construct the closure to return *)
-  let theFunc () (obj:'a) : doc =
-  begin
-    let prevStyle = !lineDirectiveStyle in
-    lineDirectiveStyle := None;
-    let ret = (func () obj) in    (* call underlying printer *)
-    lineDirectiveStyle := prevStyle;
-    ret
-  end in
-  theFunc
-end
-
-(* now define shortcuts for the non-location-printing versions,
- * with the naming prefix "dn_" *)
-let dn_exp       = (dn_obj d_exp)
-let dn_lval      = (dn_obj d_lval)
-(* dn_offset is missing because it has a different interface *)
-let dn_init      = (dn_obj d_init)
-let dn_type      = (dn_obj d_type)
-let dn_global    = (dn_obj d_global)
-let dn_attrlist  = (dn_obj d_attrlist)
-let dn_attr      = (dn_obj d_attr)
-let dn_attrparam = (dn_obj d_attrparam)
-let dn_stmt      = (dn_obj d_stmt)
-let dn_instr     = (dn_obj d_instr)
-
-
-(* Now define a cilPlainPrinter *)
-class plainCilPrinterClass =
-  (* We keep track of the composite types that we have done to avoid
-   * recursion *)
-  let donecomps : (int, unit) H.t = H.create 13 in
-  object (self)
-
-  inherit defaultCilPrinterClass as super
-  
-  (*** PLAIN TYPES ***)
-  method pType (dn: doc option) () (t: typ) = 
-    match dn with 
-      None -> self#pOnlyType () t
-    | Some d -> d ++ text " : " ++ self#pOnlyType () t
-
- method private pOnlyType () = function 
-     TVoid a -> dprintf "TVoid(@[%a@])" self#pAttrs a
-   | TInt(ikind, a) -> dprintf "TInt(@[%a,@?%a@])" 
-         d_ikind ikind self#pAttrs a
-   | TFloat(fkind, a) -> 
-       dprintf "TFloat(@[%a,@?%a@])" d_fkind fkind self#pAttrs a
-   | TNamed (t, a) ->
-       dprintf "TNamed(@[%s,@?%a,@?%a@])" 
-         t.tname self#pOnlyType t.ttype self#pAttrs a
-   | TPtr(t, a) -> dprintf "TPtr(@[%a,@?%a@])" self#pOnlyType t self#pAttrs a
-   | TArray(t,l,a) -> 
-       let dl = match l with 
-         None -> text "None" | Some l -> dprintf "Some(@[%a@])" self#pExp l in
-       dprintf "TArray(@[%a,@?%a,@?%a@])" 
-         self#pOnlyType t insert dl self#pAttrs a
-   | TEnum(enum,a) -> dprintf "Enum(%s,@[%a@])" enum.ename self#pAttrs a
-   | TFun(tr,args,isva,a) -> 
-       dprintf "TFun(@[%a,@?%a%s,@?%a@])"
-         self#pOnlyType tr 
-         insert 
-         (if args = None then text "None"
-         else (docList ~sep:(chr ',' ++ break) 
-                 (fun (an,at,aa) -> 
-                   dprintf "%s: %a" an self#pOnlyType at)) 
-             () 
-             (argsToList args))
-         (if isva then "..." else "") self#pAttrs a
-   | TComp (comp, a) -> 
-       if H.mem donecomps comp.ckey then 
-         dprintf "TCompLoop(%s %s, _, %a)" 
-           (if comp.cstruct then "struct" else "union") comp.cname 
-           self#pAttrs comp.cattr
-       else begin
-         H.add donecomps comp.ckey (); (* Add it before we do the fields *)
-         dprintf "TComp(@[%s %s,@?%a,@?%a,@?%a@])" 
-           (if comp.cstruct then "struct" else "union") comp.cname
-           (docList ~sep:(chr ',' ++ break) 
-              (fun f -> dprintf "%s : %a" f.fname self#pOnlyType f.ftype)) 
-           comp.cfields
-           self#pAttrs comp.cattr
-           self#pAttrs a
-       end
-   | TBuiltin_va_list a -> 
-       dprintf "TBuiltin_va_list(%a)" self#pAttrs a
-
-    
-  (* Some plain pretty-printers. Unlike the above these expose all the 
-   * details of the internal representation *)
-  method pExp () = function
-    Const(c) -> 
-      let d_plainconst () c = 
-        match c with
-          CInt64(i, ik, so) -> 
-            dprintf "Int64(%s,%a,%s)" 
-              (Int64.format "%d" i)
-              d_ikind ik
-              (match so with Some s -> s | _ -> "None")
-        | CStr(s) -> 
-            text ("CStr(\"" ^ escape_string s ^ "\")")
-        | CWStr(s) -> 
-            dprintf "CWStr(%a)" d_const c
-              
-        | CChr(c) -> text ("CChr('" ^ escape_char c ^ "')")
-        | CReal(f, fk, so) -> 
-            dprintf "CReal(%f, %a, %s)" 
-              f
-              d_fkind fk 
-              (match so with Some s -> s | _ -> "None")
-        | CEnum(_, s, _) -> text s
-      in
-      text "Const(" ++ d_plainconst () c ++ text ")"
-
-
-  | Lval(lv) -> 
-      text "Lval(" 
-        ++ (align
-              ++ self#pLval () lv
-              ++ unalign)
-        ++ text ")"
-        
-  | CastE(t,e) -> dprintf "CastE(@[%a,@?%a@])" self#pOnlyType t self#pExp e
-
-  | UnOp(u,e1,_) -> 
-      dprintf "UnOp(@[%a,@?%a@])"
-        d_unop u self#pExp e1
-          
-  | BinOp(b,e1,e2,_) -> 
-      let d_plainbinop () b =
-        match b with
-          PlusA -> text "PlusA"
-        | PlusPI -> text "PlusPI"
-        | IndexPI -> text "IndexPI"
-        | MinusA -> text "MinusA"
-        | MinusPP -> text "MinusPP"
-        | MinusPI -> text "MinusPI"
-        | _ -> d_binop () b
-      in
-      dprintf "%a(@[%a,@?%a@])" d_plainbinop b
-        self#pExp e1 self#pExp e2
-
-  | SizeOf (t) -> 
-      text "sizeof(" ++ self#pType None () t ++ chr ')'
-  | SizeOfE (e) -> 
-      text "sizeofE(" ++ self#pExp () e ++ chr ')'
-  | SizeOfStr (s) -> 
-      text "sizeofStr(" ++ d_const () (CStr s) ++ chr ')'
-  | AlignOf (t) -> 
-      text "__alignof__(" ++ self#pType None () t ++ chr ')'
-  | AlignOfE (e) -> 
-      text "__alignof__(" ++ self#pExp () e ++ chr ')'
-
-  | StartOf lv -> dprintf "StartOf(%a)" self#pLval lv
-  | AddrOf (lv) -> dprintf "AddrOf(%a)" self#pLval lv
-
-
-
-  method private d_plainoffset () = function
-      NoOffset -> text "NoOffset"
-    | Field(fi,o) -> 
-        dprintf "Field(@[%s:%a,@?%a@])" 
-          fi.fname self#pOnlyType fi.ftype self#d_plainoffset o
-     | Index(e, o) -> 
-         dprintf "Index(@[%a,@?%a@])" self#pExp e self#d_plainoffset o
-
-  method pInit () = function
-      SingleInit e -> dprintf "SI(%a)" d_exp e
-    | CompoundInit (t, initl) -> 
-        let d_plainoneinit (o, i) = 
-          self#d_plainoffset () o ++ text " = " ++ self#pInit () i
-        in
-        dprintf "CI(@[%a,@?%a@])" self#pOnlyType t
-          (docList ~sep:(chr ',' ++ break) d_plainoneinit) initl
-(*
-    | ArrayInit (t, len, initl) -> 
-        let idx = ref (- 1) in
-        let d_plainoneinit i = 
-          incr idx;
-          text "[" ++ num !idx ++ text "] = " ++ self#pInit () i
-        in
-        dprintf "AI(@[%a,%d,@?%a@])" self#pOnlyType t len
-          (docList ~sep:(chr ',' ++ break) d_plainoneinit) initl
-*)           
-  method pLval () (lv: lval) =  
-    match lv with 
-    | Var vi, o -> dprintf "Var(@[%s,@?%a@])" vi.vname self#d_plainoffset o
-    | Mem e, o -> dprintf "Mem(@[%a,@?%a@])" self#pExp e self#d_plainoffset o
-
-
-end
-let plainCilPrinter = new plainCilPrinterClass
-
-(* And now some shortcuts *)
-let d_plainexp () e = plainCilPrinter#pExp () e
-let d_plaintype () t = plainCilPrinter#pType None () t
-let d_plaininit () i = plainCilPrinter#pInit () i
-let d_plainlval () l = plainCilPrinter#pLval () l
-
-(* zra: this allows pretty printers not in cil.ml to
-   be exposed to cilmain.ml *)
-let printerForMaincil = ref defaultCilPrinter
-
-let rec d_typsig () = function
-    TSArray (ts, eo, al) -> 
-      dprintf "TSArray(@[%a,@?%a,@?%a@])" 
-        d_typsig ts 
-        insert (text (match eo with None -> "None" 
-                       | Some e -> "Some " ^ Int64.to_string e))
-        d_attrlist al
-  | TSPtr (ts, al) -> 
-      dprintf "TSPtr(@[%a,@?%a@])"
-        d_typsig ts d_attrlist al
-  | TSComp (iss, name, al) -> 
-      dprintf "TSComp(@[%s %s,@?%a@])"
-        (if iss then "struct" else "union") name
-        d_attrlist al
-  | TSFun (rt, args, isva, al) -> 
-      dprintf "TSFun(@[%a,@?%a,%b,@?%a@])"
-        d_typsig rt
-        (docList ~sep:(chr ',' ++ break) (d_typsig ())) args isva
-        d_attrlist al
-  | TSEnum (n, al) -> 
-      dprintf "TSEnum(@[%s,@?%a@])"
-        n d_attrlist al
-  | TSBase t -> dprintf "TSBase(%a)" d_type t
-
-
-let newVID () = 
-  let t = !nextGlobalVID in 
-  incr nextGlobalVID;
-  t
-
-   (* Make a varinfo. Used mostly as a helper function below  *)
-let makeVarinfo global name typ =
-  (* Strip const from type for locals *)
-  let vi = 
-    { vname = name;
-      vid   = newVID ();
-      vglob = global;
-      vtype = if global then typ else typeRemoveAttributes ["const"] typ;
-      vdecl = lu;
-      vinline = false;
-      vattr = [];
-      vstorage = NoStorage;
-      vaddrof = false;
-      vreferenced = false;    (* sm *)
-    } in
-  vi
-      
-let copyVarinfo (vi: varinfo) (newname: string) : varinfo = 
-  let vi' = {vi with vname = newname; vid = newVID () } in
-  vi'
-
-let makeLocal fdec name typ = (* a helper function *)
-  fdec.smaxid <- 1 + fdec.smaxid;
-  let vi = makeVarinfo false name typ in
-  vi
-  
-   (* Make a local variable and add it to a function *)
-let makeLocalVar fdec ?(insert = true) name typ =
-  let vi = makeLocal fdec name typ in
-  if insert then fdec.slocals <- fdec.slocals @ [vi];
-  vi
-
-
-let makeTempVar fdec ?(name = "__cil_tmp") typ : varinfo =
-  let name = name ^ (string_of_int (1 + fdec.smaxid)) in
-  makeLocalVar fdec name typ
-
- 
-  (* Set the formals and re-create the function name based on the information*)
-let setFormals (f: fundec) (forms: varinfo list) = 
-  f.sformals <- forms; (* Set the formals *)
-  match unrollType f.svar.vtype with
-    TFun(rt, _, isva, fa) -> 
-      f.svar.vtype <- 
-         TFun(rt, 
-              Some (List.map (fun a -> (a.vname, a.vtype, a.vattr)) forms), 
-              isva, fa)
-  | _ -> E.s (E.bug "Set formals. %s does not have function type\n"
-                f.svar.vname)
-    
-   (* Set the types of arguments and results as given by the function type 
-    * passed as the second argument *)
-let setFunctionType (f: fundec) (t: typ) = 
-  match unrollType t with
-    TFun (rt, Some args, va, a) -> 
-      if List.length f.sformals <> List.length args then 
-        E.s (E.bug "setFunctionType: number of arguments differs from the number of formals");
-      (* Change the function type. *)
-      f.svar.vtype <- t; 
-      (* Change the sformals and we know that indirectly we'll change the 
-       * function type *)
-      List.iter2 
-        (fun (an,at,aa) f -> 
-          f.vtype <- at; f.vattr <- aa) 
-        args f.sformals
-
-  | _ -> E.s (E.bug "setFunctionType: not a function type")
-      
-
-   (* Set the types of arguments and results as given by the function type 
-    * passed as the second argument *)
-let setFunctionTypeMakeFormals (f: fundec) (t: typ) = 
-  match unrollType t with
-    TFun (rt, Some args, va, a) -> 
-      if f.sformals <> [] then 
-        E.s (E.warn "setFunctionTypMakeFormals called on function %s with some formals already"
-               f.svar.vname);
-      (* Change the function type. *)
-      f.svar.vtype <- t; 
-      f.sformals <- [];
-      
-      f.sformals <- List.map (fun (n,t,a) -> makeLocal f n t) args;
-
-      setFunctionType f t
-
-  | _ -> E.s (E.bug "setFunctionTypeMakeFormals: not a function type: %a"
-             d_type t)
-      
-
-let setMaxId (f: fundec) = 
-  f.smaxid <- List.length f.sformals + List.length f.slocals
-
-  
-  (* Make a formal variable for a function. Insert it in both the sformals 
-   * and the type of the function. You can optionally specify where to insert 
-   * this one. If where = "^" then it is inserted first. If where = "$" then 
-   * it is inserted last. Otherwise where must be the name of a formal after 
-   * which to insert this. By default it is inserted at the end. *)
-let makeFormalVar fdec ?(where = "$") name typ : varinfo = 
-  (* Search for the insertion place *)
-  let thenewone = ref fdec.svar in (* Just a placeholder *)
-  let makeit () : varinfo = 
-    let vi = makeLocal fdec name typ in
-    thenewone := vi;
-    vi
-  in
-  let rec loopFormals = function
-      [] -> 
-        if where = "$" then [makeit ()]
-        else E.s (E.error "makeFormalVar: cannot find insert-after formal %s"
-                    where)
-    | f :: rest when f.vname = where -> f :: makeit () :: rest
-    | f :: rest -> f :: loopFormals rest
-  in
-  let newformals = 
-    if where = "^" then makeit () :: fdec.sformals else 
-    loopFormals fdec.sformals in
-  setFormals fdec newformals;
-  !thenewone
-
-   (* Make a global variable. Your responsibility to make sure that the name
-    * is unique *)
-let makeGlobalVar name typ =
-  let vi = makeVarinfo true name typ in
-  vi
-
-
-   (* Make an empty function *)
-let emptyFunction name = 
-  { svar  = makeGlobalVar name (TFun(voidType, Some [], false,[]));
-    smaxid = 0;
-    slocals = [];
-    sformals = [];
-    sbody = mkBlock [];
-    smaxstmtid = None;
-    sallstmts = [];
-  } 
-
-
-
-    (* A dummy function declaration handy for initialization *)
-let dummyFunDec = emptyFunction "@dummy"
-let dummyFile = 
-  { globals = [];
-    fileName = "<dummy>";
-    globinit = None;
-    globinitcalled = false;}
-
-let saveBinaryFile (cil_file : file) (filename : string) =
-  let outchan = open_out_bin filename in
-  Marshal.to_channel outchan cil_file [] ;
-  close_out outchan 
-
-let saveBinaryFileChannel (cil_file : file) (outchan : out_channel) =
-  Marshal.to_channel outchan cil_file [] 
-
-let loadBinaryFile (filename : string) : file = 
-  let inchan = open_in_bin filename in
-  let cil_file = (Marshal.from_channel inchan : file) in
-  close_in inchan ;
-  cil_file
-
-
-(* Take the name of a file and make a valid symbol name out of it. There are 
- * a few chanracters that are not valid in symbols *)
-let makeValidSymbolName (s: string) = 
-  let s = String.copy s in (* So that we can update in place *)
-  let l = String.length s in
-  for i = 0 to l - 1 do
-    let c = String.get s i in
-    let isinvalid = 
-      match c with
-        '-' | '.' -> true
-      | _ -> false
-    in
-    if isinvalid then 
-      String.set s i '_';
-  done;
-  s
-
-
-(*** Define the visiting engine ****)
-(* visit all the nodes in a Cil expression *)
-let doVisit (vis: cilVisitor)
-            (startvisit: 'a -> 'a visitAction) 
-            (children: cilVisitor -> 'a -> 'a) 
-            (node: 'a) : 'a = 
-  let action = startvisit node in
-  match action with
-    SkipChildren -> node
-  | ChangeTo node' -> node'
-  | _ -> (* DoChildren and ChangeDoChildrenPost *)
-      let nodepre = match action with
-        ChangeDoChildrenPost (node', _) -> node'
-      | _ -> node
-      in
-      let nodepost = children vis nodepre in
-      match action with
-        ChangeDoChildrenPost (_, f) -> f nodepost
-      | _ -> nodepost
-
-(* mapNoCopy is like map but avoid copying the list if the function does not 
- * change the elements. *)
-let rec mapNoCopy (f: 'a -> 'a) = function
-    [] -> []
-  | (i :: resti) as li -> 
-      let i' = f i in
-      let resti' = mapNoCopy f resti in
-      if i' != i || resti' != resti then i' :: resti' else li 
-
-let rec mapNoCopyList (f: 'a -> 'a list) = function
-    [] -> []
-  | (i :: resti) as li -> 
-      let il' = f i in
-      let resti' = mapNoCopyList f resti in
-      match il' with
-        [i'] when i' == i && resti' == resti -> li
-      | _ -> il' @ resti'
-
-(* A visitor for lists *)
-let doVisitList  (vis: cilVisitor)
-                 (startvisit: 'a -> 'a list visitAction)
-                 (children: cilVisitor -> 'a -> 'a)
-                 (node: 'a) : 'a list = 
-  let action = startvisit node in
-  match action with
-    SkipChildren -> [node]
-  | ChangeTo nodes' -> nodes'
-  | _ -> 
-      let nodespre = match action with
-        ChangeDoChildrenPost (nodespre, _) -> nodespre
-      | _ -> [node]
-      in
-      let nodespost = mapNoCopy (children vis) nodespre in
-      match action with
-        ChangeDoChildrenPost (_, f) -> f nodespost
-      | _ -> nodespost
-  
-let debugVisit = false
-
-let rec visitCilExpr (vis: cilVisitor) (e: exp) : exp = 
-  doVisit vis vis#vexpr childrenExp e
-and childrenExp (vis: cilVisitor) (e: exp) : exp = 
-  let vExp e = visitCilExpr vis e in
-  let vTyp t = visitCilType vis t in
-  let vLval lv = visitCilLval vis lv in
-  match e with
-  | Const (CEnum(v, s, ei)) -> 
-      let v' = vExp v in 
-      if v' != v then Const (CEnum(v', s, ei)) else e
-
-  | Const _ -> e
-  | SizeOf t -> 
-      let t'= vTyp t in 
-      if t' != t then SizeOf t' else e
-  | SizeOfE e1 -> 
-      let e1' = vExp e1 in
-      if e1' != e1 then SizeOfE e1' else e
-  | SizeOfStr s -> e
-
-  | AlignOf t -> 
-      let t' = vTyp t in
-      if t' != t then AlignOf t' else e
-  | AlignOfE e1 -> 
-      let e1' = vExp e1 in
-      if e1' != e1 then AlignOfE e1' else e
-  | Lval lv -> 
-      let lv' = vLval lv in
-      if lv' != lv then Lval lv' else e
-  | UnOp (uo, e1, t) -> 
-      let e1' = vExp e1 in let t' = vTyp t in
-      if e1' != e1 || t' != t then UnOp(uo, e1', t') else e
-  | BinOp (bo, e1, e2, t) -> 
-      let e1' = vExp e1 in let e2' = vExp e2 in let t' = vTyp t in
-      if e1' != e1 || e2' != e2 || t' != t then BinOp(bo, e1',e2',t') else e
-  | CastE (t, e1) ->           
-      let t' = vTyp t in let e1' = vExp e1 in
-      if t' != t || e1' != e1 then CastE(t', e1') else e
-  | AddrOf lv -> 
-      let lv' = vLval lv in
-      if lv' != lv then AddrOf lv' else e
-  | StartOf lv -> 
-      let lv' = vLval lv in
-      if lv' != lv then StartOf lv' else e
-
-and visitCilInit (vis: cilVisitor) (i: init) : init = 
-  doVisit vis vis#vinit childrenInit i
-and childrenInit (vis: cilVisitor) (i: init) : init = 
-  let fExp e = visitCilExpr vis e in
-  let fInit i = visitCilInit vis i in
-  let fTyp t = visitCilType vis t in
-  match i with
-  | SingleInit e -> 
-      let e' = fExp e in
-      if e' != e then SingleInit e' else i
-  | CompoundInit (t, initl) ->
-      let t' = fTyp t in
-      (* Collect the new initializer list, in reverse. We prefer two 
-       * traversals to ensure tail-recursion. *)
-      let newinitl : (offset * init) list ref = ref [] in
-      (* Keep track whether the list has changed *)
-      let hasChanged = ref false in
-      let doOneInit ((o, i) as oi) = 
-        let o' = visitCilInitOffset vis o in    (* use initializer version *)
-        let i' = fInit i in
-        let newio = 
-          if o' != o || i' != i then 
-            begin hasChanged := true; (o', i') end else oi 
-        in
-        newinitl := newio :: !newinitl
-      in
-      List.iter doOneInit initl;
-      let initl' = if !hasChanged then List.rev !newinitl else initl in
-      if t' != t || initl' != initl then CompoundInit (t', initl') else i
-  
-and visitCilLval (vis: cilVisitor) (lv: lval) : lval =
-  doVisit vis vis#vlval childrenLval lv
-and childrenLval (vis: cilVisitor) (lv: lval) : lval =  
-  (* and visit its subexpressions *)
-  let vExp e = visitCilExpr vis e in
-  let vOff off = visitCilOffset vis off in
-  match lv with
-    Var v, off ->
-      let v'   = doVisit vis vis#vvrbl (fun _ x -> x) v in
-      let off' = vOff off in
-      if v' != v || off' != off then Var v', off' else lv
-  | Mem e, off -> 
-      let e' = vExp e in
-      let off' = vOff off in
-      if e' != e || off' != off then Mem e', off' else lv
-
-and visitCilOffset (vis: cilVisitor) (off: offset) : offset =
-  doVisit vis vis#voffs childrenOffset off
-and childrenOffset (vis: cilVisitor) (off: offset) : offset =
-  let vOff off = visitCilOffset vis off in
-  match off with
-    Field (f, o) -> 
-      let o' = vOff o in
-      if o' != o then Field (f, o') else off
-  | Index (e, o) -> 
-      let e' = visitCilExpr vis e in
-      let o' = vOff o in
-      if e' != e || o' != o then Index (e', o') else off
-  | NoOffset -> off
-
-(* sm: for offsets in initializers, the 'startvisit' will be the
- * vinitoffs method, but we can re-use the childrenOffset from
- * above since recursive offsets are visited by voffs.  (this point
- * is moot according to cil.mli which claims the offsets in 
- * initializers will never recursively contain offsets)
- *)
-and visitCilInitOffset (vis: cilVisitor) (off: offset) : offset =
-  doVisit vis vis#vinitoffs childrenOffset off
-
-and visitCilInstr (vis: cilVisitor) (i: instr) : instr list =
-  let oldloc = !currentLoc in
-  currentLoc := (get_instrLoc i);
-  assertEmptyQueue vis;
-  let res = doVisitList vis vis#vinst childrenInstr i in
-  currentLoc := oldloc;
-  (* See if we have accumulated some instructions *)
-  vis#unqueueInstr () @ res
-
-and childrenInstr (vis: cilVisitor) (i: instr) : instr =
-  let fExp = visitCilExpr vis in
-  let fLval = visitCilLval vis in
-  match i with
-  | Set(lv,e,l) -> 
-      let lv' = fLval lv in let e' = fExp e in
-      if lv' != lv || e' != e then Set(lv',e',l) else i
-  | Call(None,f,args,l) -> 
-      let f' = fExp f in let args' = mapNoCopy fExp args in
-      if f' != f || args' != args then Call(None,f',args',l) else i
-  | Call(Some lv,fn,args,l) -> 
-      let lv' = fLval lv in let fn' = fExp fn in 
-      let args' = mapNoCopy fExp args in
-      if lv' != lv || fn' != fn || args' != args 
-      then Call(Some lv', fn', args', l) else i
-
-  | Asm(sl,isvol,outs,ins,clobs,l) -> 
-      let outs' = mapNoCopy (fun ((s,lv) as pair) -> 
-                               let lv' = fLval lv in
-                               if lv' != lv then (s,lv') else pair) outs in
-      let ins'  = mapNoCopy (fun ((s,e) as pair) -> 
-                               let e' = fExp e in
-                               if e' != e then (s,e') else pair) ins in
-      if outs' != outs || ins' != ins then
-        Asm(sl,isvol,outs',ins',clobs,l) else i
-
-
-(* visit all nodes in a Cil statement tree in preorder *)
-and visitCilStmt (vis: cilVisitor) (s: stmt) : stmt =
-  let oldloc = !currentLoc in
-  currentLoc := (get_stmtLoc s.skind) ;
-  assertEmptyQueue vis;
-  let toPrepend : instr list ref = ref [] in (* childrenStmt may add to this *)
-  let res = doVisit vis vis#vstmt (childrenStmt toPrepend) s in
-  (* Now see if we have saved some instructions *)
-  toPrepend := !toPrepend @ vis#unqueueInstr ();
-  (match !toPrepend with 
-    [] -> () (* Return the same statement *)
-  | _ -> 
-      (* Make our statement contain the instructions to prepend *)
-      res.skind <- Block { battrs = []; bstmts = [ mkStmt (Instr !toPrepend);
-                                                   mkStmt res.skind ] });
-  currentLoc := oldloc;
-  res
-  
-and childrenStmt (toPrepend: instr list ref) (vis:cilVisitor) (s:stmt): stmt =
-  let fExp e = (visitCilExpr vis e) in
-  let fBlock b = visitCilBlock vis b in
-  let fInst i = visitCilInstr vis i in
-  (* Just change the statement kind *)
-  let skind' = 
-    match s.skind with
-      Break _ | Continue _ | Goto _ | Return (None, _) -> s.skind
-    | Return (Some e, l) -> 
-        let e' = fExp e in
-        if e' != e then Return (Some e', l) else s.skind
-(*
-    | Loop (b, l, s1, s2) -> 
-        let b' = fBlock b in
-        if b' != b then Loop (b', l, s1, s2) else s.skind
-*)
-    | While (e, b, l) ->
-	let e' = fExp e in 
-        let b' = fBlock b in
-          if e' != e || b' != b then While (e', b', l) else s.skind
-    | DoWhile (e, b, l) ->
-	let b' = fBlock b in
-        let e' = fExp e in 
-          if e' != e || b' != b then DoWhile (e', b', l) else s.skind
-    | For (bInit, e, bIter, b, l) -> 
-	let bInit' = fBlock bInit in
-	let e' = fExp e in
-	let bIter' = fBlock bIter in
-	let b' = fBlock b in
-	  if bInit' != bInit || e' != e || bIter' != bIter || b' != b then
-	    For (bInit', e', bIter', b', l) else s.skind
-    | If(e, s1, s2, l) -> 
-        let e' = fExp e in 
-        (*if e queued any instructions, pop them here and remember them so that
-          they are inserted before the If stmt, not in the then block. *)
-        toPrepend := vis#unqueueInstr (); 
-        let s1'= fBlock s1 in let s2'= fBlock s2 in
-        (* the stmts in the blocks should have cleaned up after themselves.*)
-        assertEmptyQueue vis;
-        if e' != e || s1' != s1 || s2' != s2 then 
-          If(e', s1', s2', l) else s.skind
-    | Switch (e, b, stmts, l) -> 
-        let e' = fExp e in 
-        toPrepend := vis#unqueueInstr (); (* insert these before the switch *)
-        let b' = fBlock b in
-        (* the stmts in b should have cleaned up after themselves.*)
-        assertEmptyQueue vis;
-        (* Don't do stmts, but we better not change those *)
-        if e' != e || b' != b then Switch (e', b', stmts, l) else s.skind
-    | Instr il -> 
-        let il' = mapNoCopyList fInst il in
-        if il' != il then Instr il' else s.skind
-    | Block b -> 
-        let b' = fBlock b in 
-        if b' != b then Block b' else s.skind
-    | TryFinally (b, h, l) -> 
-        let b' = fBlock b in
-        let h' = fBlock h in
-        if b' != b || h' != h then TryFinally(b', h', l) else s.skind
-    | TryExcept (b, (il, e), h, l) -> 
-        let b' = fBlock b in
-        assertEmptyQueue vis;
-        (* visit the instructions *)
-        let il' = mapNoCopyList fInst il in
-        (* Visit the expression *)
-        let e' = fExp e in
-        let il'' = 
-          let more = vis#unqueueInstr () in
-          if more != [] then 
-            il' @ more
-          else
-            il'
-        in
-        let h' = fBlock h in
-        (* Now collect the instructions *)
-        if b' != b || il'' != il || e' != e || h' != h then 
-          TryExcept(b', (il'', e'), h', l) 
-        else s.skind
-  in
-  if skind' != s.skind then s.skind <- skind';
-  (* Visit the labels *)
-  let labels' = 
-    let fLabel = function
-        Case (e, l) as lb -> 
-          let e' = fExp e in
-          if e' != e then Case (e', l) else lb
-        | lb -> lb
-    in
-    mapNoCopy fLabel s.labels
-  in
-  if labels' != s.labels then s.labels <- labels';
-  s
-      
-    
- 
-and visitCilBlock (vis: cilVisitor) (b: block) : block = 
-  doVisit vis vis#vblock childrenBlock b
-and childrenBlock (vis: cilVisitor) (b: block) : block = 
-  let fStmt s = visitCilStmt vis s in
-  let stmts' = mapNoCopy fStmt b.bstmts in
-  if stmts' != b.bstmts then { battrs = b.battrs; bstmts = stmts'} else b
-
-
-and visitCilType (vis : cilVisitor) (t : typ) : typ =
-  doVisit vis vis#vtype childrenType t
-and childrenType (vis : cilVisitor) (t : typ) : typ =
-  (* look for types referred to inside t's definition *)
-  let fTyp t  = visitCilType vis t in
-  let fAttr a = visitCilAttributes vis a in
-  match t with
-    TPtr(t1, a) -> 
-      let t1' = fTyp t1 in
-      let a' = fAttr a in
-      if t1' != t || a' != a then TPtr(t1', a') else t
-  | TArray(t1, None, a) -> 
-      let t1' = fTyp t1 in
-      let a' = fAttr a in
-      if t1' != t || a' != a  then TArray(t1', None, a') else t
-  | TArray(t1, Some e, a) -> 
-      let t1' = fTyp t1 in
-      let e' = visitCilExpr vis e in
-      let a' = fAttr a in
-      if t1' != t || e' != e  || a' != a then TArray(t1', Some e', a') else t
-
-      (* DON'T recurse into the compinfo, this is done in visitCilGlobal.
-	 User can iterate over cinfo.cfields manually, if desired.*)
-  | TComp(cinfo, a) ->
-      let a' = fAttr a in
-      if a != a' then TComp(cinfo, a') else t
-
-  | TFun(rettype, args, isva, a) -> 
-      let rettype' = fTyp rettype in
-      (* iterate over formals, as variable declarations *)
-      let argslist = argsToList args in
-      let visitArg ((an,at,aa) as arg) = 
-        let at' = fTyp at in
-        let aa' = fAttr aa in
-        if at' != at || aa' != aa then (an,at',aa') else arg
-      in
-      let argslist' = mapNoCopy visitArg argslist in
-      let a' = fAttr a in
-      if rettype' != rettype || argslist' != argslist || a' != a  then 
-        let args' = if argslist' == argslist then args else Some argslist' in
-        TFun(rettype', args', isva, a') else t
-
-  | TNamed(t1, a) -> (* Do not go into the type. Will do it at the time of 
-                      * GType *)
-      let a' = fAttr a in
-      if a' != a  then TNamed (t1, a') else t
-
-  | _ ->  (* other types (TVoid, TInt, TFloat, TEnum, and TBuiltin_va_list)
-             don't contain nested types, but they do have attributes. *)
-      let a = typeAttrs t in
-      let a' = fAttr a in
-      if a' != a  then setTypeAttrs t a' else t
-      
-
-(* for declarations, we visit the types inside; but for uses, *)
-(* we just visit the varinfo node *)
-and visitCilVarDecl (vis : cilVisitor) (v : varinfo) : varinfo =
-  doVisit vis vis#vvdec childrenVarDecl v 
-and childrenVarDecl (vis : cilVisitor) (v : varinfo) : varinfo =
-  v.vtype <- visitCilType vis v.vtype;
-  v.vattr <- visitCilAttributes vis v.vattr;  
-  v
-
-and visitCilAttributes (vis: cilVisitor) (al: attribute list) : attribute list=
-   let al' = 
-     mapNoCopyList (doVisitList vis vis#vattr childrenAttribute) al in
-   if al' != al then 
-     (* Must re-sort *)
-     addAttributes al' []
-   else
-     al
-and childrenAttribute (vis: cilVisitor) (a: attribute) : attribute = 
-  let fAttrP a = visitCilAttrParams vis a in
-  match a with 
-    Attr (n, args) -> 
-      let args' = mapNoCopy fAttrP args in
-      if args' != args then Attr(n, args') else a
-      
-
-and visitCilAttrParams (vis: cilVisitor) (a: attrparam) : attrparam =
-   doVisit vis vis#vattrparam childrenAttrparam a
-and childrenAttrparam (vis: cilVisitor) (aa: attrparam) : attrparam = 
-  let fTyp t  = visitCilType vis t in
-  let fAttrP a = visitCilAttrParams vis a in
-  match aa with 
-      AInt _ | AStr _ -> aa
-    | ACons(n, args) -> 
-        let args' = mapNoCopy fAttrP args in
-        if args' != args then ACons(n, args') else aa
-    | ASizeOf t -> 
-        let t' = fTyp t in
-        if t' != t then ASizeOf t' else aa
-    | ASizeOfE e -> 
-        let e' = fAttrP e in
-        if e' != e then ASizeOfE e' else aa
-    | AAlignOf t -> 
-        let t' = fTyp t in
-        if t' != t then AAlignOf t' else aa
-    | AAlignOfE e -> 
-        let e' = fAttrP e in
-        if e' != e then AAlignOfE e' else aa
-    | ASizeOfS _ | AAlignOfS _ ->
-        ignore (warn "Visitor inside of a type signature.");
-        aa
-    | AUnOp (uo, e1) -> 
-        let e1' = fAttrP e1 in
-        if e1' != e1 then AUnOp (uo, e1') else aa
-    | ABinOp (bo, e1, e2) -> 
-        let e1' = fAttrP e1 in
-        let e2' = fAttrP e2 in
-        if e1' != e1 || e2' != e2 then ABinOp (bo, e1', e2') else aa
-    | ADot (ap, s) ->
-        let ap' = fAttrP ap in
-        if ap' != ap then ADot (ap', s) else aa
- 
-
-let rec visitCilFunction (vis : cilVisitor) (f : fundec) : fundec =
-  if debugVisit then ignore (E.log "Visiting function %s\n" f.svar.vname);
-  assertEmptyQueue vis;
-  let f = doVisit vis vis#vfunc childrenFunction f in
-
-  let toPrepend = vis#unqueueInstr () in
-  if toPrepend <> [] then 
-    f.sbody.bstmts <- mkStmt (Instr toPrepend) :: f.sbody.bstmts;
-  f
-
-and childrenFunction (vis : cilVisitor) (f : fundec) : fundec =
-  f.svar <- visitCilVarDecl vis f.svar; (* hit the function name *)
-  (* visit local declarations *)
-  f.slocals <- mapNoCopy (visitCilVarDecl vis) f.slocals;
-  (* visit the formals *)
-  let newformals = mapNoCopy (visitCilVarDecl vis) f.sformals in
-  (* Make sure the type reflects the formals *)
-  setFormals f newformals;
-  (* Remember any new instructions that were generated while visiting
-     variable declarations. *)
-  let toPrepend = vis#unqueueInstr () in
-
-  f.sbody <- visitCilBlock vis f.sbody;        (* visit the body *)
-  if toPrepend <> [] then 
-    f.sbody.bstmts <- mkStmt (Instr toPrepend) :: f.sbody.bstmts;
-  f
-
-let rec visitCilGlobal (vis: cilVisitor) (g: global) : global list =
-  (*(trace "visit" (dprintf "visitCilGlobal\n"));*)
-  let oldloc = !currentLoc in
-  currentLoc := (get_globalLoc g) ;
-  currentGlobal := g;
-  let res = doVisitList vis vis#vglob childrenGlobal g in
-  currentLoc := oldloc;
-  res
-and childrenGlobal (vis: cilVisitor) (g: global) : global =
-  match g with
-  | GFun (f, l) -> 
-      let f' = visitCilFunction vis f in
-      if f' != f then GFun (f', l) else g
-  | GType(t, l) ->
-      t.ttype <- visitCilType vis t.ttype;
-      g
-
-  | GEnumTagDecl _ | GCompTagDecl _ -> g (* Nothing to visit *)
-  | GEnumTag (enum, _) ->
-      (trace "visit" (dprintf "visiting global enum %s\n" enum.ename));
-      (* Do the values and attributes of the enumerated items *)
-      let itemVisit (name, exp, loc) = (name, visitCilExpr vis exp, loc) in
-      enum.eitems <- mapNoCopy itemVisit enum.eitems;
-      enum.eattr <- visitCilAttributes vis enum.eattr;
-      g
-
-  | GCompTag (comp, _) ->
-      (trace "visit" (dprintf "visiting global comp %s\n" comp.cname));
-      (* Do the types and attirbutes of the fields *)
-      let fieldVisit = fun fi -> 
-        fi.ftype <- visitCilType vis fi.ftype;
-        fi.fattr <- visitCilAttributes vis fi.fattr
-      in
-      List.iter fieldVisit comp.cfields;
-      comp.cattr <- visitCilAttributes vis comp.cattr;
-      g
-
-  | GVarDecl(v, l) -> 
-      let v' = visitCilVarDecl vis v in
-      if v' != v then GVarDecl (v', l) else g
-  | GVar (v, inito, l) -> 
-      let v' = visitCilVarDecl vis v in
-      (match inito.init with
-        None -> ()
-      | Some i -> let i' = visitCilInit vis i in 
-        if i' != i then inito.init <- Some i');
-
-      if v' != v then GVar (v', inito, l) else g
-
-  | GPragma (a, l) -> begin
-      match visitCilAttributes vis [a] with
-        [a'] -> if a' != a then GPragma (a', l) else g
-      | _ -> E.s (E.unimp "visitCilAttributes returns more than one attribute")
-  end
-  | _ -> g
-
-
-(** A visitor that does constant folding. If "machdep" is true then we do 
- * machine dependent simplification (e.g., sizeof) *)
-class constFoldVisitorClass (machdep: bool) : cilVisitor = object
-  inherit nopCilVisitor
-      
-  method vinst i = 
-    match i with 
-      (* Skip two functions to which we add Sizeof to the type arguments. 
-         See the comments for these above. *)
-      Call(_,(Lval (Var vi,NoOffset)),_,_) 
-        when ((vi.vname = "__builtin_va_arg") 
-              || (vi.vname = "__builtin_types_compatible_p")) ->
-          SkipChildren
-    | _ -> DoChildren
-  method vexpr (e: exp) = 
-    (* Do it bottom up *)
-    ChangeDoChildrenPost (e, constFold machdep)
-        
-end
-let constFoldVisitor (machdep: bool) = new constFoldVisitorClass machdep
-
-(* Iterate over all globals, including the global initializer *)
-let iterGlobals (fl: file)
-                (doone: global -> unit) : unit =
-  let doone' g = 
-      currentLoc := get_globalLoc g;
-      doone g
-  in
-  List.iter doone' fl.globals;
-  (match fl.globinit with
-    None -> ()
-  | Some g -> doone' (GFun(g, locUnknown)))
-
-(* Fold over all globals, including the global initializer *)
-let foldGlobals (fl: file) 
-                (doone: 'a -> global -> 'a) 
-                (acc: 'a) : 'a = 
-  let doone' acc g = 
-      currentLoc := get_globalLoc g;
-      doone acc g
-  in
-  let acc' = List.fold_left doone' acc fl.globals in
-  (match fl.globinit with
-    None -> acc'
-  | Some g -> doone' acc' (GFun(g, locUnknown)))
-
-
-(* A visitor for the whole file that does not change the globals *)
-let visitCilFileSameGlobals (vis : cilVisitor) (f : file) : unit =
-  let fGlob g = visitCilGlobal vis g in
-  iterGlobals f (fun g -> 
-    match fGlob g with 
-      [g'] when g' == g || Util.equals g' g -> () (* Try to do the pointer check first *)
-    | gl -> 
-        ignore (E.log "You used visitCilFilSameGlobals but the global got changed:\n %a\nchanged to %a\n" d_global g (docList ~sep:line (d_global ())) gl);
-        ())
-
-(* Be careful with visiting the whole file because it might be huge. *)
-let visitCilFile (vis : cilVisitor) (f : file) : unit =
-  let fGlob g = visitCilGlobal vis g in
-  (* Scan the globals. Make sure this is tail recursive. *)
-  let rec loop (acc: global list) = function
-      [] -> f.globals <- List.rev acc
-    | g :: restg -> 
-        loop ((List.rev (fGlob g)) @ acc) restg
-  in
-  loop [] f.globals;
-  (* the global initializer *)
-  (match f.globinit with
-    None -> ()
-  | Some g -> f.globinit <- Some (visitCilFunction vis g))
-
-
-
-(** Create or fetch the global initializer. Tries to put a call to in the the 
- * function with the main_name *)
-let getGlobInit ?(main_name="main") (fl: file) = 
-  match fl.globinit with 
-    Some f -> f
-  | None -> begin
-      (* Sadly, we cannot use the Filename library because it does not like 
-       * function names with multiple . in them *)
-      let f = 
-        let len = String.length fl.fileName in
-        (* Find the last path separator and record the first . that we see, 
-        * going backwards *)
-        let lastDot = ref len in
-        let rec findLastPathSep i = 
-          if i < 0 then -1 else
-          let c = String.get fl.fileName i in
-          if c = '/' || c = '\\' then i
-          else begin
-            if c = '.' && !lastDot = len then 
-              lastDot := i;
-            findLastPathSep (i - 1)
-          end
-        in
-        let lastPathSep = findLastPathSep (len - 1) in
-        let basenoext = 
-          String.sub fl.fileName (lastPathSep + 1) (!lastDot - lastPathSep - 1) 
-        in
-        emptyFunction 
-          (makeValidSymbolName ("__globinit_" ^ basenoext))
-      in
-      fl.globinit <- Some f;
-      (* Now try to add a call to the global initialized at the beginning of 
-       * main *)
-      let inserted = ref false in
-      List.iter 
-        (fun g ->
-          match g with
-            GFun(m, lm) when m.svar.vname = main_name ->
-              (* Prepend a prototype to the global initializer *)
-              fl.globals <- GVarDecl (f.svar, lm) :: fl.globals;
-              m.sbody.bstmts <- 
-                 compactStmts (mkStmt (Instr [Call(None, 
-                                                   Lval(var f.svar), 
-                                                   [], locUnknown)]) 
-                               :: m.sbody.bstmts);
-              inserted := true;
-              if !E.verboseFlag then
-                ignore (E.log "Inserted the globinit\n");
-              fl.globinitcalled <- true;
-          | _ -> ())
-        fl.globals;
-
-      if not !inserted then 
-        ignore (E.warn "Cannot find %s to add global initializer %s" 
-                  main_name f.svar.vname);
-      
-      f
-  end
-  
-
-      
-(* Fold over all globals, including the global initializer *)
-let mapGlobals (fl: file) 
-               (doone: global -> global) : unit = 
-  fl.globals <- List.map doone fl.globals;
-  (match fl.globinit with
-    None -> ()
-  | Some g -> begin
-      match doone (GFun(g, locUnknown)) with
-        GFun(g', _) -> fl.globinit <- Some g'
-      | _ -> E.s (E.bug "mapGlobals: globinit is not a function")
-  end)
-
-
-
-let dumpFile (pp: cilPrinter) (out : out_channel) (outfile: string) file =
-  printDepth := 99999;  (* We don't want ... in the output *)
-  (* If we are in RELEASE mode then we do not print indentation *)
-
-  Pretty.fastMode := true;
-
-  if !E.verboseFlag then 
-    ignore (E.log "printing file %s\n" outfile);
-  let print x = fprint out 78 x in
-  print (text ("/* Generated by CIL v. " ^ cilVersion ^ " */\n" ^
-               (* sm: I want to easily tell whether the generated output
-                * is with print_CIL_Input or not *)
-               "/* print_CIL_Input is " ^ (if !print_CIL_Input then "true" else "false") ^ " */\n\n"));
-  iterGlobals file (fun g -> dumpGlobal pp out g);
-    
-  (* sm: we have to flush the output channel; if we don't then under *)
-  (* some circumstances (I haven't figure out exactly when, but it happens *)
-  (* more often with big inputs), we get a truncated output file *)
-  flush out
-
-
-
-(******************
- ******************
- ******************)
-
-
-
-(******************** OPTIMIZATIONS *****)
-let rec peepHole1 (* Process one statement and possibly replace it *)
-                  (doone: instr -> instr list option)
-                  (* Scan a block and recurse inside nested blocks *)
-                  (ss: stmt list) : unit = 
-  let rec doInstrList (il: instr list) : instr list = 
-    match il with 
-      [] -> []
-    | i :: rest -> begin
-        match doone i with
-          None -> i :: doInstrList rest
-        | Some sl -> doInstrList (sl @ rest)
-    end
-  in
-    
-  List.iter 
-    (fun s -> 
-      match s.skind with
-        Instr il -> s.skind <- Instr (doInstrList il)
-      | If (e, tb, eb, _) -> 
-          peepHole1 doone tb.bstmts;
-          peepHole1 doone eb.bstmts
-      | Switch (e, b, _, _) -> peepHole1 doone b.bstmts
-(*
-      | Loop (b, l, _, _) -> peepHole1 doone b.bstmts
-*)
-      | While (_, b, _) -> peepHole1 doone b.bstmts
-      | DoWhile (_, b, _) -> peepHole1 doone b.bstmts
-      | For (bInit, _, bIter, b, _) ->
-	  peepHole1 doone bInit.bstmts;
-	  peepHole1 doone bIter.bstmts;
-	  peepHole1 doone b.bstmts
-      | Block b -> peepHole1 doone b.bstmts
-      | TryFinally (b, h, l) -> 
-          peepHole1 doone b.bstmts; 
-          peepHole1 doone h.bstmts
-      | TryExcept (b, (il, e), h, l) -> 
-          peepHole1 doone b.bstmts; 
-          peepHole1 doone h.bstmts;
-          s.skind <- TryExcept(b, (doInstrList il, e), h, l);
-      | Return _ | Goto _ | Break _ | Continue _ -> ())
-    ss
-
-let rec peepHole2  (* Process two statements and possibly replace them both *)
-                   (dotwo: instr * instr -> instr list option)
-                   (ss: stmt list) : unit = 
-  let rec doInstrList (il: instr list) : instr list = 
-    match il with 
-      [] -> []
-    | [i] -> [i]
-    | (i1 :: ((i2 :: rest) as rest2)) -> 
-        begin
-          match dotwo (i1,i2) with
-            None -> i1 :: doInstrList rest2
-          | Some sl -> doInstrList (sl @ rest)
-        end
-  in
-  List.iter 
-    (fun s -> 
-      match s.skind with
-        Instr il -> s.skind <- Instr (doInstrList il)
-      | If (e, tb, eb, _) -> 
-          peepHole2 dotwo tb.bstmts;
-          peepHole2 dotwo eb.bstmts
-      | Switch (e, b, _, _) -> peepHole2 dotwo b.bstmts
-(*
-      | Loop (b, l, _, _) -> peepHole2 dotwo b.bstmts
-*)
-      | While (_, b, _) -> peepHole2 dotwo b.bstmts
-      | DoWhile (_, b, _) -> peepHole2 dotwo b.bstmts
-      | For (bInit, _, bIter, b, _) ->
-	  peepHole2 dotwo bInit.bstmts;
-	  peepHole2 dotwo bIter.bstmts;
-	  peepHole2 dotwo b.bstmts
-      | Block b -> peepHole2 dotwo b.bstmts
-      | TryFinally (b, h, l) -> peepHole2 dotwo b.bstmts; 
-                                peepHole2 dotwo h.bstmts
-      | TryExcept (b, (il, e), h, l) -> 
-          peepHole2 dotwo b.bstmts; 
-          peepHole2 dotwo h.bstmts;
-          s.skind <- TryExcept (b, (doInstrList il, e), h, l)
-
-      | Return _ | Goto _ | Break _ | Continue _ -> ())
-    ss
-
-
-
-
-(*** Type signatures ***)
-
-(* Helper class for typeSig: replace any types in attributes with typsigs *)
-class typeSigVisitor(typeSigConverter: typ->typsig) = object 
-  inherit nopCilVisitor 
-  method vattrparam ap =
-    match ap with
-      | ASizeOf t -> ChangeTo (ASizeOfS (typeSigConverter t))
-      | AAlignOf t -> ChangeTo (AAlignOfS (typeSigConverter t))
-      | _ -> DoChildren
-end
-
-let typeSigAddAttrs a0 t = 
-  if a0 == [] then t else
-  match t with 
-    TSBase t -> TSBase (typeAddAttributes a0 t)
-  | TSPtr (ts, a) -> TSPtr (ts, addAttributes a0 a)
-  | TSArray (ts, l, a) -> TSArray(ts, l, addAttributes a0 a)
-  | TSComp (iss, n, a) -> TSComp (iss, n, addAttributes a0 a)
-  | TSEnum (n, a) -> TSEnum (n, addAttributes a0 a)
-  | TSFun(ts, tsargs, isva, a) -> TSFun(ts, tsargs, isva, addAttributes a0 a)
-
-(* Compute a type signature.
-    Use ~ignoreSign:true to convert all signed integer types to unsigned,
-    so that signed and unsigned will compare the same. *)
-let rec typeSigWithAttrs ?(ignoreSign=false) doattr t = 
-  let typeSig = typeSigWithAttrs ~ignoreSign doattr in
-  let attrVisitor = new typeSigVisitor typeSig in
-  let doattr al = visitCilAttributes attrVisitor (doattr al) in
-  match t with 
-  | TInt (ik, al) -> 
-      let ik' = if ignoreSign then begin
-        match ik with
-          | ISChar | IChar -> IUChar
-          | IShort -> IUShort
-          | IInt -> IUInt
-          | ILong -> IULong
-          | ILongLong -> IULongLong
-          | _ -> ik          
-      end else
-        ik
-      in
-      TSBase (TInt (ik', doattr al))
-  | TFloat (fk, al) -> TSBase (TFloat (fk, doattr al))
-  | TVoid al -> TSBase (TVoid (doattr al))
-  | TEnum (enum, a) -> TSEnum (enum.ename, doattr a)
-  | TPtr (t, a) -> TSPtr (typeSig t, doattr a)
-  | TArray (t,l,a) -> (* We do not want fancy expressions in array lengths. 
-                       * So constant fold the lengths *)
-      let l' = 
-        match l with 
-          Some l -> begin 
-            match constFold true l with 
-              Const(CInt64(i, _, _)) -> Some i
-            | e -> E.s (E.bug "Invalid length in array type: %a\n" 
-                          (!pd_exp) e)
-          end 
-        | None -> None
-      in 
-      TSArray(typeSig t, l', doattr a)
-
-  | TComp (comp, a) -> 
-      TSComp (comp.cstruct, comp.cname, doattr (addAttributes comp.cattr a))
-  | TFun(rt,args,isva,a) -> 
-      TSFun(typeSig rt, 
-            List.map (fun (_, atype, _) -> (typeSig atype)) (argsToList args),
-            isva, doattr a)
-  | TNamed(t, a) -> typeSigAddAttrs (doattr a) (typeSig t.ttype)
-  | TBuiltin_va_list al -> TSBase (TBuiltin_va_list (doattr al))      
-
-let typeSig t = 
-  typeSigWithAttrs (fun al -> al) t
-
-let _ = pTypeSig := typeSig
-
-(* Remove the attribute from the top-level of the type signature *)
-let setTypeSigAttrs (a: attribute list) = function
-    TSBase t -> TSBase (setTypeAttrs t a)
-  | TSPtr (ts, _) -> TSPtr (ts, a)
-  | TSArray (ts, l, _) -> TSArray(ts, l, a)
-  | TSComp (iss, n, _) -> TSComp (iss, n, a)
-  | TSEnum (n, _) -> TSEnum (n, a)
-  | TSFun (ts, tsargs, isva, _) -> TSFun (ts, tsargs, isva, a)
-
-
-let typeSigAttrs = function
-    TSBase t -> typeAttrs t
-  | TSPtr (ts, a) -> a
-  | TSArray (ts, l, a) -> a
-  | TSComp (iss, n, a) -> a
-  | TSEnum (n, a) -> a
-  | TSFun (ts, tsargs, isva, a) -> a
-
-
-
-let dExp: doc -> exp = 
-  fun d -> Const(CStr(sprint !lineLength d))
-
-let dInstr: doc -> location -> instr = 
-  fun d l -> Asm([], [sprint !lineLength d], [], [], [], l)
-
-let dGlobal: doc -> location -> global = 
-  fun d l -> GAsm(sprint !lineLength d, l)
-
-let rec addOffset (toadd: offset) (off: offset) : offset =
-  match off with
-    NoOffset -> toadd
-  | Field(fid', offset) -> Field(fid', addOffset toadd offset)
-  | Index(e, offset) -> Index(e, addOffset toadd offset)
-
- (* Add an offset at the end of an lv *)      
-let addOffsetLval toadd (b, off) : lval =
- b, addOffset toadd off
-
-let rec removeOffset (off: offset) : offset * offset = 
-  match off with 
-    NoOffset -> NoOffset, NoOffset
-  | Field(f, NoOffset) -> NoOffset, off
-  | Index(i, NoOffset) -> NoOffset, off
-  | Field(f, restoff) -> 
-      let off', last = removeOffset restoff in
-      Field(f, off'), last
-  | Index(i, restoff) -> 
-      let off', last = removeOffset restoff in
-      Index(i, off'), last
-
-let removeOffsetLval ((b, off): lval) : lval * offset = 
-  let off', last = removeOffset off in
-  (b, off'), last
-
-  (* Make an AddrOf. Given an lval of type T will give back an expression of 
-   * type ptr(T)  *)
-let mkAddrOf ((b, off) as lval) : exp = 
-  (* Never take the address of a register variable *)
-  (match lval with
-    Var vi, off when vi.vstorage = Register -> vi.vstorage <- NoStorage
-  | _ -> ()); 
-  match lval with
-    Mem e, NoOffset -> e
-  | b, Index(z, NoOffset) when isZero z -> StartOf (b, NoOffset)(* array *)
-  | _ -> AddrOf lval
-
-
-let mkAddrOrStartOf (lv: lval) : exp = 
-  match unrollType (typeOfLval lv) with 
-    TArray _ -> StartOf lv
-  | _ -> mkAddrOf lv
-
-
-  (* Make a Mem, while optimizing AddrOf. The type of the addr must be 
-   * TPtr(t) and the type of the resulting lval is t. Note that in CIL the 
-   * implicit conversion between a function and a pointer to a function does 
-   * not apply. You must do the conversion yourself using AddrOf *)
-let mkMem ~(addr: exp) ~(off: offset) : lval =  
-  let res = 
-    match addr, off with
-      AddrOf lv, _ -> addOffsetLval off lv
-    | StartOf lv, _ -> (* Must be an array *)
-        addOffsetLval (Index(zero, off)) lv 
-    | _, _ -> Mem addr, off
-  in
-(*  ignore (E.log "memof : %a:%a\nresult = %a\n" 
-            d_plainexp addr d_plainoffset off d_plainexp res); *)
-  res
-
-
-
-let splitFunctionType (ftype: typ) 
-    : typ * (string * typ * attributes) list option * bool * attributes = 
-  match unrollType ftype with 
-    TFun (rt, args, isva, a) -> rt, args, isva, a
-  | _ -> E.s (bug "splitFunctionType invoked on a non function type %a" 
-                d_type ftype)
-
-let splitFunctionTypeVI (fvi: varinfo) 
-    : typ * (string * typ * attributes) list option * bool * attributes = 
-  match unrollType fvi.vtype with 
-    TFun (rt, args, isva, a) -> rt, args, isva, a
-  | _ -> E.s (bug "Function %s invoked on a non function type" fvi.vname)
-
-let isArrayType t = 
-  match unrollType t with
-    TArray _ -> true
-  | _ -> false
-
-
-let rec isConstant = function
-  | Const _ -> true
-  | UnOp (_, e, _) -> isConstant e
-  | BinOp (_, e1, e2, _) -> isConstant e1 && isConstant e2
-  | Lval (Var vi, NoOffset) -> 
-      (vi.vglob && isArrayType vi.vtype || isFunctionType vi.vtype)
-  | Lval _ -> false
-  | SizeOf _ | SizeOfE _ | SizeOfStr _ | AlignOf _ | AlignOfE _ -> true
-  | CastE (_, e) -> isConstant e
-  | AddrOf (Var vi, off) | StartOf (Var vi, off)
-        -> vi.vglob && isConstantOff off
-  | AddrOf (Mem e, off) | StartOf(Mem e, off) 
-        -> isConstant e && isConstantOff off
-
-and isConstantOff = function
-    NoOffset -> true
-  | Field(fi, off) -> isConstantOff off
-  | Index(e, off) -> isConstant e && isConstantOff off
-
-
-let getCompField (cinfo:compinfo) (fieldName:string) : fieldinfo =
-  (List.find (fun fi -> fi.fname = fieldName) cinfo.cfields)
-
-
-let rec mkCastT ~(e: exp) ~(oldt: typ) ~(newt: typ) = 
-  (* Do not remove old casts because they are conversions !!! *)
-  if Util.equals (typeSig oldt) (typeSig newt) then begin
-    e
-  end else begin
-    (* Watch out for constants *)
-    match newt, e with 
-      TInt(newik, []), Const(CInt64(i, _, _)) -> kinteger64 newik i
-    | _ -> CastE(newt,e)
-  end
-
-let mkCast ~(e: exp) ~(newt: typ) = 
-  mkCastT e (typeOf e) newt
-
-type existsAction = 
-    ExistsTrue                          (* We have found it *)
-  | ExistsFalse                         (* Stop processing this branch *)
-  | ExistsMaybe                         (* This node is not what we are 
-                                         * looking for but maybe its 
-                                         * successors are *)
-let existsType (f: typ -> existsAction) (t: typ) : bool = 
-  let memo : (int, unit) H.t = H.create 17 in  (* Memo table *)
-  let rec loop t = 
-    match f t with 
-      ExistsTrue -> true
-    | ExistsFalse -> false
-    | ExistsMaybe -> 
-        (match t with 
-          TNamed (t', _) -> loop t'.ttype
-        | TComp (c, _) -> loopComp c
-        | TArray (t', _, _) -> loop t'
-        | TPtr (t', _) -> loop t'
-        | TFun (rt, args, _, _) -> 
-            (loop rt || List.exists (fun (_, at, _) -> loop at) 
-              (argsToList args))
-        | _ -> false)
-  and loopComp c = 
-    if H.mem memo c.ckey then 
-      (* We are looping, the answer must be false *)
-      false
-    else begin
-      H.add memo c.ckey ();
-      List.exists (fun f -> loop f.ftype) c.cfields
-    end
-  in
-  loop t
-          
-
-(* Try to do an increment, with constant folding *)
-let increm (e: exp) (i: int) =
-  let et = typeOf e in
-  let bop = if isPointerType et then PlusPI else PlusA in
-  constFold false (BinOp(bop, e, integer i, et))
-      
-exception LenOfArray
-let lenOfArray (eo: exp option) : int = 
-  match eo with 
-    None -> raise LenOfArray
-  | Some e -> begin
-      match constFold true e with
-      | Const(CInt64(ni, _, _)) when ni >= Int64.zero -> 
-          Int64.to_int ni
-      | e -> raise LenOfArray
-  end
-  
-
-(*** Make a initializer for zeroe-ing a data type ***)
-let rec makeZeroInit (t: typ) : init = 
-  match unrollType t with
-    TInt (ik, _) -> SingleInit (Const(CInt64(Int64.zero, ik, None)))
-  | TFloat(fk, _) -> SingleInit(Const(CReal(0.0, fk, None)))
-  | TEnum _ -> SingleInit zero
-  | TComp (comp, _) as t' when comp.cstruct -> 
-      let inits = 
-        List.fold_right
-          (fun f acc -> 
-            if f.fname <> missingFieldName then 
-              (Field(f, NoOffset), makeZeroInit f.ftype) :: acc
-            else
-              acc)
-          comp.cfields []
-      in
-      CompoundInit (t', inits)
-
-  | TComp (comp, _) when not comp.cstruct -> 
-      let fstfield, rest = 
-        match comp.cfields with
-          f :: rest -> f, rest
-        | [] -> E.s (unimp "Cannot create init for empty union")
-      in
-      let fieldToInit = 
-        if !msvcMode then
-          (* ISO C99 [6.7.8.10] says that the first field of the union
-             is the one we should initialize. *)
-          fstfield
-        else begin
-          (* gcc initializes the whole union to zero.  So choose the largest
-             field, and set that to zero.  Choose the first field if possible.
-             MSVC also initializes the whole union, but use the ISO behavior
-             for MSVC because it only allows compound initializers to refer
-             to the first union field. *)
-          let fieldSize f = try bitsSizeOf f.ftype with SizeOfError _ -> 0 in
-          let widestField, widestFieldWidth =
-            List.fold_left (fun acc thisField ->
-                              let widestField, widestFieldWidth = acc in
-                              let thisSize = fieldSize thisField in
-                              if thisSize > widestFieldWidth then
-                                thisField, thisSize
-                              else
-                                acc)
-              (fstfield, fieldSize fstfield)
-              rest
-          in
-          widestField
-        end
-      in
-      CompoundInit(t, [(Field(fieldToInit, NoOffset), 
-                        makeZeroInit fieldToInit.ftype)])
-
-  | TArray(bt, Some len, _) as t' -> 
-      let n = 
-        match constFold true len with
-          Const(CInt64(n, _, _)) -> Int64.to_int n
-        | _ -> E.s (E.unimp "Cannot understand length of array")
-      in
-      let initbt = makeZeroInit bt in
-      let rec loopElems acc i = 
-        if i < 0 then acc
-        else loopElems ((Index(integer i, NoOffset), initbt) :: acc) (i - 1) 
-      in
-      CompoundInit(t', loopElems [] (n - 1))
-
-  | TArray (bt, None, at) as t' ->
-      (* Unsized array, allow it and fill it in later 
-       * (see cabs2cil.ml, collectInitializer) *)
-      CompoundInit (t', [])
-
-  | TPtr _ as t -> SingleInit(CastE(t, zero))
-  | x -> E.s (unimp "Cannot initialize type: %a" d_type x)
-
-
-(**** Fold over the list of initializers in a Compound. In the case of an 
- * array initializer only the initializers present are scanned (a prefix of 
- * all initializers) *)
-let foldLeftCompound 
-    ~(doinit: offset -> init -> typ -> 'a -> 'a)
-    ~(ct: typ) 
-    ~(initl: (offset * init) list)
-    ~(acc: 'a) : 'a = 
-  match unrollType ct with
-    TArray(bt, _, _) -> 
-      List.fold_left (fun acc (o, i) -> doinit o i bt acc) acc initl
-
-  | TComp (comp, _) -> 
-      let getTypeOffset = function
-          Field(f, NoOffset) -> f.ftype
-        | _ -> E.s (bug "foldLeftCompound: malformed initializer")
-      in
-      List.fold_left 
-        (fun acc (o, i) -> doinit o i (getTypeOffset o) acc) acc initl
-
-  | _ -> E.s (unimp "Type of Compound is not array or struct or union")
-
-(**** Fold over the list of initializers in a Compound. Like foldLeftCompound 
- * but scans even the zero-initializers that are missing at the end of the 
- * array *)
-let foldLeftCompoundAll 
-    ~(doinit: offset -> init -> typ -> 'a -> 'a)
-    ~(ct: typ) 
-    ~(initl: (offset * init) list)
-    ~(acc: 'a) : 'a = 
-  match unrollType ct with
-    TArray(bt, leno, _) -> begin
-      let part = 
-        List.fold_left (fun acc (o, i) -> doinit o i bt acc) acc initl in
-      (* See how many more we have to do *)
-      match leno with 
-        Some lene -> begin
-          match constFold true lene with 
-            Const(CInt64(i, _, _)) -> 
-              let len_array = Int64.to_int i in
-              let len_init = List.length initl in
-              if len_array > len_init then 
-                let zi = makeZeroInit bt in
-                let rec loop acc i = 
-                  if i >= len_array then acc
-                  else 
-                    loop (doinit (Index(integer i, NoOffset)) zi bt acc) 
-                         (i + 1)
-                in
-                loop part (len_init + 1)
-              else
-                part
-          | _ -> E.s (unimp "foldLeftCompoundAll: array with initializer and non-constant length\n")
-        end
-          
-      | _ -> E.s (unimp "foldLeftCompoundAll: TArray with initializer and no length")
-    end
-  | TComp (comp, _) -> 
-      let getTypeOffset = function
-          Field(f, NoOffset) -> f.ftype
-        | _ -> E.s (bug "foldLeftCompound: malformed initializer")
-      in
-      List.fold_left 
-        (fun acc (o, i) -> doinit o i (getTypeOffset o) acc) acc initl
-
-  | _ -> E.s (E.unimp "Type of Compound is not array or struct or union")
-
-
-
-let rec isCompleteType t =
-  match unrollType t with
-  | TArray(t, None, _) -> false
-  | TArray(t, Some z, _) when isZero z -> false
-  | TComp (comp, _) -> (* Struct or union *)
-      List.for_all (fun fi -> isCompleteType fi.ftype) comp.cfields
-  | _ -> true
-
-
-module A = Alpha
-  
-
-(** Uniquefy the variable names *)
-let uniqueVarNames (f: file) : unit = 
-  (* Setup the alpha conversion table for globals *)
-  let gAlphaTable: (string, 
-                    location A.alphaTableData ref) H.t = H.create 113 in
-  (* Keep also track of the global names that we have used. Map them to the 
-   * variable ID. We do this only to check that we do not have two globals 
-   * with the same name. *)
-  let globalNames: (string, int) H.t = H.create 113 in
-  (* Scan the file and add the global names to the table *)
-  iterGlobals f
-    (function
-        GVarDecl(vi, l) 
-      | GVar(vi, _, l) 
-      | GFun({svar = vi}, l) -> 
-          (* See if we have used this name already for something else *)
-          (try
-            let oldid = H.find globalNames vi.vname in
-            if oldid <> vi.vid then 
-              ignore (warn "The name %s is used for two distinct globals" 
-                        vi.vname);
-            (* Here if we have used this name already. Go ahead *)
-            ()
-          with Not_found -> begin
-            (* Here if this is the first time we define a name *)
-            H.add globalNames vi.vname vi.vid;
-            (* And register it *)
-            A.registerAlphaName gAlphaTable None vi.vname !currentLoc;
-            ()
-          end)
-      | _ -> ());
-
-  (* Now we must scan the function bodies and rename the locals *)
-  iterGlobals f
-    (function 
-        GFun(fdec, l) -> begin
-          currentLoc := l;
-          (* Setup an undo list to be able to revert the changes to the 
-           * global alpha table *)
-          let undolist = ref [] in
-          (* Process one local variable *)
-          let processLocal (v: varinfo) = 
-            let newname, oldloc = 
-              A.newAlphaName gAlphaTable (Some undolist) v.vname 
-               !currentLoc
-            in
-            if false && newname <> v.vname then (* Disable this warning *)
-              ignore (warn "uniqueVarNames: Changing the name of local %s in %s to %s (due to duplicate at %a)\n"
-                        v.vname fdec.svar.vname newname d_loc oldloc);
-            v.vname <- newname
-          in
-          (* Do the formals first *)
-          List.iter processLocal fdec.sformals;
-          (* Fix the type again *)
-          setFormals fdec fdec.sformals;
-          (* And now the locals *)
-          List.iter processLocal fdec.slocals;
-          (* Undo the changes to the global table *)
-          A.undoAlphaChanges gAlphaTable !undolist;
-          ()
-        end
-      | _ -> ());
-  ()
-          
-
-(* A visitor that makes a deep copy of a function body *)
-class copyFunctionVisitor (newname: string) = object (self)
-  inherit nopCilVisitor
-
-      (* Keep here a maping from locals to their copies *)
-  val map : (string, varinfo) H.t = H.create 113 
-      (* Keep here a maping from statements to their copies *)
-  val stmtmap : (int, stmt) H.t = H.create 113
-  val sid = ref 0 (* Will have to assign ids to statements *)
-      (* Keep here a list of statements to be patched *)
-  val patches : stmt list ref = ref []
-
-  val argid = ref 0
-
-      (* This is the main function *)
-  method vfunc (f: fundec) : fundec visitAction = 
-    (* We need a map from the old locals/formals to the new ones *)
-    H.clear map;
-    argid := 0;
-     (* Make a copy of the fundec. *)
-    let f' = {f with svar = f.svar} in
-    let patchfunction (f' : fundec) = 
-      (* Change the name. Only this late to allow the visitor to copy the 
-       * svar  *)
-      f'.svar.vname <- newname;
-      let findStmt (i: int) = 
-        try H.find stmtmap i 
-        with Not_found -> E.s (bug "Cannot find the copy of stmt#%d" i)
-      in
-      let patchstmt (s: stmt) = 
-        match s.skind with
-          Goto (sr, l) -> 
-            (* Make a copy of the reference *)
-            let sr' = ref (findStmt !sr.sid) in
-            s.skind <- Goto (sr',l)
-        | Switch (e, body, cases, l) -> 
-            s.skind <- Switch (e, body, 
-                               List.map (fun cs -> findStmt cs.sid) cases, l)
-        | _ -> ()
-      in
-      List.iter patchstmt !patches;
-      f'
-    in
-    patches := [];
-    sid := 0;
-    H.clear stmtmap;
-    ChangeDoChildrenPost (f', patchfunction)
-    
-      (* We must create a new varinfo for each declaration. Memoize to 
-       * maintain sharing *)
-  method vvdec (v: varinfo) = 
-    (* Some varinfo have empty names. Give them some name *)
-    if v.vname = "" then begin
-      v.vname <- "arg" ^ string_of_int !argid; incr argid
-    end;
-    try
-      ChangeTo (H.find map v.vname)
-    with Not_found -> begin
-      let v' = {v with vid = newVID () } in
-      H.add map v.vname v';
-      ChangeDoChildrenPost (v', fun x -> x)
-    end
-
-      (* We must replace references to local variables *)
-  method vvrbl (v: varinfo) = 
-    if v.vglob then SkipChildren else 
-    try
-      ChangeTo (H.find map v.vname)
-    with Not_found -> 
-      E.s (bug "Cannot find the new copy of local variable %s" v.vname)
-
-
-        (* Replace statements. *)
-  method vstmt (s: stmt) : stmt visitAction = 
-    s.sid <- !sid; incr sid;
-    let s' = {s with sid = s.sid} in
-    H.add stmtmap s.sid s'; (* Remember where we copied this *)
-    (* if we have a Goto or a Switch remember them to fixup at end *)
-    (match s'.skind with
-      (Goto _ | Switch _) -> patches := s' :: !patches
-    | _ -> ());
-    (* Do the children *)
-    ChangeDoChildrenPost (s', fun x -> x)
-
-      (* Copy blocks since they are mutable *)
-  method vblock (b: block) = 
-    ChangeDoChildrenPost ({b with bstmts = b.bstmts}, fun x -> x)
-
-
-  method vglob _ = E.s (bug "copyFunction should not be used on globals")
-end
-
-(* We need a function that copies a CIL function. *)
-let copyFunction (f: fundec) (newname: string) : fundec = 
-  visitCilFunction (new copyFunctionVisitor(newname)) f
-  
-(********* Compute the CFG ********)
-let sid_counter = ref 0
-
-let new_sid () =
-  let id = !sid_counter in
-  incr sid_counter;
-  id
-
-let statements : stmt list ref = ref [] 
-(* Clear all info about the CFG in statements *)  
-class clear : cilVisitor = object
-  inherit nopCilVisitor
-  method vstmt s = begin
-    s.sid <- !sid_counter ;
-    incr sid_counter ;
-    statements := s :: !statements;
-    s.succs <- [] ;
-    s.preds <- [] ;
-    DoChildren
-  end
-  method vexpr _ = SkipChildren
-  method vtype _ = SkipChildren
-  method vinst _ = SkipChildren
-end
-
-let link source dest = begin
-  if not (List.mem dest source.succs) then
-    source.succs <- dest :: source.succs ;
-  if not (List.mem source dest.preds) then
-    dest.preds <- source :: dest.preds 
-end
-let trylink source dest_option = match dest_option with
-  None -> ()
-| Some(dest) -> link source dest 
-
-
-(** Cmopute the successors and predecessors of a block, given a fallthrough *)
-let rec succpred_block b fallthrough =
-  let rec handle sl = match sl with
-    [] -> ()
-  | [a] -> succpred_stmt a fallthrough 
-  | hd :: ((next :: _) as tl) -> 
-      succpred_stmt hd (Some next) ;
-      handle tl 
-  in handle b.bstmts
-
-
-and succpred_stmt s fallthrough = 
-  match s.skind with
-    Instr _ -> trylink s fallthrough
-  | Return _ -> ()
-  | Goto(dest,l) -> link s !dest
-  | Break _  
-  | Continue _ 
-  | Switch _ ->
-    failwith "computeCFGInfo: cannot be called on functions with break, continue or switch statements. Use prepareCFG first to remove them."
-
-  | If(e1,b1,b2,l) -> 
-      (match b1.bstmts with
-        [] -> trylink s fallthrough
-      | hd :: tl -> (link s hd ; succpred_block b1 fallthrough )) ;
-      (match b2.bstmts with
-        [] -> trylink s fallthrough
-      | hd :: tl -> (link s hd ; succpred_block b2 fallthrough ))
-
-(*
-  | Loop(b,l,_,_) -> 
-      begin match b.bstmts with
-        [] -> failwith "computeCFGInfo: empty loop" 
-      | hd :: tl -> 
-          link s hd ; 
-          succpred_block b (Some(hd))
-      end
-*)
-
-  | While (e, b, l) -> begin match b.bstmts with
-                       | [] -> failwith "computeCFGInfo: empty loop" 
-	               | hd :: tl -> link s hd ;
-                                     succpred_block b (Some(hd))
-                       end
-
-  | DoWhile (e, b, l) ->begin match b.bstmts with
-                       |  [] -> failwith "computeCFGInfo: empty loop" 
-	               | hd :: tl -> link s hd ;
-                                     succpred_block b (Some(hd))
-                       end
-
-  | For (bInit, e, bIter, b, l) ->
-      (match bInit.bstmts with
-         |  [] -> failwith "computeCFGInfo: empty loop" 
-	 | hd :: tl -> link s hd ;
-             succpred_block bInit (Some(hd))) ;
-      (match bIter.bstmts with
-         |  [] -> failwith "computeCFGInfo: empty loop" 
-	 | hd :: tl -> link s hd ;
-             succpred_block bIter (Some(hd))) ;
-      (match b.bstmts with
-         |  [] -> failwith "computeCFGInfo: empty loop" 
-	 | hd :: tl -> link s hd ;
-             succpred_block b (Some(hd))) ;
-
-  | Block(b) -> begin match b.bstmts with
-                  [] -> trylink s fallthrough
-                | hd :: tl -> link s hd ;
-                    succpred_block b fallthrough
-                end
-  | TryExcept _ | TryFinally _ -> 
-      failwith "computeCFGInfo: structured exception handling not implemented"
-
-(* [weimer] Sun May  5 12:25:24 PDT 2002
- * This code was pulled from ext/switch.ml because it looks like we really
- * want it to be part of CIL. 
- *
- * Here is the magic handling to
- *  (1) replace switch statements with if/goto
- *  (2) remove "break"
- *  (3) remove "default"
- *  (4) remove "continue"
- *)
-let is_case_label l = match l with
-  | Case _ | Default _ -> true
-  | _ -> false
-
-let switch_count = ref (-1) 
-let get_switch_count () = 
-  switch_count := 1 + !switch_count ;
-  !switch_count
-
-let switch_label = ref (-1)
-
-let rec xform_switch_stmt s break_dest cont_dest label_index = begin
-  s.labels <- List.map (fun lab -> match lab with
-    Label _ -> lab
-  | Case(e,l) ->
-      let suffix =
-	match isInteger e with
-	| Some value ->
-	    if value < Int64.zero then
-	      "neg_" ^ Int64.to_string (Int64.neg value)
-	    else
-	      Int64.to_string value
-	| None ->
-	    incr switch_label;
-	    "exp_" ^ string_of_int !switch_label
-      in
-      let str = Pretty.sprint !lineLength 
-	  (Pretty.dprintf "switch_%d_%s" label_index suffix) in 
-      (Label(str,l,false))
-  | Default(l) -> (Label(Printf.sprintf 
-                  "switch_%d_default" label_index,l,false))
-  ) s.labels ; 
-  match s.skind with
-  | Instr _ | Return _ | Goto _ -> ()
-  | Break(l) -> begin try 
-                  s.skind <- Goto(break_dest (),l)
-                with e ->
-                  ignore (error "prepareCFG: break: %a@!" d_stmt s) ;
-                  raise e
-                end
-  | Continue(l) -> begin try
-                  s.skind <- Goto(cont_dest (),l)
-                with e ->
-                  ignore (error "prepareCFG: continue: %a@!" d_stmt s) ;
-                  raise e
-                end
-  | If(e,b1,b2,l) -> xform_switch_block b1 break_dest cont_dest label_index ;
-                     xform_switch_block b2 break_dest cont_dest label_index
-  | Switch(e,b,sl,l) -> begin
-      (* change 
-       * switch (se) {
-       *   case 0: s0 ;
-       *   case 1: s1 ; break;
-       *   ...
-       * }
-       *
-       * into:
-       *
-       * if (se == 0) goto label_0;
-       * else if (se == 1) goto label_1;
-       * ...
-       * else if (0) { // body_block
-       *  label_0: s0;
-       *  label_1: s1; goto label_break;
-       *  ...
-       * } else if (0) { // break_block
-       *  label_break: ; // break_stmt
-       * } 
-       *)
-      let i = get_switch_count () in 
-      let break_stmt = mkStmt (Instr []) in
-      break_stmt.labels <- 
-	[Label((Printf.sprintf "switch_%d_break" i),l,false)] ;
-      let break_block = mkBlock [ break_stmt ] in
-      let body_block = b in 
-      let body_if_stmtkind = (If(zero,body_block,break_block,l)) in
-
-      (* The default case, if present, must be used only if *all*
-      non-default cases fail [ISO/IEC 9899:1999, §6.8.4.2, ¶5]. As a
-      result, we sort the order in which we handle the labels (but not the
-      order in which we print out the statements, so fall-through still
-      works as expected). *)
-      let compare_choices s1 s2 = match s1.labels, s2.labels with
-      | (Default(_) :: _), _ -> 1
-      | _, (Default(_) :: _) -> -1
-      | _, _ -> 0
-      in
-
-      let rec handle_choices sl = match sl with
-        [] -> body_if_stmtkind
-      | stmt_hd :: stmt_tl -> begin
-        let rec handle_labels lab_list = begin
-          match lab_list with
-            [] -> handle_choices stmt_tl 
-          | Case(ce,cl) :: lab_tl -> 
-              let pred = BinOp(Eq,e,ce,intType) in
-              let then_block = mkBlock [ mkStmt (Goto(ref stmt_hd,cl)) ] in
-              let else_block = mkBlock [ mkStmt (handle_labels lab_tl) ] in
-              If(pred,then_block,else_block,cl)
-          | Default(dl) :: lab_tl -> 
-              (* ww: before this was 'if (1) goto label', but as Ben points
-              out this might confuse someone down the line who doesn't have
-              special handling for if(1) into thinking that there are two
-              paths here. The simpler 'goto label' is what we want. *) 
-              Block(mkBlock [ mkStmt (Goto(ref stmt_hd,dl)) ;
-                              mkStmt (handle_labels lab_tl) ])
-          | Label(_,_,_) :: lab_tl -> handle_labels lab_tl
-        end in
-        handle_labels stmt_hd.labels
-      end in
-      s.skind <- handle_choices (List.sort compare_choices sl) ;
-      xform_switch_block b (fun () -> ref break_stmt) cont_dest i 
-    end
-(*
-  | Loop(b,l,_,_) -> 
-          let i = get_switch_count () in 
-          let break_stmt = mkStmt (Instr []) in
-          break_stmt.labels <- 
-	    [Label((Printf.sprintf "while_%d_break" i),l,false)] ;
-          let cont_stmt = mkStmt (Instr []) in
-          cont_stmt.labels <- 
-	    [Label((Printf.sprintf "while_%d_continue" i),l,false)] ;
-          b.bstmts <- cont_stmt :: b.bstmts ;
-          let this_stmt = mkStmt 
-            (Loop(b,l,Some(cont_stmt),Some(break_stmt))) in 
-          let break_dest () = ref break_stmt in
-          let cont_dest () = ref cont_stmt in 
-          xform_switch_block b break_dest cont_dest label_index ;
-          break_stmt.succs <- s.succs ; 
-          let new_block = mkBlock [ this_stmt ; break_stmt ] in
-          s.skind <- Block new_block
-*)
-  | While (e, b, l) ->
-          let i = get_switch_count () in 
-          let break_stmt = mkStmt (Instr []) in
-          break_stmt.labels <- 
-	    [Label((Printf.sprintf "while_%d_break" i),l,false)] ;
-          let cont_stmt = mkStmt (Instr []) in
-          cont_stmt.labels <- 
-	    [Label((Printf.sprintf "while_%d_continue" i),l,false)] ;
-          b.bstmts <- cont_stmt :: b.bstmts ;
-          let this_stmt = mkStmt 
-            (While(e,b,l)) in 
-          let break_dest () = ref break_stmt in
-          let cont_dest () = ref cont_stmt in 
-          xform_switch_block b break_dest cont_dest label_index ;
-          break_stmt.succs <- s.succs ; 
-          let new_block = mkBlock [ this_stmt ; break_stmt ] in
-          s.skind <- Block new_block
-
-  | DoWhile (e, b, l) ->
-          let i = get_switch_count () in 
-          let break_stmt = mkStmt (Instr []) in
-          break_stmt.labels <- 
-	    [Label((Printf.sprintf "while_%d_break" i),l,false)] ;
-          let cont_stmt = mkStmt (Instr []) in
-          cont_stmt.labels <- 
-	    [Label((Printf.sprintf "while_%d_continue" i),l,false)] ;
-          b.bstmts <- cont_stmt :: b.bstmts ;
-          let this_stmt = mkStmt 
-            (DoWhile(e,b,l)) in 
-          let break_dest () = ref break_stmt in
-          let cont_dest () = ref cont_stmt in 
-          xform_switch_block b break_dest cont_dest label_index ;
-          break_stmt.succs <- s.succs ; 
-          let new_block = mkBlock [ this_stmt ; break_stmt ] in
-          s.skind <- Block new_block
-
-  | For (bInit, e, bIter , b, l) ->
-          let i = get_switch_count () in 
-          let break_stmt = mkStmt (Instr []) in
-          break_stmt.labels <- 
-	    [Label((Printf.sprintf "while_%d_break" i),l,false)] ;
-          let cont_stmt = mkStmt (Instr []) in
-          cont_stmt.labels <- 
-	    [Label((Printf.sprintf "while_%d_continue" i),l,false)] ;
-          b.bstmts <- cont_stmt :: b.bstmts ;
-          let this_stmt = mkStmt 
-            (For(bInit,e,bIter,b,l)) in 
-          let break_dest () = ref break_stmt in
-          let cont_dest () = ref cont_stmt in 
-          xform_switch_block b break_dest cont_dest label_index ;
-          break_stmt.succs <- s.succs ; 
-          let new_block = mkBlock [ this_stmt ; break_stmt ] in
-          s.skind <- Block new_block
-
-
-  | Block(b) -> xform_switch_block b break_dest cont_dest label_index
-
-  | TryExcept _ | TryFinally _ -> 
-      failwith "xform_switch_statement: structured exception handling not implemented"
-
-end and xform_switch_block b break_dest cont_dest label_index = 
-  try 
-    let rec link_succs sl = match sl with
-    | [] -> ()
-    | hd :: tl -> (if hd.succs = [] then hd.succs <- tl) ; link_succs tl
-    in 
-    link_succs b.bstmts ;
-    List.iter (fun stmt -> 
-      xform_switch_stmt stmt break_dest cont_dest label_index) b.bstmts ;
-  with e ->
-    List.iter (fun stmt -> ignore
-      (warn "prepareCFG: %a@!" d_stmt stmt)) b.bstmts ;
-    raise e
-
-(* prepare a function for computeCFGInfo by removing break, continue,
- * default and switch statements/labels and replacing them with Ifs and
- * Gotos. *)
-let prepareCFG (fd : fundec) : unit =
-  xform_switch_block fd.sbody 
-      (fun () -> failwith "prepareCFG: break with no enclosing loop") 
-      (fun () -> failwith "prepareCFG: continue with no enclosing loop") (-1)
-
-(* make the cfg and return a list of statements *)
-let computeCFGInfo (f : fundec) (global_numbering : bool) : unit =
-  if not global_numbering then 
-    sid_counter := 0 ; 
-  statements := [];
-  let clear_it = new clear in 
-  ignore (visitCilBlock clear_it f.sbody) ;
-  f.smaxstmtid <- Some (!sid_counter) ;
-  succpred_block f.sbody (None);
-  let res = List.rev !statements in
-  statements := [];
-  f.sallstmts <- res;
-  ()
-
-let initCIL () = 
-  if not !initCIL_called then begin 
-    (* Set the machine *)
-    theMachine := if !msvcMode then M.msvc else M.gcc;
-    (* Pick type for string literals *)
-    stringLiteralType := if !theMachine.M.const_string_literals then
-      charConstPtrType
-    else
-      charPtrType;
-    (* Find the right ikind given the size *)
-    let findIkind (unsigned: bool) (sz: int) : ikind = 
-      (* Test the most common sizes first *)
-      if sz = !theMachine.M.sizeof_int then 
-        if unsigned then IUInt else IInt 
-      else if sz = !theMachine.M.sizeof_long then 
-        if unsigned then IULong else ILong
-      else if sz = 1 then 
-        if unsigned then IUChar else IChar 
-      else if sz = !theMachine.M.sizeof_short then
-        if unsigned then IUShort else IShort
-      else if sz = !theMachine.M.sizeof_longlong then
-        if unsigned then IULongLong else ILongLong
-      else 
-        E.s(E.unimp "initCIL: cannot find the right ikind for size %d\n" sz)
-    in      
-    upointType := TInt(findIkind true !theMachine.M.sizeof_ptr, []);
-    kindOfSizeOf := findIkind true !theMachine.M.sizeof_sizeof;
-    typeOfSizeOf := TInt(!kindOfSizeOf, []);
-    H.add gccBuiltins "__builtin_memset" 
-      (voidPtrType, [ voidPtrType; intType; intType ], false);
-    wcharKind := findIkind false !theMachine.M.sizeof_wchar;
-    wcharType := TInt(!wcharKind, []);
-    char_is_unsigned := !theMachine.M.char_is_unsigned;
-    little_endian := !theMachine.M.little_endian;
-    underscore_name := !theMachine.M.underscore_name;
-    nextGlobalVID := 1;
-    nextCompinfoKey := 1;
-    initCIL_called := true
-  end
-    
-
-(* We want to bring all type declarations before the data declarations. This 
- * is needed for code of the following form: 
-
-   int f(); // Prototype without arguments
-   typedef int FOO;
-   int f(FOO x) { ... }
-
-   In CIL the prototype also lists the type of the argument as being FOO, 
-   which is undefined. 
-
-   There is one catch with this scheme. If the type contains an array whose 
-   length refers to variables then those variables must be declared before 
-   the type *)
-
-let pullTypesForward = true
-
-  
-    (* Scan a type and collect the variables that are refered *)
-class getVarsInGlobalClass (pacc: varinfo list ref) = object
-  inherit nopCilVisitor
-  method vvrbl (vi: varinfo) = 
-    pacc := vi :: !pacc;
-    SkipChildren
-
-  method vglob = function
-      GType _ | GCompTag _ -> DoChildren
-    | _ -> SkipChildren
-      
-end
-
-let getVarsInGlobal (g : global) : varinfo list = 
-  let pacc : varinfo list ref = ref [] in
-  let v : cilVisitor = new getVarsInGlobalClass pacc in
-  ignore (visitCilGlobal v g);
-  !pacc
-
-let hasPrefix p s = 
-  let pl = String.length p in
-  (String.length s >= pl) && String.sub s 0 pl = p
-
-let pushGlobal (g: global) 
-               ~(types:global list ref)
-               ~(variables: global list ref) = 
-  if not pullTypesForward then 
-    variables := g :: !variables
-  else
-    begin
-      (* Collect a list of variables that are refered from the type. Return 
-       * Some if the global should go with the types and None if it should go 
-       * to the variables. *)
-      let varsintype : (varinfo list * location) option = 
-        match g with 
-          GType (_, l) | GCompTag (_, l) -> Some (getVarsInGlobal g, l)
-        | GEnumTag (_, l) | GPragma (Attr("pack", _), l) 
-        | GCompTagDecl (_, l) | GEnumTagDecl (_, l) -> Some ([], l)
-          (** Move the warning pragmas early 
-        | GPragma(Attr(s, _), l) when hasPrefix "warning" s -> Some ([], l)
-          *)
-        | _ -> None (* Does not go with the types *)
-      in
-      match varsintype with 
-      None -> variables := g :: !variables
-    | Some (vl, loc) -> 
-        types := 
-           (* insert declarations for referred variables ('vl'), before
-            * the type definition 'g' itself *)
-           g :: (List.fold_left (fun acc v -> GVarDecl(v, loc) :: acc) 
-                                !types vl) 
-  end
-
-
-type formatArg = 
-    Fe of exp
-  | Feo of exp option  (** For array lengths *)
-  | Fu of unop
-  | Fb of binop
-  | Fk of ikind
-  | FE of exp list (** For arguments in a function call *)
-  | Ff of (string * typ * attributes) (** For a formal argument *)
-  | FF of (string * typ * attributes) list (* For formal argument lists *)
-  | Fva of bool (** For the ellipsis in a function type *)
-  | Fv of varinfo
-  | Fl of lval
-  | Flo of lval option (** For the result of a function call *)
-  | Fo of offset
-  | Fc of compinfo
-  | Fi of instr
-  | FI of instr list
-  | Ft of typ
-  | Fd of int
-  | Fg of string
-  | Fs of stmt
-  | FS of stmt list
-  | FA of attributes
-
-  | Fp of attrparam
-  | FP of attrparam list
-
-  | FX of string
-
-let d_formatarg () = function
-    Fe e -> dprintf "Fe(%a)" d_exp e
-  | Feo None -> dprintf "Feo(None)"
-  | Feo (Some e) -> dprintf "Feo(%a)" d_exp e
-  | FE _ -> dprintf "FE()"
-  | Fk ik -> dprintf "Fk()"
-  | Fva b -> dprintf "Fva(%b)" b
-  | Ff (an, _, _) -> dprintf "Ff(%s)" an
-  | FF _ -> dprintf "FF(...)"
-  | FA _ -> dprintf "FA(...)"
-  | Fu uo -> dprintf "Fu()"
-  | Fb bo -> dprintf "Fb()"
-  | Fv v -> dprintf "Fv(%s)" v.vname
-  | Fl l -> dprintf "Fl(%a)" d_lval l
-  | Flo None -> dprintf "Flo(None)"
-  | Flo (Some l) -> dprintf "Flo(%a)" d_lval l
-  | Fo o -> dprintf "Fo"
-  | Fc ci -> dprintf "Fc(%s)" ci.cname
-  | Fi i -> dprintf "Fi(...)"
-  | FI i -> dprintf "FI(...)"
-  | Ft t -> dprintf "Ft(%a)" d_type t
-  | Fd n -> dprintf "Fd(%d)" n
-  | Fg s -> dprintf "Fg(%s)" s
-  | Fp _ -> dprintf "Fp(...)" 
-  | FP n -> dprintf "FP(...)" 
-  | Fs _ -> dprintf "FS"
-  | FS _ -> dprintf "FS"
-
-  | FX _ -> dprintf "FX()"
-
-
diff --git a/cil/src/cil.mli b/cil/src/cil.mli
deleted file mode 100644
index 31c4e65ca..000000000
--- a/cil/src/cil.mli
+++ /dev/null
@@ -1,2455 +0,0 @@
-(* MODIF: Loop constructor replaced by 3 constructors: While, DoWhile, For. *)
-
-(*
- *
- * Copyright (c) 2001-2002, 
- *  George C. Necula    <necula@cs.berkeley.edu>
- *  Scott McPeak        <smcpeak@cs.berkeley.edu>
- *  Wes Weimer          <weimer@cs.berkeley.edu>
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. The names of the contributors may not be used to endorse or promote
- * products derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
- * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
- * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- *)
-
-(*
- * CIL: An intermediate language for analyzing C programs.
- *
- * George Necula
- *
- *)
-
-(** CIL API Documentation. An html version of this document can be found at 
- * http://manju.cs.berkeley.edu/cil. *)
-
-(** Call this function to perform some initialization. Call if after you have 
- * set {!Cil.msvcMode}.  *)
-val initCIL: unit -> unit
-
-
-(** This are the CIL version numbers. A CIL version is a number of the form 
- * M.m.r (major, minor and release) *)
-val cilVersion: string
-val cilVersionMajor: int
-val cilVersionMinor: int
-val cilVersionRevision: int
-
-(** This module defines the abstract syntax of CIL. It also provides utility 
- * functions for traversing the CIL data structures, and pretty-printing 
- * them. The parser for both the GCC and MSVC front-ends can be invoked as 
- * [Frontc.parse: string -> unit ->] {!Cil.file}. This function must be given 
- * the name of a preprocessed C file and will return the top-level data 
- * structure that describes a whole source file. By default the parsing and 
- * elaboration into CIL is done as for GCC source. If you want to use MSVC 
- * source you must set the {!Cil.msvcMode} to [true] and must also invoke the 
- * function [Frontc.setMSVCMode: unit -> unit]. *)
-
-
-(** {b The Abstract Syntax of CIL} *)
-
-
-(** The top-level representation of a CIL source file (and the result of the 
- * parsing and elaboration). Its main contents is the list of global 
- * declarations and definitions. You can iterate over the globals in a 
- * {!Cil.file} using the following iterators: {!Cil.mapGlobals}, 
- * {!Cil.iterGlobals} and {!Cil.foldGlobals}. You can also use the 
- * {!Cil.dummyFile} when you need a {!Cil.file} as a placeholder. For each 
- * global item CIL stores the source location where it appears (using the 
- * type {!Cil.location}) *)
-
-type file = 
-    { mutable fileName: string;   (** The complete file name *)
-      mutable globals: global list; (** List of globals as they will appear 
-                                        in the printed file *)
-      mutable globinit: fundec option;  
-      (** An optional global initializer function. This is a function where 
-       * you can put stuff that must be executed before the program is 
-       * started. This function, is conceptually at the end of the file, 
-       * although it is not part of the globals list. Use {!Cil.getGlobInit} 
-       * to create/get one. *)
-      mutable globinitcalled: bool;     
-      (** Whether the global initialization function is called in main. This 
-       * should always be false if there is no global initializer. When you 
-       * create a global initialization CIL will try to insert code in main 
-       * to call it. This will not happen if your file does not contain a 
-       * function called "main" *)
-    } 
-(** Top-level representation of a C source file *)
-
-and comment = location * string
-
-(** {b Globals}. The main type for representing global declarations and 
- * definitions. A list of these form a CIL file. The order of globals in the 
- * file is generally important. *)
-
-(** A global declaration or definition *)
-and global =
-  | GType of typeinfo * location    
-    (** A typedef. All uses of type names (through the [TNamed] constructor) 
-        must be preceded in the file by a definition of the name. The string 
-        is the defined name and always not-empty. *)
-
-  | GCompTag of compinfo * location     
-    (** Defines a struct/union tag with some fields. There must be one of 
-        these for each struct/union tag that you use (through the [TComp] 
-        constructor) since this is the only context in which the fields are 
-        printed. Consequently nested structure tag definitions must be 
-        broken into individual definitions with the innermost structure 
-        defined first. *)
-
-  | GCompTagDecl of compinfo * location
-    (** Declares a struct/union tag. Use as a forward declaration. This is 
-      * printed without the fields.  *)
-
-  | GEnumTag of enuminfo * location
-   (** Declares an enumeration tag with some fields. There must be one of 
-      these for each enumeration tag that you use (through the [TEnum] 
-      constructor) since this is the only context in which the items are 
-      printed. *)
-
-  | GEnumTagDecl of enuminfo * location
-    (** Declares an enumeration tag. Use as a forward declaration. This is 
-      * printed without the items.  *)
-
-  | GVarDecl of varinfo * location
-   (** A variable declaration (not a definition). If the variable has a 
-       function type then this is a prototype. There can be several 
-       declarations and at most one definition for a given variable. If both 
-       forms appear then they must share the same varinfo structure. A 
-       prototype shares the varinfo with the fundec of the definition. Either 
-       has storage Extern or there must be a definition in this file *)
-
-  | GVar  of varinfo * initinfo * location
-     (** A variable definition. Can have an initializer. The initializer is 
-      * updateable so that you can change it without requiring to recreate 
-      * the list of globals. There can be at most one definition for a 
-      * variable in an entire program. Cannot have storage Extern or function 
-      * type. *)
-
-  | GFun of fundec * location           
-     (** A function definition. *)
-
-  | GAsm of string * location           (** Global asm statement. These ones 
-                                            can contain only a template *)
-  | GPragma of attribute * location     (** Pragmas at top level. Use the same 
-                                            syntax as attributes *)
-  | GText of string                     (** Some text (printed verbatim) at 
-                                            top level. E.g., this way you can 
-                                            put comments in the output.  *)
-
-(** {b Types}. A C type is represented in CIL using the type {!Cil.typ}. 
- * Among types we differentiate the integral types (with different kinds 
- * denoting the sign and precision), floating point types, enumeration types, 
- * array and pointer types, and function types. Every type is associated with 
- * a list of attributes, which are always kept in sorted order. Use 
- * {!Cil.addAttribute} and {!Cil.addAttributes} to construct list of 
- * attributes. If you want to inspect a type, you should use 
- * {!Cil.unrollType} or {!Cil.unrollTypeDeep} to see through the uses of 
- * named types. *)
-(** CIL is configured at build-time with the sizes and alignments of the 
- * underlying compiler (GCC or MSVC). CIL contains functions that can compute 
- * the size of a type (in bits) {!Cil.bitsSizeOf}, the alignment of a type 
- * (in bytes) {!Cil.alignOf_int}, and can convert an offset into a start and 
- * width (both in bits) using the function {!Cil.bitsOffset}. At the moment 
- * these functions do not take into account the [packed] attributes and 
- * pragmas. *)
-
-and typ =
-    TVoid of attributes   (** Void type. Also predefined as {!Cil.voidType} *)
-  | TInt of ikind * attributes 
-     (** An integer type. The kind specifies the sign and width. Several 
-      * useful variants are predefined as {!Cil.intType}, {!Cil.uintType}, 
-      * {!Cil.longType}, {!Cil.charType}. *)
-
-
-  | TFloat of fkind * attributes 
-     (** A floating-point type. The kind specifies the precision. You can 
-      * also use the predefined constant {!Cil.doubleType}. *)
-
-  | TPtr of typ * attributes  
-           (** Pointer type. Several useful variants are predefined as 
-            * {!Cil.charPtrType}, {!Cil.charConstPtrType} (pointer to a 
-            * constant character), {!Cil.voidPtrType}, 
-            * {!Cil.intPtrType}  *)
-
-  | TArray of typ * exp option * attributes
-           (** Array type. It indicates the base type and the array length. *)
-
-  | TFun of typ * (string * typ * attributes) list option * bool * attributes
-          (** Function type. Indicates the type of the result, the name, type 
-           * and name attributes of the formal arguments ([None] if no 
-           * arguments were specified, as in a function whose definition or 
-           * prototype we have not seen; [Some \[\]] means void). Use 
-           * {!Cil.argsToList} to obtain a list of arguments. The boolean 
-           * indicates if it is a variable-argument function. If this is the 
-           * type of a varinfo for which we have a function declaration then 
-           * the information for the formals must match that in the 
-           * function's sformals. Use {!Cil.setFormals}, or 
-           * {!Cil.setFunctionType}, or {!Cil.makeFormalVar} for this 
-           * purpose. *)
-
-  | TNamed of typeinfo * attributes 
-          (* The use of a named type. Each such type name must be preceded 
-           * in the file by a [GType] global. This is printed as just the 
-           * type name. The actual referred type is not printed here and is 
-           * carried only to simplify processing. To see through a sequence 
-           * of named type references, use {!Cil.unrollType} or 
-           * {!Cil.unrollTypeDeep}. The attributes are in addition to those 
-           * given when the type name was defined. *)
-
-  | TComp of compinfo * attributes
-(** The most delicate issue for C types is that recursion that is possible by 
- * using structures and pointers. To address this issue we have a more 
- * complex representation for structured types (struct and union). Each such 
- * type is represented using the {!Cil.compinfo} type. For each composite 
- * type the {!Cil.compinfo} structure must be declared at top level using 
- * [GCompTag] and all references to it must share the same copy of the 
- * structure. The attributes given are those pertaining to this use of the 
- * type and are in addition to the attributes that were given at the 
- * definition of the type and which are stored in the {!Cil.compinfo}. *)
-
-  | TEnum of enuminfo * attributes
-           (** A reference to an enumeration type. All such references must
-               share the enuminfo among them and with a [GEnumTag] global that 
-               precedes all uses. The attributes refer to this use of the 
-               enumeration and are in addition to the attributes of the 
-               enumeration itself, which are stored inside the enuminfo  *)
-
-  
-  | TBuiltin_va_list of attributes
-            (** This is the same as the gcc's type with the same name *)
-
-(**
- There are a number of functions for querying the kind of a type. These are
- {!Cil.isIntegralType}, 
- {!Cil.isArithmeticType}, 
- {!Cil.isPointerType}, 
- {!Cil.isFunctionType}, 
- {!Cil.isArrayType}. 
-
- There are two easy ways to scan a type. First, you can use the
-{!Cil.existsType} to return a boolean answer about a type. This function
-is controlled by a user-provided function that is queried for each type that is
-used to construct the current type. The function can specify whether to
-terminate the scan with a boolean result or to continue the scan for the
-nested types. 
-
- The other method for scanning types is provided by the visitor interface (see
- {!Cil.cilVisitor}).
-
- If you want to compare types (or to use them as hash-values) then you should
-use instead type signatures (represented as {!Cil.typsig}). These
-contain the same information as types but canonicalized such that simple Ocaml
-structural equality will tell whether two types are equal. Use
-{!Cil.typeSig} to compute the signature of a type. If you want to ignore
-certain type attributes then use {!Cil.typeSigWithAttrs}. 
-
-*)
-
-
-(** Various kinds of integers *)
-and ikind = 
-    IChar       (** [char] *)
-  | ISChar      (** [signed char] *)
-  | IUChar      (** [unsigned char] *)
-  | IInt        (** [int] *)
-  | IUInt       (** [unsigned int] *)
-  | IShort      (** [short] *)
-  | IUShort     (** [unsigned short] *)
-  | ILong       (** [long] *)
-  | IULong      (** [unsigned long] *)
-  | ILongLong   (** [long long] (or [_int64] on Microsoft Visual C) *)
-  | IULongLong  (** [unsigned long long] (or [unsigned _int64] on Microsoft 
-                    Visual C) *)
-
-(** Various kinds of floating-point numbers*)
-and fkind = 
-    FFloat      (** [float] *)
-  | FDouble     (** [double] *)
-  | FLongDouble (** [long double] *)
-
-
-(** {b Attributes.} *)
-
-and attribute = Attr of string * attrparam list
-(** An attribute has a name and some optional parameters. The name should not 
- * start or end with underscore. When CIL parses attribute names it will 
- * strip leading and ending underscores (to ensure that the multitude of GCC 
- * attributes such as const, __const and __const__ all mean the same thing.) *)
-
-(** Attributes are lists sorted by the attribute name. Use the functions 
- * {!Cil.addAttribute} and {!Cil.addAttributes} to insert attributes in an 
- * attribute list and maintain the sortedness. *)
-and attributes = attribute list
- 
-(** The type of parameters of attributes *)
-and attrparam = 
-  | AInt of int                          (** An integer constant *)
-  | AStr of string                       (** A string constant *)
-  | ACons of string * attrparam list       (** Constructed attributes. These 
-                                             are printed [foo(a1,a2,...,an)]. 
-                                             The list of parameters can be 
-                                             empty and in that case the 
-                                             parentheses are not printed. *)
-  | ASizeOf of typ                       (** A way to talk about types *)
-  | ASizeOfE of attrparam
-  | ASizeOfS of typsig                   (** Replacement for ASizeOf in type
-                                             signatures.  Only used for
-                                             attributes inside typsigs.*)
-  | AAlignOf of typ
-  | AAlignOfE of attrparam
-  | AAlignOfS of typsig
-  | AUnOp of unop * attrparam
-  | ABinOp of binop * attrparam * attrparam
-  | ADot of attrparam * string           (** a.foo **)
-
-(** {b Structures.} The {!Cil.compinfo} describes the definition of a 
- * structure or union type. Each such {!Cil.compinfo} must be defined at the 
- * top-level using the [GCompTag] constructor and must be shared by all 
- * references to this type (using either the [TComp] type constructor or from 
- * the definition of the fields. 
-
-   If all you need is to scan the definition of each 
- * composite type once, you can do that by scanning all top-level [GCompTag]. 
-
- * Constructing a {!Cil.compinfo} can be tricky since it must contain fields 
- * that might refer to the host {!Cil.compinfo} and furthermore the type of 
- * the field might need to refer to the {!Cil.compinfo} for recursive types. 
- * Use the {!Cil.mkCompInfo} function to create a {!Cil.compinfo}. You can 
- * easily fetch the {!Cil.fieldinfo} for a given field in a structure with 
- * {!Cil.getCompField}. *)
-
-(** The definition of a structure or union type. Use {!Cil.mkCompInfo} to 
- * make one and use {!Cil.copyCompInfo} to copy one (this ensures that a new 
- * key is assigned and that the fields have the right pointers to parents.). *)
-and compinfo = {
-    mutable cstruct: bool;              
-   (** True if struct, False if union *)
-    mutable cname: string;              
-   (** The name. Always non-empty. Use {!Cil.compFullName} to get the full 
-    * name of a comp (along with the struct or union) *)
-    mutable ckey: int;                  
-    (** A unique integer. This is assigned by {!Cil.mkCompInfo} using a 
-     * global variable in the Cil module. Thus two identical structs in two 
-     * different files might have different keys. Use {!Cil.copyCompInfo} to 
-     * copy structures so that a new key is assigned. *)
-    mutable cfields: fieldinfo list;    
-    (** Information about the fields. Notice that each fieldinfo has a 
-      * pointer back to the host compinfo. This means that you should not 
-      * share fieldinfo's between two compinfo's *) 
-    mutable cattr:   attributes;        
-    (** The attributes that are defined at the same time as the composite 
-     * type. These attributes can be supplemented individually at each 
-     * reference to this [compinfo] using the [TComp] type constructor. *)
-    mutable cdefined: bool;
-    (** This boolean flag can be used to distinguish between structures
-     that have not been defined and those that have been defined but have
-     no fields (such things are allowed in gcc). *)
-    mutable creferenced: bool;          
-    (** True if used. Initially set to false. *)
-  }
-
-(** {b Structure fields.} The {!Cil.fieldinfo} structure is used to describe 
- * a structure or union field. Fields, just like variables, can have 
- * attributes associated with the field itself or associated with the type of 
- * the field (stored along with the type of the field). *)
-
-(** Information about a struct/union field *)
-and fieldinfo = { 
-    mutable fcomp: compinfo;            
-     (** The host structure that contains this field. There can be only one 
-      * [compinfo] that contains the field. *)
-    mutable fname: string;              
-    (** The name of the field. Might be the value of {!Cil.missingFieldName} 
-     * in which case it must be a bitfield and is not printed and it does not 
-     * participate in initialization *)
-    mutable ftype: typ;     
-    (** The type *)
-    mutable fbitfield: int option;      
-    (** If a bitfield then ftype should be an integer type and the width of 
-     * the bitfield must be 0 or a positive integer smaller or equal to the 
-     * width of the integer type. A field of width 0 is used in C to control 
-     * the alignment of fields. *)
-    mutable fattr: attributes;          
-    (** The attributes for this field (not for its type) *)
-    mutable floc: location;
-    (** The location where this field is defined *)
-}
-
-
-
-(** {b Enumerations.} Information about an enumeration. This is shared by all 
- * references to an enumeration. Make sure you have a [GEnumTag] for each of 
- * of these. *)
-
-(** Information about an enumeration *)
-and enuminfo = {
-    mutable ename: string;              
-    (** The name. Always non-empty. *)
-    mutable eitems: (string * exp * location) list;
-    (** Items with names and values. This list should be non-empty. The item 
-     * values must be compile-time constants. *)
-    mutable eattr: attributes;         
-    (** The attributes that are defined at the same time as the enumeration 
-     * type. These attributes can be supplemented individually at each 
-     * reference to this [enuminfo] using the [TEnum] type constructor. *)
-    mutable ereferenced: bool;         
-    (** True if used. Initially set to false*)
-}
-
-(** {b Enumerations.} Information about an enumeration. This is shared by all 
- * references to an enumeration. Make sure you have a [GEnumTag] for each of 
- * of these. *)
-
-(** Information about a defined type *)
-and typeinfo = {
-    mutable tname: string;              
-    (** The name. Can be empty only in a [GType] when introducing a composite 
-     * or enumeration tag. If empty cannot be referred to from the file *)
-    mutable ttype: typ;
-    (** The actual type. This includes the attributes that were present in 
-     * the typedef *)
-    mutable treferenced: bool;         
-    (** True if used. Initially set to false*)
-}
-
-(** {b Variables.} 
- Each local or global variable is represented by a unique {!Cil.varinfo}
-structure. A global {!Cil.varinfo} can be introduced with the [GVarDecl] or
-[GVar] or [GFun] globals. A local varinfo can be introduced as part of a
-function definition {!Cil.fundec}. 
-
- All references to a given global or local variable must refer to the same
-copy of the [varinfo]. Each [varinfo] has a globally unique identifier that 
-can be used to index maps and hashtables (the name can also be used for this 
-purpose, except for locals from different functions). This identifier is 
-constructor using a global counter.
-
- It is very important that you construct [varinfo] structures using only one
- of the following functions:
-- {!Cil.makeGlobalVar} : to make a global variable
-- {!Cil.makeTempVar} : to make a temporary local variable whose name
-will be generated so that to avoid conflict with other locals. 
-- {!Cil.makeLocalVar} : like {!Cil.makeTempVar} but you can specify the
-exact name to be used. 
-- {!Cil.copyVarinfo}: make a shallow copy of a varinfo assigning a new name 
-and a new unique identifier
-
- A [varinfo] is also used in a function type to denote the list of formals. 
-
-*)
-
-(** Information about a variable. *)
-and varinfo = { 
-    mutable vname: string;		
-    (** The name of the variable. Cannot be empty. It is primarily your 
-     * responsibility to ensure the uniqueness of a variable name. For local 
-     * variables {!Cil.makeTempVar} helps you ensure that the name is unique. 
-     *)
-
-    mutable vtype: typ;                 
-    (** The declared type of the variable. *)
-
-    mutable vattr: attributes;          
-    (** A list of attributes associated with the variable.*)
-    mutable vstorage: storage;          
-    (** The storage-class *)
-
-    mutable vglob: bool;	        
-    (** True if this is a global variable*)
-
-    mutable vinline: bool;
-    (** Whether this varinfo is for an inline function. *)
-
-    mutable vdecl: location;            
-    (** Location of variable declaration. *)
-
-    mutable vid: int;  
-    (** A unique integer identifier. This field will be 
-     * set for you if you use one of the {!Cil.makeFormalVar}, 
-     * {!Cil.makeLocalVar}, {!Cil.makeTempVar}, {!Cil.makeGlobalVar}, or 
-     * {!Cil.copyVarinfo}. *)
-
-    mutable vaddrof: bool;              
-    (** True if the address of this variable is taken. CIL will set these 
-     * flags when it parses C, but you should make sure to set the flag 
-     * whenever your transformation create [AddrOf] expression. *)
-
-    mutable vreferenced: bool;          
-    (** True if this variable is ever referenced. This is computed by 
-     * [removeUnusedVars]. It is safe to just initialize this to False *)
-}
-
-(** Storage-class information *)
-and storage = 
-    NoStorage     (** The default storage. Nothing is printed  *)
-  | Static
-  | Register
-  | Extern                              
-
-
-(** {b Expressions.} The CIL expression language contains only the side-effect free expressions of
-C. They are represented as the type {!Cil.exp}. There are several
-interesting aspects of CIL expressions: 
-
- Integer and floating point constants can carry their textual representation.
-This way the integer 15 can be printed as 0xF if that is how it occurred in the
-source. 
-
- CIL uses 64 bits to represent the integer constants and also stores the width
-of the integer type. Care must be taken to ensure that the constant is
-representable with the given width. Use the functions {!Cil.kinteger},
-{!Cil.kinteger64} and {!Cil.integer} to construct constant
-expressions. CIL predefines the constants {!Cil.zero},
-{!Cil.one} and {!Cil.mone} (for -1). 
-
- Use the functions {!Cil.isConstant} and {!Cil.isInteger} to test if
-an expression is a constant and a constant integer respectively.
-
- CIL keeps the type of all unary and binary expressions. You can think of that
-type qualifying the operator. Furthermore there are different operators for
-arithmetic and comparisons on arithmetic types and on pointers. 
-
- Another unusual aspect of CIL is that the implicit conversion between an
-expression of array type and one of pointer type is made explicit, using the
-[StartOf] expression constructor (which is not printed). If you apply the
-[AddrOf}]constructor to an lvalue of type [T] then you will be getting an
-expression of type [TPtr(T)].
-
- You can find the type of an expression with {!Cil.typeOf}. 
-
- You can perform constant folding on expressions using the function
-{!Cil.constFold}. 
-*)
-
-(** Expressions (Side-effect free)*)
-and exp =
-    Const      of constant              (** Constant *)
-  | Lval       of lval                  (** Lvalue *)
-  | SizeOf     of typ                   
-    (** sizeof(<type>). Has [unsigned int] type (ISO 6.5.3.4). This is not 
-     * turned into a constant because some transformations might want to 
-     * change types *)
-
-  | SizeOfE    of exp                   
-    (** sizeof(<expression>) *)
-
-  | SizeOfStr  of string
-    (** sizeof(string_literal). We separate this case out because this is the 
-      * only instance in which a string literal should not be treated as 
-      * having type pointer to character. *)
-
-  | AlignOf    of typ                   
-    (** This corresponds to the GCC __alignof_. Has [unsigned int] type *)
-  | AlignOfE   of exp  
-
-                                        
-  | UnOp       of unop * exp * typ     
-    (** Unary operation. Includes the type of the result. *)
-
-  | BinOp      of binop * exp * exp * typ
-    (** Binary operation. Includes the type of the result. The arithmetic 
-     * conversions are made explicit for the arguments. *)
-
-  | CastE      of typ * exp            
-    (** Use {!Cil.mkCast} to make casts.  *)
-
-  | AddrOf     of lval                 
-    (** Always use {!Cil.mkAddrOf} to construct one of these. Apply to an 
-     * lvalue of type [T] yields an expression of type [TPtr(T)] *)
-
-  | StartOf    of lval   
-    (** Conversion from an array to a pointer to the beginning of the array. 
-     * Given an lval of type [TArray(T)] produces an expression of type 
-     * [TPtr(T)]. In C this operation is implicit, the [StartOf] operator is 
-     * not printed. We have it in CIL because it makes the typing rules 
-     * simpler. *)
-
-(** {b Constants.} *)
-
-(** Literal constants *)
-and constant =
-  | CInt64 of int64 * ikind * string option 
-    (** Integer constant. Give the ikind (see ISO9899 6.1.3.2) and the 
-     * textual representation, if available. (This allows us to print a 
-     * constant as, for example, 0xF instead of 15.) Use {!Cil.integer} or 
-     * {!Cil.kinteger} to create these. Watch out for integers that cannot be 
-     * represented on 64 bits. OCAML does not give Overflow exceptions. *)
-  | CStr of string 
-    (* String constant. The escape characters inside the string have been 
-     * already interpreted. This constant has pointer to character type! The 
-     * only case when you would like a string literal to have an array type 
-     * is when it is an argument to sizeof. In that case you should use 
-     * SizeOfStr. *)
-  | CWStr of int64 list  
-    (* Wide character string constant. Note that the local interpretation
-     * of such a literal depends on {!Cil.wcharType} and {!Cil.wcharKind}.
-     * Such a constant has type pointer to {!Cil.wcharType}. The
-     * escape characters in the string have not been "interpreted" in 
-     * the sense that L"A\xabcd" remains "A\xabcd" rather than being
-     * represented as the wide character list with two elements: 65 and
-     * 43981. That "interpretation" depends on the underlying wide
-     * character type. *)
-  | CChr of char   
-    (** Character constant.  This has type int, so use charConstToInt
-     * to read the value in case sign-extension is needed. *)
-  | CReal of float * fkind * string option 
-     (** Floating point constant. Give the fkind (see ISO 6.4.4.2) and also 
-      * the textual representation, if available. *)
-  | CEnum of exp * string * enuminfo
-     (** An enumeration constant with the given value, name, from the given 
-      * enuminfo. This is used only if {!Cil.lowerConstants} is true 
-      * (default). Use {!Cil.constFoldVisitor} to replace these with integer 
-      * constants. *)
-
-(** Unary operators *)
-and unop =
-    Neg                                 (** Unary minus *)
-  | BNot                                (** Bitwise complement (~) *)
-  | LNot                                (** Logical Not (!) *)
-
-(** Binary operations *)
-and binop =
-    PlusA                               (** arithmetic + *)
-  | PlusPI                              (** pointer + integer *)
-  | IndexPI                             (** pointer + integer but only when 
-                                         * it arises from an expression 
-                                         * [e\[i\]] when [e] is a pointer and 
-                                         * not an array. This is semantically 
-                                         * the same as PlusPI but CCured uses 
-                                         * this as a hint that the integer is 
-                                         * probably positive. *)
-  | MinusA                              (** arithmetic - *)
-  | MinusPI                             (** pointer - integer *)
-  | MinusPP                             (** pointer - pointer *)
-  | Mult                                (** * *)
-  | Div                                 (** / *)
-  | Mod                                 (** % *)
-  | Shiftlt                             (** shift left *)
-  | Shiftrt                             (** shift right *)
-
-  | Lt                                  (** <  (arithmetic comparison) *)
-  | Gt                                  (** >  (arithmetic comparison) *)  
-  | Le                                  (** <= (arithmetic comparison) *)
-  | Ge                                  (** >  (arithmetic comparison) *)
-  | Eq                                  (** == (arithmetic comparison) *)
-  | Ne                                  (** != (arithmetic comparison) *)            
-  | BAnd                                (** bitwise and *)
-  | BXor                                (** exclusive-or *)
-  | BOr                                 (** inclusive-or *)
-
-  | LAnd                                (** logical and. Unlike other 
-                                         * expressions this one does not 
-                                         * always evaluate both operands. If 
-                                         * you want to use these, you must 
-                                         * set {!Cil.useLogicalOperators}. *)
-  | LOr                                 (** logical or. Unlike other 
-                                         * expressions this one does not 
-                                         * always evaluate both operands.  If 
-                                         * you want to use these, you must 
-                                         * set {!Cil.useLogicalOperators}. *)
-
-(** {b Lvalues.} Lvalues are the sublanguage of expressions that can appear at the left of an assignment or as operand to the address-of operator. 
-In C the syntax for lvalues is not always a good indication of the meaning 
-of the lvalue. For example the C value
-{v  
-a[0][1][2]
- v}
- might involve 1, 2 or 3 memory reads when used in an expression context,
-depending on the declared type of the variable [a]. If [a] has type [int
-\[4\]\[4\]\[4\]] then we have one memory read from somewhere inside the area 
-that stores the array [a]. On the other hand if [a] has type [int ***] then
-the expression really means [* ( * ( * (a + 0) + 1) + 2)], in which case it is
-clear that it involves three separate memory operations. 
-
-An lvalue denotes the contents of a range of memory addresses. This range 
-is denoted as a host object along with an offset within the object. The 
-host object can be of two kinds: a local or global variable, or an object 
-whose address is in a pointer expression. We distinguish the two cases so 
-that we can tell quickly whether we are accessing some component of a 
-variable directly or we are accessing a memory location through a pointer.
-To make it easy to 
-tell what an lvalue means CIL represents lvalues as a host object and an
-offset (see {!Cil.lval}). The host object (represented as
-{!Cil.lhost}) can be a local or global variable or can be the object
-pointed-to by a pointer expression. The offset (represented as
-{!Cil.offset}) is a sequence of field or array index designators.
-
- Both the typing rules and the meaning of an lvalue is very precisely
-specified in CIL. 
-
- The following are a few useful function for operating on lvalues:
-- {!Cil.mkMem} - makes an lvalue of [Mem] kind. Use this to ensure
-that certain equivalent forms of lvalues are canonized. 
-For example, [*&x = x]. 
-- {!Cil.typeOfLval} - the type of an lvalue
-- {!Cil.typeOffset} - the type of an offset, given the type of the
-host. 
-- {!Cil.addOffset} and {!Cil.addOffsetLval} - extend sequences
-of offsets.
-- {!Cil.removeOffset} and {!Cil.removeOffsetLval} - shrink sequences
-of offsets.
-
-The following equivalences hold {v 
-Mem(AddrOf(Mem a, aoff)), off   = Mem a, aoff + off 
-Mem(AddrOf(Var v, aoff)), off   = Var v, aoff + off 
-AddrOf (Mem a, NoOffset)        = a                 
- v}
-
-*)
-(** An lvalue *)
-and lval =
-    lhost * offset
-
-(** The host part of an {!Cil.lval}. *)
-and lhost = 
-  | Var        of varinfo    
-    (** The host is a variable. *)
-
-  | Mem        of exp        
-    (** The host is an object of type [T] when the expression has pointer 
-     * [TPtr(T)]. *)
-
-
-(** The offset part of an {!Cil.lval}. Each offset can be applied to certain 
-  * kinds of lvalues and its effect is that it advances the starting address 
-  * of the lvalue and changes the denoted type, essentially focusing to some 
-  * smaller lvalue that is contained in the original one. *)
-and offset = 
-  | NoOffset          (** No offset. Can be applied to any lvalue and does 
-                        * not change either the starting address or the type. 
-                        * This is used when the lval consists of just a host 
-                        * or as a terminator in a list of other kinds of 
-                        * offsets. *)
-
-  | Field      of fieldinfo * offset    
-                      (** A field offset. Can be applied only to an lvalue 
-                       * that denotes a structure or a union that contains 
-                       * the mentioned field. This advances the offset to the 
-                       * beginning of the mentioned field and changes the 
-                       * type to the type of the mentioned field. *)
-
-  | Index    of exp * offset
-                     (** An array index offset. Can be applied only to an 
-                       * lvalue that denotes an array. This advances the 
-                       * starting address of the lval to the beginning of the 
-                       * mentioned array element and changes the denoted type 
-                       * to be the type of the array element *)
-
-
-(** {b Initializers.} 
-A special kind of expressions are those that can appear as initializers for
-global variables (initialization of local variables is turned into
-assignments). The initializers are represented as type {!Cil.init}. You
-can create initializers with {!Cil.makeZeroInit} and you can conveniently
-scan compound initializers them with {!Cil.foldLeftCompound} or with {!Cil.foldLeftCompoundAll}. 
-*)
-(** Initializers for global variables. *)
-and init = 
-  | SingleInit   of exp   (** A single initializer *)
-  | CompoundInit   of typ * (offset * init) list
-    (** Used only for initializers of structures, unions and arrays. The 
-     * offsets are all of the form [Field(f, NoOffset)] or [Index(i, 
-     * NoOffset)] and specify the field or the index being initialized. For 
-     * structures all fields must have an initializer (except the unnamed 
-     * bitfields), in the proper order. This is necessary since the offsets 
-     * are not printed. For unions there must be exactly one initializer. If 
-     * the initializer is not for the first field then a field designator is 
-     * printed, so you better be on GCC since MSVC does not understand this. 
-     * For arrays, however, we allow you to give only a prefix of the 
-     * initializers. You can scan an initializer list with 
-     * {!Cil.foldLeftCompound} or with {!Cil.foldLeftCompoundAll}. *)
-
-
-(** We want to be able to update an initializer in a global variable, so we 
- * define it as a mutable field *)
-and initinfo = {
-    mutable init : init option;
-  } 
-
-(** {b Function definitions.} 
-A function definition is always introduced with a [GFun] constructor at the
-top level. All the information about the function is stored into a
-{!Cil.fundec}. Some of the information (e.g. its name, type,
-storage, attributes) is stored as a {!Cil.varinfo} that is a field of the
-[fundec]. To refer to the function from the expression language you must use
-the [varinfo]. 
-
- The function definition contains, in addition to the body, a list of all the
-local variables and separately a list of the formals. Both kind of variables
-can be referred to in the body of the function. The formals must also be shared
-with the formals that appear in the function type. For that reason, to
-manipulate formals you should use the provided functions
-{!Cil.makeFormalVar} and {!Cil.setFormals} and {!Cil.makeFormalVar}. 
-*)
-(** Function definitions. *)
-and fundec =
-    { mutable svar:     varinfo;        
-         (** Holds the name and type as a variable, so we can refer to it 
-          * easily from the program. All references to this function either 
-          * in a function call or in a prototype must point to the same 
-          * [varinfo]. *)
-      mutable sformals: varinfo list;   
-        (** Formals. These must be in the same order and with the same 
-         * information as the formal information in the type of the function. 
-         * Use {!Cil.setFormals} or 
-         * {!Cil.setFunctionType} or {!Cil.makeFormalVar} 
-         * to set these formals and ensure that they 
-         * are reflected in the function type. Do not make copies of these 
-         * because the body refers to them. *)
-      mutable slocals: varinfo list;    
-        (** Locals. Does NOT include the sformals. Do not make copies of 
-         * these because the body refers to them. *)
-      mutable smaxid: int;           (** Max local id. Starts at 0. Used for 
-                                      * creating the names of new temporary 
-                                      * variables. Updated by 
-                                      * {!Cil.makeLocalVar} and 
-                                      * {!Cil.makeTempVar}. You can also use 
-                                      * {!Cil.setMaxId} to set it after you 
-                                      * have added the formals and locals. *)
-      mutable sbody: block;          (** The function body. *)
-      mutable smaxstmtid: int option;  (** max id of a (reachable) statement 
-                                        * in this function, if we have 
-                                        * computed it. range = 0 ... 
-                                        * (smaxstmtid-1). This is computed by 
-                                        * {!Cil.computeCFGInfo}. *)
-      mutable sallstmts: stmt list;  (** After you call {!Cil.computeCFGInfo} 
-                                      * this field is set to contain all 
-                                      * statements in the function *)
-    }
-
-
-(** A block is a sequence of statements with the control falling through from 
-    one element to the next *)
-and block = 
-   { mutable battrs: attributes;      (** Attributes for the block *)
-     mutable bstmts: stmt list;       (** The statements comprising the block*)
-   } 
-
-
-(** {b Statements}. 
-CIL statements are the structural elements that make the CFG. They are 
-represented using the type {!Cil.stmt}. Every
-statement has a (possibly empty) list of labels. The
-{!Cil.stmtkind} field of a statement indicates what kind of statement it 
-is.
-
- Use {!Cil.mkStmt} to make a statement and the fill-in the fields. 
-
-CIL also comes with support for control-flow graphs. The [sid] field in
-[stmt] can be used to give unique numbers to statements, and the [succs]
-and [preds] fields can be used to maintain a list of successors and
-predecessors for every statement. The CFG information is not computed by
-default. Instead you must explicitly use the functions
-{!Cil.prepareCFG} and {!Cil.computeCFGInfo} to do it.
-
-*)
-(** Statements. *)
-and stmt = {
-    mutable labels: label list;        
-    (** Whether the statement starts with some labels, case statements or 
-     * default statements. *)
-
-    mutable skind: stmtkind;           
-    (** The kind of statement *)
-
-    mutable sid: int;                  
-    (** A number (>= 0) that is unique in a function. Filled in only after 
-     * the CFG is computed. *)
-    mutable succs: stmt list;          
-    (** The successor statements. They can always be computed from the skind 
-     * and the context in which this statement appears. Filled in only after 
-     * the CFG is computed. *)
-    mutable preds: stmt list;          
-    (** The inverse of the succs function. *)
-  } 
-
-(** Labels *)
-and label = 
-    Label of string * location * bool   
-          (** A real label. If the bool is "true", the label is from the 
-           * input source program. If the bool is "false", the label was 
-           * created by CIL or some other transformation *)
-  | Case of exp * location              (** A case statement. This expression 
-                                         * is lowered into a constant if 
-                                         * {!Cil.lowerConstants} is set to 
-                                         * true. *)
-  | Default of location                 (** A default statement *)
-
-
-
-(** The various kinds of control-flow statements statements *)
-and stmtkind = 
-  | Instr  of instr list               
-  (** A group of instructions that do not contain control flow. Control 
-   * implicitly falls through. *)
-
-  | Return of exp option * location     
-   (** The return statement. This is a leaf in the CFG. *)
-
-  | Goto of stmt ref * location         
-   (** A goto statement. Appears from actual goto's in the code or from 
-    * goto's that have been inserted during elaboration. The reference 
-    * points to the statement that is the target of the Goto. This means that 
-    * you have to update the reference whenever you replace the target 
-    * statement. The target statement MUST have at least a label. *)
-
-  | Break of location                   
-   (** A break to the end of the nearest enclosing loop or Switch *)
-
-  | Continue of location                
-   (** A continue to the start of the nearest enclosing loop *)
-  | If of exp * block * block * location 
-   (** A conditional. Two successors, the "then" and the "else" branches. 
-    * Both branches fall-through to the successor of the If statement. *)
-
-  | Switch of exp * block * (stmt list) * location  
-   (** A switch statement. The statements that implement the cases can be 
-    * reached through the provided list. For each such target you can find 
-    * among its labels what cases it implements. The statements that 
-    * implement the cases are somewhere within the provided [block]. *)
-
-(*
-  | Loop of block * location * (stmt option) * (stmt option)
-    (** A [while(1)] loop. The termination test is implemented in the body of 
-     * a loop using a [Break] statement. If prepareCFG has been called,
-     * the first stmt option will point to the stmt containing the continue
-     * label for this loop and the second will point to the stmt containing
-     * the break label for this loop. *)
-*)
-
-  | While of exp * block * location
-    (** A [while] loop. *)
-
-  | DoWhile of exp * block * location
-    (** A [do...while] loop. *)
-
-  | For of block * exp * block * block * location
-    (** A [for] loop. *)
-
-  | Block of block                      
-    (** Just a block of statements. Use it as a way to keep some block 
-     * attributes local *)
-
-    (** On MSVC we support structured exception handling. This is what you 
-     * might expect. Control can get into the finally block either from the 
-     * end of the body block, or if an exception is thrown. *)
-  | TryFinally of block * block * location
-
-    (** On MSVC we support structured exception handling. The try/except 
-     * statement is a bit tricky: 
-         [__try { blk } 
-         __except (e) {
-            handler
-         }]
-
-         The argument to __except  must be an expression. However, we keep a 
-         list of instructions AND an expression in case you need to make 
-         function calls. We'll print those as a comma expression. The control 
-         can get to the __except expression only if an exception is thrown. 
-         After that, depending on the value of the expression the control 
-         goes to the handler, propagates the exception, or retries the 
-         exception !!!
-     *)      
-  | TryExcept of block * (instr list * exp) * block * location
-  
-
-(** {b Instructions}. 
- An instruction {!Cil.instr} is a statement that has no local
-(intraprocedural) control flow. It can be either an assignment,
-function call, or an inline assembly instruction. *)
-
-(** Instructions. *)
-and instr =
-    Set        of lval * exp * location  
-   (** An assignment. The type of the expression is guaranteed to be the same 
-    * with that of the lvalue *)
-  | Call       of lval option * exp * exp list * location
-   (** A function call with the (optional) result placed in an lval. It is 
-    * possible that the returned type of the function is not identical to 
-    * that of the lvalue. In that case a cast is printed. The type of the 
-    * actual arguments are identical to those of the declared formals. The 
-    * number of arguments is the same as that of the declared formals, except 
-    * for vararg functions. This construct is also used to encode a call to 
-    * "__builtin_va_arg". In this case the second argument (which should be a 
-    * type T) is encoded SizeOf(T) *)
-
-  | Asm        of attributes * (* Really only const and volatile can appear 
-                               * here *)
-                  string list *         (* templates (CR-separated) *)
-                  (string * lval) list * (* outputs must be lvals with 
-                                          * constraints. I would like these 
-                                          * to be actually variables, but I 
-                                          * run into some trouble with ASMs 
-                                          * in the Linux sources  *)
-                  (string * exp) list * (* inputs with constraints *)
-                  string list *         (* register clobbers *)
-                  location
-    (** There are for storing inline assembly. They follow the GCC 
-      * specification: 
-{v 
-  asm [volatile] ("...template..." "..template.."
-                  : "c1" (o1), "c2" (o2), ..., "cN" (oN)
-                  : "d1" (i1), "d2" (i2), ..., "dM" (iM)
-                  : "r1", "r2", ..., "nL" );
- v}
-
-where the parts are
-
-  - [volatile] (optional): when present, the assembler instruction
-    cannot be removed, moved, or otherwise optimized
-  - template: a sequence of strings, with %0, %1, %2, etc. in the string to 
-    refer to the input and output expressions. I think they're numbered
-    consecutively, but the docs don't specify. Each string is printed on 
-    a separate line. This is the only part that is present for MSVC inline
-    assembly.
-  - "ci" (oi): pairs of constraint-string and output-lval; the 
-    constraint specifies that the register used must have some
-    property, like being a floating-point register; the constraint
-    string for outputs also has "=" to indicate it is written, or
-    "+" to indicate it is both read and written; 'oi' is the
-    name of a C lvalue (probably a variable name) to be used as
-    the output destination
-  - "dj" (ij): pairs of constraint and input expression; the constraint
-    is similar to the "ci"s.  the 'ij' is an arbitrary C expression
-    to be loaded into the corresponding register
-  - "rk": registers to be regarded as "clobbered" by the instruction;
-    "memory" may be specified for arbitrary memory effects
-
-an example (from gcc manual):
-{v 
-  asm volatile ("movc3 %0,%1,%2"
-                : /* no outputs */
-                : "g" (from), "g" (to), "g" (count)
-                : "r0", "r1", "r2", "r3", "r4", "r5");
- v}
-*)
-
-(** Describes a location in a source file. *)
-and location = { 
-    line: int;		   (** The line number. -1 means "do not know" *)
-    file: string;          (** The name of the source file*)
-    byte: int;             (** The byte position in the source file *)
-}
-
-
-(** Type signatures. Two types are identical iff they have identical 
- * signatures. These contain the same information as types but canonicalized. 
- * For example, two function types that are identical except for the name of 
- * the formal arguments are given the same signature. Also, [TNamed] 
- * constructors are unrolled. *)
-and typsig = 
-    TSArray of typsig * int64 option * attribute list
-  | TSPtr of typsig * attribute list
-  | TSComp of bool * string * attribute list
-  | TSFun of typsig * typsig list * bool * attribute list
-  | TSEnum of string * attribute list
-  | TSBase of typ
-
-
-
-(** {b Lowering Options} *)
-
-val lowerConstants: bool ref
-    (** Do lower constants (default true) *)
-
-val insertImplicitCasts: bool ref
-    (** Do insert implicit casts (default true) *)
-
-(** To be able to add/remove features easily, each feature should be package 
-   * as an interface with the following interface. These features should be *)
-type featureDescr = {
-    fd_enabled: bool ref; 
-    (** The enable flag. Set to default value  *)
-
-    fd_name: string; 
-    (** This is used to construct an option "--doxxx" and "--dontxxx" that 
-     * enable and disable the feature  *)
-
-    fd_description: string; 
-    (* A longer name that can be used to document the new options  *)
-
-    fd_extraopt: (string * Arg.spec * string) list; 
-    (** Additional command line options *)
-
-    fd_doit: (file -> unit);
-    (** This performs the transformation *)
-
-    fd_post_check: bool; 
-    (* Whether to perform a CIL consistency checking after this stage, if 
-     * checking is enabled (--check is passed to cilly). Set this to true if 
-     * your feature makes any changes for the program. *)
-}
-
-(** Comparison function for locations.
- ** Compares first by filename, then line, then byte *)
-val compareLoc: location -> location -> int
-
-(** {b Values for manipulating globals} *)
-
-(** Make an empty function *)
-val emptyFunction: string -> fundec
-
-(** Update the formals of a [fundec] and make sure that the function type 
-    has the same information. Will copy the name as well into the type. *)
-val setFormals: fundec -> varinfo list -> unit
-
-(** Set the types of arguments and results as given by the function type 
- * passed as the second argument. Will not copy the names from the function 
- * type to the formals *)
-val setFunctionType: fundec -> typ -> unit
-
-
-(** Set the type of the function and make formal arguments for them *)
-val setFunctionTypeMakeFormals: fundec -> typ -> unit
-
-(** Update the smaxid after you have populated with locals and formals 
- * (unless you constructed those using {!Cil.makeLocalVar} or 
- * {!Cil.makeTempVar}. *)
-val setMaxId: fundec -> unit
-
-(** A dummy function declaration handy when you need one as a placeholder. It 
- * contains inside a dummy varinfo. *)
-val dummyFunDec: fundec
-
-(** A dummy file *)
-val dummyFile: file
-
-(** Write a {!Cil.file} in binary form to the filesystem. The file can be
- * read back in later using {!Cil.loadBinaryFile}, possibly saving parsing
- * time. The second argument is the name of the file that should be
- * created. *)
-val saveBinaryFile : file -> string -> unit
-
-(** Write a {!Cil.file} in binary form to the filesystem. The file can be
- * read back in later using {!Cil.loadBinaryFile}, possibly saving parsing
- * time. Does not close the channel. *)
-val saveBinaryFileChannel : file -> out_channel -> unit
-
-(** Read a {!Cil.file} in binary form from the filesystem. The first
- * argument is the name of a file previously created by
- * {!Cil.saveBinaryFile}. *)
-val loadBinaryFile : string -> file 
-
-(** Get the global initializer and create one if it does not already exist. 
- * When it creates a global initializer it attempts to place a call to it in 
- * the main function named by the optional argument (default "main")  *)
-val getGlobInit: ?main_name:string -> file -> fundec  
-
-(** Iterate over all globals, including the global initializer *)
-val iterGlobals: file -> (global -> unit) -> unit
-
-(** Fold over all globals, including the global initializer *)
-val foldGlobals: file -> ('a -> global -> 'a) -> 'a -> 'a
-
-(** Map over all globals, including the global initializer and change things 
-    in place *)
-val mapGlobals: file -> (global -> global) -> unit
-
-val new_sid : unit -> int
-
-(** Prepare a function for CFG information computation by
-  * {!Cil.computeCFGInfo}. This function converts all [Break], [Switch],
-  * [Default] and [Continue] {!Cil.stmtkind}s and {!Cil.label}s into [If]s
-  * and [Goto]s, giving the function body a very CFG-like character. This
-  * function modifies its argument in place. *)
-val prepareCFG: fundec -> unit
-
-(** Compute the CFG information for all statements in a fundec and return a 
-  * list of the statements. The input fundec cannot have [Break], [Switch], 
-  * [Default], or [Continue] {!Cil.stmtkind}s or {!Cil.label}s. Use
-  * {!Cil.prepareCFG} to transform them away.  The second argument should
-  * be [true] if you wish a global statement number, [false] if you wish a
-  * local (per-function) statement numbering. The list of statements is set 
-  * in the sallstmts field of a fundec. 
-  * 
-  * NOTE: unless you want the simpler control-flow graph provided by
-  * prepareCFG, or you need the function's smaxstmtid and sallstmt fields
-  * filled in, we recommend you use {!Cfg.computeFileCFG} instead of this
-  * function to compute control-flow information.
-  * {!Cfg.computeFileCFG} is newer and will handle switch, break, and
-  * continue correctly.*)
-val computeCFGInfo: fundec -> bool -> unit
-
-
-(** Create a deep copy of a function. There should be no sharing between the 
- * copy and the original function *)
-val copyFunction: fundec -> string -> fundec 
-
-
-(** CIL keeps the types at the beginning of the file and the variables at the 
- * end of the file. This function will take a global and add it to the 
- * corresponding stack. Its operation is actually more complicated because if 
- * the global declares a type that contains references to variables (e.g. in 
- * sizeof in an array length) then it will also add declarations for the 
- * variables to the types stack *)
-val pushGlobal: global -> types: global list ref 
-                       -> variables: global list ref -> unit
-
-(** An empty statement. Used in pretty printing *)
-val invalidStmt: stmt
-
-(** A list of the GCC built-in functions. Maps the name to the result and 
-  * argument types, and whether it is vararg *)
-val gccBuiltins: (string, typ * typ list * bool) Hashtbl.t
-
-
-(** A list of the MSVC built-in functions. Maps the name to the result and 
- * argument types, and whether it is vararg *)
-val msvcBuiltins: (string, typ * typ list * bool) Hashtbl.t
- 
-(** {b Values for manipulating initializers} *)
-
-
-(** Make a initializer for zero-ing a data type *)
-val makeZeroInit: typ -> init
-
-
-(** Fold over the list of initializers in a Compound. [doinit] is called on 
- * every present initializer, even if it is of compound type. In the case of 
- * arrays there might be missing zero-initializers at the end of the list. 
- * These are not scanned. This is much like [List.fold_left] except we also 
- * pass the type of the initializer *)
-val foldLeftCompound: 
-    doinit: (offset -> init -> typ -> 'a -> 'a) ->
-    ct: typ ->
-    initl: (offset * init) list ->
-    acc: 'a -> 'a
-
-
-(** Fold over the list of initializers in a Compound, like 
- * {!Cil.foldLeftCompound} but in the case of an array it scans even missing 
- * zero initializers at the end of the array *)
-val foldLeftCompoundAll: 
-    doinit: (offset -> init -> typ -> 'a -> 'a) ->
-    ct: typ ->
-    initl: (offset * init) list ->
-    acc: 'a -> 'a
-
-
-
-(** {b Values for manipulating types} *)
-
-(** void *)
-val voidType: typ
-
-(* is the given type "void"? *)
-val isVoidType: typ -> bool
-
-(* is the given type "void *"? *)
-val isVoidPtrType: typ -> bool
-
-(** int *)
-val intType: typ
-
-(** unsigned int *)
-val uintType: typ
-
-(** long *)
-val longType: typ
-
-(** unsigned long *)
-val ulongType: typ
-
-(** char *)
-val charType: typ
-
-(** char * *)
-val charPtrType: typ
-
-(** wchar_t (depends on architecture) and is set when you call 
- * {!Cil.initCIL}. *)
-val wcharKind: ikind ref
-val wcharType: typ ref 
-
-(** char const * *)
-val charConstPtrType: typ
-
-(** void * *)
-val voidPtrType: typ
-
-(** int * *)
-val intPtrType: typ
-
-(** unsigned int * *)
-val uintPtrType: typ
-
-(** double *)
-val doubleType: typ
-
-(* An unsigned integer type that fits pointers. Depends on {!Cil.msvcMode} 
- *  and is set when you call {!Cil.initCIL}. *)
-val upointType: typ ref
-
-(* An unsigned integer type that is the type of sizeof. Depends on 
- * {!Cil.msvcMode} and is set when you call {!Cil.initCIL}.  *)
-val typeOfSizeOf: typ ref
-
-(** Returns true if and only if the given integer type is signed. *)
-val isSigned: ikind -> bool
-
-
-(** Creates a a (potentially recursive) composite type. The arguments are: 
- * (1) a boolean indicating whether it is a struct or a union, (2) the name 
- * (always non-empty), (3) a function that when given a representation of the 
- * structure type constructs the type of the fields recursive type (the first 
- * argument is only useful when some fields need to refer to the type of the 
- * structure itself), and (4) a list of attributes to be associated with the 
- * composite type. The resulting compinfo has the field "cdefined" only if 
- * the list of fields is non-empty. *)
-val mkCompInfo: bool ->      (* whether it is a struct or a union *)
-               string ->     (* name of the composite type; cannot be empty *)
-               (compinfo -> 
-                  (string * typ * int option * attributes * location) list) ->
-               (* a function that when given a forward 
-                  representation of the structure type constructs the type of 
-                  the fields. The function can ignore this argument if not 
-                  constructing a recursive type.  *)
-               attributes -> compinfo
-
-(** Makes a shallow copy of a {!Cil.compinfo} changing the name and the key.*)
-val copyCompInfo: compinfo -> string -> compinfo
-
-(** This is a constant used as the name of an unnamed bitfield. These fields
-    do not participate in initialization and their name is not printed. *)
-val missingFieldName: string 
-
-(** Get the full name of a comp *)
-val compFullName: compinfo -> string
-
-(** Returns true if this is a complete type. 
-   This means that sizeof(t) makes sense. 
-   Incomplete types are not yet defined 
-   structures and empty arrays. *)
-val isCompleteType: typ -> bool  
-
-(** Unroll a type until it exposes a non 
- * [TNamed]. Will collect all attributes appearing in [TNamed]!!! *)
-val unrollType: typ -> typ  
-
-(** Unroll all the TNamed in a type (even under type constructors such as 
- * [TPtr], [TFun] or [TArray]. Does not unroll the types of fields in [TComp] 
- * types. Will collect all attributes *)
-val unrollTypeDeep: typ -> typ 
-
-(** Separate out the storage-modifier name attributes *)
-val separateStorageModifiers: attribute list -> attribute list * attribute list
-
-(** True if the argument is an integral type (i.e. integer or enum) *)
-val isIntegralType: typ -> bool
-
-(** True if the argument is an arithmetic type (i.e. integer, enum or 
-    floating point *)
-val isArithmeticType: typ -> bool
-
-(**True if the argument is a pointer type *)
-val isPointerType: typ -> bool
-
-(** True if the argument is a function type *)
-val isFunctionType: typ -> bool
-
-(** Obtain the argument list ([] if None) *)
-val argsToList: (string * typ * attributes) list option 
-                  -> (string * typ * attributes) list
-
-(** True if the argument is an array type *)
-val isArrayType: typ -> bool
-
-(** Raised when {!Cil.lenOfArray} fails either because the length is [None] 
-  * or because it is a non-constant expression *)
-exception LenOfArray
-
-(** Call to compute the array length as present in the array type, to an 
-  * integer. Raises {!Cil.LenOfArray} if not able to compute the length, such 
-  * as when there is no length or the length is not a constant. *)
-val lenOfArray: exp option -> int
-
-(** Return a named fieldinfo in compinfo, or raise Not_found *)
-val getCompField: compinfo -> string -> fieldinfo
-
-
-(** A datatype to be used in conjunction with [existsType] *)
-type existsAction = 
-    ExistsTrue                          (* We have found it *)
-  | ExistsFalse                         (* Stop processing this branch *)
-  | ExistsMaybe                         (* This node is not what we are 
-                                         * looking for but maybe its 
-                                         * successors are *)
-
-(** Scans a type by applying the function on all elements. 
-    When the function returns ExistsTrue, the scan stops with
-    true. When the function returns ExistsFalse then the current branch is not
-    scanned anymore. Care is taken to 
-    apply the function only once on each composite type, thus avoiding 
-    circularity. When the function returns ExistsMaybe then the types that 
-    construct the current type are scanned (e.g. the base type for TPtr and 
-    TArray, the type of fields for a TComp, etc). *)
-val existsType: (typ -> existsAction) -> typ -> bool
-
-
-(** Given a function type split it into return type, 
- * arguments, is_vararg and attributes. An error is raised if the type is not 
- * a function type *)
-val splitFunctionType: 
-    typ -> typ * (string * typ * attributes) list option * bool * attributes
-(** Same as {!Cil.splitFunctionType} but takes a varinfo. Prints a nicer 
- * error message if the varinfo is not for a function *)
-val splitFunctionTypeVI: 
-    varinfo -> typ * (string * typ * attributes) list option * bool * attributes
-
-
-(** {b Type signatures} *)
-
-(** Type signatures. Two types are identical iff they have identical 
- * signatures. These contain the same information as types but canonicalized. 
- * For example, two function types that are identical except for the name of 
- * the formal arguments are given the same signature. Also, [TNamed] 
- * constructors are unrolled. You shoud use [Util.equals] to compare type 
- * signatures because they might still contain circular structures (through 
- * attributes, and sizeof) *)
-
-(** Print a type signature *)
-val d_typsig: unit -> typsig -> Pretty.doc
-
-(** Compute a type signature *)
-val typeSig: typ -> typsig
-
-(** Like {!Cil.typeSig} but customize the incorporation of attributes.
-    Use ~ignoreSign:true to convert all signed integer types to unsigned,
-    so that signed and unsigned will compare the same. *)
-val typeSigWithAttrs: ?ignoreSign:bool -> (attributes -> attributes) -> typ -> typsig
-
-(** Replace the attributes of a signature (only at top level) *)
-val setTypeSigAttrs: attributes -> typsig -> typsig 
-
-(** Get the top-level attributes of a signature *)
-val typeSigAttrs: typsig -> attributes
-
-(*********************************************************)
-(**  LVALUES *)
-
-(** Make a varinfo. Use this (rarely) to make a raw varinfo. Use other 
- * functions to make locals ({!Cil.makeLocalVar} or {!Cil.makeFormalVar} or 
- * {!Cil.makeTempVar}) and globals ({!Cil.makeGlobalVar}). Note that this 
- * function will assign a new identifier. The first argument specifies 
- * whether the varinfo is for a global. *)
-val makeVarinfo: bool -> string -> typ -> varinfo
-
-(** Make a formal variable for a function. Insert it in both the sformals 
-    and the type of the function. You can optionally specify where to insert 
-    this one. If where = "^" then it is inserted first. If where = "$" then 
-    it is inserted last. Otherwise where must be the name of a formal after 
-    which to insert this. By default it is inserted at the end. *)
-val makeFormalVar: fundec -> ?where:string -> string -> typ -> varinfo
-
-(** Make a local variable and add it to a function's slocals (only if insert = 
-    true, which is the default). Make sure you know what you are doing if you 
-    set insert=false.  *)
-val makeLocalVar: fundec -> ?insert:bool -> string -> typ -> varinfo
-
-(** Make a temporary variable and add it to a function's slocals. The name of 
-    the temporary variable will be generated based on the given name hint so 
-    that to avoid conflicts with other locals.  *)
-val makeTempVar: fundec -> ?name: string -> typ -> varinfo
-
-
-(** Make a global variable. Your responsibility to make sure that the name 
-    is unique *) 
-val makeGlobalVar: string -> typ -> varinfo
-
-(** Make a shallow copy of a [varinfo] and assign a new identifier *)
-val copyVarinfo: varinfo -> string -> varinfo
-
-
-(** Generate a new variable ID. This will be different than any variable ID 
- * that is generated by {!Cil.makeLocalVar} and friends *)
-val newVID: unit -> int
-
-(** Add an offset at the end of an lvalue. Make sure the type of the lvalue 
- * and the offset are compatible. *)
-val addOffsetLval: offset -> lval -> lval 
-
-(** [addOffset o1 o2] adds [o1] to the end of [o2]. *)
-val addOffset:     offset -> offset -> offset
-
-(** Remove ONE offset from the end of an lvalue. Returns the lvalue with the 
- * trimmed offset and the final offset. If the final offset is [NoOffset] 
- * then the original [lval] did not have an offset. *)
-val removeOffsetLval: lval -> lval * offset
-
-(** Remove ONE offset from the end of an offset sequence. Returns the 
- * trimmed offset and the final offset. If the final offset is [NoOffset] 
- * then the original [lval] did not have an offset. *)
-val removeOffset:   offset -> offset * offset
-
-(** Compute the type of an lvalue *)
-val typeOfLval: lval -> typ
-
-(** Compute the type of an offset from a base type *)
-val typeOffset: typ -> offset -> typ 
-
-
-(*******************************************************)
-(** {b Values for manipulating expressions} *)
-
-
-(* Construct integer constants *)
-
-(** 0 *)
-val zero: exp
-
-(** 1 *)
-val one: exp
-
-(** -1 *)
-val mone: exp
-
-
-(** Construct an integer of a given kind, using OCaml's int64 type. If needed 
-  * it will truncate the integer to be within the representable range for the 
-  * given kind. *)
-val kinteger64: ikind -> int64 -> exp
-
-(** Construct an integer of a given kind. Converts the integer to int64 and 
-  * then uses kinteger64. This might truncate the value if you use a kind 
-  * that cannot represent the given integer. This can only happen for one of 
-  * the Char or Short kinds *)
-val kinteger: ikind -> int -> exp
-
-(** Construct an integer of kind IInt. You can use this always since the 
-    OCaml integers are 31 bits and are guaranteed to fit in an IInt *)
-val integer: int -> exp
-
-
-(** True if the given expression is a (possibly cast'ed) 
-    character or an integer constant *)
-val isInteger: exp -> int64 option
-
-(** True if the expression is a compile-time constant *)
-val isConstant: exp -> bool
-
-(** True if the given expression is a (possibly cast'ed) integer or character 
-    constant with value zero *)
-val isZero: exp -> bool
-
-(** Given the character c in a (CChr c), sign-extend it to 32 bits.
-  (This is the official way of interpreting character constants, according to
-  ISO C 6.4.4.4.10, which says that character constants are chars cast to ints)
-  Returns CInt64(sign-extened c, IInt, None) *)
-val charConstToInt: char -> constant
-
-(** Do constant folding on an expression. If the first argument is true then 
-    will also compute compiler-dependent expressions such as sizeof *)    
-val constFold: bool -> exp -> exp
-
-(** Do constant folding on a binary operation. The bulk of the work done by 
-    [constFold] is done here. If the first argument is true then 
-    will also compute compiler-dependent expressions such as sizeof *)
-val constFoldBinOp: bool -> binop -> exp -> exp -> typ -> exp
-
-(** Increment an expression. Can be arithmetic or pointer type *) 
-val increm: exp -> int -> exp
-
-
-(** Makes an lvalue out of a given variable *)
-val var: varinfo -> lval
-
-(** Make an AddrOf. Given an lvalue of type T will give back an expression of 
-    type ptr(T). It optimizes somewhat expressions like "& v" and "& v[0]"  *)
-val mkAddrOf: lval -> exp               
-
-
-(** Like mkAddrOf except if the type of lval is an array then it uses 
-    StartOf. This is the right operation for getting a pointer to the start 
-    of the storage denoted by lval. *)
-val mkAddrOrStartOf: lval -> exp
-
-(** Make a Mem, while optimizing AddrOf. The type of the addr must be 
-    TPtr(t) and the type of the resulting lval is t. Note that in CIL the 
-    implicit conversion between an array and the pointer to the first 
-    element does not apply. You must do the conversion yourself using 
-    StartOf *)
-val mkMem: addr:exp -> off:offset -> lval
-
-(** Make an expression that is a string constant (of pointer type) *)
-val mkString: string -> exp
-
-(** Construct a cast when having the old type of the expression. If the new 
-  * type is the same as the old type, then no cast is added. *)
-val mkCastT: e:exp -> oldt:typ -> newt:typ -> exp
-
-(** Like {!Cil.mkCastT} but uses typeOf to get [oldt] *)  
-val mkCast: e:exp -> newt:typ -> exp 
-
-(** Removes casts from this expression, but ignores casts within
-  other expression constructs.  So we delete the (A) and (B) casts from 
-  "(A)(B)(x + (C)y)", but leave the (C) cast. *)
-val stripCasts: exp -> exp
-
-(** Compute the type of an expression *)
-val typeOf: exp -> typ
-
-(** Convert a string representing a C integer literal to an expression. 
- * Handles the prefixes 0x and 0 and the suffixes L, U, UL, LL, ULL *)
-val parseInt: string -> exp
-
-
-(**********************************************)
-(** {b Values for manipulating statements} *)
-
-(** Construct a statement, given its kind. Initialize the [sid] field to -1,
-    and [labels], [succs] and [preds] to the empty list *)
-val mkStmt: stmtkind -> stmt
-
-(** Construct a block with no attributes, given a list of statements *)
-val mkBlock: stmt list -> block
-
-(** Construct a statement consisting of just one instruction *)
-val mkStmtOneInstr: instr -> stmt
-
-(** Try to compress statements so as to get maximal basic blocks *)
-(* use this instead of List.@ because you get fewer basic blocks *)
-val compactStmts: stmt list -> stmt list
-
-(** Returns an empty statement (of kind [Instr]) *)
-val mkEmptyStmt: unit -> stmt
-
-(** A instr to serve as a placeholder *)
-val dummyInstr: instr
-
-(** A statement consisting of just [dummyInstr] *)
-val dummyStmt: stmt
-
-(** Make a while loop. Can contain Break or Continue *)
-val mkWhile: guard:exp -> body:stmt list -> stmt list
-
-(** Make a for loop for(i=start; i<past; i += incr) \{ ... \}. The body 
-    can contain Break but not Continue. Can be used with i a pointer 
-    or an integer. Start and done must have the same type but incr 
-    must be an integer *)
-val mkForIncr:  iter:varinfo -> first:exp -> stopat:exp -> incr:exp 
-                 -> body:stmt list -> stmt list
-
-(** Make a for loop for(start; guard; next) \{ ... \}. The body can 
-    contain Break but not Continue !!! *) 
-val mkFor: start:stmt list -> guard:exp -> next: stmt list -> 
-                                       body: stmt list -> stmt list
- 
-
-
-(**************************************************)
-(** {b Values for manipulating attributes} *)
-
-(** Various classes of attributes *)
-type attributeClass = 
-    AttrName of bool 
-        (** Attribute of a name. If argument is true and we are on MSVC then 
-            the attribute is printed using __declspec as part of the storage 
-            specifier  *)
-  | AttrFunType of bool 
-        (** Attribute of a function type. If argument is true and we are on 
-            MSVC then the attribute is printed just before the function name *)
-  | AttrType  (** Attribute of a type *)
-
-(** This table contains the mapping of predefined attributes to classes. 
-    Extend this table with more attributes as you need. This table is used to 
-    determine how to associate attributes with names or types *)
-val attributeHash: (string, attributeClass) Hashtbl.t
-
-(** Partition the attributes into classes:name attributes, function type, 
-    and type attributes *)
-val partitionAttributes:  default:attributeClass -> 
-                         attributes -> attribute list * (* AttrName *)
-                                       attribute list * (* AttrFunType *)
-                                           attribute list   (* AttrType *)
-
-(** Add an attribute. Maintains the attributes in sorted order of the second 
-    argument *)
-val addAttribute: attribute -> attributes -> attributes
-    
-(** Add a list of attributes. Maintains the attributes in sorted order. The 
-    second argument must be sorted, but not necessarily the first *)
-val addAttributes: attribute list -> attributes -> attributes
-
-(** Remove all attributes with the given name. Maintains the attributes in 
-    sorted order.  *)
-val dropAttribute: string -> attributes -> attributes
-
-(** Remove all attributes with names appearing in the string list.
- *  Maintains the attributes in sorted order *)
-val dropAttributes: string list -> attributes -> attributes
-
-(** Retains attributes with the given name *)
-val filterAttributes: string -> attributes -> attributes
-
-(** True if the named attribute appears in the attribute list. The list of
-    attributes must be sorted.  *)
-val hasAttribute: string -> attributes -> bool
-
-(** Returns all the attributes contained in a type. This requires a traversal 
-    of the type structure, in case of composite, enumeration and named types *)
-val typeAttrs: typ -> attribute list
-
-val setTypeAttrs: typ -> attributes -> typ (* Resets the attributes *)
-
-
-(** Add some attributes to a type *)
-val typeAddAttributes: attribute list -> typ -> typ
-
-(** Remove all attributes with the given names from a type. Note that this
-    does not remove attributes from typedef and tag definitions, just from 
-    their uses *)
-val typeRemoveAttributes: string list -> typ -> typ
-
-
-(******************
- ******************  VISITOR
- ******************)
-(** {b The visitor} *)
-
-(** Different visiting actions. 'a will be instantiated with [exp], [instr],
-    etc. *)
-type 'a visitAction = 
-    SkipChildren                        (** Do not visit the children. Return 
-                                            the node as it is. *)
-  | DoChildren                          (** Continue with the children of this 
-                                            node. Rebuild the node on return 
-                                            if any of the children changes 
-                                            (use == test) *)
-  | ChangeTo of 'a                      (** Replace the expression with the 
-                                            given one *)
-  | ChangeDoChildrenPost of 'a * ('a -> 'a) (** First consider that the entire 
-                                           exp is replaced by the first 
-                                           parameter. Then continue with 
-                                           the children. On return rebuild 
-                                           the node if any of the children 
-                                           has changed and then apply the 
-                                           function on the node *)
-
-
-
-(** A visitor interface for traversing CIL trees. Create instantiations of 
- * this type by specializing the class {!Cil.nopCilVisitor}. Each of the 
- * specialized visiting functions can also call the [queueInstr] to specify 
- * that some instructions should be inserted before the current instruction 
- * or statement. Use syntax like [self#queueInstr] to call a method
- * associated with the current object. *)
-class type cilVisitor = object
-  method vvdec: varinfo -> varinfo visitAction  
-    (** Invoked for each variable declaration. The subtrees to be traversed 
-     * are those corresponding to the type and attributes of the variable. 
-     * Note that variable declarations are all the [GVar], [GVarDecl], [GFun], 
-     * all the [varinfo] in formals of function types, and the formals and 
-     * locals for function definitions. This means that the list of formals 
-     * in a function definition will be traversed twice, once as part of the 
-     * function type and second as part of the formals in a function 
-     * definition. *)
-
-  method vvrbl: varinfo -> varinfo visitAction  
-    (** Invoked on each variable use. Here only the [SkipChildren] and 
-     * [ChangeTo] actions make sense since there are no subtrees. Note that 
-     * the type and attributes of the variable are not traversed for a 
-     * variable use *)
-
-  method vexpr: exp -> exp visitAction          
-    (** Invoked on each expression occurrence. The subtrees are the 
-     * subexpressions, the types (for a [Cast] or [SizeOf] expression) or the 
-     * variable use. *)
-
-  method vlval: lval -> lval visitAction        
-    (** Invoked on each lvalue occurrence *)
-
-  method voffs: offset -> offset visitAction    
-    (** Invoked on each offset occurrence that is *not* as part
-      * of an initializer list specification, i.e. in an lval or
-      * recursively inside an offset. *)
-
-  method vinitoffs: offset -> offset visitAction
-    (** Invoked on each offset appearing in the list of a 
-      * CompoundInit initializer.  *)
-
-  method vinst: instr -> instr list visitAction
-    (** Invoked on each instruction occurrence. The [ChangeTo] action can
-     * replace this instruction with a list of instructions *)
-
-  method vstmt: stmt -> stmt visitAction        
-    (** Control-flow statement. The default [DoChildren] action does not 
-     * create a new statement when the components change. Instead it updates 
-     * the contents of the original statement. This is done to preserve the 
-     * sharing with [Goto] and [Case] statements that point to the original 
-     * statement. If you use the [ChangeTo] action then you should take care 
-     * of preserving that sharing yourself.  *)
-
-  method vblock: block -> block visitAction     (** Block. *)
-  method vfunc: fundec -> fundec visitAction    (** Function definition. 
-                                                    Replaced in place. *)
-  method vglob: global -> global list visitAction (** Global (vars, types,
-                                                      etc.)  *)
-  method vinit: init -> init visitAction        (** Initializers for globals *)
-  method vtype: typ -> typ visitAction          (** Use of some type. Note 
-                                                 * that for structure/union 
-                                                 * and enumeration types the 
-                                                 * definition of the 
-                                                 * composite type is not 
-                                                 * visited. Use [vglob] to 
-                                                 * visit it.  *)
-  method vattr: attribute -> attribute list visitAction 
-    (** Attribute. Each attribute can be replaced by a list *)
-  method vattrparam: attrparam -> attrparam visitAction 
-    (** Attribute parameters. *)
-
-    (** Add here instructions while visiting to queue them to preceede the 
-     * current statement or instruction being processed. Use this method only 
-     * when you are visiting an expression that is inside a function body, or 
-     * a statement, because otherwise there will no place for the visitor to 
-     * place your instructions. *)
-  method queueInstr: instr list -> unit
-
-    (** Gets the queue of instructions and resets the queue. This is done 
-     * automatically for you when you visit statments. *)
-  method unqueueInstr: unit -> instr list
-
-end
-
-(** Default Visitor. Traverses the CIL tree without modifying anything *)
-class nopCilVisitor: cilVisitor
-
-(* other cil constructs *)
-
-(** Visit a file. This will will re-cons all globals TWICE (so that it is 
- * tail-recursive). Use {!Cil.visitCilFileSameGlobals} if your visitor will 
- * not change the list of globals.  *)
-val visitCilFile: cilVisitor -> file -> unit
-
-(** A visitor for the whole file that does not change the globals (but maybe
- * changes things inside the globals). Use this function instead of
- * {!Cil.visitCilFile} whenever appropriate because it is more efficient for
- * long files. *)
-val visitCilFileSameGlobals: cilVisitor -> file -> unit
-
-(** Visit a global *)
-val visitCilGlobal: cilVisitor -> global -> global list
-
-(** Visit a function definition *)
-val visitCilFunction: cilVisitor -> fundec -> fundec
-
-(* Visit an expression *)
-val visitCilExpr: cilVisitor -> exp -> exp
-
-(** Visit an lvalue *)
-val visitCilLval: cilVisitor -> lval -> lval
-
-(** Visit an lvalue or recursive offset *)
-val visitCilOffset: cilVisitor -> offset -> offset
-
-(** Visit an initializer offset *)
-val visitCilInitOffset: cilVisitor -> offset -> offset
-
-(** Visit an instruction *)
-val visitCilInstr: cilVisitor -> instr -> instr list
-
-(** Visit a statement *)
-val visitCilStmt: cilVisitor -> stmt -> stmt
-
-(** Visit a block *)
-val visitCilBlock: cilVisitor -> block -> block
-
-(** Visit a type *)
-val visitCilType: cilVisitor -> typ -> typ
-
-(** Visit a variable declaration *)
-val visitCilVarDecl: cilVisitor -> varinfo -> varinfo
-
-(** Visit an initializer *)
-val visitCilInit: cilVisitor -> init -> init
-
-
-(** Visit a list of attributes *)
-val visitCilAttributes: cilVisitor -> attribute list -> attribute list
-
-(* And some generic visitors. The above are built with these *)
-
-
-(** {b Utility functions} *)
-
-(** Whether the pretty printer should print output for the MS VC compiler.
-   Default is GCC. After you set this function you should call {!Cil.initCIL}. *)
-val msvcMode: bool ref               
-
-
-(** Whether to use the logical operands LAnd and LOr. By default, do not use 
- * them because they are unlike other expressions and do not evaluate both of 
- * their operands *)
-val useLogicalOperators: bool ref
-
-
-(** A visitor that does constant folding. Pass as argument whether you want 
- * machine specific simplifications to be done, or not. *)
-val constFoldVisitor: bool -> cilVisitor
-
-(** Styles of printing line directives *)
-type lineDirectiveStyle =
-  | LineComment
-  | LinePreprocessorInput
-  | LinePreprocessorOutput
-
-(** How to print line directives *)
-val lineDirectiveStyle: lineDirectiveStyle option ref
-
-(** Whether we print something that will only be used as input to our own 
- * parser. In that case we are a bit more liberal in what we print *)
-val print_CIL_Input: bool ref
-
-(** Whether to print the CIL as they are, without trying to be smart and 
-  * print nicer code. Normally this is false, in which case the pretty 
-  * printer will turn the while(1) loops of CIL into nicer loops, will not 
-  * print empty "else" blocks, etc. These is one case howewer in which if you 
-  * turn this on you will get code that does not compile: if you use varargs 
-  * the __builtin_va_arg function will be printed in its internal form. *)
-val printCilAsIs: bool ref
-
-(** The length used when wrapping output lines.  Setting this variable to
-  * a large integer will prevent wrapping and make #line directives more
-  * accurate.
-  *)
-val lineLength: int ref
-
-(** Return the string 's' if we're printing output for gcc, suppres
- *  it if we're printing for CIL to parse back in.  the purpose is to
- *  hide things from gcc that it complains about, but still be able
- *  to do lossless transformations when CIL is the consumer *)
-val forgcc: string -> string
-
-(** {b Debugging support} *)
-
-(** A reference to the current location. If you are careful to set this to 
- * the current location then you can use some built-in logging functions that 
- * will print the location. *)
-val currentLoc: location ref
-
-(** A reference to the current global being visited *)
-val currentGlobal: global ref 
-
-
-(** CIL has a fairly easy to use mechanism for printing error messages. This 
- * mechanism is built on top of the pretty-printer mechanism (see 
- * {!Pretty.doc}) and the error-message modules (see {!Errormsg.error}). 
-
- Here is a typical example for printing a log message: {v 
-ignore (Errormsg.log "Expression %a is not positive (at %s:%i)\n"
-                        d_exp e loc.file loc.line)
- v}
-
- and here is an example of how you print a fatal error message that stop the 
-* execution: {v 
-Errormsg.s (Errormsg.bug "Why am I here?")
- v}
-
- Notice that you can use C format strings with some extension. The most 
-useful extension is "%a" that means to consumer the next two argument from 
-the argument list and to apply the first to [unit] and then to the second 
-and to print the resulting {!Pretty.doc}. For each major type in CIL there is 
-a corresponding function that pretty-prints an element of that type:
-*)
-
-
-(** Pretty-print a location *)
-val d_loc: unit -> location -> Pretty.doc
-
-(** Pretty-print the {!Cil.currentLoc} *)
-val d_thisloc: unit -> Pretty.doc
-
-(** Pretty-print an integer of a given kind *)
-val d_ikind: unit -> ikind -> Pretty.doc
-
-(** Pretty-print a floating-point kind *)
-val d_fkind: unit -> fkind -> Pretty.doc
-
-(** Pretty-print storage-class information *)
-val d_storage: unit -> storage -> Pretty.doc
-
-(** Pretty-print a constant *)
-val d_const: unit -> constant -> Pretty.doc
-
-
-val derefStarLevel: int
-val indexLevel: int
-val arrowLevel: int
-val addrOfLevel: int
-val additiveLevel: int
-val comparativeLevel: int
-val bitwiseLevel: int
-
-(** Parentheses level. An expression "a op b" is printed parenthesized if its 
- * parentheses level is >= that that of its context. Identifiers have the 
- * lowest level and weakly binding operators (e.g. |) have the largest level. 
- * The correctness criterion is that a smaller level MUST correspond to a 
- * stronger precedence!
- *)
-val getParenthLevel: exp -> int
-
-(** A printer interface for CIL trees. Create instantiations of 
- * this type by specializing the class {!Cil.defaultCilPrinterClass}. *)
-class type cilPrinter = object
-  method pVDecl: unit -> varinfo -> Pretty.doc
-    (** Invoked for each variable declaration. Note that variable 
-     * declarations are all the [GVar], [GVarDecl], [GFun], all the [varinfo] 
-     * in formals of function types, and the formals and locals for function 
-     * definitions. *)
-
-  method pVar: varinfo -> Pretty.doc
-    (** Invoked on each variable use. *)
-
-  method pLval: unit -> lval -> Pretty.doc
-    (** Invoked on each lvalue occurrence *)
-
-  method pOffset: Pretty.doc -> offset -> Pretty.doc
-    (** Invoked on each offset occurrence. The second argument is the base. *)
-
-  method pInstr: unit -> instr -> Pretty.doc
-    (** Invoked on each instruction occurrence. *)
-
-  method pLabel: unit -> label -> Pretty.doc
-    (** Print a label. *)
-
-  method pStmt: unit -> stmt -> Pretty.doc
-    (** Control-flow statement. This is used by 
-     * {!Cil.printGlobal} and by {!Cil.dumpGlobal}. *)
-
-  method dStmt: out_channel -> int -> stmt -> unit
-    (** Dump a control-flow statement to a file with a given indentation. 
-     * This is used by {!Cil.dumpGlobal}. *)
-
-  method dBlock: out_channel -> int -> block -> unit
-    (** Dump a control-flow block to a file with a given indentation. 
-     * This is used by {!Cil.dumpGlobal}. *)
-
-  method pBlock: unit -> block -> Pretty.doc
-
-  method pBlock: unit -> block -> Pretty.doc
-    (** Print a block. *)
-
-  method pGlobal: unit -> global -> Pretty.doc
-    (** Global (vars, types, etc.). This can be slow and is used only by 
-     * {!Cil.printGlobal} but not by {!Cil.dumpGlobal}. *)
-
-  method dGlobal: out_channel -> global -> unit
-    (** Dump a global to a file with a given indentation. This is used by 
-     * {!Cil.dumpGlobal} *)
-
-  method pFieldDecl: unit -> fieldinfo -> Pretty.doc
-    (** A field declaration *)
-
-  method pType: Pretty.doc option -> unit -> typ -> Pretty.doc  
-  (* Use of some type in some declaration. The first argument is used to print 
-   * the declared element, or is None if we are just printing a type with no 
-   * name being declared. Note that for structure/union and enumeration types 
-   * the definition of the composite type is not visited. Use [vglob] to 
-   * visit it.  *)
-
-  method pAttr: attribute -> Pretty.doc * bool
-    (** Attribute. Also return an indication whether this attribute must be 
-      * printed inside the __attribute__ list or not. *)
-   
-  method pAttrParam: unit -> attrparam -> Pretty.doc 
-    (** Attribute parameter *)
-   
-  method pAttrs: unit -> attributes -> Pretty.doc
-    (** Attribute lists *)
-
-  method pLineDirective: ?forcefile:bool -> location -> Pretty.doc
-    (** Print a line-number. This is assumed to come always on an empty line. 
-     * If the forcefile argument is present and is true then the file name 
-     * will be printed always. Otherwise the file name is printed only if it 
-     * is different from the last time time this function is called. The last 
-     * file name is stored in a private field inside the cilPrinter object. *)
-
-  method pStmtKind: stmt -> unit -> stmtkind -> Pretty.doc
-    (** Print a statement kind. The code to be printed is given in the
-     * {!Cil.stmtkind} argument.  The initial {!Cil.stmt} argument
-     * records the statement which follows the one being printed;
-     * {!Cil.defaultCilPrinterClass} uses this information to prettify
-     * statement printing in certain special cases. *)
-
-  method pExp: unit -> exp -> Pretty.doc
-    (** Print expressions *) 
-
-  method pInit: unit -> init -> Pretty.doc
-    (** Print initializers. This can be slow and is used by 
-     * {!Cil.printGlobal} but not by {!Cil.dumpGlobal}. *)
-
-  method dInit: out_channel -> int -> init -> unit
-    (** Dump a global to a file with a given indentation. This is used by 
-     * {!Cil.dumpGlobal} *)
-end
-
-class defaultCilPrinterClass: cilPrinter
-val defaultCilPrinter: cilPrinter
-
-(** These are pretty-printers that will show you more details on the internal 
- * CIL representation, without trying hard to make it look like C *)
-class plainCilPrinterClass: cilPrinter
-val plainCilPrinter: cilPrinter
-
-(* zra: This is the pretty printer that Maincil will use.
-   by default it is set to defaultCilPrinter *)
-val printerForMaincil: cilPrinter ref
-
-(* Top-level printing functions *)
-(** Print a type given a pretty printer *)
-val printType: cilPrinter -> unit -> typ -> Pretty.doc
-  
-(** Print an expression given a pretty printer *)
-val printExp: cilPrinter -> unit -> exp -> Pretty.doc
-
-(** Print an lvalue given a pretty printer *)
-val printLval: cilPrinter -> unit -> lval -> Pretty.doc
-
-(** Print a global given a pretty printer *)
-val printGlobal: cilPrinter -> unit -> global -> Pretty.doc 
-
-(** Print an attribute given a pretty printer *)
-val printAttr: cilPrinter -> unit -> attribute -> Pretty.doc 
-
-(** Print a set of attributes given a pretty printer *)
-val printAttrs: cilPrinter -> unit -> attributes -> Pretty.doc 
-
-(** Print an instruction given a pretty printer *)
-val printInstr: cilPrinter -> unit -> instr -> Pretty.doc 
-
-(** Print a statement given a pretty printer. This can take very long 
- * (or even overflow the stack) for huge statements. Use {!Cil.dumpStmt} 
- * instead. *)
-val printStmt: cilPrinter -> unit -> stmt -> Pretty.doc
-
-(** Print a block given a pretty printer. This can take very long 
- * (or even overflow the stack) for huge block. Use {!Cil.dumpBlock} 
- * instead. *)
-val printBlock: cilPrinter -> unit -> block -> Pretty.doc
-
-(** Dump a statement to a file using a given indentation. Use this instead of 
- * {!Cil.printStmt} whenever possible. *)
-val dumpStmt: cilPrinter -> out_channel -> int -> stmt -> unit
-
-(** Dump a block to a file using a given indentation. Use this instead of 
- * {!Cil.printBlock} whenever possible. *)
-val dumpBlock: cilPrinter -> out_channel -> int -> block -> unit
-
-(** Print an initializer given a pretty printer. This can take very long 
- * (or even overflow the stack) for huge initializers. Use {!Cil.dumpInit} 
- * instead. *)
-val printInit: cilPrinter -> unit -> init -> Pretty.doc 
-
-(** Dump an initializer to a file using a given indentation. Use this instead of 
- * {!Cil.printInit} whenever possible. *)
-val dumpInit: cilPrinter -> out_channel -> int -> init -> unit
-
-(** Pretty-print a type using {!Cil.defaultCilPrinter} *)
-val d_type: unit -> typ -> Pretty.doc
-
-(** Pretty-print an expression using {!Cil.defaultCilPrinter}  *)
-val d_exp: unit -> exp -> Pretty.doc
-
-(** Pretty-print an lvalue using {!Cil.defaultCilPrinter}   *)
-val d_lval: unit -> lval -> Pretty.doc
-
-(** Pretty-print an offset using {!Cil.defaultCilPrinter}, given the pretty 
- * printing for the base.   *)
-val d_offset: Pretty.doc -> unit -> offset -> Pretty.doc
-
-(** Pretty-print an initializer using {!Cil.defaultCilPrinter}.  This can be 
- * extremely slow (or even overflow the stack) for huge initializers. Use 
- * {!Cil.dumpInit} instead. *)
-val d_init: unit -> init -> Pretty.doc
-
-(** Pretty-print a binary operator *)
-val d_binop: unit -> binop -> Pretty.doc
-
-(** Pretty-print a unary operator *)
-val d_unop: unit -> unop -> Pretty.doc
-
-(** Pretty-print an attribute using {!Cil.defaultCilPrinter}  *)
-val d_attr: unit -> attribute -> Pretty.doc
-
-(** Pretty-print an argument of an attribute using {!Cil.defaultCilPrinter}  *)
-val d_attrparam: unit -> attrparam -> Pretty.doc
-
-(** Pretty-print a list of attributes using {!Cil.defaultCilPrinter}  *)
-val d_attrlist: unit -> attributes -> Pretty.doc 
-
-(** Pretty-print an instruction using {!Cil.defaultCilPrinter}   *)
-val d_instr: unit -> instr -> Pretty.doc
-
-(** Pretty-print a label using {!Cil.defaultCilPrinter} *)
-val d_label: unit -> label -> Pretty.doc
-
-(** Pretty-print a statement using {!Cil.defaultCilPrinter}. This can be 
- * extremely slow (or even overflow the stack) for huge statements. Use 
- * {!Cil.dumpStmt} instead. *)
-val d_stmt: unit -> stmt -> Pretty.doc
-
-(** Pretty-print a block using {!Cil.defaultCilPrinter}. This can be 
- * extremely slow (or even overflow the stack) for huge blocks. Use 
- * {!Cil.dumpBlock} instead. *)
-val d_block: unit -> block -> Pretty.doc
-
-(** Pretty-print the internal representation of a global using 
- * {!Cil.defaultCilPrinter}. This can be extremely slow (or even overflow the 
- * stack) for huge globals (such as arrays with lots of initializers). Use 
- * {!Cil.dumpGlobal} instead. *)
-val d_global: unit -> global -> Pretty.doc
-
-
-(** Versions of the above pretty printers, that don't print #line directives *)
-val dn_exp       : unit -> exp -> Pretty.doc
-val dn_lval      : unit -> lval -> Pretty.doc
-(* dn_offset is missing because it has a different interface *)
-val dn_init      : unit -> init -> Pretty.doc
-val dn_type      : unit -> typ -> Pretty.doc
-val dn_global    : unit -> global -> Pretty.doc
-val dn_attrlist  : unit -> attributes -> Pretty.doc
-val dn_attr      : unit -> attribute -> Pretty.doc
-val dn_attrparam : unit -> attrparam -> Pretty.doc
-val dn_stmt      : unit -> stmt -> Pretty.doc
-val dn_instr     : unit -> instr -> Pretty.doc
-
-
-(** Pretty-print a short description of the global. This is useful for error 
- * messages *)
-val d_shortglobal: unit -> global -> Pretty.doc
-
-(** Pretty-print a global. Here you give the channel where the printout
- * should be sent. *)
-val dumpGlobal: cilPrinter -> out_channel -> global -> unit
-
-(** Pretty-print an entire file. Here you give the channel where the printout
- * should be sent. *)
-val dumpFile: cilPrinter -> out_channel -> string -> file -> unit
-
-
-(* the following error message producing functions also print a location in 
- * the code. use {!Errormsg.bug} and {!Errormsg.unimp} if you do not want 
- * that *)
-
-(** Like {!Errormsg.bug} except that {!Cil.currentLoc} is also printed *)
-val bug: ('a,unit,Pretty.doc) format -> 'a
-
-(** Like {!Errormsg.unimp} except that {!Cil.currentLoc}is also printed *)
-val unimp: ('a,unit,Pretty.doc) format -> 'a
-
-(** Like {!Errormsg.error} except that {!Cil.currentLoc} is also printed *)
-val error: ('a,unit,Pretty.doc) format -> 'a
-
-(** Like {!Cil.error} except that it explicitly takes a location argument, 
- * instead of using the {!Cil.currentLoc} *)
-val errorLoc: location -> ('a,unit,Pretty.doc) format -> 'a  
-
-(** Like {!Errormsg.warn} except that {!Cil.currentLoc} is also printed *)
-val warn: ('a,unit,Pretty.doc) format -> 'a
-
-
-(** Like {!Errormsg.warnOpt} except that {!Cil.currentLoc} is also printed. 
- * This warning is printed only of {!Errormsg.warnFlag} is set. *)
-val warnOpt: ('a,unit,Pretty.doc) format -> 'a
-
-(** Like {!Errormsg.warn} except that {!Cil.currentLoc} and context 
-    is also printed *)
-val warnContext: ('a,unit,Pretty.doc) format -> 'a
-
-(** Like {!Errormsg.warn} except that {!Cil.currentLoc} and context is also 
- * printed. This warning is printed only of {!Errormsg.warnFlag} is set. *)
-val warnContextOpt: ('a,unit,Pretty.doc) format -> 'a
-
-(** Like {!Cil.warn} except that it explicitly takes a location argument, 
- * instead of using the {!Cil.currentLoc} *)
-val warnLoc: location -> ('a,unit,Pretty.doc) format -> 'a  
-
-(** Sometimes you do not want to see the syntactic sugar that the above 
- * pretty-printing functions add. In that case you can use the following 
- * pretty-printing functions. But note that the output of these functions is 
- * not valid C *)
-
-(** Pretty-print the internal representation of an expression *)
-val d_plainexp: unit -> exp -> Pretty.doc
-
-(** Pretty-print the internal representation of an integer *)
-val d_plaininit: unit -> init -> Pretty.doc
-
-(** Pretty-print the internal representation of an lvalue *)
-val d_plainlval: unit -> lval -> Pretty.doc
-
-(** Pretty-print the internal representation of an lvalue offset 
-val d_plainoffset: unit -> offset -> Pretty.doc *)
-
-(** Pretty-print the internal representation of a type *)
-val d_plaintype: unit -> typ -> Pretty.doc
-
-
-
-(** {b ALPHA conversion} has been moved to the Alpha module. *)
-
-
-(** Assign unique names to local variables. This might be necessary after you 
- * transformed the code and added or renamed some new variables. Names are 
- * not used by CIL internally, but once you print the file out the compiler 
- * downstream might be confused. You might 
- * have added a new global that happens to have the same name as a local in 
- * some function. Rename the local to ensure that there would never be 
- * confusioin. Or, viceversa, you might have added a local with a name that 
- * conflicts with a global *)
-val uniqueVarNames: file -> unit
-
-(** {b Optimization Passes} *)
-
-(** A peephole optimizer that processes two adjacent statements and possibly 
-    replaces them both. If some replacement happens, then the new statements 
-    are themselves subject to optimization *)
-val peepHole2: (instr * instr -> instr list option) -> stmt list -> unit
-
-(** Similar to [peepHole2] except that the optimization window consists of 
-    one statement, not two *)
-val peepHole1: (instr -> instr list option) -> stmt list -> unit
-
-(** {b Machine dependency} *)
-
-     
-(** Raised when one of the bitsSizeOf functions cannot compute the size of a 
- * type. This can happen because the type contains array-length expressions 
- * that we don't know how to compute or because it is a type whose size is 
- * not defined (e.g. TFun or an undefined compinfo). The string is an 
- * explanation of the error *)        
-exception SizeOfError of string * typ
-
-(** The size of a type, in bits. Trailing padding is added for structs and 
- * arrays. Raises {!Cil.SizeOfError} when it cannot compute the size. This 
- * function is architecture dependent, so you should only call this after you 
- * call {!Cil.initCIL}. Remember that on GCC sizeof(void) is 1! *)
-val bitsSizeOf: typ -> int
-
-(* The size of a type, in bytes. Returns a constant expression or a "sizeof" 
- * expression if it cannot compute the size. This function is architecture 
- * dependent, so you should only call this after you call {!Cil.initCIL}.  *)
-val sizeOf: typ -> exp
-
-(** The minimum alignment (in bytes) for a type. This function is 
- * architecture dependent, so you should only call this after you call 
- * {!Cil.initCIL}. *)
-val alignOf_int: typ -> int
-
-(** Give a type of a base and an offset, returns the number of bits from the 
- * base address and the width (also expressed in bits) for the subobject 
- * denoted by the offset. Raises {!Cil.SizeOfError} when it cannot compute 
- * the size. This function is architecture dependent, so you should only call 
- * this after you call {!Cil.initCIL}. *)
-val bitsOffset: typ -> offset -> int * int
-
-
-(** Whether "char" is unsigned. Set after you call {!Cil.initCIL} *)
-val char_is_unsigned: bool ref
-
-(** Whether the machine is little endian. Set after you call {!Cil.initCIL} *)
-val little_endian: bool ref
-
-(** Whether the compiler generates assembly labels by prepending "_" to the 
-    identifier. That is, will function foo() have the label "foo", or "_foo"?
-    Set after you call {!Cil.initCIL} *)
-val underscore_name: bool ref
-
-(** Represents a location that cannot be determined *)
-val locUnknown: location
-
-(** Return the location of an instruction *)
-val get_instrLoc: instr -> location 
-
-(** Return the location of a global, or locUnknown *)
-val get_globalLoc: global -> location 
-
-(** Return the location of a statement, or locUnknown *)
-val get_stmtLoc: stmtkind -> location 
-
-
-(** Generate an {!Cil.exp} to be used in case of errors. *)
-val dExp: Pretty.doc -> exp 
-
-(** Generate an {!Cil.instr} to be used in case of errors. *)
-val dInstr: Pretty.doc -> location -> instr
-
-(** Generate a {!Cil.global} to be used in case of errors. *)
-val dGlobal: Pretty.doc -> location -> global
-
-(** Like map but try not to make a copy of the list *)
-val mapNoCopy: ('a -> 'a) -> 'a list -> 'a list
-
-(** Like map but each call can return a list. Try not to make a copy of the 
-    list *)
-val mapNoCopyList: ('a -> 'a list) -> 'a list -> 'a list
-
-(** sm: return true if the first is a prefix of the second string *)
-val startsWith: string -> string -> bool
-
-
-(** {b An Interpreter for constructing CIL constructs} *)
-
-(** The type of argument for the interpreter *)
-type formatArg = 
-    Fe of exp
-  | Feo of exp option  (** For array lengths *)
-  | Fu of unop
-  | Fb of binop
-  | Fk of ikind
-  | FE of exp list (** For arguments in a function call *)
-  | Ff of (string * typ * attributes) (** For a formal argument *)
-  | FF of (string * typ * attributes) list (** For formal argument lists *)
-  | Fva of bool (** For the ellipsis in a function type *)
-  | Fv of varinfo
-  | Fl of lval
-  | Flo of lval option 
-
-  | Fo of offset
-
-  | Fc of compinfo
-  | Fi of instr
-  | FI of instr list
-  | Ft of typ
-  | Fd of int
-  | Fg of string
-  | Fs of stmt
-  | FS of stmt list
-  | FA of attributes
-
-  | Fp of attrparam
-  | FP of attrparam list
-
-  | FX of string
-
-
-(** Pretty-prints a format arg *)
-val d_formatarg: unit -> formatArg -> Pretty.doc
-
-val lowerConstants: bool ref
- (** Do lower constant expressions into constants (default true) *)
diff --git a/cil/src/cillower.ml b/cil/src/cillower.ml
deleted file mode 100755
index 61745bf40..000000000
--- a/cil/src/cillower.ml
+++ /dev/null
@@ -1,57 +0,0 @@
-(*
- *
- * Copyright (c) 2001-2003,
- *  George C. Necula    <necula@cs.berkeley.edu>
- *  Scott McPeak        <smcpeak@cs.berkeley.edu>
- *  Wes Weimer          <weimer@cs.berkeley.edu>
- *  Ben Liblit          <liblit@cs.berkeley.edu>
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. The names of the contributors may not be used to endorse or promote
- * products derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
- * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
- * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- *)
-
-(** A number of lowering passes over CIL *)
-open Cil
-open Pretty
-module E = Errormsg
-
-(** Lower CEnum constants *)
-class lowerEnumVisitorClass : cilVisitor = object (self)
-  inherit nopCilVisitor 
-
-  method vexpr (e: exp) =
-    match e with
-      Const (CEnum(v, s, ei)) -> 
-        ChangeTo (visitCilExpr (self :>cilVisitor) v)
-
-    | _ -> DoChildren
-
-end
-
-let lowerEnumVisitor = new lowerEnumVisitorClass
diff --git a/cil/src/cillower.mli b/cil/src/cillower.mli
deleted file mode 100755
index a62c9e3b6..000000000
--- a/cil/src/cillower.mli
+++ /dev/null
@@ -1,42 +0,0 @@
-(*
- *
- * Copyright (c) 2001-2003,
- *  George C. Necula    <necula@cs.berkeley.edu>
- *  Scott McPeak        <smcpeak@cs.berkeley.edu>
- *  Wes Weimer          <weimer@cs.berkeley.edu>
- *  Ben Liblit          <liblit@cs.berkeley.edu>
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. The names of the contributors may not be used to endorse or promote
- * products derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
- * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
- * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- *)
-
-(** A number of lowering passes over CIL *)
-
-(** Replace enumeration constants with integer constants *)
-val lowerEnumVisitor : Cil.cilVisitor
diff --git a/cil/src/ciloptions.ml b/cil/src/ciloptions.ml
deleted file mode 100755
index 9a2b4bd54..000000000
--- a/cil/src/ciloptions.ml
+++ /dev/null
@@ -1,196 +0,0 @@
-(*
- *
- * Copyright (c) 2001-2003,
- *  George C. Necula    <necula@cs.berkeley.edu>
- *  Scott McPeak        <smcpeak@cs.berkeley.edu>
- *  Wes Weimer          <weimer@cs.berkeley.edu>
- *  Ben Liblit          <liblit@cs.berkeley.edu>
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. The names of the contributors may not be used to endorse or promote
- * products derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
- * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
- * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- *)
-
-
-module E = Errormsg
-
-let setDebugFlag v name = 
-  E.debugFlag := v;
-  if v then Pretty.flushOften := true
-
-type outfile = 
-    { fname: string;
-      fchan: out_channel } 
-
-let setTraceDepth n =
-  Pretty.printDepth := n
-
-
-      (* Processign of output file arguments *)
-let openFile (what: string) (takeit: outfile -> unit) (fl: string) = 
-  if !E.verboseFlag then
-    ignore (Printf.printf "Setting %s to %s\n" what fl);
-  (try takeit { fname = fl;
-                fchan = open_out fl }
-  with _ ->
-    raise (Arg.Bad ("Cannot open " ^ what ^ " file " ^ fl)))
-
-
-let fileNames : string list ref = ref []
-let recordFile fname = 
-  fileNames := fname :: (!fileNames) 
-
-                         (* Parsing of files with additional names *)
-let parseExtraFile (s: string) = 
-  try
-    let sfile = open_in s in
-    while true do
-      let line = try input_line sfile with e -> (close_in sfile; raise e) in
-      let linelen = String.length line in
-      let rec scan (pos: int) (* next char to look at *)
-          (start: int) : unit (* start of the word, 
-                                 or -1 if none *) =
-        if pos >= linelen then 
-          if start >= 0 then 
-            recordFile (String.sub line start (pos - start))
-          else 
-            () (* Just move on to the next line *)
-        else
-          let c = String.get line pos in
-          match c with 
-            ' ' | '\n' | '\r' | '\t' -> 
-              (* whitespace *)
-              if start >= 0 then begin
-                recordFile (String.sub line start (pos - start));
-              end;
-              scan (pos + 1) (-1)
-                
-          | _ -> (* non-whitespace *)
-              if start >= 0 then 
-                scan (pos + 1) start 
-              else
-                scan (pos + 1) pos
-      in
-        scan 0 (-1)
-    done
-  with Sys_error _ -> E.s (E.error "Cannot find extra file: %s\n" s)
-  |  End_of_file -> () 
-
-
-let options : (string * Arg.spec * string) list = 
-  [ 
-    (* General Options *) 
-    "", Arg.Unit (fun () -> ()), "\n\t\tGeneral Options\n" ; 
-
-    "--version", Arg.Unit 
-              (fun _ -> print_endline ("CIL version " ^ Cil.cilVersion ^
-                       "\nMore information at http://cil.sourceforge.net/\n");
-                 exit 0),
-           "output version information and exit";
-    "--verbose", Arg.Unit (fun _ -> E.verboseFlag := true),
-                "Print lots of random stuff. This is passed on from cilly.";
-    "--warnall", Arg.Unit (fun _ -> E.warnFlag := true), "Show all warnings";
-    "--debug", Arg.String (setDebugFlag true),
-                     "<xxx> turns on debugging flag xxx";
-    "--nodebug", Arg.String (setDebugFlag false), 
-                     "<xxx> turns off debugging flag xxx";
-
-    "--flush", Arg.Unit (fun _ -> Pretty.flushOften := true),
-                     "Flush the output streams often (aids debugging)" ;
-    "--check", Arg.Unit (fun _ -> Cilutil.doCheck := true),
-                     "Run a consistency check over the CIL after every operation.";
-    "--nocheck", Arg.Unit (fun _ -> Cilutil.doCheck := false),
-                     "turns off consistency checking of CIL";
-    "--noPrintLn", Arg.Unit (fun _ -> Cil.lineDirectiveStyle := None;
-                                     Cprint.printLn := false),
-               "Don't output #line directives in the output.";
-    "--commPrintLn", Arg.Unit (fun _ -> Cil.lineDirectiveStyle := Some Cil.LineComment;
-                                       Cprint.printLnComment := true),
-               "Print #line directives in the output, but put them in comments.";
-    "--stats", Arg.Unit (fun _ -> Cilutil.printStats := true),
-               "Print statistics about running times and memory usage.";
-
-
-    "--log", Arg.String (openFile "log" (fun oc -> E.logChannel := oc.fchan)),
-             "Set the name of the log file.  By default stderr is used";
-
-    "--MSVC", Arg.Unit (fun _ ->   Cil.msvcMode := true;
-                                   Frontc.setMSVCMode ();
-                                   if not Machdep.hasMSVC then
-                                     ignore (E.warn "Will work in MSVC mode but will be using machine-dependent parameters for GCC since you do not have the MSVC compiler installed\n")
-                       ), "Enable MSVC compatibility. Default is GNU.";
-
-    "--testcil", Arg.String (fun s -> Cilutil.testcil := s),
-          "test CIL using the given compiler";
-
-    "--ignore-merge-conflicts", 
-                 Arg.Unit (fun _ -> Mergecil.ignore_merge_conflicts := true),
-                  "ignore merging conflicts";
-    "--sliceGlobal", Arg.Unit (fun _ -> Cilutil.sliceGlobal := true),
-               "output is the slice of #pragma cilnoremove(sym) symbols";
-
-    (* sm: some more debugging options *)
-    "--tr",         Arg.String Trace.traceAddMulti,
-                     "<sys>: subsystem to show debug printfs for";
-    "--pdepth",     Arg.Int setTraceDepth,
-                      "<n>: set max print depth (default: 5)";
-
-    "--extrafiles", Arg.String parseExtraFile,
-    "<filename>: the name of a file that contains a list of additional files to process, separated by whitespace of newlines";
-
-    (* Lowering Options *) 
-    "", Arg.Unit (fun () -> ()), "\n\t\tLowering Options\n" ; 
-
-    "--noLowerConstants", Arg.Unit (fun _ -> Cil.lowerConstants := false), 
-     "do not lower constant expressions";
-
-    "--noInsertImplicitCasts", Arg.Unit (fun _ -> Cil.insertImplicitCasts := false),
-    "do not insert implicit casts";
-
-    "--forceRLArgEval", 
-          Arg.Unit (fun n -> Cabs2cil.forceRLArgEval := true),
-          "Forces right to left evaluation of function arguments";
-    "--nocil", Arg.Int (fun n -> Cabs2cil.nocil := n),
-                      "Do not compile to CIL the global with the given index";
-    "--disallowDuplication", Arg.Unit (fun n -> Cabs2cil.allowDuplication := false),
-                      "Prevent small chunks of code from being duplicated";
-    "--keepunused", Arg.Set Rmtmps.keepUnused,
-                "Do not remove the unused variables and types";
-    "--rmUnusedInlines", Arg.Set Rmtmps.rmUnusedInlines,
-                "Delete any unused inline functions.  This is the default in MSVC mode";
-
-
-
-    "", Arg.Unit (fun () -> ()), "\n\t\tOutput Options\n" ; 
-    "--printCilAsIs", Arg.Unit (fun _ -> Cil.printCilAsIs := true),
-               "do not try to simplify the CIL when printing.  Without this flag, CIL will attempt to produce prettier output by e.g. changing while(1) into more meaningful loops.";
-    "--noWrap", Arg.Unit (fun _ -> Cil.lineLength := 100000),
-               "do not wrap long lines when printing";
-
-  ]
-    
diff --git a/cil/src/ciloptions.mli b/cil/src/ciloptions.mli
deleted file mode 100755
index 13f65cf41..000000000
--- a/cil/src/ciloptions.mli
+++ /dev/null
@@ -1,48 +0,0 @@
-(*
- *
- * Copyright (c) 2001-2003,
- *  George C. Necula    <necula@cs.berkeley.edu>
- *  Scott McPeak        <smcpeak@cs.berkeley.edu>
- *  Wes Weimer          <weimer@cs.berkeley.edu>
- *  Ben Liblit          <liblit@cs.berkeley.edu>
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. The names of the contributors may not be used to endorse or promote
- * products derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
- * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
- * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- *)
-
-
-(** The command-line options for CIL *)
-val options : (string * Arg.spec * string) list 
-    
-
-(** The list of file names *)
-val fileNames : string list ref
-
-(** Adds the file to the start of fileNames *)
-val recordFile: string -> unit
diff --git a/cil/src/cilutil.ml b/cil/src/cilutil.ml
deleted file mode 100644
index b9a4da983..000000000
--- a/cil/src/cilutil.ml
+++ /dev/null
@@ -1,72 +0,0 @@
-(*
- *
- * Copyright (c) 2001-2002, 
- *  George C. Necula    <necula@cs.berkeley.edu>
- *  Scott McPeak        <smcpeak@cs.berkeley.edu>
- *  Wes Weimer          <weimer@cs.berkeley.edu>
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. The names of the contributors may not be used to endorse or promote
- * products derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
- * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
- * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- *)
-
-(* Keep here the globally-visible flags *)
-let doCheck= ref false   (* Whether to check CIL *)
-
-let logCalls = ref false (* Whether to produce a log with all the function 
-                          * calls made *)
-let logWrites = ref false (* Whether to produce a log with all the mem 
-                          * writes made *)
-let doPartial = ref false (* Whether to do partial evaluation and constant 
-                          * folding *)                          
-let doSimpleMem = ref false (* reduce complex memory expressions so that
-                          * they contain at most one lval *) 
-let doOneRet = ref false (* make a functions have at most one 'return' *)
-let doStackGuard = ref false (* instrument function calls and returns to
-maintain a separate stack for return addresses *)
-let doHeapify = ref false (* move stack-allocated arrays to the heap *)
-let makeCFG = ref false (* turn the input CIL file into something more like
-                          * a CFG *)
-let printStats = ref false
-
-(* when 'sliceGlobal' is set, then when 'rmtmps' runs, only globals*)
-(* marked with #pragma cilnoremove(whatever) are kept; when used with *)
-(* cilly.asm.exe, the effect is to slice the input on the noremove symbols *)
-let sliceGlobal = ref false
-
-
-let printStages = ref false
-
-
-let doCxxPP = ref false
-
-let libDir = ref ""
-
-let dumpFCG = ref false
-let testcil = ref ""
-
diff --git a/cil/src/escape.ml b/cil/src/escape.ml
deleted file mode 100644
index 198c9e5c6..000000000
--- a/cil/src/escape.ml
+++ /dev/null
@@ -1,93 +0,0 @@
-(*
- *
- * Copyright (c) 2003, 
- *  Ben Liblit          <liblit@cs.berkeley.edu>
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. The names of the contributors may not be used to endorse or promote
- * products derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
- * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
- * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- *)
-
-
-(** OCaml types used to represent wide characters and strings *)
-type wchar = int64
-type wstring = wchar list
-
-
-let escape_char = function
-  | '\007' -> "\\a"
-  | '\b' -> "\\b"
-  | '\t' -> "\\t"
-  | '\n' -> "\\n"
-  | '\011' -> "\\v"
-  | '\012' -> "\\f"
-  | '\r' -> "\\r"
-  | '"' -> "\\\""
-  | '\'' -> "\\'"
-  | '\\' -> "\\\\"
-  | ' ' .. '~' as printable -> String.make 1 printable
-  | unprintable -> Printf.sprintf "\\%03o" (Char.code unprintable)
-
-let escape_string str =
-  let length = String.length str in
-  let buffer = Buffer.create length in
-  for index = 0 to length - 1 do
-    Buffer.add_string buffer (escape_char (String.get str index))
-  done;
-  Buffer.contents buffer
-
-(* a wide char represented as an int64 *)
-let escape_wchar =
-  (* limit checks whether upper > probe *)
-  let limit upper probe = (Int64.to_float (Int64.sub upper probe)) > 0.5 in
-  let fits_byte = limit (Int64.of_int 0x100) in
-  let fits_octal_escape = limit (Int64.of_int 0o1000) in
-  let fits_universal_4 = limit (Int64.of_int 0x10000) in
-  let fits_universal_8 = limit (Int64.of_string "0x100000000") in
-  fun charcode ->
-    if fits_byte charcode then
-      escape_char (Char.chr (Int64.to_int charcode))
-    else if fits_octal_escape charcode then
-      Printf.sprintf "\\%03Lo" charcode
-    else if fits_universal_4 charcode then
-      Printf.sprintf "\\u%04Lx" charcode
-    else if fits_universal_8 charcode then
-      Printf.sprintf "\\u%04Lx" charcode
-    else
-      invalid_arg "Cprint.escape_string_intlist"
-
-(* a wide string represented as a list of int64s *)
-let escape_wstring (str : int64 list) =
-  let length = List.length str in
-  let buffer = Buffer.create length in
-  let append charcode =
-    let addition = escape_wchar charcode in
-    Buffer.add_string buffer addition
-  in
-  List.iter append str;
-  Buffer.contents buffer
diff --git a/cil/src/escape.mli b/cil/src/escape.mli
deleted file mode 100644
index b932ef142..000000000
--- a/cil/src/escape.mli
+++ /dev/null
@@ -1,48 +0,0 @@
-(*
- *
- * Copyright (c) 2003, 
- *  Ben Liblit          <liblit@cs.berkeley.edu>
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. The names of the contributors may not be used to endorse or promote
- * products derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
- * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
- * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- *)
-
-(*
- * Character and string escaping utilities
- *)
-
-(** OCaml types used to represent wide characters and strings *)
-type wchar = int64
-type wstring = wchar list
-
-(** escape various constructs in accordance with C lexical rules *)
-val escape_char : char -> string
-val escape_string : string -> string
-val escape_wchar : wchar -> string
-val escape_wstring : wstring -> string
diff --git a/cil/src/ext/astslicer.ml b/cil/src/ext/astslicer.ml
deleted file mode 100644
index ffba48277..000000000
--- a/cil/src/ext/astslicer.ml
+++ /dev/null
@@ -1,454 +0,0 @@
-(* MODIF: Loop constructor replaced by 3 constructors: While, DoWhile, For. *)
-
-(*
- *
- * Copyright (c) 2001-2002, 
- *  George C. Necula    <necula@cs.berkeley.edu>
- *  Scott McPeak        <smcpeak@cs.berkeley.edu>
- *  Wes Weimer          <weimer@cs.berkeley.edu>
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. The names of the contributors may not be used to endorse or promote
- * products derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
- * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
- * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- *)
-open Cil
-module E = Errormsg
-(*
- * Weimer: an AST Slicer for use in Daniel's Delta Debugging Algorithm.
- *)
-let debug = ref false 
-
-(* 
- * This type encapsulates a mapping form program locations to names
- * in our naming convention.
- *)
-type enumeration_info = {
-  statements : (stmt, string) Hashtbl.t ;
-  instructions : (instr, string) Hashtbl.t ;
-} 
-
-(**********************************************************************
- * Enumerate 1
- *
- * Given a cil file, enumerate all of the statement names in it using
- * our naming scheme. 
- **********************************************************************)
-let enumerate out (f : Cil.file) = 
-  let st_ht = Hashtbl.create 32767 in
-  let in_ht = Hashtbl.create 32767 in
-
-  let emit base i ht elt =
-    let str = Printf.sprintf "%s.%d" base !i in
-    Printf.fprintf out "%s\n" str ;
-    Hashtbl.add ht elt str ; 
-    incr i
-  in 
-  let emit_call base i str2 ht elt =
-    let str = Printf.sprintf "%s.%d" base !i in 
-    Printf.fprintf out "%s - %s\n" str str2 ;
-    Hashtbl.add ht elt str ; 
-    incr i
-  in 
-  let descend base i =
-    let res = (Printf.sprintf "%s.%d" base !i),(ref 0) in
-    res
-  in 
-  let rec doBlock b base i =
-    doStmtList b.bstmts base i
-  and doStmtList sl base i = 
-    List.iter (fun s -> match s.skind with
-    | Instr(il) -> doIL il base i 
-    | Return(_,_)
-    | Goto(_,_)
-    | Continue(_) 
-    | Break(_) -> emit base i st_ht s
-    | If(e,b1,b2,_) -> 
-          emit base i st_ht s ; 
-          decr i ; 
-          Printf.fprintf out "(\n" ; 
-          let base',i' = descend base i in
-          doBlock b1 base' i' ;
-          Printf.fprintf out ") (\n" ; 
-          let base'',i'' = descend base i in
-          doBlock b2 base'' i'' ;
-          Printf.fprintf out ")\n" ; 
-          incr i 
-    | Switch(_,b,_,_) 
-(*
-    | Loop(b,_,_,_) 
-*)
-    | While(_,b,_)
-    | DoWhile(_,b,_)
-    | For(_,_,_,b,_)
-    | Block(b) -> 
-          emit base i st_ht s ; 
-          decr i ; 
-          let base',i' = descend base i in
-          Printf.fprintf out "(\n" ; 
-          doBlock b base' i' ;
-          Printf.fprintf out ")\n" ; 
-          incr i 
-    | TryExcept _ | TryFinally _ -> 
-        E.s (E.unimp "astslicer:enumerate")
-    ) sl 
-  and doIL il base i = 
-    List.iter (fun ins -> match ins with
-      | Set _  
-      | Asm _ -> emit base i in_ht ins
-      | Call(_,(Lval(Var(vi),NoOffset)),_,_) -> 
-                 emit_call base i vi.vname in_ht ins
-      | Call(_,f,_,_) -> emit_call base i "*" in_ht ins
-    ) il 
-  in 
-  let doGlobal g = match g with 
-  | GFun(fd,_) -> 
-      Printf.fprintf out "%s (\n" fd.svar.vname ; 
-      let cur = ref 0 in 
-      doBlock fd.sbody fd.svar.vname cur ; 
-      Printf.fprintf out ")\n" ; 
-      ()
-  | _ -> () 
-  in
-  List.iter doGlobal f.globals ;
-  { statements = st_ht ;
-    instructions = in_ht ; }
-
-(**********************************************************************
- * Enumerate 2
- *
- * Given a cil file and some enumeration information, do a log-calls-like
- * transformation on it that prints out our names as you reach them. 
- **********************************************************************)
-(* 
- * This is the visitor that handles annotations
- *)
-let print_it pfun name =
-  ((Call(None,Lval(Var(pfun),NoOffset),
-    [mkString (name ^ "\n")],locUnknown))) 
-
-class enumVisitor pfun st_ht in_ht = object
-  inherit nopCilVisitor
-  method vinst i = 
-    if Hashtbl.mem in_ht i then begin
-      let name = Hashtbl.find in_ht i in
-      let newinst = print_it pfun name in 
-      ChangeTo([newinst ; i])
-    end else
-      DoChildren
-  method vstmt s = 
-    if Hashtbl.mem st_ht s then begin
-      let name = Hashtbl.find st_ht s in
-      let newinst = print_it pfun name in 
-      let newstmt = mkStmtOneInstr newinst in
-      let newblock = mkBlock [newstmt ; s] in
-      let replace_with = mkStmt (Block(newblock)) in
-      ChangeDoChildrenPost(s,(fun i -> replace_with)) 
-    end else
-      DoChildren
-  method vfunc f = 
-      let newinst = print_it pfun f.svar.vname in 
-      let newstmt = mkStmtOneInstr newinst in
-      let new_f = { f with sbody = { f.sbody with 
-        bstmts = newstmt :: f.sbody.bstmts }} in
-      ChangeDoChildrenPost(new_f,(fun i -> i))
-end 
-
-let annotate (f : Cil.file) ei = begin
-  (* Create a prototype for the logging function *)
-  let printfFun =
-    let fdec = emptyFunction "printf" in
-    let argf  = makeLocalVar fdec "format" charConstPtrType in
-    fdec.svar.vtype <- TFun(intType, Some [ ("format", charConstPtrType, [])],
-                            true, []);
-    fdec
-  in
-  let visitor = (new enumVisitor printfFun.svar ei.statements 
-    ei.instructions) in 
-  visitCilFileSameGlobals visitor f;
-  f
-end 
-
-(**********************************************************************
- * STAGE 2
- *
- * Perform a transitive-closure-like operation on the parts of the program
- * that the user wants to keep. We use a CIL visitor to walk around
- * and a number of hash tables to keep track of the things we want to keep. 
- **********************************************************************)
-(*
- * Hashtables: 
- * ws   - wanted stmts
- * wi   - wanted instructions
- * wt   - wanted typeinfo 
- * wc   - wanted compinfo 
- * we   - wanted enuminfo 
- * wv   - wanted varinfo 
- *)
-
-let mode = ref false (* was our parented wanted? *)
-let finished = ref true (* set to false if we update something *)
-
-(* In the given hashtable, mark the given element was "wanted" *)
-let update ht elt =
-  if Hashtbl.mem ht elt && (Hashtbl.find ht elt = true) then ()
-  else begin
-    Hashtbl.add ht elt true ;
-    finished := false 
-  end
-
-(* Handle a particular stage of the AST tree walk. Use "mode" (i.e.,
- * whether our parent was wanted) and the hashtable (which tells us whether
- * the user had any special instructions for this element) to determine
- * what do to. *)
-let handle ht elt rep =
-    if !mode then begin
-      if Hashtbl.mem ht elt && (Hashtbl.find ht elt = false) then begin
-        (* our parent is Wanted but we were told to ignore this subtree,
-         * so we won't be wanted. *)
-        mode := false ;
-        ChangeDoChildrenPost(rep,(fun elt -> mode := true ; elt))
-      end else begin  
-        (* we were not told to ignore this subtree, and our parent is
-         * Wanted, so we will be Wanted too! *)
-        update ht elt ; 
-        DoChildren
-      end 
-    end else if Hashtbl.mem ht elt && (Hashtbl.find ht elt = true) then begin
-      (* our parent was not wanted but we were wanted, so turn the
-       * mode on for now *)
-      mode := true ;
-      ChangeDoChildrenPost(rep,(fun elt -> mode := false ; elt))
-    end else 
-      DoChildren
-
-let handle_no_default ht elt rep old_mode = 
-    if Hashtbl.mem ht elt && (Hashtbl.find ht elt = true) then begin
-      (* our parent was not wanted but we were wanted, so turn the
-       * mode on for now *)
-      mode := true ;
-      ChangeDoChildrenPost(rep,(fun elt -> mode := old_mode ; elt))
-    end else begin
-      mode := false ;
-      ChangeDoChildrenPost(rep,(fun elt -> mode := old_mode ; elt))
-    end
-
-(* 
- * This is the visitor that handles elements (marks them as wanted)
- *)
-class transVisitor ws wi wt wc we wv = object
-  inherit nopCilVisitor
-
-  method vvdec vi = handle_no_default wv vi vi !mode
-  method vvrbl vi = handle wv vi vi
-  method vinst i = handle wi i [i] 
-  method vstmt s = handle ws s s
-  method vfunc f = handle wv f.svar f
-  method vglob g = begin
-    match g with
-    | GType(ti,_) -> handle wt ti [g]
-    | GCompTag(ci,_) 
-    | GCompTagDecl(ci,_) -> handle wc ci [g]
-    | GEnumTag(ei,_) 
-    | GEnumTagDecl(ei,_) -> handle we ei [g]
-    | GVarDecl(vi,_) 
-    | GVar(vi,_,_) -> handle wv vi [g]
-    | GFun(f,_) -> handle wv f.svar [g]
-    | _ -> DoChildren
-  end
-  method vtype t = begin
-    match t with
-    | TNamed(ti,_) -> handle wt ti t
-    | TComp(ci,_) -> handle wc ci t
-    | TEnum(ei,_) -> handle we ei t
-    | _ -> DoChildren
-  end
-end 
-
-(**********************************************************************
- * STAGE 3
- *
- * Eliminate all of the elements from the program that are not marked 
- * "keep". 
- **********************************************************************)
-(* 
- * This is the visitor that throws away elements 
- *)
-let handle ht elt keep drop =
-  if (Hashtbl.mem ht elt) && (Hashtbl.find ht elt = true) then
-    (* DoChildren *) ChangeDoChildrenPost(keep,(fun a -> a)) 
-  else 
-    ChangeTo(drop)
-
-class dropVisitor ws wi wt wc we wv = object
-  inherit nopCilVisitor
-
-  method vinst i = handle wi i [i] []
-  method vstmt s = handle ws s s (mkStmt (Instr([])))
-  method vglob g = begin
-    match g with
-    | GType(ti,_) -> handle wt ti [g] []
-    | GCompTag(ci,_) 
-    | GCompTagDecl(ci,_) -> handle wc ci [g] []
-    | GEnumTag(ei,_) 
-    | GEnumTagDecl(ei,_) -> handle we ei [g] []
-    | GVarDecl(vi,_) 
-    | GVar(vi,_,_) -> handle wv vi [g] []
-    | GFun(f,l) -> 
-        let new_locals = List.filter (fun vi ->
-          Hashtbl.mem wv vi && (Hashtbl.find wv vi = true)) f.slocals in
-        let new_fundec = { f with slocals = new_locals} in 
-        handle wv f.svar [(GFun(new_fundec,l))] []
-    | _ -> DoChildren
-  end
-end 
-
-(**********************************************************************
- * STAGE 1
- *
- * Mark up the file with user-given information about what to keep and
- * what to drop.
- **********************************************************************)
-type mark = Wanted | Unwanted | Unspecified
-(* Given a cil file and a list of strings, mark all of the given ASTSlicer
- * points as wanted or unwanted. *)
-let mark_file (f : Cil.file) (names : (string, mark) Hashtbl.t) = 
-  let ws = Hashtbl.create 32767 in
-  let wi = Hashtbl.create 32767 in
-  let wt = Hashtbl.create 32767 in
-  let wc = Hashtbl.create 32767 in
-  let we = Hashtbl.create 32767 in
-  let wv = Hashtbl.create 32767 in
-  if !debug then Printf.printf "Applying user marks to file ...\n" ; 
-  let descend base i =
-    let res = (Printf.sprintf "%s.%d" base !i),(ref 0) in
-    res
-  in 
-  let check base i (default : mark) =
-    let str = Printf.sprintf "%s.%d" base !i in
-    if !debug then Printf.printf "Looking for [%s]\n" str ; 
-    try Hashtbl.find names str
-    with _ -> default
-  in 
-  let mark ht stmt wanted = match wanted with
-    Unwanted -> Hashtbl.replace ht stmt false
-  | Wanted -> Hashtbl.replace ht stmt true
-  | Unspecified -> () 
-  in 
-  let rec doBlock b base i default =
-    doStmtList b.bstmts base i default
-  and doStmtList sl base i default = 
-    List.iter (fun s -> match s.skind with
-    | Instr(il) -> doIL il base i default
-    | Return(_,_) 
-    | Goto(_,_) 
-    | Continue(_) 
-    | Break(_) -> 
-        mark ws s (check base i default) ; incr i 
-    | If(e,b1,b2,_) -> 
-        let inside = check base i default in 
-        mark ws s inside ;
-        let base',i' = descend base i in
-        doBlock b1 base' i' inside ;
-        let base'',i'' = descend base i in
-        doBlock b2 base'' i'' inside ;
-        incr i
-    | Switch(_,b,_,_) 
-(*
-    | Loop(b,_,_,_) 
-*)
-    | While(_,b,_)
-    | DoWhile(_,b,_)
-    | For(_,_,_,b,_)
-    | Block(b) -> 
-        let inside = check base i default in 
-        mark ws s inside ;
-        let base',i' = descend base i in
-        doBlock b base' i' inside ;
-        incr i 
-    | TryExcept _ | TryFinally _ -> 
-        E.s (E.unimp "astslicer: mark")
-    ) sl 
-  and doIL il base i default = 
-    List.iter (fun ins -> mark wi ins (check base i default) ; incr i) il 
-  in 
-  let doGlobal g = match g with 
-  | GFun(fd,_) -> 
-      let cur = ref 0 in 
-      if Hashtbl.mem names fd.svar.vname then begin
-        if Hashtbl.find names fd.svar.vname = Wanted then begin
-          Hashtbl.replace wv fd.svar true ;
-          doBlock fd.sbody fd.svar.vname cur (Wanted); 
-        end else begin
-          Hashtbl.replace wv fd.svar false ;
-          doBlock fd.sbody fd.svar.vname cur (Unspecified); 
-        end
-      end else begin  
-        doBlock fd.sbody fd.svar.vname cur (Unspecified); 
-      end 
-  | _ -> () 
-  in
-  List.iter doGlobal f.globals ;
-  if !debug then begin 
-    Hashtbl.iter (fun k v -> 
-      ignore (Pretty.printf "want-s %b %a\n" v d_stmt k)) ws ;
-    Hashtbl.iter (fun k v -> 
-      ignore (Pretty.printf "want-i %b %a\n" v d_instr k)) wi ;
-    Hashtbl.iter (fun k v -> 
-      ignore (Pretty.printf "want-v %b %s\n" v k.vname)) wv ;
-  end ; 
-  (*
-   * Now repeatedly mark all other things that must be kept. 
-   *)
-  let visitor = (new transVisitor ws wi wt wc we wv) in 
-  finished := false ;
-  if !debug then  (Printf.printf "\nPerforming Transitive Closure\n\n" ); 
-  while not !finished do
-    finished := true ; 
-    visitCilFileSameGlobals visitor f
-  done  ;
-  if !debug then begin 
-    Hashtbl.iter (fun k v -> 
-      if v then ignore (Pretty.printf "want-s %a\n" d_stmt k)) ws ;
-    Hashtbl.iter (fun k v -> 
-      if v then ignore (Pretty.printf "want-i %a\n" d_instr k)) wi ;
-    Hashtbl.iter (fun k v -> 
-      if v then ignore (Pretty.printf "want-t %s\n" k.tname)) wt ;
-    Hashtbl.iter (fun k v -> 
-      if v then ignore (Pretty.printf "want-c %s\n" k.cname)) wc ;
-    Hashtbl.iter (fun k v -> 
-      if v then ignore (Pretty.printf "want-e %s\n" k.ename)) we ;
-    Hashtbl.iter (fun k v -> 
-      if v then ignore (Pretty.printf "want-v %s\n" k.vname)) wv ;
-  end ; 
-
-  (*
-   * Now drop everything we didn't need. 
-   *)
-  if !debug then  (Printf.printf "Dropping Unwanted Elements\n" ); 
-  let visitor = (new dropVisitor ws wi wt wc we wv) in 
-  visitCilFile visitor f 
diff --git a/cil/src/ext/availexps.ml b/cil/src/ext/availexps.ml
deleted file mode 100644
index 28c22c0e7..000000000
--- a/cil/src/ext/availexps.ml
+++ /dev/null
@@ -1,359 +0,0 @@
-(* compute available expressions, although in a somewhat
-   non-traditional way. the abstract state is a mapping from
-   variable ids to expressions as opposed to a set of
-   expressions *)
-
-open Cil
-open Pretty
-
-module E = Errormsg
-module DF = Dataflow
-module UD = Usedef
-module IH = Inthash
-module U = Util
-module S = Stats
-
-let debug = ref false
-
-(* exp IH.t -> exp IH.t -> bool *)
-let eh_equals eh1 eh2 =
-  if not(IH.length eh1 = IH.length eh2)
-  then false
-  else IH.fold (fun vid e b ->
-    if not b then b else
-    try let e2 = IH.find eh2 vid in
-    if not(Util.equals e e2)
-    then false
-    else true
-    with Not_found -> false)
-      eh1 true
-
-let eh_pretty () eh = line ++ seq line (fun (vid,e) ->
-  text "AE:vid:" ++ num vid ++ text ": " ++
-    (d_exp () e)) (IH.tolist eh)
-
-(* the result must be the intersection of eh1 and eh2 *)
-(* exp IH.t -> exp IH.t -> exp IH.t *)
-let eh_combine eh1 eh2 =
-  if !debug then ignore(E.log "eh_combine: combining %a\n and\n %a\n"
-			  eh_pretty eh1 eh_pretty eh2);
-  let eh' = IH.copy eh1 in (* eh' gets all of eh1 *)
-  IH.iter (fun vid e1 ->
-    try let e2l = IH.find_all eh2 vid in
-    if not(List.exists (fun e2 -> Util.equals e1 e2) e2l)
-    (* remove things from eh' that eh2 doesn't have *)
-    then let e1l = IH.find_all eh' vid in
-    let e1l' = List.filter (fun e -> not(Util.equals e e1)) e1l in
-    IH.remove_all eh' vid;
-    List.iter (fun e -> IH.add eh' vid e) e1l'
-    with Not_found ->
-      IH.remove_all eh' vid) eh1;
-  if !debug then ignore(E.log "with result %a\n"
-			  eh_pretty eh');
-  eh'
-
-(* On a memory write, kill expressions containing memory writes
- * or variables whose address has been taken. *)
-let exp_ok = ref false
-class memReadOrAddrOfFinderClass = object(self)
-  inherit nopCilVisitor
-
-  method vexpr e = match e with
-    Lval(Mem _, _) -> 
-      exp_ok := true;
-      SkipChildren
-  | _ -> DoChildren
-
-  method vvrbl vi =
-    if vi.vaddrof then
-      (exp_ok := true;
-       SkipChildren)
-    else DoChildren
-
-end
-
-let memReadOrAddrOfFinder = new memReadOrAddrOfFinderClass
-
-(* exp -> bool *)
-let exp_has_mem_read e =
-  exp_ok := false;
-  ignore(visitCilExpr memReadOrAddrOfFinder e);
-  !exp_ok
-
-let eh_kill_mem eh =
-  IH.iter (fun vid e ->
-    if exp_has_mem_read e
-    then IH.remove eh vid)
-    eh
-
-(* need to kill exps containing a particular vi sometimes *)
-let has_vi = ref false
-class viFinderClass vi = object(self)
-  inherit nopCilVisitor
-      
-  method vvrbl vi' = 
-    if vi.vid = vi'.vid
-    then (has_vi := true; SkipChildren)
-    else DoChildren
-
-end
-
-let exp_has_vi e vi =
-  let vis = new viFinderClass vi in
-  has_vi := false;
-  ignore(visitCilExpr vis e);
-  !has_vi
-
-let eh_kill_vi eh vi =
-  IH.iter (fun vid e ->
-    if exp_has_vi e vi
-    then IH.remove eh vid)
-    eh
-
-let varHash = IH.create 32
-
-let eh_kill_addrof_or_global eh =
-  if !debug then ignore(E.log "eh_kill: in eh_kill\n");
-  IH.iter (fun vid e ->
-    try let vi = IH.find varHash vid in
-    if vi.vaddrof
-    then begin
-      if !debug then ignore(E.log "eh_kill: %s has its address taken\n"
-			      vi.vname);
-      IH.remove eh vid
-    end
-    else if vi.vglob
-    then begin
-      if !debug then ignore(E.log "eh_kill: %s is global\n"
-			   vi.vname);
-      IH.remove eh vid
-    end
-    with Not_found -> ()) eh
-
-let eh_handle_inst i eh = match i with
-  (* if a pointer write, kill things with read in them.
-     also kill mappings from vars that have had their address taken,
-     and globals.
-     otherwise kill things with lv in them and add e *)
-  Set(lv,e,_) -> (match lv with
-    (Mem _, _) -> 
-      (eh_kill_mem eh; 
-       eh_kill_addrof_or_global eh;
-       eh)
-  | (Var vi, NoOffset) -> 
-      (match e with
-	Lval(Var vi', NoOffset) -> (* ignore x = x *)
-	  if vi'.vid = vi.vid then eh else
-	  (IH.replace eh vi.vid e;
-	   eh_kill_vi eh vi;
-	   eh)
-      | _ ->
-	  (IH.replace eh vi.vid e;
-	   eh_kill_vi eh vi;
-	   eh))
-  | _ -> eh) (* do nothing for now. *)
-| Call(Some(Var vi,NoOffset),_,_,_) ->
-    (IH.remove eh vi.vid;
-     eh_kill_vi eh vi;
-     eh_kill_mem eh;
-     eh_kill_addrof_or_global eh;
-     eh)
-| Call(_,_,_,_) ->
-    (eh_kill_mem eh;
-     eh_kill_addrof_or_global eh;
-     eh)
-| Asm(_,_,_,_,_,_) ->
-    let _,d = UD.computeUseDefInstr i in
-    (UD.VS.iter (fun vi ->
-      eh_kill_vi eh vi) d;
-     eh)
-
-let allExpHash = IH.create 128
-
-module AvailableExps =
-  struct
-
-    let name = "Available Expressions"
-
-    let debug = debug
-
-    (* mapping from var id to expression *)
-    type t = exp IH.t
-
-    let copy = IH.copy
-
-    let stmtStartData = IH.create 64
-
-    let pretty = eh_pretty
-
-    let computeFirstPredecessor stm eh = 
-      eh_combine (IH.copy allExpHash) eh
-
-    let combinePredecessors (stm:stmt) ~(old:t) (eh:t) =
-      if S.time "eh_equals" (eh_equals old) eh then None else
-      Some(S.time "eh_combine" (eh_combine old) eh)
-
-    let doInstr i eh = 
-      let action = eh_handle_inst i in
-      DF.Post(action)
-
-    let doStmt stm astate = DF.SDefault
-
-    let doGuard c astate = DF.GDefault
-
-    let filterStmt stm = true
-
-  end
-
-module AE = DF.ForwardsDataFlow(AvailableExps)
-
-(* make an exp IH.t with everything in it,
- * also, fill in varHash while we're here.
- *)
-class expCollectorClass = object(self)
-  inherit nopCilVisitor
-
-  method vinst i = match i with
-    Set((Var vi,NoOffset),e,_) ->
-      let e2l = IH.find_all allExpHash vi.vid in
-      if not(List.exists (fun e2 -> Util.equals e e2) e2l)
-      then IH.add allExpHash vi.vid e;
-      DoChildren
-  | _ -> DoChildren
-
-  method vvrbl vi =
-    (if not(IH.mem varHash vi.vid)
-    then 
-      (if !debug && vi.vglob then ignore(E.log "%s is global\n" vi.vname);
-       if !debug && not(vi.vglob) then ignore(E.log "%s is not global\n" vi.vname);
-       IH.add varHash vi.vid vi));
-    DoChildren
-
-end
-
-let expCollector = new expCollectorClass
-
-let make_all_exps fd =
-  IH.clear allExpHash;
-  IH.clear varHash;
-  ignore(visitCilFunction expCollector fd)
-
-
-
-(* set all statement data to allExpHash, make
- * a list of statements 
- *)
-let all_stmts = ref []
-class allExpSetterClass = object(self)
-  inherit nopCilVisitor
-
-  method vstmt s =
-    all_stmts := s :: (!all_stmts);
-    IH.add AvailableExps.stmtStartData s.sid (IH.copy allExpHash);
-    DoChildren
-
-end
-
-let allExpSetter = new allExpSetterClass
-
-let set_all_exps fd =
-  IH.clear AvailableExps.stmtStartData;
-  ignore(visitCilFunction allExpSetter fd)
-
-(*
- * Computes AEs for function fd.
- *
- *
- *)
-(*let iAEsHtbl = Hashtbl.create 128*)
-let computeAEs fd =
-  try let slst = fd.sbody.bstmts in
-  let first_stm = List.hd slst in
-  S.time "make_all_exps" make_all_exps fd;
-  all_stmts := [];
-  (*S.time "set_all_exps" set_all_exps fd;*)
-  (*Hashtbl.clear iAEsHtbl;*)
-  (*IH.clear (IH.find AvailableExps.stmtStartData first_stm.sid);*)
-  IH.add AvailableExps.stmtStartData first_stm.sid (IH.create 4);
-  S.time "compute" AE.compute [first_stm](*(List.rev !all_stmts)*)
-  with Failure "hd" -> if !debug then ignore(E.log "fn w/ no stmts?\n")
-  | Not_found -> if !debug then ignore(E.log "no data for first_stm?\n")
-
-
-(* get the AE data for a statement *)
-let getAEs sid =
-  try Some(IH.find AvailableExps.stmtStartData sid)
-  with Not_found -> None
-
-(* get the AE data for an instruction list *)
-let instrAEs il sid eh out =
-  (*if Hashtbl.mem iAEsHtbl (sid,out)
-  then Hashtbl.find iAEsHtbl (sid,out) 
-  else*) 
-    let proc_one hil i =
-      match hil with
-	[] -> let eh' = IH.copy eh in
-	let eh'' = eh_handle_inst i eh' in
-	(*if !debug then ignore(E.log "instrAEs: proc_one []: for %a\n data is %a\n"
-	   d_instr i eh_pretty eh'');*)
-	eh''::hil
-      | eh'::ehrst as l ->
-	  let eh' = IH.copy eh' in
-	  let eh'' = eh_handle_inst i eh' in
-	  (*if !debug then ignore(E.log "instrAEs: proc_one: for %a\n data is %a\n"
-	     d_instr i eh_pretty eh'');*)
-	  eh''::l
-    in
-    let folded = List.fold_left proc_one [eh] il in
-    (*let foldedout = List.tl (List.rev folded) in*)
-    let foldednotout = List.rev (List.tl folded) in
-    (*Hashtbl.add iAEsHtbl (sid,true) foldedout;
-    Hashtbl.add iAEsHtbl (sid,false) foldednotout;*)
-    (*if out then foldedout else*) foldednotout
-
-class aeVisitorClass = object(self)
-  inherit nopCilVisitor
-
-  val mutable sid = -1
-
-  val mutable ae_dat_lst = []
-
-  val mutable cur_ae_dat = None
-
-  method vstmt stm =
-    sid <- stm.sid;
-    match getAEs sid with
-      None ->
-	if !debug then ignore(E.log "aeVis: stm %d has no data\n" sid);
-	cur_ae_dat <- None;
-	DoChildren
-    | Some eh ->
-	match stm.skind with
-	  Instr il ->
-	    if !debug then ignore(E.log "aeVist: visit il\n");
-	    ae_dat_lst <- S.time "instrAEs" (instrAEs il stm.sid eh) false;
-	    DoChildren
-	| _ ->
-	    if !debug then ignore(E.log "aeVisit: visit non-il\n");
-	    cur_ae_dat <- None;
-	    DoChildren
-
-  method vinst i =
-    if !debug then ignore(E.log "aeVist: before %a, ae_dat_lst is %d long\n"
-			    d_instr i (List.length ae_dat_lst));
-    try
-      let data = List.hd ae_dat_lst in
-      cur_ae_dat <- Some(data);
-      ae_dat_lst <- List.tl ae_dat_lst;
-      if !debug then ignore(E.log "aeVisit: data is %a\n" eh_pretty data);
-      DoChildren
-    with Failure "hd" ->
-      if !debug then ignore(E.log "aeVis: il ae_dat_lst mismatch\n");
-      DoChildren
-
-  method get_cur_eh () =
-    match cur_ae_dat with
-      None -> getAEs sid
-    | Some eh -> Some eh
-
-end
diff --git a/cil/src/ext/bitmap.ml b/cil/src/ext/bitmap.ml
deleted file mode 100644
index da1f8b99c..000000000
--- a/cil/src/ext/bitmap.ml
+++ /dev/null
@@ -1,224 +0,0 @@
-
-                                        (* Imperative bitmaps *)
-type t = { mutable nrWords  : int;
-           mutable nrBits   : int;      (* This is 31 * nrWords *)
-           mutable bitmap   : int array }
-
-
-                                        (* Enlarge a bitmap to contain at 
-                                         * least newBits *)
-let enlarge b newWords = 
-  let newbitmap = 
-    if newWords > b.nrWords then
-      let a = Array.create newWords 0 in
-      Array.blit b.bitmap 0 a 0 b.nrWords;
-      a
-    else
-      b.bitmap in
-  b.nrWords <- newWords;
-  b.nrBits  <- (newWords lsl 5) - newWords;
-  b.bitmap  <- newbitmap
-        
-
-                                        (* Create a new empty bitmap *)
-let make size = 
-  let wrd = (size + 30) / 31 in
-  { nrWords  = wrd;
-    nrBits   = (wrd lsl 5) - wrd;
-    bitmap   = Array.make wrd 0
-  } 
-
-let size t = t.nrBits 
-                                        (* Make an initialized array *)
-let init size how = 
-  let wrd = (size + 30) / 31 in
-  let how' w = 
-    let first = (w lsl 5) - w in
-    let last  = min size (first + 31) in 
-    let rec loop i acc = 
-      if i >= last then acc 
-      else
-        let acc' = acc lsl 1 in
-        if how i then loop (i + 1) (acc' lor 1) 
-        else loop (i + 1) acc'
-    in
-    loop first 0
-  in
-  { nrWords  = wrd;
-    nrBits   = (wrd lsl 5) - wrd;
-    bitmap   = Array.init wrd how'
-  } 
-  
-let clone b = 
-  { nrWords  = b.nrWords;
-    nrBits   = b.nrBits;
-    bitmap   = Array.copy b.bitmap;
-  } 
-    
-let cloneEmpty b =
-  { nrWords  = b.nrWords;
-    nrBits   = b.nrBits;
-    bitmap   = Array.make b.nrWords 0;
-  } 
-
-let union b1 b2 = 
-  begin
-    let n = b2.nrWords in
-    if b1.nrWords < n then enlarge b1 n else ();
-    let a1 = b1.bitmap in
-    let a2 = b2.bitmap in
-    let changed = ref false in
-    for i=0 to n - 1 do
-      begin
-        let t = a1.(i) in
-        let upd = t lor a2.(i) in
-        let _ = if upd <> t then changed := true else () in
-        Array.unsafe_set a1 i upd
-      end
-    done;
-    ! changed
-  end
-                                        (* lin += (lout - def) *)
-let accLive lin lout def = 
-  begin                                 (* Need to enlarge def to lout *)
-    let n = lout.nrWords in
-    if def.nrWords < n then enlarge def n else ();
-                                        (* Need to enlarge lin to lout *)
-    if lin.nrWords < n then enlarge lin n else ();
-    let changed = ref false in
-    let alin  = lin.bitmap in
-    let alout = lout.bitmap in
-    let adef  = def.bitmap in
-    for i=0 to n - 1 do
-      begin
-        let old = alin.(i) in
-        let nw  = old lor (alout.(i) land (lnot adef.(i))) in
-        alin.(i) <- nw;
-        changed := (old <> nw) || (!changed)
-      end
-    done;
-    !changed
-  end
-
-                                        (* b1 *= b2 *)
-let inters b1 b2 = 
-  begin
-    let n = min b1.nrWords b2.nrWords in
-    let a1 = b1.bitmap in
-    let a2 = b2.bitmap in
-    for i=0 to n - 1 do
-      begin
-        a1.(i) <- a1.(i) land a2.(i)
-      end
-    done;
-    if n < b1.nrWords then
-      Array.fill a1 n (b1.nrWords - n) 0
-    else
-      ()
-  end
-
-let emptyInt b start = 
-  let n = b.nrWords in
-  let a = b.bitmap in
-  let rec loop i = i >= n || (a.(i) = 0 && loop (i + 1))
-  in
-  loop start
-
-let empty b = emptyInt b 0
-
-                                        (* b1 =? b2 *)
-let equal b1 b2 =
-  begin
-    let n = min b1.nrWords b2.nrWords in
-    let a1 = b1.bitmap in
-    let a2 = b2.bitmap in
-    let res = ref true in
-    for i=0 to n - 1 do
-      begin
-        if a1.(i) != a2.(i) then res := false else ()
-      end
-    done;
-    if !res then 
-      if b1.nrWords > n then
-        emptyInt b1 n
-      else if b2.nrWords > n then 
-        emptyInt b2 n
-      else
-        true
-    else
-      false
-  end
-
-let assign b1 b2 = 
-  begin
-    let n = b2.nrWords in
-    if b1.nrWords < n then enlarge b1 n else ();
-    let a1 = b1.bitmap in
-    let a2 = b2.bitmap in
-    Array.blit a2 0 a1 0 n 
-  end
-
-                                        (* b1 -= b2 *)
-let diff b1 b2 = 
-  begin
-    let n = min b1.nrWords b2.nrWords in
-    let a1 = b1.bitmap in
-    let a2 = b2.bitmap in
-    for i=0 to n - 1 do
-        a1.(i) <- a1.(i) land (lnot a2.(i))
-    done;
-    if n < b1.nrWords then 
-      Array.fill a1 n (b1.nrWords - n) 0
-    else
-      ()
-  end
-
-
-      
-
-let get bmp i = 
-  assert (i >= 0);
-  if i >= bmp.nrBits then enlarge bmp (i / 31 + 1) else ();
-  let wrd = i / 31 in
-  let msk = 1 lsl (i + wrd - (wrd lsl 5)) in
-  bmp.bitmap.(wrd) land msk != 0 
-
-
-let set bmp i tv = 
-  assert(i >= 0);
-  let wrd = i / 31 in
-  let msk = 1 lsl (i + wrd - (wrd lsl 5)) in
-  if i >= bmp.nrBits then enlarge bmp (wrd + 1) else ();
-  if tv then 
-    bmp.bitmap.(wrd) <- bmp.bitmap.(wrd) lor msk
-  else
-    bmp.bitmap.(wrd) <- bmp.bitmap.(wrd) land (lnot msk)
-
-  
-
-                                        (* Iterate over all elements in a 
-                                         * bitmap *)
-let fold f bmp arg =
-  let a = bmp.bitmap in
-  let n = bmp.nrWords in
-  let rec allWords i bit arg = 
-    if i >= n then
-      arg
-    else
-      let rec allBits msk bit left arg = 
-        if left = 0 then 
-          allWords (i + 1) bit arg
-        else
-          allBits ((lsr) msk 1) (bit + 1) (left - 1) 
-                 (if (land) msk 1 != 0 then f arg bit else arg)
-      in
-      allBits a.(i) bit 31 arg 
-  in
-  allWords 0 0 arg
-
-
-let iter f t = fold (fun x y -> f y) t ()
-
-let toList bmp = fold (fun acc i -> i :: acc) bmp []
-
-let card bmp   = fold (fun acc _ -> acc + 1) bmp 0 
diff --git a/cil/src/ext/bitmap.mli b/cil/src/ext/bitmap.mli
deleted file mode 100644
index 5247e35d3..000000000
--- a/cil/src/ext/bitmap.mli
+++ /dev/null
@@ -1,50 +0,0 @@
-
-                              (* Imperative bitmaps *)
-
-type t
-                                        (* Create a bitmap given the number 
-                                         * of bits *)
-val  make : int -> t
-val  init : int -> (int -> bool) -> t   (* Also initialize it *)
-
-val  size : t -> int                    (* How much space it is reserved *)
-
-                                        (* The cardinality of a set *)
-val  card  : t -> int
-
-                                        (* Make a copy of a bitmap *)
-val  clone : t -> t 
-
-val  cloneEmpty : t -> t                (* An empty set with the same 
-                                         * dimentions *)
-
-val  set : t -> int -> bool -> unit
-val  get : t -> int -> bool
-                                        (* destructive union. The first 
-                                         * element is updated. Returns true 
-                                         * if any change was actually 
-                                         * necessary  *)
-val  union  : t -> t -> bool
-
-                                        (* accLive livein liveout def. Does 
-                                         * liveIn += (liveout - def) *)
-val  accLive : t -> t -> t -> bool
-
-                                        (* Copy the second argument onto the 
-                                         * first *)
-val  assign : t -> t -> unit
-
-
-val  inters : t -> t -> unit
-val  diff   : t -> t -> unit
-
-
-val  empty  : t -> bool
-
-val  equal  : t -> t -> bool
-
-val  toList : t -> int list
-
-val  iter   : (int -> unit) -> t -> unit
-val  fold   : ('a -> int -> 'a) -> t -> 'a -> 'a 
-
diff --git a/cil/src/ext/blockinggraph.ml b/cil/src/ext/blockinggraph.ml
deleted file mode 100644
index 281678ae0..000000000
--- a/cil/src/ext/blockinggraph.ml
+++ /dev/null
@@ -1,769 +0,0 @@
-(*
- *
- * Copyright (c) 2001-2002, 
- *  George C. Necula    <necula@cs.berkeley.edu>
- *  Scott McPeak        <smcpeak@cs.berkeley.edu>
- *  Wes Weimer          <weimer@cs.berkeley.edu>
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. The names of the contributors may not be used to endorse or promote
- * products derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
- * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
- * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- *)
-open Cil
-open Pretty
-module E = Errormsg
-
-let debug = false
-
-let fingerprintAll = true
-
-
-type blockkind =
-    NoBlock
-  | BlockTrans
-  | BlockPoint
-  | EndPoint
-
-(* For each function we have a node *)
-type node =
-{
-  nodeid: int;
-  name: string;
-  mutable scanned: bool;
-  mutable expand: bool;
-  mutable fptr: bool;
-  mutable stacksize: int;
-  mutable fds: fundec option;
-  mutable bkind: blockkind;
-  mutable origkind: blockkind;
-  mutable preds: node list;
-  mutable succs: node list;
-  mutable predstmts: (stmt * node) list;
-}
-
-type blockpt =
-{
-  id: int;
-  point: stmt;
-  callfun: string;
-  infun: string;
-  mutable leadsto: blockpt list;
-}
-
-
-(* Fresh ids for each node. *)
-let curNodeNum : int ref = ref 0
-let getFreshNodeNum () : int =
-  let num = !curNodeNum in
-  incr curNodeNum;
-  num
-
-(* Initialize a node. *)
-let newNode (name: string) (fptr: bool) (mangle: bool) : node =
-  let id = getFreshNodeNum () in
-  { nodeid = id; name = if mangle then name ^ (string_of_int id) else name;
-    scanned = false; expand = false;
-    fptr = fptr; stacksize = 0; fds = None;
-    bkind = NoBlock; origkind = NoBlock;
-    preds = []; succs = []; predstmts = []; }
-
-
-(* My type signature ignores attributes and function pointers. *)
-let myTypeSig (t: typ) : typsig =
-  let rec removeFunPtrs (ts: typsig) : typsig =
-    match ts with
-      TSPtr (TSFun _, a) ->
-        TSPtr (TSBase voidType, a)
-    | TSPtr (base, a) ->
-        TSPtr (removeFunPtrs base, a)
-    | TSArray (base, e, a) ->
-        TSArray (removeFunPtrs base, e, a)
-    | TSFun (ret, args, v, a) ->
-        TSFun (removeFunPtrs ret, List.map removeFunPtrs args, v, a)
-    | _ -> ts
-  in
-  removeFunPtrs (typeSigWithAttrs (fun _ -> []) t)
-
-
-(* We add a dummy function whose name is "@@functionPointer@@" that is called 
- * at all invocations of function pointers and itself calls all functions 
- * whose address is taken.  *)
-let functionPointerName = "@@functionPointer@@"
-
-(* We map names to nodes *)
-let functionNodes: (string, node) Hashtbl.t = Hashtbl.create 113 
-let getFunctionNode (n: string) : node = 
-  Util.memoize 
-    functionNodes
-    n
-    (fun _ -> newNode n false false)
-
-(* We map types to nodes for function pointers *)
-let functionPtrNodes: (typsig, node) Hashtbl.t = Hashtbl.create 113
-let getFunctionPtrNode (t: typ) : node =
-  Util.memoize
-    functionPtrNodes
-    (myTypeSig t)
-    (fun _ -> newNode functionPointerName true true)
-
-let startNode: node = newNode "@@startNode@@" true false
-
-
-(*
-(** Dump the function call graph. *)
-let dumpFunctionCallGraph (start: node) = 
-  Hashtbl.iter (fun _ x -> x.scanned <- false) functionNodes;
-  let rec dumpOneNode (ind: int) (n: node) : unit = 
-    output_string !E.logChannel "\n";
-    for i = 0 to ind do 
-      output_string !E.logChannel "  "
-    done;
-    output_string !E.logChannel (n.name ^ " ");
-    begin
-      match n.bkind with
-        NoBlock -> ()
-      | BlockTrans -> output_string !E.logChannel " <blocks>"
-      | BlockPoint -> output_string !E.logChannel " <blockpt>"
-      | EndPoint -> output_string !E.logChannel " <endpt>"
-    end;
-    if n.scanned then (* Already dumped *)
-      output_string !E.logChannel " <rec> "
-    else begin
-      n.scanned <- true;
-      List.iter (fun n -> if n.bkind <> EndPoint then dumpOneNode (ind + 1) n)
-                n.succs
-    end
-  in
-  dumpOneNode 0 start;
-  output_string !E.logChannel "\n\n"
-*)
-
-let dumpFunctionCallGraphToFile () = 
-  let channel = open_out "graph" in
-  let dumpNode _ (n: node) : unit =
-    let first = ref true in
-    let dumpSucc (n: node) : unit =
-      if !first then
-        first := false
-      else
-        output_string channel ",";
-      output_string channel n.name
-    in
-    output_string channel (string_of_int n.nodeid);
-    output_string channel ":";
-    output_string channel (string_of_int n.stacksize);
-    output_string channel ":";
-    if n.fds = None && not n.fptr then
-      output_string channel "x";
-    output_string channel ":";
-    output_string channel n.name;
-    output_string channel ":";
-    List.iter dumpSucc n.succs;
-    output_string channel "\n";
-  in
-  dumpNode () startNode;
-  Hashtbl.iter dumpNode functionNodes;
-  Hashtbl.iter dumpNode functionPtrNodes;
-  close_out channel
-  
-
-let addCall (callerNode: node) (calleeNode: node) (sopt: stmt option) =
-  if not (List.exists (fun n -> n.name = calleeNode.name)
-                      callerNode.succs) then begin
-    if debug then
-      ignore (E.log "found call from %s to %s\n"
-                    callerNode.name calleeNode.name);
-    callerNode.succs <- calleeNode :: callerNode.succs;
-    calleeNode.preds <- callerNode :: calleeNode.preds;
-  end;
-  match sopt with
-    Some s ->
-      if not (List.exists (fun (s', _) -> s' = s) calleeNode.predstmts) then
-        calleeNode.predstmts <- (s, callerNode) :: calleeNode.predstmts
-  | None -> ()
-
-
-class findCallsVisitor (host: node) : cilVisitor = object
-  inherit nopCilVisitor
-
-  val mutable curStmt : stmt ref = ref (mkEmptyStmt ())
-
-  method vstmt s =
-    curStmt := s;
-    DoChildren
-
-  method vinst i =
-    match i with
-    | Call(_,Lval(Var(vi),NoOffset),args,l) -> 
-        addCall host (getFunctionNode vi.vname) (Some !curStmt);
-        SkipChildren
-
-    | Call(_,e,_,l) -> (* Calling a function pointer *)
-        addCall host (getFunctionPtrNode (typeOf e)) (Some !curStmt);
-        SkipChildren
-
-    | _ -> SkipChildren (* No calls in other instructions *)
-
-  (* There are no calls in expressions and types *)          
-  method vexpr e = SkipChildren
-  method vtype t = SkipChildren
-
-end
-
-
-let endPt = { id = 0; point = mkEmptyStmt (); callfun = "end"; infun = "end";
-              leadsto = []; }
-
-(* These values will be initialized for real in makeBlockingGraph. *)
-let curId : int ref = ref 1
-let startName : string ref = ref ""
-let blockingPoints : blockpt list ref = ref []
-let blockingPointsNew : blockpt Queue.t = Queue.create ()
-let blockingPointsHash : (int, blockpt) Hashtbl.t = Hashtbl.create 113
-
-let getFreshNum () : int =
-  let num = !curId in
-  curId := !curId + 1;
-  num
-
-let getBlockPt (s: stmt) (cfun: string) (ifun: string) : blockpt =
-  try
-    Hashtbl.find blockingPointsHash s.sid
-  with Not_found ->
-    let num = getFreshNum () in
-    let bpt = { id = num; point = s; callfun = cfun; infun = ifun;
-                leadsto = []; } in
-    Hashtbl.add blockingPointsHash s.sid bpt;
-    blockingPoints := bpt :: !blockingPoints;
-    Queue.add bpt blockingPointsNew;
-    bpt
-
-
-type action =
-    Process of stmt * node
-  | Next of stmt * node
-  | Return of node
-
-let getStmtNode (s: stmt) : node option =
-  match s.skind with
-    Instr instrs -> begin
-      let len = List.length instrs in
-      if len > 0 then
-        match List.nth instrs (len - 1) with
-          Call (_, Lval (Var vi, NoOffset), args, _) -> 
-            Some (getFunctionNode vi.vname)
-        | Call (_, e, _, _) -> (* Calling a function pointer *)
-            Some (getFunctionPtrNode (typeOf e))
-        | _ ->
-            None
-      else
-        None
-      end
-  | _ -> None
-
-let addBlockingPointEdge (bptFrom: blockpt) (bptTo: blockpt) : unit =
-  if not (List.exists (fun bpt -> bpt = bptTo) bptFrom.leadsto) then
-    bptFrom.leadsto <- bptTo :: bptFrom.leadsto
-
-let findBlockingPointEdges (bpt: blockpt) : unit =
-  let seenStmts = Hashtbl.create 117 in
-  let worklist = Queue.create () in
-  Queue.add (Next (bpt.point, getFunctionNode bpt.infun)) worklist;
-  while Queue.length worklist > 0 do
-    let act = Queue.take worklist in
-    match act with
-      Process (curStmt, curNode) -> begin
-        Hashtbl.add seenStmts curStmt.sid ();
-        match getStmtNode curStmt with
-          Some node -> begin
-            if debug then
-              ignore (E.log "processing node %s\n" node.name);
-            match node.bkind with
-              NoBlock ->
-                Queue.add (Next (curStmt, curNode)) worklist
-            | BlockTrans -> begin
-                let processFundec (fd: fundec) : unit =
-                  let s = List.hd fd.sbody.bstmts in
-                  if not (Hashtbl.mem seenStmts s.sid) then
-                    let n = getFunctionNode fd.svar.vname in
-                    Queue.add (Process (s, n)) worklist
-                in
-                match node.fds with
-                  Some fd ->
-                    processFundec fd
-                | None ->
-                    List.iter
-                      (fun n ->
-                         match n.fds with
-                           Some fd -> processFundec fd
-                         | None -> E.s (bug "expected fundec"))
-                      node.succs
-              end
-            | BlockPoint ->
-                addBlockingPointEdge bpt
-                  (getBlockPt curStmt node.name curNode.name)
-            | EndPoint ->
-                addBlockingPointEdge bpt endPt
-          end
-        | _ ->
-            Queue.add (Next (curStmt, curNode)) worklist
-      end
-    | Next (curStmt, curNode) -> begin
-        match curStmt.Cil.succs with
-          [] ->
-            if debug then
-              ignore (E.log "hit end of %s\n" curNode.name);
-            Queue.add (Return curNode) worklist
-        | _ ->
-            List.iter (fun s ->
-                         if not (Hashtbl.mem seenStmts s.sid) then
-                           Queue.add (Process (s, curNode)) worklist)
-                      curStmt.Cil.succs
-      end
-    | Return curNode when curNode.bkind = NoBlock ->
-        ()
-    | Return curNode when curNode.name = !startName ->
-        addBlockingPointEdge bpt endPt
-    | Return curNode ->
-        List.iter (fun (s, n) -> if n.bkind <> NoBlock then
-                                   Queue.add (Next (s, n)) worklist)
-                  curNode.predstmts;
-        List.iter (fun n -> if n.fptr then
-                               Queue.add (Return n) worklist)
-                  curNode.preds
-  done
-
-let markYieldPoints (n: node) : unit =
-  let rec markNode (n: node) : unit =
-    if n.bkind = NoBlock then
-      match n.origkind with
-        BlockTrans ->
-          if n.expand || n.fptr then begin
-            n.bkind <- BlockTrans;
-            List.iter markNode n.succs
-          end else begin
-            n.bkind <- BlockPoint
-          end
-      | _ ->
-          n.bkind <- n.origkind
-  in
-  Hashtbl.iter (fun _ n -> n.bkind <- NoBlock) functionNodes;
-  Hashtbl.iter (fun _ n -> n.bkind <- NoBlock) functionPtrNodes;
-  markNode n
-
-let makeBlockingGraph (start: node) =
-  let startStmt =
-    match start.fds with
-      Some fd -> List.hd fd.sbody.bstmts
-    | None -> E.s (bug "expected fundec")
-  in
-  curId := 1;
-  startName := start.name;
-  blockingPoints := [endPt];
-  Queue.clear blockingPointsNew;
-  Hashtbl.clear blockingPointsHash;
-  ignore (getBlockPt startStmt start.name start.name);
-  while Queue.length blockingPointsNew > 0 do
-    let bpt = Queue.take blockingPointsNew in
-    findBlockingPointEdges bpt;
-  done
-
-let dumpBlockingGraph () =
-  List.iter
-    (fun bpt ->
-       if bpt.id < 2 then begin
-         ignore (E.log "bpt %d (%s): " bpt.id bpt.callfun)
-       end else begin
-         ignore (E.log "bpt %d (%s in %s): " bpt.id bpt.callfun bpt.infun)
-       end;
-       List.iter (fun bpt -> ignore (E.log "%d " bpt.id)) bpt.leadsto;
-       ignore (E.log "\n"))
-    !blockingPoints;
-  ignore (E.log "\n")
-
-let beforeFun =
-  makeGlobalVar "before_bg_node"
-                (TFun (voidType, Some [("node_idx", intType, []);
-                                       ("num_edges", intType, [])],
-                       false, []))
-
-let initFun =
-  makeGlobalVar "init_blocking_graph"
-                (TFun (voidType, Some [("num_nodes", intType, [])],
-                       false, []))
-
-let fingerprintVar =
-  let vi = makeGlobalVar "stack_fingerprint" intType in
-  vi.vstorage <- Extern;
-  vi
-
-let startNodeAddrs =
-  let vi = makeGlobalVar "start_node_addrs" (TPtr (voidPtrType, [])) in
-  vi.vstorage <- Extern;
-  vi
-
-let startNodeStacks =
-  let vi = makeGlobalVar "start_node_stacks" (TPtr (intType, [])) in
-  vi.vstorage <- Extern;
-  vi
-
-let startNodeAddrsArray =
-  makeGlobalVar "start_node_addrs_array" (TArray (voidPtrType, None, [])) 
-
-let startNodeStacksArray =
-  makeGlobalVar "start_node_stacks_array" (TArray (intType, None, [])) 
-
-let insertInstr (newInstr: instr) (s: stmt) : unit =
-  match s.skind with
-    Instr instrs ->
-      let rec insert (instrs: instr list) : instr list =
-        match instrs with
-          [] -> E.s (bug "instr list does not end with call\n")
-        | [Call _] -> newInstr :: instrs
-        | i :: rest -> i :: (insert rest)
-      in
-      s.skind <- Instr (insert instrs)
-  | _ ->
-      E.s (bug "instr stmt expected\n")
-
-let instrumentBlockingPoints () =
-  List.iter
-    (fun bpt ->
-       if bpt.id > 1 then
-       let arg1 = integer bpt.id in
-       let arg2 = integer (List.length bpt.leadsto) in
-       let call = Call (None, Lval (var beforeFun),
-                        [arg1; arg2], locUnknown) in
-       insertInstr call bpt.point;
-       addCall (getFunctionNode bpt.infun)
-               (getFunctionNode beforeFun.vname) None)
-    !blockingPoints
-
-
-let startNodes : node list ref = ref []
-
-let makeAndDumpBlockingGraphs () : unit =
-  if List.length !startNodes > 1 then
-    E.s (unimp "We can't handle more than one start node right now.\n");
-  List.iter
-    (fun n ->
-       markYieldPoints n;
-       (*dumpFunctionCallGraph n;*)
-       makeBlockingGraph n;
-       dumpBlockingGraph ();
-       instrumentBlockingPoints ())
-    !startNodes
-
-
-let pragmas : (string, int) Hashtbl.t = Hashtbl.create 13
-
-let gatherPragmas (f: file) : unit =
-  List.iter
-    (function
-       GPragma (Attr ("stacksize", [AStr s; AInt n]), _) ->
-         Hashtbl.add pragmas s n
-     | _ -> ())
-    f.globals
-
-
-let blockingNodes : node list ref = ref []
-
-let markBlockingFunctions () : unit =
-  let rec markFunction (n: node) : unit =
-    if debug then
-      ignore (E.log "marking %s\n" n.name);
-    if n.origkind = NoBlock then begin
-      n.origkind <- BlockTrans;
-      List.iter markFunction n.preds;
-    end
-  in
-  List.iter (fun n -> List.iter markFunction n.preds) !blockingNodes
-
-let hasFunctionTypeAttribute (n: string) (t: typ) : bool = 
-  let _, _, _, a = splitFunctionType t in 
-  hasAttribute n a
-
-let markVar (vi: varinfo) : unit =
-  let node = getFunctionNode vi.vname in
-  if node.origkind = NoBlock then begin
-    if hasAttribute "yield" vi.vattr then begin
-      node.origkind <- BlockPoint;
-      blockingNodes := node :: !blockingNodes;
-    end else if hasFunctionTypeAttribute "noreturn" vi.vtype then begin
-      node.origkind <- EndPoint;
-    end else if hasAttribute "expand" vi.vattr then begin
-      node.expand <- true;
-    end
-  end;
-  begin
-    try
-      node.stacksize <- Hashtbl.find pragmas node.name
-    with Not_found -> begin
-      match filterAttributes "stacksize" vi.vattr with
-        (Attr (_, [AInt n])) :: _ when n > node.stacksize ->
-          node.stacksize <- n
-      | _ -> ()
-    end
-  end
-
-let makeFunctionCallGraph (f: Cil.file) : unit = 
-  Hashtbl.clear functionNodes;
-  (* Scan the file and construct the control-flow graph *)
-  List.iter
-    (function
-        GFun(fdec, _) -> 
-          let curNode = getFunctionNode fdec.svar.vname in
-          if fdec.svar.vaddrof then begin
-            addCall (getFunctionPtrNode fdec.svar.vtype)
-                    curNode None;
-          end;
-          if hasAttribute "start" fdec.svar.vattr then begin
-            startNodes := curNode :: !startNodes;
-          end;
-          markVar fdec.svar;
-          curNode.fds <- Some fdec;
-          let vis = new findCallsVisitor curNode in
-          ignore (visitCilBlock vis fdec.sbody)
-
-      | GVarDecl(vi, _) when isFunctionType vi.vtype ->
-          (* TODO: what if we take the addr of an extern? *)
-          markVar vi
-
-      | _ -> ())
-    f.globals
-
-let makeStartNodeLinks () : unit =
-  addCall startNode (getFunctionNode "main") None;
-  List.iter (fun n -> addCall startNode n None) !startNodes
-
-let funType (ret_t: typ) (args: (string * typ) list) = 
-  TFun(ret_t, 
-      Some (List.map (fun (n,t) -> (n, t, [])) args),
-      false, [])
-
-class instrumentClass = object
-  inherit nopCilVisitor
-
-  val mutable curNode : node ref = ref (getFunctionNode "main")
-  val mutable seenRet : bool ref = ref false
-
-  val mutable funId : int ref = ref 0
-
-  method vfunc (fdec: fundec) : fundec visitAction = begin
-    (* Remember the current function. *)
-    curNode := getFunctionNode fdec.svar.vname;
-    seenRet := false;
-    funId := Random.bits ();
-    (* Add useful locals. *)
-    ignore (makeLocalVar fdec "savesp" voidPtrType);
-    ignore (makeLocalVar fdec "savechunk" voidPtrType);
-    ignore (makeLocalVar fdec "savebottom" voidPtrType);
-    (* Add macro for function entry when we're done. *)
-    let addEntryNode (fdec: fundec) : fundec =
-      if not !seenRet then E.s (bug "didn't find a return statement");
-      let node = getFunctionNode fdec.svar.vname in
-      if fingerprintAll || node.origkind <> NoBlock then begin
-        let fingerprintSet =
-          Set (var fingerprintVar, BinOp (BXor, Lval (var fingerprintVar),
-                                          integer !funId, intType),
-               locUnknown)
-        in
-        fdec.sbody.bstmts <- mkStmtOneInstr fingerprintSet :: fdec.sbody.bstmts
-      end;
-      let nodeFun = emptyFunction ("NODE_CALL_"^(string_of_int node.nodeid)) in
-      let nodeCall = Call (None, Lval (var nodeFun.svar), [], locUnknown) in
-      nodeFun.svar.vtype <- funType voidType [];
-      nodeFun.svar.vstorage <- Static;
-      fdec.sbody.bstmts <- mkStmtOneInstr nodeCall :: fdec.sbody.bstmts;
-      fdec
-    in
-    ChangeDoChildrenPost (fdec, addEntryNode)
-  end
-
-  method vstmt (s: stmt) : stmt visitAction = begin
-    begin
-      match s.skind with
-        Instr instrs -> begin
-          let instrumentNode (callNode: node) : unit =
-            (* Make calls to macros. *)
-            let suffix = "_" ^ (string_of_int !curNode.nodeid) ^
-                         "_" ^ (string_of_int callNode.nodeid)
-            in
-            let beforeFun = emptyFunction ("BEFORE_CALL" ^ suffix) in
-            let beforeCall = Call (None, Lval (var beforeFun.svar),
-                                   [], locUnknown) in
-            beforeFun.svar.vtype <- funType voidType [];
-            beforeFun.svar.vstorage <- Static;
-            let afterFun = emptyFunction ("AFTER_CALL" ^ suffix) in
-            let afterCall = Call (None, Lval (var afterFun.svar),
-                                  [], locUnknown) in
-            afterFun.svar.vtype <- funType voidType [];
-            afterFun.svar.vstorage <- Static;
-            (* Insert instrumentation around call site. *)
-            let rec addCalls (is: instr list) : instr list =
-              match is with
-                [call] -> [beforeCall; call; afterCall]
-              | cur :: rest -> cur :: addCalls rest
-              | [] -> E.s (bug "expected list of non-zero length")
-            in
-            s.skind <- Instr (addCalls instrs)
-          in
-          (* If there's a call site here, instrument it. *)
-          let len = List.length instrs in
-          if len > 0 then begin
-            match List.nth instrs (len - 1) with
-              Call (_, Lval (Var vi, NoOffset), _, _) ->
-              (*
-                if (try String.sub vi.vname 0 10 <> "NODE_CALL_"
-                    with Invalid_argument _ -> true) then
-*)
-                  instrumentNode (getFunctionNode vi.vname)
-            | Call (_, e, _, _) -> (* Calling a function pointer *)
-                instrumentNode (getFunctionPtrNode (typeOf e))
-            | _ -> ()
-          end;
-          DoChildren
-        end
-      | Cil.Return _ -> begin
-          if !seenRet then E.s (bug "found multiple returns");
-          seenRet := true;
-          if fingerprintAll || !curNode.origkind <> NoBlock then begin
-            let fingerprintSet =
-              Set (var fingerprintVar, BinOp (BXor, Lval (var fingerprintVar),
-                                              integer !funId, intType),
-                   locUnknown)
-            in
-            s.skind <- Block (mkBlock [mkStmtOneInstr fingerprintSet;
-                                       mkStmt s.skind]);
-          end;
-          SkipChildren
-        end
-      | _ -> DoChildren
-    end
-  end
-end
-
-let makeStartNodeTable (globs: global list) : global list =
-  if List.length !startNodes = 0 then
-    globs
-  else
-    let addrInitInfo = { init = None } in
-    let stackInitInfo = { init = None } in
-    let rec processNode (nodes: node list) (i: int) =
-      match nodes with
-        node :: rest ->
-          let curGlobs, addrInit, stackInit = processNode rest (i + 1) in
-          let fd =
-            match node.fds with
-              Some fd -> fd
-            | None -> E.s (bug "expected fundec")
-          in
-          let stack =
-            makeGlobalVar ("NODE_STACK_" ^ (string_of_int node.nodeid)) intType
-          in
-          GVarDecl (fd.svar, locUnknown) :: curGlobs,
-          ((Index (integer i, NoOffset), SingleInit (mkAddrOf (var fd.svar))) ::
-           addrInit),
-          ((Index (integer i, NoOffset), SingleInit (Lval (var stack))) ::
-           stackInit)
-      | [] -> (GVarDecl (startNodeAddrs, locUnknown) ::
-               GVarDecl (startNodeStacks, locUnknown) ::
-               GVar (startNodeAddrsArray, addrInitInfo, locUnknown) ::
-               GVar (startNodeStacksArray, stackInitInfo, locUnknown) ::
-               []),
-              [Index (integer i, NoOffset), SingleInit zero],
-              [Index (integer i, NoOffset), SingleInit zero]
-    in
-    let newGlobs, addrInit, stackInit = processNode !startNodes 0 in
-    addrInitInfo.init <-
-      Some (CompoundInit (TArray (voidPtrType, None, []), addrInit));
-    stackInitInfo.init <-
-      Some (CompoundInit (TArray (intType, None, []), stackInit));
-    let file = { fileName = "startnode.h"; globals = newGlobs;
-                 globinit = None; globinitcalled = false; } in
-    let channel = open_out file.fileName in
-    dumpFile defaultCilPrinter channel file;
-    close_out channel;
-    GText ("#include \"" ^ file.fileName ^ "\"") :: globs
-
-let instrumentProgram (f: file) : unit =
-  (* Add function prototypes. *)
-  f.globals <- makeStartNodeTable f.globals;
-  f.globals <- GText ("#include \"stack.h\"") ::
-               GVarDecl (initFun, locUnknown) ::
-               GVarDecl (beforeFun, locUnknown) ::
-               GVarDecl (fingerprintVar, locUnknown) ::
-               f.globals;
-  (* Add instrumentation to call sites. *)
-  visitCilFile ((new instrumentClass) :> cilVisitor) f;
-  (* Force creation of this node. *)
-  ignore (getFunctionNode beforeFun.vname);
-  (* Add initialization call to main(). *)
-  let mainNode = getFunctionNode "main" in
-  match mainNode.fds with
-    Some fdec ->
-      let arg1 = integer (List.length !blockingPoints) in
-      let initInstr = Call (None, Lval (var initFun), [arg1], locUnknown) in
-      let addrsInstr =
-        Set (var startNodeAddrs, StartOf (var startNodeAddrsArray),
-             locUnknown)
-      in
-      let stacksInstr =
-        Set (var startNodeStacks, StartOf (var startNodeStacksArray),
-             locUnknown)
-      in
-      let newStmt =
-        if List.length !startNodes = 0 then
-          mkStmtOneInstr initInstr
-        else
-          mkStmt (Instr [addrsInstr; stacksInstr; initInstr])
-      in
-      fdec.sbody.bstmts <- newStmt :: fdec.sbody.bstmts;
-      addCall mainNode (getFunctionNode initFun.vname) None
-  | None ->
-      E.s (bug "expected main fundec")
-
-
-
-let feature : featureDescr = 
-  { fd_name = "FCG";
-    fd_enabled = ref false;
-    fd_description = "computing and printing a static call graph";
-    fd_extraopt = [];
-    fd_doit = 
-    (function (f : file) ->
-      Random.init 0; (* Use the same seed so that results are predictable. *)
-      gatherPragmas f;
-      makeFunctionCallGraph f;
-      makeStartNodeLinks ();
-      markBlockingFunctions ();
-      (* makeAndDumpBlockingGraphs (); *)
-      instrumentProgram f;
-      dumpFunctionCallGraphToFile ());
-    fd_post_check = true;
-  } 
diff --git a/cil/src/ext/blockinggraph.mli b/cil/src/ext/blockinggraph.mli
deleted file mode 100644
index 72f9ba7be..000000000
--- a/cil/src/ext/blockinggraph.mli
+++ /dev/null
@@ -1,40 +0,0 @@
-(*
- *
- * Copyright (c) 2001-2002, 
- *  George C. Necula    <necula@cs.berkeley.edu>
- *  Scott McPeak        <smcpeak@cs.berkeley.edu>
- *  Wes Weimer          <weimer@cs.berkeley.edu>
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. The names of the contributors may not be used to endorse or promote
- * products derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
- * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
- * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- *)
-
-(* This module finds and analyzes yield points. *)
-
-val feature: Cil.featureDescr
diff --git a/cil/src/ext/callgraph.ml b/cil/src/ext/callgraph.ml
deleted file mode 100644
index 58472ac67..000000000
--- a/cil/src/ext/callgraph.ml
+++ /dev/null
@@ -1,250 +0,0 @@
-(* callgraph.ml *)
-(* code for callgraph.mli *)
-
-(* see copyright notice at end of this file *)
-
-open Cil
-open Trace
-open Printf
-module P = Pretty
-module IH = Inthash
-module H = Hashtbl
-module E = Errormsg
-
-(* ------------------- interface ------------------- *)
-(* a call node describes the local calling structure for a
- * single function: which functions it calls, and which
- * functions call it *)
-type callnode = {
-  (* An id *)
-  cnid: int;
-  
-  (* the function this node describes *)
-  cnInfo: nodeinfo;
-
-  (* set of functions this one calls, indexed by the node id *)
-  cnCallees: callnode IH.t;
-
-  (* set of functions that call this one , indexed by the node id *)
-  cnCallers: callnode IH.t;
-}
-
-and nodeinfo = 
-    NIVar of varinfo * bool ref 
-                         (* Node corresponding to a function. If the boolean 
-                          * is true, then the function is defined, otherwise 
-                          * it is external *)
-
-  | NIIndirect of string (* Indirect nodes have a string associated to them. 
-                          * These strings must be invalid function names *)
-               * varinfo list ref 
-                         (* A list of functions that this indirect node might 
-                          * denote *)
-
-let nodeName (n: nodeinfo) : string =
-  match n with
-    NIVar (v, _) -> v.vname
-  | NIIndirect (n, _) -> n
-
-(* a call graph is a hashtable, mapping a function name to
- * the node which describes that function's call structure *)
-type callgraph = 
-  (string, callnode) Hashtbl.t
-
-(* given the name of a function, retrieve its callnode; this will create a 
- * node if one doesn't already exist. Will use the given nodeinfo only when 
- * creating nodes. *)
-let nodeId = ref 0
-let getNodeByName (cg: callgraph) (ni: nodeinfo) : callnode =
-  let name = nodeName ni in
-  try
-    H.find cg name
-  with Not_found -> (
-    (* make a new node *)
-    let ret:callnode = {
-      cnInfo = ni;
-      cnid   = !nodeId;
-      cnCallees = IH.create 5;
-      cnCallers = IH.create 5;
-    }  
-    in
-    incr nodeId;
-    (* add it to the table, then return it *)
-    H.add cg name ret;
-    ret
-   )
-
-(* Get the node for a variable *)
-let getNodeForVar (cg: callgraph) (v: varinfo) : callnode = 
-  getNodeByName cg (NIVar (v, ref false))
-
-let getNodeForIndirect (cg: callgraph) (e: exp) : callnode = 
-  getNodeByName cg (NIIndirect ("<indirect>", ref []))
-
-
-(* Find the name of an indirect node that a function whose address is taken 
- * belongs *)
-let markFunctionAddrTaken (cg: callgraph) (f: varinfo) : unit = 
-  (*
-  ignore (E.log "markFunctionAddrTaken %s\n" f.vname);
-   *)
-  let n = getNodeForIndirect cg (AddrOf (Var f, NoOffset)) in 
-  match n.cnInfo with 
-    NIIndirect (_, r) -> r := f :: !r
-  | _ -> assert false
-
-
-
-class cgComputer (graph: callgraph) = object(self)
-  inherit nopCilVisitor
-
-  (* the current function we're in, so when we visit a call node
-   * we know who is the caller *)
-  val mutable curFunc: callnode option = None
-
-
-  (* begin visiting a function definition *)
-  method vfunc (f:fundec) : fundec visitAction = begin 
-    (trace "callgraph" (P.dprintf "entering function %s\n" f.svar.vname));
-   let node =  getNodeForVar graph f.svar in 
-   (match node.cnInfo with 
-     NIVar (v, r) -> r := true
-   | _ -> assert false);
-   curFunc <- (Some node);
-   DoChildren
-  end
-
-  (* visit an instruction; we're only interested in calls *)
-  method vinst (i:instr) : instr list visitAction = begin 
-    (*(trace "callgraph" (P.dprintf "visiting instruction: %a\n" dn_instr i));*)
-    let caller : callnode = 
-      match curFunc with 
-        None -> assert false
-      | Some c -> c
-    in
-    let callerName: string = nodeName caller.cnInfo in
-    (match i with
-      Call(_,f,_,_) -> (
-        let callee: callnode = 
-          match f with 
-          | Lval(Var(vi),NoOffset) -> 
-              (trace "callgraph" (P.dprintf "I see a call by %s to %s\n"
-                                    callerName vi.vname));
-              getNodeForVar graph vi
-
-          | _ -> 
-              (trace "callgraph" (P.dprintf "indirect call: %a\n"
-                                  dn_instr i));
-              getNodeForIndirect graph f
-        in
-        
-        (* add one entry to each node's appropriate list *)
-        IH.replace caller.cnCallees callee.cnid callee;
-        IH.replace callee.cnCallers caller.cnid caller
-       )    
-
-    | _ -> ());     (* ignore other kinds instructions *)
-
-    DoChildren
-  end
-      
-  method vexpr (e: exp) = 
-    (match e with 
-      AddrOf (Var fv, NoOffset) when isFunctionType fv.vtype -> 
-        markFunctionAddrTaken graph fv
-    | _ -> ());
-    
-    DoChildren
-end
-
-let computeGraph (f:file) : callgraph = begin
-  let graph = H.create 37 in 
-  let obj:cgComputer = new cgComputer graph in
-
-  (* visit the whole file, computing the graph *)
-  visitCilFileSameGlobals (obj :> cilVisitor) f;
-
-
-  (* return the computed graph *)
-  graph
-end
-    
-let printGraph (out:out_channel) (g:callgraph) : unit = begin 
-  let printEntry _ (n:callnode) : unit =
-    let name = nodeName n.cnInfo in
-    (Printf.fprintf out " %s" name) 
-  in
-  
-  let printCalls (node:callnode) : unit =
-    (fprintf out "  calls:");
-    (IH.iter printEntry node.cnCallees);
-    (fprintf out "\n  is called by:");
-    (IH.iter printEntry node.cnCallers);
-    (fprintf out "\n")
-  in
-  
-  H.iter (fun (name: string) (node: callnode) -> 
-    match node.cnInfo with 
-      NIVar (v, def) -> 
-        (fprintf out "%s (%s):\n" 
-           v.vname (if !def then "defined" else "external"));
-        printCalls node
-
-    | NIIndirect (n, funcs) -> 
-        fprintf out "Indirect %s:\n" n;
-        fprintf out "   possible aliases: ";
-        List.iter (fun a -> fprintf out "%s " a.vname) !funcs;
-        fprintf out "\n"
-
-         )
-
-    g
-  end
-    
-let doCallGraph = ref false
-
-let feature : featureDescr = 
-  { fd_name = "callgraph";
-    fd_enabled = doCallGraph;
-    fd_description = "generation of a static call graph";
-    fd_extraopt = [];
-    fd_doit = 
-    (function (f: file) -> 
-      let graph:callgraph = computeGraph f in
-      printGraph stdout graph);
-    fd_post_check = false;
-  } 
-
-
-(*
- *
- * Copyright (c) 2001-2002 by
- *  George C. Necula	necula@cs.berkeley.edu
- *  Scott McPeak        smcpeak@cs.berkeley.edu
- *  Wes Weimer          weimer@cs.berkeley.edu
- *  Ben Liblit          liblit@cs.berkeley.edu
- *
- * All rights reserved.  Permission to use, copy, modify and distribute
- * this software for research purposes only is hereby granted, 
- * provided that the following conditions are met: 
- * 1. XSRedistributions of source code must retain the above copyright notice, 
- * this list of conditions and the following disclaimer. 
- * 2. Redistributions in binary form must reproduce the above copyright notice, 
- * this list of conditions and the following disclaimer in the documentation 
- * and/or other materials provided with the distribution. 
- * 3. The name of the authors may not be used to endorse or promote products 
- * derived from  this software without specific prior written permission. 
- *
- * DISCLAIMER:
- * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR 
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
- * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS 
- * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
- * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- *)
diff --git a/cil/src/ext/callgraph.mli b/cil/src/ext/callgraph.mli
deleted file mode 100644
index bc760180f..000000000
--- a/cil/src/ext/callgraph.mli
+++ /dev/null
@@ -1,123 +0,0 @@
-(*
- *
- * Copyright (c) 2001-2002, 
- *  George C. Necula    <necula@cs.berkeley.edu>
- *  Scott McPeak        <smcpeak@cs.berkeley.edu>
- *  Wes Weimer          <weimer@cs.berkeley.edu>
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. The names of the contributors may not be used to endorse or promote
- * products derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
- * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
- * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- *)
-(* callgraph.mli *)
-(* compute a static call graph *)
-
-(* module maintainer: scott *)
-(* see copyright notice at end of this file *)
-
-
-(* ------------------ types ------------------- *)
-(* a call node describes the local calling structure for a
- * single function: which functions it calls, and which
- * functions call it *)
-type callnode = {
-  (* An id *)
-  cnid: int;
-  
-  (* the function this node describes *)
-  cnInfo: nodeinfo;
-
-  (* set of functions this one calls, indexed by the node id *)
-  cnCallees: callnode Inthash.t;
-
-  (* set of functions that call this one , indexed by the node id *)
-  cnCallers: callnode Inthash.t;
-}
-
-and nodeinfo = 
-    NIVar of Cil.varinfo * bool ref 
-                         (* Node corresponding to a function. If the boolean 
-                          * is true, then the function is defined, otherwise 
-                          * it is external *)
-
-  | NIIndirect of string (* Indirect nodes have a string associated to them. 
-                          * These strings must be invalid function names *)
-               * Cil.varinfo list ref 
-                         (* A list of functions that this indirect node might 
-                          * denote *)
-
-
-val nodeName: nodeinfo -> string
-
-(* a call graph is a hashtable, mapping a function name to
- * the node which describes that function's call structure *)
-type callgraph =
-  (string, callnode) Hashtbl.t
-
-
-(* ----------------- functions ------------------- *)  
-(* given a CIL file, compute its static call graph *)
-val computeGraph : Cil.file -> callgraph
-
-(* print the callgraph in a human-readable format to a channel *)
-val printGraph : out_channel -> callgraph -> unit
-
-
-val feature: Cil.featureDescr
-(*
- *
- * Copyright (c) 2001-2002 by
- *  George C. Necula	necula@cs.berkeley.edu
- *  Scott McPeak        smcpeak@cs.berkeley.edu
- *  Wes Weimer          weimer@cs.berkeley.edu
- *  Ben Liblit          liblit@cs.berkeley.edu
- *   
- * All rights reserved.  Permission to use, copy, modify and distribute
- * this software for research purposes only is hereby granted, 
- * provided that the following conditions are met: 
- * 1. Redistributions of source code must retain the above copyright notice, 
- * this list of conditions and the following disclaimer. 
- * 2. Redistributions in binary form must reproduce the above copyright notice, 
- * this list of conditions and the following disclaimer in the documentation 
- * and/or other materials provided with the distribution. 
- * 3. The name of the authors may not be used to endorse or promote products 
- * derived from  this software without specific prior written permission. 
- *
- * DISCLAIMER:
- * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR 
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
- * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS 
- * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
- * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- *)
diff --git a/cil/src/ext/canonicalize.ml b/cil/src/ext/canonicalize.ml
deleted file mode 100644
index a75deeacd..000000000
--- a/cil/src/ext/canonicalize.ml
+++ /dev/null
@@ -1,292 +0,0 @@
-(*
- *
- * Copyright (c) 2001-2002, 
- *  George C. Necula    <necula@cs.berkeley.edu>
- *  Scott McPeak        <smcpeak@cs.berkeley.edu>
- *  Wes Weimer          <weimer@cs.berkeley.edu>
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. The names of the contributors may not be used to endorse or promote
- * products derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
- * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
- * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- *)
-
-
-
-(************************************************************************
- * canonicalize performs several transformations to correct differences
- * between C and C++, so that the output is (hopefully) valid C++ code.
- * This is incomplete -- certain fixes which are necessary 
- * for some programs are not yet implemented.
- * 
- * #1) C allows global variables to have multiple declarations and multiple
- *     (equivalent) definitions. This transformation removes all but one
- *     declaration and all but one definition.
- *
- * #2) Any variables that use C++ keywords as identifiers are renamed.
- *
- * #3) __inline is #defined to inline, and __restrict is #defined to nothing.
- *
- * #4) C allows function pointers with no specified arguments to be used on
- *     any argument list.  To make C++ accept this code, we insert a cast
- *     from the function pointer to a type that matches the arguments.  Of
- *     course, this does nothing to guarantee that the pointer actually has
- *     that type.
- *
- * #5) Makes casts from int to enum types explicit.  (CIL changes enum
- *     constants to int constants, but doesn't use a cast.)
- *
- ************************************************************************)
-
-open Cil
-module E = Errormsg
-module H = Hashtbl
-
-(* For transformation #1. Stores all variable definitions in the file. *)
-let varDefinitions: (varinfo, global) H.t = H.create 111
-
-
-class canonicalizeVisitor = object(self)
-  inherit nopCilVisitor
-  val mutable currentFunction: fundec = Cil.dummyFunDec;
-
-  (* A hashtable to prevent duplicate declarations. *)
-  val alreadyDeclared: (varinfo, unit) H.t = H.create 111
-  val alreadyDefined: (varinfo, unit) H.t = H.create 111
-
-  (* move variable declarations around *) 
-  method vglob g = match g with 
-    GVar(v, ({init = Some _} as inito), l) ->
-      (* A definition.  May have been moved to an earlier position. *)
-      if H.mem alreadyDefined v then begin
-	ignore (E.warn "Duplicate definition of %s at %a.\n" 
-		        v.vname d_loc !currentLoc);
-	ChangeTo [] (* delete from here. *)
-      end else begin
-	H.add alreadyDefined v ();
-	if H.mem alreadyDeclared v then begin
-	  (* Change the earlier declaration to Extern *)
-	  let oldS = v.vstorage in
-	  ignore (E.log "changing storage of %s from %a\n" 
-		    v.vname d_storage oldS);
-	  v.vstorage <- Extern;	  
-	  let newv = {v with vstorage = oldS} in
-	  ChangeDoChildrenPost([GVar(newv, inito, l)], (fun g -> g) )
-	end else
-	  DoChildren
-      end
-  | GVar(v, {init=None}, l)
-  | GVarDecl(v, l) when not (isFunctionType v.vtype) -> begin
-      (* A declaration.  May have been moved to an earlier position. *)
-      if H.mem alreadyDefined v || H.mem alreadyDeclared v then 
-	ChangeTo [] (* delete from here. *)
-      else begin
-	H.add alreadyDeclared v ();
-	DoChildren
-      end
-  end
-  | GFun(f, l) ->
-      currentFunction <- f; 
-      DoChildren
-  | _ ->
-      DoChildren
-
-(* #2. rename any identifiers whose names are C++ keywords *)
-  method vvdec v = 
-    match v.vname with
-    | "bool"
-    | "catch"
-    | "cdecl"
-    | "class"
-    | "const_cast"
-    | "delete"
-    | "dynamic_cast"
-    | "explicit"
-    | "export"
-    | "false"
-    | "friend"
-    | "mutable"
-    | "namespace"
-    | "new"
-    | "operator"
-    | "pascal"
-    | "private"
-    | "protected"
-    | "public"
-    | "register"
-    | "reinterpret_cast"
-    | "static_cast"
-    | "template"
-    | "this"
-    | "throw"
-    | "true"
-    | "try"
-    | "typeid"
-    | "typename"
-    | "using"
-    | "virtual"
-    | "wchar_t"->
-	v.vname <- v.vname ^ "__cil2cpp";
-	DoChildren
-    | _ -> DoChildren
-
-  method vinst i = 
-(* #5. If an assignment or function call uses expressions as enum values,
-   add an explicit cast. *)
-    match i with 
-      Set (dest, exp, l) -> begin
-	let typeOfDest = typeOfLval dest in
-	match unrollType typeOfDest with 
-	  TEnum _ -> (* add an explicit cast *)
-	    let newI = Set(dest, mkCast exp typeOfDest, l) in
-	    ChangeTo [newI] 
-	| _ -> SkipChildren
-      end
-    | Call (dest, f, args, l) -> begin
-	let rt, formals, isva, attrs = splitFunctionType (typeOf f) in
-	if isva then
-	  SkipChildren (* ignore vararg functions *)
-	else 
-	  match formals with
-	    Some formals' -> begin
-	      let newArgs = try
-		(*Iterate over the arguments, looking for formals that
-		   expect enum types, and insert casts where necessary. *)
-		List.map2 
-		  (fun (actual: exp) (formalName, formalType, _) ->
-		    match unrollType formalType with
-		      TEnum _ -> mkCast actual formalType
-		    | _ ->  actual)
-		  args
-		  formals' 	
-	      with Invalid_argument _ -> 
-		E.s (error "Number of arguments to %a doesn't match type.\n"
-		       d_exp f)
-	      in	  
-	      let newI = Call(dest, f, newArgs, l) in
-	      ChangeTo [newI] 
-	    end
-	  | None -> begin
-  (* #4. No arguments were specified for this type.  To fix this, infer the
-         type from the arguments that are used n this instruction, and insert
-         a cast to that type.*)
-	      match f with 
-		Lval(Mem(fp), off) ->
-		  let counter: int ref = ref 0 in
-		  let newFormals = List.map
-		      (fun (actual:exp) ->
-			incr counter;
-			let formalName = "a" ^ (string_of_int !counter) in
-			(formalName, typeOf actual, []))(* (name,type,attrs) *)
-			  args in
-		  let newFuncPtrType =
-		    TPtr((TFun (rt, Some newFormals, false, attrs)), []) in
-		  let newFuncPtr = Lval(Mem(mkCast fp newFuncPtrType), off) in
-		  ChangeTo [Call(dest, newFuncPtr, args, l)] 
-	      | _ -> 
-		  ignore (warn "cppcanon: %a has no specified arguments, but it's not a function pointer." d_exp f);
-		  SkipChildren
-	  end
-    end
-    | _ -> SkipChildren
-
-  method vinit i = 
-(* #5. If an initializer uses expressions as enum values,
-   add an explicit cast. *)
-    match i with 
-      SingleInit e -> DoChildren (* we don't handle simple initializers here, 
-				  because we don't know what type is expected.
-				  This should be done in vglob if needed. *)
-    | CompoundInit(t, initList) ->
-	let changed: bool ref = ref false in
-	let initList' = List.map
-	    (* iterate over the list, adding casts for any expression that
-	       is expected to be an enum type. *)
-	  (function
-	      (Field(fi, off), SingleInit e) -> begin
-		match unrollType fi.ftype with
-		  TEnum _ -> (* add an explicit cast *)
-		    let newE = mkCast e fi.ftype in
-		    changed := true;
-		    (Field(fi, off), SingleInit newE)
-		| _ -> (* not enum, no cast needed *)
-		    (Field(fi, off), SingleInit e)
-	      end
-	    | other ->
-                   (* This is a more complicated initializer, and I don't think
-		      it can have type enum.  It's children might, though. *)
-		other)
-	    initList in
-	if !changed then begin
-          (* There may be other casts needed in other parts of the
-	     initialization, so do the children too. *)
-	  ChangeDoChildrenPost(CompoundInit(t, initList'), (fun x -> x))
-	end else
-	  DoChildren
-   
-
-(* #5. If a function returns an enum type, add an explicit cast to the
-       return type. *)
-  method vstmt stmt = 
-    (match stmt.skind with
-      Return (Some exp, l) -> begin
-	let typeOfDest, _, _, _ = 
-	  splitFunctionType currentFunction.svar.vtype in
-	match unrollType typeOfDest with 
-	  TEnum _ -> 
-	    stmt.skind <- Return (Some (mkCast exp typeOfDest), l)
-	| _ -> ()
-      end
-    | _ -> ());
-    DoChildren
-end (* class canonicalizeVisitor *)
-
-
-
-(* Entry point for this extension *)
-let canonicalize (f:file) =
-  visitCilFile (new canonicalizeVisitor) f;
-
-  (* #3. Finally, add some #defines to change C keywords to their C++ 
-     equivalents: *)
-  f.globals <-
-    GText( "#ifdef __cplusplus\n"
-	  ^" #define __restrict\n" (* "restrict" doesn't work *)
-	  ^" #define __inline inline\n"
-	  ^"#endif")
-    ::f.globals
-
-
-
-let feature : featureDescr = 
-  { fd_name = "canonicalize";
-    fd_enabled = ref false;
-    fd_description = "fixing some C-isms so that the result is C++ compliant.";
-    fd_extraopt = [];
-    fd_doit = canonicalize;
-    fd_post_check = true;
-  } 
diff --git a/cil/src/ext/canonicalize.mli b/cil/src/ext/canonicalize.mli
deleted file mode 100644
index 37bc0d83f..000000000
--- a/cil/src/ext/canonicalize.mli
+++ /dev/null
@@ -1,48 +0,0 @@
-(*
- *
- * Copyright (c) 2001-2002, 
- *  George C. Necula    <necula@cs.berkeley.edu>
- *  Scott McPeak        <smcpeak@cs.berkeley.edu>
- *  Wes Weimer          <weimer@cs.berkeley.edu>
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. The names of the contributors may not be used to endorse or promote
- * products derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
- * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
- * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- *)
-
-(************************************************************************
- * canonicalize performs several transformations to correct differences
- * between C and C++, so that the output is (hopefully) valid C++ code.
- * This is incomplete -- certain fixes which are necessary 
- * for some programs are not yet implemented.
- * 
- * See canonicalize.ml for a list of changes.
- *
- ************************************************************************)
-
-val feature: Cil.featureDescr
diff --git a/cil/src/ext/cfg.ml b/cil/src/ext/cfg.ml
deleted file mode 100644
index 8b19c797e..000000000
--- a/cil/src/ext/cfg.ml
+++ /dev/null
@@ -1,289 +0,0 @@
-(* MODIF: Loop constructor replaced by 3 constructors: While, DoWhile, For. *)
-
-(*
- *
- * Copyright (c) 2001-2003, 
- *  George C. Necula    <necula@cs.berkeley.edu>
- *  Scott McPeak        <smcpeak@cs.berkeley.edu>
- *  Wes Weimer          <weimer@cs.berkeley.edu>
- *  Simon Goldsmith     <sfg@cs.berkeley.edu>
- *  S.P Rahul, Aman Bhargava
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. The names of the contributors may not be used to endorse or promote
- * products derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
- * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
- * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- *)
-
-(* Authors: Aman Bhargava, S. P. Rahul *)
-(* sfg: this stuff was stolen from optim.ml - the code to print the cfg as
-   a dot graph is mine *)
-
-open Pretty
-open Cil
-module E=Errormsg
-
-(* entry points: cfgFun, printCfgChannel, printCfgFilename *)
-
-(* known issues:
- * -sucessors of if somehow end up with two edges each 
- *)
-
-(*------------------------------------------------------------*)
-(* Notes regarding CFG computation:
-   1) Initially only succs and preds are computed. sid's are filled in
-      later, in whatever order is suitable (e.g. for forward problems, reverse
-      depth-first postorder).
-   2) If a stmt (return, break or continue) has no successors, then
-      function return must follow.
-      No predecessors means it is the start of the function
-   3) We use the fact that initially all the succs and preds are assigned []
-*)
-
-(* Fill in the CFG info for the stmts in a block
-   next = succ of the last stmt in this block
-   break = succ of any Break in this block
-   cont  = succ of any Continue in this block
-   None means the succ is the function return. It does not mean the break/cont
-   is invalid. We assume the validity has already been checked.
-*)
-(* At the end of CFG computation, 
-   - numNodes = total number of CFG nodes 
-   - length(nodeList) = numNodes
-*)
-
-let numNodes = ref 0 (* number of nodes in the CFG *)
-let nodeList : stmt list ref = ref [] (* All the nodes in a flat list *) (* ab: Added to change dfs from quadratic to linear *)
-let start_id = ref 0 (* for unique ids across many functions *)
-
-(* entry point *)
-
-(** Compute a control flow graph for fd.  Stmts in fd have preds and succs
-  filled in *)
-let rec cfgFun (fd : fundec): int = 
-  begin
-    numNodes := !start_id;
-    nodeList := [];
-
-    cfgBlock fd.sbody None None None;
-    !numNodes - !start_id
-  end
-
-
-and cfgStmts (ss: stmt list) 
-                 (next:stmt option) (break:stmt option) (cont:stmt option) =
-  match ss with
-    [] -> ();
-  | [s] -> cfgStmt s next break cont
-  | hd::tl ->
-      cfgStmt hd (Some (List.hd tl))  break cont;
-      cfgStmts tl next break cont
-
-and cfgBlock  (blk: block) 
-              (next:stmt option) (break:stmt option) (cont:stmt option) = 
-   cfgStmts blk.bstmts next break cont
-
-(* Fill in the CFG info for a stmt
-   Meaning of next, break, cont should be clear from earlier comment
-*)
-and cfgStmt (s: stmt) (next:stmt option) (break:stmt option) (cont:stmt option) =
-  incr numNodes;
-  s.sid <- !numNodes;
-  nodeList := s :: !nodeList; (* Future traversals can be made in linear time. e.g.  *)
-  if s.succs <> [] then
-    E.s (bug "CFG must be cleared before being computed!");
-  let addSucc (n: stmt) =
-    if not (List.memq n s.succs) then
-      s.succs <- n::s.succs;
-    if not (List.memq s n.preds) then
-      n.preds <- s::n.preds
-  in
-  let addOptionSucc (n: stmt option) =
-    match n with
-      None -> ()
-    | Some n' -> addSucc n'
-  in
-  let addBlockSucc (b: block) =
-    match b.bstmts with
-      [] -> addOptionSucc next
-    | hd::_ -> addSucc hd
-  in
-  match s.skind with
-    Instr _  -> addOptionSucc next
-  | Return _  -> ()
-  | Goto (p,_) -> addSucc !p
-  | Break _ -> addOptionSucc break
-  | Continue _ -> addOptionSucc cont
-  | If (_, blk1, blk2, _) ->
-      (* The succs of If is [true branch;false branch] *)
-      addBlockSucc blk2;
-      addBlockSucc blk1;
-      cfgBlock blk1 next break cont;
-      cfgBlock blk2 next break cont
-  | Block b -> 
-      addBlockSucc b;
-      cfgBlock b next break cont
-  | Switch(_,blk,l,_) -> 
-      List.iter addSucc (List.rev l); (* Add successors in order *)
-      (* sfg: if there's no default, need to connect s->next *)
-      if not (List.exists 
-                (fun stmt -> List.exists 
-                   (function Default _ -> true | _ -> false)
-                   stmt.labels) 
-                l) 
-      then 
-        addOptionSucc next;
-      cfgBlock blk next next cont
-(*
-  | Loop(blk,_,_,_) ->
-*)
-  | While(_,blk,_)
-  | DoWhile(_,blk,_)
-  | For(_,_,_,blk,_) ->
-      addBlockSucc blk;
-      cfgBlock blk (Some s) next (Some s)
-      (* Since all loops have terminating condition true, we don't put
-         any direct successor to stmt following the loop *)
-  | TryExcept _ | TryFinally _ -> 
-      E.s (E.unimp "try/except/finally")
-
-(*------------------------------------------------------------*)
-
-(**************************************************************)
-(* do something for all stmts in a fundec *)
-
-let rec forallStmts (todo) (fd : fundec) = 
-  begin
-    fasBlock todo fd.sbody;
-  end
-
-and fasBlock (todo) (b : block) =
-  List.iter (fasStmt todo) b.bstmts
-
-and fasStmt (todo) (s : stmt) =
-  begin
-    ignore(todo s);
-    match s.skind with
-      | Block b -> fasBlock todo b
-      | If (_, tb, fb, _) -> (fasBlock todo tb; fasBlock todo fb)
-      | Switch (_, b, _, _) -> fasBlock todo b
-(*
-      | Loop (b, _, _, _) -> fasBlock todo b
-*)
-      | While (_, b, _) -> fasBlock todo b
-      | DoWhile (_, b, _) -> fasBlock todo b
-      | For (_, _, _, b, _) -> fasBlock todo b
-      | (Return _ | Break _ | Continue _ | Goto _ | Instr _) -> ()
-      | TryExcept _ | TryFinally _ -> E.s (E.unimp "try/except/finally")
-  end
-;;
-
-(**************************************************************)
-(* printing the control flow graph - you have to compute it first *)
-
-let d_cfgnodename () (s : stmt) =
-  dprintf "%d" s.sid
-
-let d_cfgnodelabel () (s : stmt) =
-  let label = 
-  begin
-    match s.skind with
-      | If (e, _, _, _)  -> "if" (*sprint ~width:999 (dprintf "if %a" d_exp e)*)
-(*
-      | Loop _ -> "loop"
-*)
-      | While _ -> "while"
-      | DoWhile _ -> "dowhile"
-      | For _ -> "for"
-      | Break _ -> "break"
-      | Continue _ -> "continue"
-      | Goto _ -> "goto"
-      | Instr _ -> "instr"
-      | Switch _ -> "switch"
-      | Block _ -> "block"
-      | Return _ -> "return"
-      | TryExcept _ -> "try-except"
-      | TryFinally _ -> "try-finally"
-  end in
-    dprintf "%d: %s" s.sid label
-
-let d_cfgedge (src) () (dest) =
-  dprintf "%a -> %a"
-    d_cfgnodename src
-    d_cfgnodename dest
-
-let d_cfgnode () (s : stmt) =
-    dprintf "%a [label=\"%a\"]\n\t%a" 
-    d_cfgnodename s
-    d_cfgnodelabel s
-    (d_list "\n\t" (d_cfgedge s)) s.succs
-
-(**********************************************************************)
-(* entry points *)
-
-(** print control flow graph (in dot form) for fundec to channel *)
-let printCfgChannel (chan : out_channel) (fd : fundec) =
-  let pnode (s:stmt) = fprintf chan "%a\n" d_cfgnode s in
-    begin
-      ignore (fprintf chan "digraph CFG_%s {\n" fd.svar.vname);
-      forallStmts pnode fd;
-      ignore(fprintf chan  "}\n");
-    end
-
-(** Print control flow graph (in dot form) for fundec to file *)
-let printCfgFilename (filename : string) (fd : fundec) =
-  let chan = open_out filename in
-    begin
-      printCfgChannel chan fd;
-      close_out chan;
-    end
-
-
-;;
-
-(**********************************************************************)
-
-let clearCFGinfo (fd : fundec) =
-  let clear s =
-    s.sid <- -1;
-    s.succs <- [];
-    s.preds <- [];
-  in
-  forallStmts clear fd
-
-let clearFileCFG (f : file) =
-  iterGlobals f (fun g ->
-    match g with GFun(fd,_) ->
-      clearCFGinfo fd
-    | _ -> ())
-
-let computeFileCFG (f : file) =
-  iterGlobals f (fun g ->
-    match g with GFun(fd,_) ->
-      numNodes := cfgFun fd;
-      start_id := !start_id + !numNodes
-    | _ -> ())
diff --git a/cil/src/ext/cfg.mli b/cil/src/ext/cfg.mli
deleted file mode 100644
index 19c51666f..000000000
--- a/cil/src/ext/cfg.mli
+++ /dev/null
@@ -1,36 +0,0 @@
-(** Code to compute the control-flow graph of a function or file.  
-  This will fill in the [preds] and [succs] fields of {!Cil.stmt}
-
-  This is required for several other extensions, such as {!Dataflow}. 
-*)
-
-open Cil
-
-
-(** Compute the CFG for an entire file, by calling cfgFun on each function. *)
-val computeFileCFG: Cil.file -> unit
-
-(** clear the sid, succs, and preds fields of each statement. *)
-val clearFileCFG: Cil.file -> unit
-
-(** Compute a control flow graph for fd.  Stmts in fd have preds and succs
-  filled in *)
-val cfgFun : fundec -> int
-
-(** clear the sid, succs, and preds fields of each statment in a function *)
-val clearCFGinfo: Cil.fundec -> unit
-
-(** print control flow graph (in dot form) for fundec to channel *)
-val printCfgChannel : out_channel -> fundec -> unit
-
-(** Print control flow graph (in dot form) for fundec to file *)
-val printCfgFilename : string -> fundec -> unit
-
-(** Next statement id that will be assigned. *)
-val start_id: int ref
-
-(** All of the nodes in a file. *)
-val nodeList : stmt list ref
-
-(** number of nodes in the CFG *)
-val numNodes : int ref
diff --git a/cil/src/ext/ciltools.ml b/cil/src/ext/ciltools.ml
deleted file mode 100755
index 78f1aafc3..000000000
--- a/cil/src/ext/ciltools.ml
+++ /dev/null
@@ -1,228 +0,0 @@
-open Cil
-
-(* Contributed by Nathan Cooprider *)
-
-let isOne e = 
-  isInteger e = Some Int64.one
-
-
-(* written by Zach *)
-let is_volatile_tp tp =
-  List.exists (function (Attr("volatile",_)) -> true 
-    | _ -> false) (typeAttrs tp) 
-    
-(* written by Zach *)
-let is_volatile_vi vi =
-  let vi_vol =
-    List.exists (function (Attr("volatile",_)) -> true 
-      | _ -> false) vi.vattr in
-  let typ_vol = is_volatile_tp vi.vtype in
-  vi_vol || typ_vol
-
-(*****************************************************************************
- * A collection of useful functions that were not already in CIL as far as I 
- * could tell. However, I have been surprised before . . . 
- ****************************************************************************)
-
-type sign = Signed | Unsigned 
-
-exception Not_an_integer
-
-(*****************************************************************************
- * A bunch of functions for accessing integers. Originally written for 
- * somebody who didn't know CIL and just wanted to mess with it at the 
- * OCaml level. 
- ****************************************************************************)
-
-let unbox_int_type (ye : typ) : (int * sign) =
-  let tp = unrollType ye in
-  let s = 
-    match tp with 
-      TInt (i, _) -> 
-	if (isSigned i) then
-	  Signed
-	else
-	  Unsigned
-    | _ -> raise Not_an_integer
-  in
-  (bitsSizeOf tp), s
-  
-(* depricated. Use isInteger directly instead *)
-let unbox_int_exp (e : exp) : int64 = 
-  match isInteger e with 
-    None -> raise Not_an_integer
-  | Some (x) -> x
-  
-let box_int_to_exp (n : int64) (ye : typ) : exp =
-  let tp = unrollType ye in
-  match tp with 
-    TInt (i, _) -> 
-      kinteger64 i n 
-  | _ -> raise Not_an_integer
-
-let cil_to_ocaml_int (e : exp) : (int64 * int * sign) = 
-  let v, s = unbox_int_type (typeOf e) in
-  unbox_int_exp (e), v, s
-
-exception Weird_bitwidth
-
-(* (int64 * int * sign) : exp *)
-let ocaml_int_to_cil v n s =
-  let char_size = bitsSizeOf charType in 
-  let int_size = bitsSizeOf intType in
-  let short_size = bitsSizeOf (TInt(IShort,[]))in 
-  let long_size = bitsSizeOf longType in
-  let longlong_size = bitsSizeOf (TInt(ILongLong,[])) in
-  let i = 
-    match s with
-      Signed ->
-	if (n = char_size) then 
-	  ISChar
-	else if (n = int_size) then
-	  IInt
-	else if (n = short_size) then
-	  IShort
-	else if (n = long_size) then
-	  ILong
-	else if (n = longlong_size) then
-	  ILongLong
-	else
-	  raise Weird_bitwidth
-    | Unsigned ->
-	if (n = char_size) then 
-	  IUChar
-	else if (n = int_size) then
-	  IUInt
-	else if (n = short_size) then
-	  IUShort
-	else if (n = long_size) then
-	  IULong
-	else if (n = longlong_size) then
-	  IULongLong
-	else
-	  raise Weird_bitwidth
-  in
-  kinteger64 i v
-
-(*****************************************************************************
- * a couple of type functions that I thought would be useful:
- ****************************************************************************)
-
-let rec isCompositeType tp =
-  match tp with
-    TComp _  -> true
-  | TPtr(x, _) -> isCompositeType x
-  | TArray(x,_,_) -> isCompositeType x
-  | TFun(x,_,_,_) -> isCompositeType x
-  | TNamed (x,_) -> isCompositeType x.ttype
-  | _ -> false
-
-(** START OF deepHasAttribute ************************************************)
-let visited = ref [] 
-class attribute_checker target rflag = object (self)
-  inherit nopCilVisitor
-  method vtype t =
-    match t with 
-      TComp(cinfo, a) ->
-	if(not (List.exists (fun x -> cinfo.cname = x) !visited )) then begin
-	  visited := cinfo.cname :: !visited;
-	  List.iter 
-	    (fun f -> 
-	      if (hasAttribute target f.fattr) then 
-		rflag := true
-	      else
-		ignore(visitCilType (new attribute_checker target rflag) 
-			 f.ftype)) cinfo.cfields;
-	end;
-	DoChildren	
-    | TNamed(t1, a) ->
-	if(not (List.exists (fun x -> t1.tname = x) !visited )) then begin
-	  visited := t1.tname :: !visited;
-	  ignore(visitCilType (new attribute_checker target rflag) t1.ttype);
-	end;
-	DoChildren
-    | _ ->
-	DoChildren
-  method vattr (Attr(name,params)) =
-    if (name = target) then rflag := true;
-    DoChildren
-end
-
-let deepHasAttribute s t =
-  let found = ref false in
-  visited := [];
-  ignore(visitCilType (new attribute_checker s found) t);
-  !found
-(** END OF deepHasAttribute **************************************************)
-
-(** Stuff from ptranal, slightly modified ************************************)
-
-(*****************************************************************************
- * A transformation to make every instruction be in its own statement.  
- ****************************************************************************)
-
-class callBBVisitor = object
-  inherit nopCilVisitor 
-
-  method vstmt s =
-    match s.skind with
-      Instr(il) -> begin
-	if (List.length il > 1) then 
-          let list_of_stmts = List.map (fun one_inst -> 
-            mkStmtOneInstr one_inst) il in
-          let block = mkBlock list_of_stmts in
-	  s.skind <- Block block;
-	  ChangeTo(s)
-	else
-	  SkipChildren
-      end
-    | _ -> DoChildren
-
-  method vvdec _ = SkipChildren
-  method vexpr _ = SkipChildren
-  method vlval _ = SkipChildren
-  method vtype _ = SkipChildren
-end 
-
-let one_instruction_per_statement f =
-  let thisVisitor = new callBBVisitor in
-  visitCilFileSameGlobals thisVisitor f  
-
-(*****************************************************************************
- * A transformation that gives each variable a unique identifier. 
- ****************************************************************************)
-
-class vidVisitor = object
-  inherit nopCilVisitor 
-  val count = ref 0 
-
-  method vvdec vi = 
-    vi.vid <- !count ;
-    incr count ; SkipChildren
-end 
-
-let globally_unique_vids f =
-  let thisVisitor = new vidVisitor in
-  visitCilFileSameGlobals thisVisitor f 
-
-(** End of stuff from ptranal ************************************************)
-
-class sidVisitor = object
-  inherit nopCilVisitor 
-  val count = ref 0 
-
-  method vstmt s = 
-    s.sid <- !count ;
-    incr count ;
-    DoChildren
-end 
-
-let globally_unique_sids f =
-  let thisVisitor = new sidVisitor in
-  visitCilFileSameGlobals thisVisitor f 
-
-(** Comparing expressions without a Out_of_memory error **********************)
-
-let compare_exp x y =
-  compare x y
-    
diff --git a/cil/src/ext/dataflow.ml b/cil/src/ext/dataflow.ml
deleted file mode 100755
index 7f28f841b..000000000
--- a/cil/src/ext/dataflow.ml
+++ /dev/null
@@ -1,466 +0,0 @@
-(* MODIF: Loop constructor replaced by 3 constructors: While, DoWhile, For. *)
-
-module IH = Inthash
-module E = Errormsg
-
-open Cil
-open Pretty
-
-(** A framework for data flow analysis for CIL code.  Before using 
-    this framework, you must initialize the Control-flow Graph for your
-    program, e.g using {!Cfg.computeFileCFG} *)
-
-type 't action = 
-    Default (** The default action *)
-  | Done of 't (** Do not do the default action. Use this result *)
-  | Post of ('t -> 't) (** The default action, followed by the given 
-                        * transformer *)
-
-type 't stmtaction = 
-    SDefault   (** The default action *)
-  | SDone      (** Do not visit this statement or its successors *)
-  | SUse of 't (** Visit the instructions and successors of this statement
-                  as usual, but use the specified state instead of the 
-                  one that was passed to doStmt *)
-
-(* For if statements *)
-type 't guardaction = 
-    GDefault      (** The default state *) 
-  | GUse of 't    (** Use this data for the branch *)
-  | GUnreachable  (** The branch will never be taken. *)
-
-
-(******************************************************************
- **********
- **********         FORWARDS 
- **********
- ********************************************************************)
-
-module type ForwardsTransfer = sig
-  val name: string (** For debugging purposes, the name of the analysis *)
-
-  val debug: bool ref (** Whether to turn on debugging *)
-
-  type t  (** The type of the data we compute for each block start. May be 
-           * imperative.  *)
-
-  val copy: t -> t
-  (** Make a deep copy of the data *)
-
-
-  val stmtStartData: t Inthash.t
-  (** For each statement id, the data at the start. Not found in the hash 
-   * table means nothing is known about the state at this point. At the end 
-   * of the analysis this means that the block is not reachable. *)
-
-  val pretty: unit -> t -> Pretty.doc 
-  (** Pretty-print the state *)
-
-  val computeFirstPredecessor: Cil.stmt -> t -> t
-  (** Give the first value for a predecessors, compute the value to be set 
-   * for the block *)
-
-  val combinePredecessors: Cil.stmt -> old:t -> t -> t option
-  (** Take some old data for the start of a statement, and some new data for 
-   * the same point. Return None if the combination is identical to the old 
-   * data. Otherwise, compute the combination, and return it. *)
-
-  val doInstr: Cil.instr -> t -> t action
-  (** The (forwards) transfer function for an instruction. The 
-   * {!Cil.currentLoc} is set before calling this. The default action is to 
-   * continue with the state unchanged. *)
-
-  val doStmt: Cil.stmt -> t -> t stmtaction
-  (** The (forwards) transfer function for a statement. The {!Cil.currentLoc} 
-   * is set before calling this. The default action is to do the instructions
-   * in this statement, if applicable, and continue with the successors. *)
-
-  val doGuard: Cil.exp -> t -> t guardaction
-  (** Generate the successor to an If statement assuming the given expression
-    * is nonzero.  Analyses that don't need guard information can return 
-    * GDefault; this is equivalent to returning GUse of the input.
-    * A return value of GUnreachable indicates that this half of the branch
-    * will not be taken and should not be explored.  This will be called
-    * twice per If, once for "then" and once for "else".  
-    *)
-
-  val filterStmt: Cil.stmt -> bool
-  (** Whether to put this statement in the worklist. This is called when a 
-   * block would normally be put in the worklist. *)
-  
-end
-
-
-module ForwardsDataFlow = 
-  functor (T : ForwardsTransfer) ->
-  struct
-
-    (** Keep a worklist of statements to process. It is best to keep a queue, 
-     * because this way it is more likely that we are going to process all 
-     * predecessors of a statement before the statement itself. *)
-    let worklist: Cil.stmt Queue.t = Queue.create ()
-
-    (** We call this function when we have encountered a statement, with some 
-     * state. *)
-    let reachedStatement (s: stmt) (d: T.t) : unit = 
-      (** see if we know about it already *)
-      E.pushContext (fun _ -> dprintf "Reached statement %d with %a" 
-          s.sid T.pretty d);
-      let newdata: T.t option = 
-        try
-          let old = IH.find T.stmtStartData s.sid in 
-          match T.combinePredecessors s ~old:old d with 
-            None -> (* We are done here *)
-              if !T.debug then 
-                ignore (E.log "FF(%s): reached stmt %d with %a\n  implies the old state %a\n"
-                          T.name s.sid T.pretty d T.pretty old);
-              None
-          | Some d' -> begin
-              (* We have changed the data *) 
-              if !T.debug then 
-                ignore (E.log "FF(%s): weaken data for block %d: %a\n" 
-                          T.name s.sid T.pretty d');
-              Some d'
-          end
-        with Not_found -> (* was bottom before *)
-          let d' = T.computeFirstPredecessor s d in 
-          if !T.debug then 
-            ignore (E.log "FF(%s): set data for block %d: %a\n" 
-                      T.name s.sid T.pretty d');
-          Some d'
-      in
-      E.popContext ();
-      match newdata with 
-        None -> ()
-      | Some d' -> 
-          IH.replace T.stmtStartData s.sid d';
-          if T.filterStmt s && 
-            not (Queue.fold (fun exists s' -> exists || s'.sid = s.sid)
-                            false
-                            worklist) then 
-            Queue.add s worklist
-
-
-    (** Get the two successors of an If statement *)
-    let ifSuccs (s:stmt) : stmt * stmt = 
-      let fstStmt blk = match blk.bstmts with
-          [] -> Cil.dummyStmt
-        | fst::_ -> fst
-      in
-      match s.skind with
-        If(e, b1, b2, _) ->
-          let thenSucc = fstStmt b1 in
-          let elseSucc = fstStmt b2 in
-          let oneFallthrough () = 
-            let fallthrough = 
-              List.filter 
-                (fun s' -> thenSucc != s' && elseSucc != s')
-                s.succs
-            in
-            match fallthrough with
-              [] -> E.s (bug "Bad CFG: missing fallthrough for If.")
-            | [s'] -> s'
-            | _ ->  E.s (bug "Bad CFG: multiple fallthrough for If.")
-          in
-          (* If thenSucc or elseSucc is Cil.dummyStmt, it's an empty block.
-             So the successor is the statement after the if *)
-          let stmtOrFallthrough s' =
-            if s' == Cil.dummyStmt then
-              oneFallthrough ()
-            else 
-              s'
-          in
-          (stmtOrFallthrough thenSucc,
-           stmtOrFallthrough elseSucc)
-            
-      | _-> E.s (bug "ifSuccs on a non-If Statement.")
-
-    (** Process a statement *)
-    let processStmt (s: stmt) : unit = 
-      currentLoc := get_stmtLoc s.skind;
-      if !T.debug then 
-        ignore (E.log "FF(%s).stmt %d at %t\n" T.name s.sid d_thisloc);
-
-      (* It must be the case that the block has some data *)
-      let init: T.t = 
-         try T.copy (IH.find T.stmtStartData s.sid) 
-         with Not_found -> 
-            E.s (E.bug "FF(%s): processing block without data" T.name)
-      in
-
-      (** See what the custom says *)
-      match T.doStmt s init with 
-        SDone  -> ()
-      | (SDefault | SUse _) as act -> begin
-          let curr = match act with
-              SDefault -> init
-            | SUse d -> d
-            | SDone -> E.s (bug "SDone")
-          in
-          (* Do the instructions in order *)
-          let handleInstruction (s: T.t) (i: instr) : T.t = 
-            currentLoc := get_instrLoc i;
-            
-            (* Now handle the instruction itself *)
-            let s' = 
-              let action = T.doInstr i s in 
-              match action with 
-               | Done s' -> s'
-               | Default -> s (* do nothing *)
-               | Post f -> f s
-            in
-            s'
-          in
-
-          let after: T.t = 
-            match s.skind with 
-              Instr il -> 
-                (* Handle instructions starting with the first one *)
-                List.fold_left handleInstruction curr il
-
-            | Goto _ | Break _ | Continue _ | If _ 
-            | TryExcept _ | TryFinally _ 
-            | Switch _ | (*Loop _*) While _ | DoWhile _ | For _
-	    | Return _ | Block _ -> curr
-          in
-          currentLoc := get_stmtLoc s.skind;
-                
-          (* Handle If guards *)
-          let succsToReach = match s.skind with
-              If (e, _, _, _) -> begin
-                let not_e = UnOp(LNot, e, intType) in
-                let thenGuard = T.doGuard e after in
-                let elseGuard = T.doGuard not_e after in
-                if thenGuard = GDefault && elseGuard = GDefault then
-                  (* this is the common case *)
-                  s.succs
-                else begin
-                  let doBranch succ guard =
-                    match guard with
-                      GDefault -> reachedStatement succ after
-                    | GUse d ->  reachedStatement succ d
-                    | GUnreachable -> 
-                        if !T.debug then 
-                          ignore (E.log "FF(%s): Not exploring branch to %d\n" 
-                                    T.name succ.sid);
-
-                        ()
-                  in
-                  let thenSucc, elseSucc = ifSuccs s  in
-                  doBranch thenSucc thenGuard;
-                  doBranch elseSucc elseGuard;
-                  []
-                end
-              end
-            | _ -> s.succs
-          in
-          (* Reach the successors *)
-          List.iter (fun s' -> reachedStatement s' after) succsToReach;
-
-      end
-
-
-
-
-          (** Compute the data flow. Must have the CFG initialized *)
-    let compute (sources: stmt list) = 
-      Queue.clear worklist;
-      List.iter (fun s -> Queue.add s worklist) sources;
-
-      (** All initial stmts must have non-bottom data *)
-      List.iter (fun s -> 
-         if not (IH.mem T.stmtStartData s.sid) then 
-           E.s (E.error "FF(%s): initial stmt %d does not have data"
-                  T.name s.sid))
-         sources;
-      if !T.debug then
-        ignore (E.log "\nFF(%s): processing\n"
-                  T.name); 
-      let rec fixedpoint () = 
-        if !T.debug && not (Queue.is_empty worklist) then 
-          ignore (E.log "FF(%s): worklist= %a\n" 
-                    T.name
-                    (docList (fun s -> num s.sid)) 
-                    (List.rev
-                       (Queue.fold (fun acc s -> s :: acc) [] worklist)));
-        try 
-          let s = Queue.take worklist in 
-          processStmt s;
-          fixedpoint ();
-        with Queue.Empty -> 
-          if !T.debug then 
-            ignore (E.log "FF(%s): done\n\n" T.name)
-      in
-      fixedpoint ()
-          
-  end
-
-
-
-(******************************************************************
- **********
- **********         BACKWARDS 
- **********
- ********************************************************************)
-module type BackwardsTransfer = sig
-  val name: string (* For debugging purposes, the name of the analysis *)
-
-  val debug: bool ref (** Whether to turn on debugging *)
-
-  type t  (** The type of the data we compute for each block start. In many 
-           * presentations of backwards data flow analysis we maintain the 
-           * data at the block end. This is not easy to do with JVML because 
-           * a block has many exceptional ends. So we maintain the data for 
-           * the statement start. *)
-
-  val pretty: unit -> t -> Pretty.doc (** Pretty-print the state *)
-
-  val stmtStartData: t Inthash.t
-  (** For each block id, the data at the start. This data structure must be 
-   * initialized with the initial data for each block *)
-
-  val combineStmtStartData: Cil.stmt -> old:t -> t -> t option
-  (** When the analysis reaches the start of a block, combine the old data 
-   * with the one we have just computed. Return None if the combination is 
-   * the same as the old data, otherwise return the combination. In the 
-   * latter case, the predecessors of the statement are put on the working 
-   * list. *)
-
-
-  val combineSuccessors: t -> t -> t
-  (** Take the data from two successors and combine it *)
-
-
-  val doStmt: Cil.stmt -> t action
-  (** The (backwards) transfer function for a branch. The {!Cil.currentLoc} is 
-   * set before calling this. If it returns None, then we have some default 
-   * handling. Otherwise, the returned data is the data before the branch 
-   * (not considering the exception handlers) *)
-
-  val doInstr: Cil.instr -> t -> t action
-  (** The (backwards) transfer function for an instruction. The 
-   * {!Cil.currentLoc} is set before calling this. If it returns None, then we 
-   * have some default handling. Otherwise, the returned data is the data 
-   * before the branch (not considering the exception handlers) *)
-
-  val filterStmt: Cil.stmt -> Cil.stmt -> bool
-  (** Whether to put this predecessor block in the worklist. We give the 
-   * predecessor and the block whose predecessor we are (and whose data has 
-   * changed)  *)
-  
-end
-
-module BackwardsDataFlow = 
-  functor (T : BackwardsTransfer) -> 
-  struct
-
-    let getStmtStartData (s: stmt) : T.t = 
-      try IH.find T.stmtStartData s.sid
-      with Not_found -> 
-        E.s (E.bug "BF(%s): stmtStartData is not initialized for %d"
-               T.name s.sid)
-
-    (** Process a statement and return true if the set of live return 
-     * addresses on its entry has changed. *)
-    let processStmt (s: stmt) : bool = 
-      if !T.debug then 
-        ignore (E.log "FF(%s).stmt %d\n" T.name s.sid);
-
-
-      (* Find the state before the branch *)
-      currentLoc := get_stmtLoc s.skind;
-      let d: T.t = 
-        match T.doStmt s with 
-           Done d -> d
-         | (Default | Post _) as action -> begin
-             (* Do the default one. Combine the successors *)
-             let res = 
-               match s.succs with 
-                 [] -> E.s (E.bug "You must doStmt for the statements with no successors")
-               | fst :: rest -> 
-                   List.fold_left (fun acc succ -> 
-                     T.combineSuccessors acc (getStmtStartData succ))
-                     (getStmtStartData fst)
-                     rest
-             in
-             (* Now do the instructions *)
-             let res' = 
-               match s.skind with 
-                 Instr il -> 
-                   (* Now scan the instructions in reverse order. This may 
-                    * Stack_overflow on very long blocks ! *)
-                   let handleInstruction (i: instr) (s: T.t) : T.t = 
-                     currentLoc := get_instrLoc i;
-                     (* First handle the instruction itself *)
-                     let action = T.doInstr i s in 
-                     match action with 
-                     | Done s' -> s'
-                     | Default -> s (* do nothing *)
-                     | Post f -> f s
-                   in
-                   (* Handle instructions starting with the last one *)
-                   List.fold_right handleInstruction il res
-
-               | _ -> res
-             in
-             match action with 
-               Post f -> f res'
-             | _ -> res'
-         end
-      in
-
-      (* See if the state has changed. The only changes are that it may grow.*)
-      let s0 = getStmtStartData s in 
-
-      match T.combineStmtStartData s ~old:s0 d with 
-        None -> (* The old data is good enough *)
-          false
-
-      | Some d' -> 
-          (* We have changed the data *) 
-          if !T.debug then 
-            ignore (E.log "BF(%s): set data for block %d: %a\n" 
-                      T.name s.sid T.pretty d');
-          IH.replace T.stmtStartData s.sid d';
-          true
-
-
-          (** Compute the data flow. Must have the CFG initialized *)
-    let compute (sinks: stmt list) = 
-      let worklist: Cil.stmt Queue.t = Queue.create () in
-      List.iter (fun s -> Queue.add s worklist) sinks;
-      if !T.debug && not (Queue.is_empty worklist) then
-        ignore (E.log "\nBF(%s): processing\n" 
-                  T.name); 
-      let rec fixedpoint () = 
-        if !T.debug &&  not (Queue.is_empty worklist) then 
-          ignore (E.log "BF(%s): worklist= %a\n" 
-                    T.name
-                    (docList (fun s -> num s.sid)) 
-                    (List.rev
-                       (Queue.fold (fun acc s -> s :: acc) [] worklist)));
-        try 
-          let s = Queue.take worklist in 
-          let changes = processStmt s in 
-          if changes then begin
-            (* We must add all predecessors of block b, only if not already 
-             * in and if the filter accepts them. *)
-            List.iter 
-              (fun p ->
-                if not (Queue.fold (fun exists s' -> exists || p.sid = s'.sid) 
-                          false worklist) &&
-                  T.filterStmt p s then 
-                  Queue.add p worklist)
-              s.preds;
-          end;
-          fixedpoint ();
-
-        with Queue.Empty -> 
-          if !T.debug then 
-            ignore (E.log "BF(%s): done\n\n" T.name)
-      in
-      fixedpoint ();
-          
-  end
-
-
diff --git a/cil/src/ext/dataflow.mli b/cil/src/ext/dataflow.mli
deleted file mode 100755
index e72c5db01..000000000
--- a/cil/src/ext/dataflow.mli
+++ /dev/null
@@ -1,151 +0,0 @@
-(** A framework for data flow analysis for CIL code.  Before using 
-    this framework, you must initialize the Control-flow Graph for your
-    program, e.g using {!Cfg.computeFileCFG} *)
-
-type 't action = 
-    Default (** The default action *)
-  | Done of 't (** Do not do the default action. Use this result *)
-  | Post of ('t -> 't) (** The default action, followed by the given 
-                        * transformer *)
-
-type 't stmtaction = 
-    SDefault   (** The default action *)
-  | SDone      (** Do not visit this statement or its successors *)
-  | SUse of 't (** Visit the instructions and successors of this statement
-                  as usual, but use the specified state instead of the 
-                  one that was passed to doStmt *)
-
-(* For if statements *)
-type 't guardaction = 
-    GDefault      (** The default state *) 
-  | GUse of 't    (** Use this data for the branch *)
-  | GUnreachable  (** The branch will never be taken. *)
-
-
-(******************************************************************
- **********
- **********         FORWARDS 
- **********
- ********************************************************************)
-
-module type ForwardsTransfer = sig
-  val name: string (** For debugging purposes, the name of the analysis *)
-
-  val debug: bool ref (** Whether to turn on debugging *)
-
-  type t  (** The type of the data we compute for each block start. May be 
-           * imperative.  *)
-
-  val copy: t -> t
-  (** Make a deep copy of the data *)
-
-
-  val stmtStartData: t Inthash.t
-  (** For each statement id, the data at the start. Not found in the hash 
-   * table means nothing is known about the state at this point. At the end 
-   * of the analysis this means that the block is not reachable. *)
-
-  val pretty: unit -> t -> Pretty.doc 
-  (** Pretty-print the state *)
-
-  val computeFirstPredecessor: Cil.stmt -> t -> t
-  (** Give the first value for a predecessors, compute the value to be set 
-   * for the block *)
-
-  val combinePredecessors: Cil.stmt -> old:t -> t -> t option
-  (** Take some old data for the start of a statement, and some new data for 
-   * the same point. Return None if the combination is identical to the old 
-   * data. Otherwise, compute the combination, and return it. *)
-
-  val doInstr: Cil.instr -> t -> t action
-  (** The (forwards) transfer function for an instruction. The 
-   * {!Cil.currentLoc} is set before calling this. The default action is to 
-   * continue with the state unchanged. *)
-
-  val doStmt: Cil.stmt -> t -> t stmtaction
-  (** The (forwards) transfer function for a statement. The {!Cil.currentLoc} 
-   * is set before calling this. The default action is to do the instructions
-   * in this statement, if applicable, and continue with the successors. *)
-
-  val doGuard: Cil.exp -> t -> t guardaction
-  (** Generate the successor to an If statement assuming the given expression
-    * is nonzero.  Analyses that don't need guard information can return 
-    * GDefault; this is equivalent to returning GUse of the input.
-    * A return value of GUnreachable indicates that this half of the branch
-    * will not be taken and should not be explored.  This will be called
-    * twice per If, once for "then" and once for "else".  
-    *)
-
-  val filterStmt: Cil.stmt -> bool
-  (** Whether to put this statement in the worklist. This is called when a 
-   * block would normally be put in the worklist. *)
-  
-end
-
-module ForwardsDataFlow (T : ForwardsTransfer) : sig
-  val compute: Cil.stmt list -> unit
-  (** Fill in the T.stmtStartData, given a number of initial statements to 
-   * start from. All of the initial statements must have some entry in 
-   * T.stmtStartData (i.e., the initial data should not be bottom) *)
-end
-
-(******************************************************************
- **********
- **********         BACKWARDS 
- **********
- ********************************************************************)
-module type BackwardsTransfer = sig
-  val name: string (** For debugging purposes, the name of the analysis *)
-
-  val debug: bool ref (** Whether to turn on debugging *)
-
-  type t  (** The type of the data we compute for each block start. In many 
-           * presentations of backwards data flow analysis we maintain the 
-           * data at the block end. This is not easy to do with JVML because 
-           * a block has many exceptional ends. So we maintain the data for 
-           * the statement start. *)
-
-  val pretty: unit -> t -> Pretty.doc (** Pretty-print the state *)
-
-  val stmtStartData: t Inthash.t
-  (** For each block id, the data at the start. This data structure must be 
-   * initialized with the initial data for each block *)
-
-  val combineStmtStartData: Cil.stmt -> old:t -> t -> t option
-  (** When the analysis reaches the start of a block, combine the old data 
-   * with the one we have just computed. Return None if the combination is 
-   * the same as the old data, otherwise return the combination. In the 
-   * latter case, the predecessors of the statement are put on the working 
-   * list. *)
-
-
-  val combineSuccessors: t -> t -> t
-  (** Take the data from two successors and combine it *)
-
-
-  val doStmt: Cil.stmt -> t action
-  (** The (backwards) transfer function for a branch. The {!Cil.currentLoc} is 
-   * set before calling this. If it returns None, then we have some default 
-   * handling. Otherwise, the returned data is the data before the branch 
-   * (not considering the exception handlers) *)
-
-  val doInstr: Cil.instr -> t -> t action
-  (** The (backwards) transfer function for an instruction. The 
-   * {!Cil.currentLoc} is set before calling this. If it returns None, then we 
-   * have some default handling. Otherwise, the returned data is the data 
-   * before the branch (not considering the exception handlers) *)
-
-  val filterStmt: Cil.stmt -> Cil.stmt -> bool
-  (** Whether to put this predecessor block in the worklist. We give the 
-   * predecessor and the block whose predecessor we are (and whose data has 
-   * changed)  *)
-  
-end
-
-module BackwardsDataFlow (T : BackwardsTransfer) : sig
-  val compute: Cil.stmt list -> unit
-  (** Fill in the T.stmtStartData, given a number of initial statements to 
-   * start from (the sinks for the backwards data flow). All of the statements
-   * (not just the initial ones!) must have some entry in T.stmtStartData 
-   * (i.e., the initial data should not be bottom) *)
-end
diff --git a/cil/src/ext/dataslicing.ml b/cil/src/ext/dataslicing.ml
deleted file mode 100644
index 35390b40c..000000000
--- a/cil/src/ext/dataslicing.ml
+++ /dev/null
@@ -1,462 +0,0 @@
-(* MODIF: Loop constructor replaced by 3 constructors: While, DoWhile, For. *)
-
-(*
- *
- * Copyright (c) 2004, 
- *  Jeremy Condit       <jcondit@cs.berkeley.edu>
- *  George C. Necula    <necula@cs.berkeley.edu>
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. The names of the contributors may not be used to endorse or promote
- * products derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
- * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
- * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- *)
-open Cil
-open Pretty
-module E = Errormsg
-
-let debug = false
-
-let numRegions : int = 2
-
-let newGlobals : global list ref = ref []
-
-let curFundec : fundec ref = ref dummyFunDec
-let curLocation : location ref = ref locUnknown
-
-let applyOption (fn : 'a -> 'b) (ao : 'a option) : 'b option =
-  match ao with
-  | Some a -> Some (fn a)
-  | None -> None
-
-let getRegion (attrs : attributes) : int =
-  try
-    match List.hd (filterAttributes "region" attrs) with
-    | Attr (_, [AInt i]) -> i
-    | _ -> E.s (bug "bad region attribute")
-  with Failure _ ->
-    1
-
-let checkRegion (i : int) (attrs : attributes) : bool =
-  (getRegion attrs) = i
-
-let regionField (i : int) : string =
-  "r" ^ (string_of_int i)
-
-let regionStruct (i : int) (name : string) : string =
-  name ^ "_r" ^ (string_of_int i)
-
-let foldRegions (fn : int -> 'a -> 'a) (base : 'a) : 'a =
-  let rec helper (i : int) : 'a =
-    if i <= numRegions then
-      fn i (helper (i + 1))
-    else
-      base
-  in
-  helper 1
-
-let rec getTypeName (t : typ) : string =
-  match t with
-  | TVoid _ -> "void"
-  | TInt _ -> "int"
-  | TFloat _ -> "float"
-  | TComp (cinfo, _) -> "comp_" ^ cinfo.cname
-  | TNamed (tinfo, _) -> "td_" ^ tinfo.tname
-  | TPtr (bt, _) -> "ptr_" ^ (getTypeName bt)
-  | TArray (bt, _, _) -> "array_" ^ (getTypeName bt)
-  | TFun _ -> "fn"
-  | _ -> E.s (unimp "typename")
-
-let isAllocFunction (fn : exp) : bool =
-  match fn with
-  | Lval (Var vinfo, NoOffset) when vinfo.vname = "malloc" -> true
-  | _ -> false
-
-let isExternalFunction (fn : exp) : bool =
-  match fn with
-  | Lval (Var vinfo, NoOffset) when vinfo.vstorage = Extern -> true
-  | _ -> false
-
-let types : (int * typsig, typ) Hashtbl.t = Hashtbl.create 113
-let typeInfos : (int * string, typeinfo) Hashtbl.t = Hashtbl.create 113
-let compInfos : (int * int, compinfo) Hashtbl.t = Hashtbl.create 113
-let varTypes : (typsig, typ) Hashtbl.t = Hashtbl.create 113
-let varCompInfos : (typsig, compinfo) Hashtbl.t = Hashtbl.create 113
-
-let rec sliceCompInfo (i : int) (cinfo : compinfo) : compinfo =
-  try
-    Hashtbl.find compInfos (i, cinfo.ckey)
-  with Not_found ->
-    mkCompInfo cinfo.cstruct (regionStruct i cinfo.cname)
-      (fun cinfo' -> 
-         Hashtbl.add compInfos (i, cinfo.ckey) cinfo';
-         List.fold_right
-           (fun finfo rest ->
-              let t = sliceType i finfo.ftype in
-              if not (isVoidType t) then
-                (finfo.fname, t, finfo.fbitfield,
-                 finfo.fattr, finfo.floc) :: rest
-              else
-                rest)
-           cinfo.cfields [])
-      cinfo.cattr
-
-and sliceTypeInfo (i : int) (tinfo : typeinfo) : typeinfo =
-  try
-    Hashtbl.find typeInfos (i, tinfo.tname)
-  with Not_found ->
-    let result =
-      { tinfo with tname = regionStruct i tinfo.tname;
-                   ttype = sliceType i tinfo.ttype; }
-    in
-    Hashtbl.add typeInfos (i, tinfo.tname) result;
-    result
-
-and sliceType (i : int) (t : typ) : typ =
-  let ts = typeSig t in
-  try
-    Hashtbl.find types (i, ts)
-  with Not_found ->
-    let result =
-      match t with
-      | TVoid _ -> t
-      | TInt (_, attrs) -> if checkRegion i attrs then t else TVoid []
-      | TFloat (_, attrs) -> if checkRegion i attrs then t else TVoid []
-      | TComp (cinfo, attrs) -> TComp (sliceCompInfo i cinfo, attrs)
-      | TNamed (tinfo, attrs) -> TNamed (sliceTypeInfo i tinfo, attrs)
-      | TPtr (TVoid _, _) -> t (* Avoid discarding void*. *)
-      | TPtr (bt, attrs) ->
-          let bt' = sliceType i bt in
-          if not (isVoidType bt') then TPtr (bt', attrs) else TVoid []
-      | TArray (bt, eo, attrs) ->
-          TArray (sliceType i bt, applyOption (sliceExp 1) eo, attrs)
-      | TFun (ret, args, va, attrs) ->
-          if checkRegion i attrs then
-            TFun (sliceTypeAll ret,
-                  applyOption
-                    (List.map (fun (aname, atype, aattrs) ->
-                               (aname, sliceTypeAll atype, aattrs)))
-                    args,
-                  va, attrs)
-          else
-            TVoid []
-      | TBuiltin_va_list _ -> t
-      | _ -> E.s (unimp "type %a" d_type t)
-    in
-    Hashtbl.add types (i, ts) result;
-    result
-
-and sliceTypeAll (t : typ) : typ =
-  begin
-  match t with
-  | TComp (cinfo, _) when hasAttribute "var_type_sliced" cinfo.cattr ->
-      E.s (bug "tried to slice twice")
-  | _ -> ()
-  end;
-  let ts = typeSig t in
-  try
-    Hashtbl.find varTypes ts
-  with Not_found ->
-    let cinfo =
-      let name = ("var_" ^ (getTypeName t)) in
-      if debug then ignore (E.log "creating %s\n" name);
-      try
-        Hashtbl.find varCompInfos ts
-      with Not_found ->
-        mkCompInfo true name
-          (fun cinfo ->
-             Hashtbl.add varCompInfos ts cinfo;
-             foldRegions
-               (fun i rest ->
-                  let t' = sliceType i t in
-                  if not (isVoidType t') then
-                    (regionField i, t', None, [], !curLocation) :: rest
-                  else
-                    rest)
-             [])
-          [Attr ("var_type_sliced", [])]
-    in
-    let t' =
-      if List.length cinfo.cfields > 1 then
-        begin
-        newGlobals := GCompTag (cinfo, !curLocation) :: !newGlobals;
-        TComp (cinfo, [])
-        end
-      else
-        t
-    in
-    Hashtbl.add varTypes ts t';
-    t'
-
-and sliceLval (i : int) (lv : lval) : lval =
-  if debug then ignore (E.log "lval %a\n" d_lval lv);
-  let lh, offset = lv in
-  match lh with
-  | Var vinfo ->
-      let t = sliceTypeAll vinfo.vtype in
-      let offset' =
-        match t with
-        | TComp (cinfo, _) when hasAttribute "var_type_sliced" cinfo.cattr ->
-            Field (getCompField cinfo (regionField i), offset)
-        | _ -> offset
-      in
-      Var vinfo, offset'
-  | Mem e ->
-      Mem (sliceExp i e), offset
-
-and sliceExp (i : int) (e : exp) : exp =
-  if debug then ignore (E.log "exp %a\n" d_exp e);
-  match e with
-  | Const c -> Const c
-  | Lval lv -> Lval (sliceLval i lv)
-  | UnOp (op, e1, t) -> UnOp (op, sliceExp i e1, sliceType i t)
-  | BinOp (op, e1, e2, t) -> BinOp (op, sliceExp i e1, sliceExp i e2,
-                                    sliceType i t)
-  | CastE (t, e) -> sliceCast i t e
-  | AddrOf lv -> AddrOf (sliceLval i lv)
-  | StartOf lv -> StartOf (sliceLval i lv)
-  | SizeOf t -> SizeOf (sliceTypeAll t)
-  | _ -> E.s (unimp "exp %a" d_exp e)
-
-and sliceCast (i : int) (t : typ) (e : exp) : exp =
-  let te = typeOf e in
-  match t, te with
-  | TInt (k1, _), TInt (k2, attrs2) when k1 = k2 ->
-      (* Note: We strip off integer cast operations. *)
-      sliceExp (getRegion attrs2) e
-  | TInt (k1, _), TPtr _ ->
-      (* Note: We strip off integer cast operations. *)
-      sliceExp i e
-  | TPtr _, _ when isZero e ->
-      CastE (sliceType i t, sliceExp i e)
-  | TPtr (bt1, _), TPtr (bt2, _) when (typeSig bt1) = (typeSig bt2) ->
-      CastE (sliceType i t, sliceExp i e)
-  | _ ->
-      E.s (unimp "sketchy cast (%a) -> (%a)\n" d_type te d_type t)
-
-and sliceExpAll (e : exp) (l : location) : instr list * exp =
-  let t = typeOf e in
-  let t' = sliceTypeAll t in
-  match t' with
-  | TComp (cinfo, _) when hasAttribute "var_type_sliced" cinfo.cattr ->
-      let vinfo = makeTempVar !curFundec t in
-      let instrs =
-        foldRegions
-          (fun i rest ->
-             try
-               let finfo = getCompField cinfo (regionField i) in
-               if not (isVoidType finfo.ftype) then
-                 Set ((Var vinfo, Field (finfo, NoOffset)),
-                      sliceExp i e, l) :: rest
-               else
-                 rest
-             with Not_found ->
-               rest)
-          []
-      in
-      instrs, Lval (var vinfo)
-  | _ -> [], sliceExp 1 e
-
-let sliceVar (vinfo : varinfo) : unit =
-  if hasAttribute "var_sliced" vinfo.vattr then
-    E.s (bug "tried to slice a var twice");
-  let t = sliceTypeAll vinfo.vtype in
-  if debug then ignore (E.log "setting %s type to %a\n" vinfo.vname d_type t);
-  vinfo.vattr <- addAttribute (Attr ("var_sliced", [])) vinfo.vattr;
-  vinfo.vtype <- t
-
-let sliceInstr (inst : instr) : instr list =
-  match inst with
-  | Set (lv, e, loc) ->
-      if debug then ignore (E.log "set %a %a\n" d_lval lv d_exp e);
-      let t = typeOfLval lv in
-      foldRegions
-        (fun i rest ->
-           if not (isVoidType (sliceType i t)) then
-             Set (sliceLval i lv, sliceExp i e, loc) :: rest
-           else
-             rest)
-        []
-  | Call (ret, fn, args, l) when isAllocFunction fn ->
-      let lv =
-        match ret with
-        | Some lv -> lv
-        | None -> E.s (bug "malloc call has no return lval")
-      in
-      let t = typeOfLval lv in
-      foldRegions
-        (fun i rest ->
-           if not (isVoidType (sliceType i t)) then
-             Call (Some (sliceLval i lv), sliceExp 1 fn,
-                   List.map (sliceExp i) args, l) :: rest
-           else
-             rest)
-        []
-  | Call (ret, fn, args, l) when isExternalFunction fn ->
-      [Call (applyOption (sliceLval 1) ret, sliceExp 1 fn,
-             List.map (sliceExp 1) args, l)]
-  | Call (ret, fn, args, l) ->
-      let ret', set =
-        match ret with
-        | Some lv ->
-            let vinfo = makeTempVar !curFundec (typeOfLval lv) in
-            Some (var vinfo), [Set (lv, Lval (var vinfo), l)]
-        | None ->
-            None, []
-      in
-      let instrs, args' =
-        List.fold_right
-          (fun arg (restInstrs, restArgs) ->
-             let instrs, arg' = sliceExpAll arg l in
-             instrs @ restInstrs, (arg' :: restArgs))
-          args ([], [])
-      in
-      instrs @ (Call (ret', sliceExp 1 fn, args', l) :: set)
-  | _ -> E.s (unimp "inst %a" d_instr inst)
-
-let sliceReturnExp (eo : exp option) (l : location) : stmtkind =
-  match eo with
-  | Some e ->
-      begin
-      match sliceExpAll e l with
-      | [], e' -> Return (Some e', l)
-      | instrs, e' -> Block (mkBlock [mkStmt (Instr instrs);
-                                      mkStmt (Return (Some e', l))])
-      end
-  | None -> Return (None, l)
-
-let rec sliceStmtKind (sk : stmtkind) : stmtkind =
-  match sk with
-  | Instr instrs -> Instr (List.flatten (List.map sliceInstr instrs))
-  | Block b -> Block (sliceBlock b)
-  | If (e, b1, b2, l) -> If (sliceExp 1 e, sliceBlock b1, sliceBlock b2, l)
-  | Break l -> Break l
-  | Continue l -> Continue l
-  | Return (eo, l) -> sliceReturnExp eo l
-  | Switch (e, b, sl, l) -> Switch (sliceExp 1 e, sliceBlock b,
-                                    List.map sliceStmt sl, l)
-(*
-  | Loop (b, l, so1, so2) -> Loop (sliceBlock b, l,
-                                   applyOption sliceStmt so1,
-                                   applyOption sliceStmt so2)
-*)
-  | While (e, b, l) -> While (sliceExp 1 e, sliceBlock b, l)
-  | DoWhile (e, b, l) -> DoWhile (sliceExp 1 e, sliceBlock b, l)
-  | For (bInit, e, bIter, b, l) ->
-	For (sliceBlock bInit, sliceExp 1e, sliceBlock bIter, sliceBlock b, l)
-  | Goto _ -> sk
-  | _ -> E.s (unimp "statement")
-
-and sliceStmt (s : stmt) : stmt =
-  (* Note: We update statements destructively so that goto/switch work. *)
-  s.skind <- sliceStmtKind s.skind;
-  s
-
-and sliceBlock (b : block) : block =
-  ignore (List.map sliceStmt b.bstmts);
-  b
-
-let sliceFundec (fd : fundec) (l : location) : unit =
-  curFundec := fd;
-  curLocation := l;
-  ignore (sliceBlock fd.sbody);
-  curFundec := dummyFunDec;
-  curLocation := locUnknown
-
-let sliceGlobal (g : global) : unit =
-  match g with
-  | GType (tinfo, l) ->
-      newGlobals :=
-        foldRegions (fun i rest -> GType (sliceTypeInfo i tinfo, l) :: rest)
-                    !newGlobals
-  | GCompTag (cinfo, l) ->
-      newGlobals :=
-        foldRegions (fun i rest -> GCompTag (sliceCompInfo i cinfo, l) :: rest)
-                    !newGlobals
-  | GCompTagDecl (cinfo, l) ->
-      newGlobals :=
-        foldRegions (fun i rest -> GCompTagDecl (sliceCompInfo i cinfo, l) ::
-                                   rest)
-                    !newGlobals
-  | GFun (fd, l) ->
-      sliceFundec fd l;
-      newGlobals := GFun (fd, l) :: !newGlobals
-  | GVarDecl _
-  | GVar _ ->
-      (* Defer processing of vars until end. *)
-      newGlobals := g :: !newGlobals
-  | _ ->
-      E.s (unimp "global %a\n" d_global g)
-
-let sliceGlobalVars (g : global) : unit =
-  match g with
-  | GFun (fd, l) ->
-      curFundec := fd;
-      curLocation := l;
-      List.iter sliceVar fd.slocals;
-      List.iter sliceVar fd.sformals;
-      setFunctionType fd (sliceType 1 fd.svar.vtype);
-      curFundec := dummyFunDec;
-      curLocation := locUnknown;
-  | GVar (vinfo, _, l) ->
-      curLocation := l;
-      sliceVar vinfo;
-      curLocation := locUnknown
-  | _ -> ()
-
-class dropAttrsVisitor = object
-  inherit nopCilVisitor
-
-  method vvrbl (vinfo : varinfo) =
-    vinfo.vattr <- dropAttribute "var_sliced" vinfo.vattr;
-    DoChildren
-
-  method vglob (g : global) =
-    begin
-    match g with
-    | GCompTag (cinfo, _) ->
-        cinfo.cattr <- dropAttribute "var_type_sliced" cinfo.cattr;
-    | _ -> ()
-    end;
-    DoChildren
-end
-
-let sliceFile (f : file) : unit =
-  newGlobals := [];
-  List.iter sliceGlobal f.globals;
-  List.iter sliceGlobalVars f.globals;
-  f.globals <- List.rev !newGlobals;
-  visitCilFile (new dropAttrsVisitor) f
-
-let feature : featureDescr = 
-  { fd_name = "DataSlicing";
-    fd_enabled = ref false;
-    fd_description = "data slicing";
-    fd_extraopt = [];
-    fd_doit = sliceFile;
-    fd_post_check = true;
-  } 
diff --git a/cil/src/ext/dataslicing.mli b/cil/src/ext/dataslicing.mli
deleted file mode 100644
index 00606484c..000000000
--- a/cil/src/ext/dataslicing.mli
+++ /dev/null
@@ -1,41 +0,0 @@
-(*
- *
- * Copyright (c) 2001-2002, 
- *  Jeremy Condit       <jcondit@cs.berkeley.edu>
- *  George C. Necula    <necula@cs.berkeley.edu>
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. The names of the contributors may not be used to endorse or promote
- * products derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
- * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
- * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- *)
-
-(* This feature implements data slicing.  The user annotates base types
- * and function types with region(i) annotations, and this transformation
- * will separate the fields into parallel data structures accordingly. *)
-
-val feature: Cil.featureDescr
diff --git a/cil/src/ext/deadcodeelim.ml b/cil/src/ext/deadcodeelim.ml
deleted file mode 100644
index e560e01de..000000000
--- a/cil/src/ext/deadcodeelim.ml
+++ /dev/null
@@ -1,173 +0,0 @@
-(* Eliminate assignment instructions whose results are not
-   used *)
-
-open Cil
-open Pretty
-
-module E = Errormsg
-module RD = Reachingdefs
-module UD = Usedef
-module IH = Inthash
-module S = Stats
-
-module IS = Set.Make(
-  struct
-    type t = int
-    let compare = compare
-  end)
-
-let debug = RD.debug
-
-
-let usedDefsSet = ref IS.empty
-(* put used def ids into usedDefsSet *)
-(* assumes reaching definitions have already been computed *)
-class usedDefsCollectorClass = object(self)
-    inherit RD.rdVisitorClass
-
-  method add_defids iosh e u =
-    UD.VS.iter (fun vi ->
-      if IH.mem iosh vi.vid then 
-	let ios = IH.find iosh vi.vid in
-	if !debug then ignore(E.log "DCE: IOS size for vname=%s at stmt=%d: %d\n" 
-				vi.vname sid (RD.IOS.cardinal ios));
-	RD.IOS.iter (function
-	    Some(i) -> 
-	      if !debug then ignore(E.log "DCE: def %d used: %a\n" i d_plainexp e);
-	      usedDefsSet := IS.add i (!usedDefsSet)
-	  | None -> ()) ios
-      else if !debug then ignore(E.log "DCE: vid %d:%s not in stm:%d iosh at %a\n"
-				   vi.vid vi.vname sid d_plainexp e)) u
-
-  method vexpr e =
-    let u = UD.computeUseExp e in
-    match self#get_cur_iosh() with
-      Some(iosh) -> self#add_defids iosh e u; DoChildren
-    | None ->
-	if !debug then ignore(E.log "DCE: use but no rd data: %a\n" d_plainexp e);
-	DoChildren
-
-  method vinst i =
-    let handle_inst iosh i = match i with
-    | Asm(_,_,slvl,_,_,_) -> List.iter (fun (s,lv) ->
-	match lv with (Var v, off) ->
-	  if s.[0] = '+' then
-	    self#add_defids iosh (Lval(Var v, off)) (UD.VS.singleton v)
-	| _ -> ()) slvl
-    | _ -> ()
-    in
-    begin try
-      cur_rd_dat <- Some(List.hd rd_dat_lst);
-      rd_dat_lst <- List.tl rd_dat_lst
-    with Failure "hd" -> ()
-    end;
-    match self#get_cur_iosh() with
-      Some iosh -> handle_inst iosh i; DoChildren
-    | None -> DoChildren
-
-end
-
-(***************************************************
- * Also need to find reads from volatiles 
- * uses two functions I've put in ciltools which 
- * are basically what Zach wrote, except one is for 
- * types and one is for vars. Another difference is
- * they filter out pointers to volatiles. This 
- * handles DMA 
- ***************************************************)
-class hasVolatile flag = object (self)
-  inherit nopCilVisitor   
-  method vlval l = 
-    let tp = typeOfLval l in
-    if (Ciltools.is_volatile_tp tp) then flag := true;
-    DoChildren
-  method vexpr e =
-    DoChildren
-end
-
-let exp_has_volatile e = 
-  let flag = ref false in
-  ignore (visitCilExpr (new hasVolatile flag) e);
-  !flag
- (***************************************************)
-
-let removedCount = ref 0
-(* Filter out instructions whose definition ids are not
-   in usedDefsSet *)
-class uselessInstrElim : cilVisitor = object(self)
-  inherit nopCilVisitor
-
-  method vstmt stm =
-
-    let test (i,(_,s,iosh)) =
-      match i with 
-	Call _ -> true 
-      | Set((Var vi,NoOffset),e,_) ->
-	  if vi.vglob || (Ciltools.is_volatile_vi vi) || (exp_has_volatile e) then true else
-	  let _, defd = UD.computeUseDefInstr i in
-	  let rec loop n =
-	    if n < 0 then false else
-	    if IS.mem (n+s) (!usedDefsSet)
-	    then true
-	    else loop (n-1)
-	  in
-	  if loop (UD.VS.cardinal defd - 1)
-	  then true
-	  else (incr removedCount; false)
-      | _ -> true
-    in
-
-    let filter il stmdat =
-      let rd_dat_lst = RD.instrRDs il stm.sid stmdat false in
-      let ildatlst = List.combine il rd_dat_lst in
-      let ildatlst' = List.filter test ildatlst in
-      let (newil,_) = List.split ildatlst' in
-      newil
-    in
-
-    match RD.getRDs stm.sid with
-      None -> DoChildren
-    | Some(_,s,iosh) ->
-	match stm.skind with
-	  Instr il ->
-	    stm.skind <- Instr(filter il ((),s,iosh));
-	    SkipChildren
-	| _ -> DoChildren
-	    
-end
-
-(* until fixed point is reached *)
-let elim_dead_code_fp (fd : fundec) :  fundec =
-  (* fundec -> fundec *)
-  let rec loop fd =
-    usedDefsSet := IS.empty;
-    removedCount := 0;
-    S.time "reaching definitions" RD.computeRDs fd;
-    ignore(visitCilFunction (new usedDefsCollectorClass :> cilVisitor) fd);
-    let fd' = visitCilFunction (new uselessInstrElim) fd in
-    if !removedCount = 0 then fd' else loop fd'
-  in
-  loop fd
-
-(* just once *)
-let elim_dead_code (fd : fundec) :  fundec =
-  (* fundec -> fundec *)
-  usedDefsSet := IS.empty;
-  removedCount := 0;
-  S.time "reaching definitions" RD.computeRDs fd;
-  ignore(visitCilFunction (new usedDefsCollectorClass :> cilVisitor) fd);
-  let fd' = visitCilFunction (new uselessInstrElim) fd in
-  fd'
-
-class deadCodeElimClass : cilVisitor = object(self)
-    inherit nopCilVisitor
-
-  method vfunc fd =
-    let fd' = elim_dead_code fd in
-    ChangeTo(fd')
-
-end
-
-let dce f =
-  if !debug then ignore(E.log "DCE: starting dead code elimination\n");
-  visitCilFile (new deadCodeElimClass) f
diff --git a/cil/src/ext/dominators.ml b/cil/src/ext/dominators.ml
deleted file mode 100755
index d838d23f8..000000000
--- a/cil/src/ext/dominators.ml
+++ /dev/null
@@ -1,241 +0,0 @@
-(*
- *
- * Copyright (c) 2001-2002, 
- *  George C. Necula    <necula@cs.berkeley.edu>
- *  Scott McPeak        <smcpeak@cs.berkeley.edu>
- *  Wes Weimer          <weimer@cs.berkeley.edu>
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. The names of the contributors may not be used to endorse or promote
- * products derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
- * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
- * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- *)
-
-(** Compute dominator information for the statements in a function *)
-open Cil
-open Pretty
-module E = Errormsg
-module H = Hashtbl 
-module U = Util
-module IH = Inthash
-
-module DF = Dataflow
-
-let debug = false
-
-(* For each statement we maintain a set of statements that dominate it *)
-module BS = Set.Make(struct 
-                        type t = Cil.stmt
-                        let compare v1 v2 = Pervasives.compare v1.sid v2.sid
-                     end)
-
-
-
-
-(** Customization module for dominators *)
-module DT = struct
-  let name = "dom"
-
-  let debug = ref debug 
-
-  type t = BS.t
-
-   (** For each statement in a function we keep the set of dominator blocks. 
-    * Indexed by statement id *)
-  let stmtStartData: t IH.t = IH.create 17
-
-  let copy (d: t) = d
-
-  let pretty () (d: t) = 
-    dprintf "{%a}" 
-      (docList (fun s -> dprintf "%d" s.sid))
-      (BS.elements d)
-
-  let computeFirstPredecessor (s: stmt) (d: BS.t) : BS.t = 
-    (* Make sure we add this block to the set *)
-    BS.add s d
-
-  let combinePredecessors (s: stmt) ~(old: BS.t) (d: BS.t) : BS.t option = 
-    (* First, add this block to the data from the predecessor *)
-    let d' = BS.add s d in
-    if BS.subset old d' then 
-      None
-    else
-      Some (BS.inter old d')
-
-  let doInstr (i: instr) (d: t) = DF.Default
-
-  let doStmt (s: stmt) (d: t) = DF.SDefault
-  
-  let doGuard condition _ = DF.GDefault
-
-
-  let filterStmt _ = true
-end
-
-
-
-module Dom = DF.ForwardsDataFlow(DT)
-
-let getStmtDominators (data: BS.t IH.t) (s: stmt) : BS.t = 
-  try IH.find data s.sid
-  with Not_found -> BS.empty (* Not reachable *)
-  
-
-let getIdom (idomInfo: stmt option IH.t) (s: stmt) = 
-  try IH.find idomInfo s.sid
-  with Not_found -> 
-    E.s (E.bug "Immediate dominator information not set for statement %d" 
-           s.sid)
-
-(** Check whether one block dominates another. This assumes that the "idom" 
- * field has been computed. *)
-let rec dominates (idomInfo: stmt option IH.t) (s1: stmt) (s2: stmt) = 
-  s1 == s2 || 
-  (let s2idom = getIdom idomInfo s2 in
-  match s2idom with 
-    None -> false
-  | Some s2idom -> dominates idomInfo s1 s2idom)
-    
-
-
-
-let computeIDom (f: fundec) : stmt option IH.t = 
-  (* We must prepare the CFG info first *)
-  prepareCFG f;
-  computeCFGInfo f false;
-
-  IH.clear DT.stmtStartData;
-  let idomData: stmt option IH.t = IH.create 13 in
-
-  let _ = 
-    match f.sbody.bstmts with 
-      [] -> () (* function has no body *)
-    | start :: _ -> begin
-        (* We start with only the start block *)
-        IH.add DT.stmtStartData start.sid (BS.singleton start);
-        
-        Dom.compute [start];
-        
-        (* Dump the dominators information *)
-         if debug then 
-           List.iter
-             (fun s -> 
-               let sdoms = getStmtDominators DT.stmtStartData s in
-               if not (BS.mem s sdoms) then begin
-                 (* It can be that the block is not reachable *)
-                 if s.preds <> [] then 
-                   E.s (E.bug "Statement %d is not in its list of dominators"
-                          s.sid);
-               end;
-               ignore (E.log "Dominators for %d: %a\n" s.sid
-                         DT.pretty (BS.remove s sdoms)))
-             f.sallstmts;
-        
-        (* Now fill the immediate dominators for all nodes *)
-        let rec fillOneIdom (s: stmt) = 
-          try 
-            ignore (IH.find idomData s.sid)
-              (* Already set *)
-          with Not_found -> begin
-            (* Get the dominators *)
-            let sdoms = getStmtDominators DT.stmtStartData s in 
-            (* Fill the idom for the dominators first *)
-            let idom = 
-              BS.fold 
-                (fun d (sofar: stmt option) -> 
-                  if d.sid = s.sid then 
-                    sofar (* Ignore the block itself *)
-                  else begin
-                    (* fill the idom information recursively *)
-                    fillOneIdom d;
-                    match sofar with 
-                      None -> Some d
-                    | Some sofar' ->
-                        (* See if d is dominated by sofar. We know that the 
-                         * idom information has been computed for both sofar 
-                         * and for d*)
-                        if dominates idomData sofar' d then 
-                          Some d
-                        else
-                          sofar
-                  end)
-                sdoms
-                None
-            in
-            IH.replace idomData s.sid idom
-          end
-        in
-        (* Scan all blocks and compute the idom *)
-        List.iter fillOneIdom f.sallstmts
-    end
-  in
-  idomData
-
-
-
-(** Compute the start of the natural loops. For each start, keep a list of 
- * origin of a back edge. The loop consists of the loop start and all 
- * predecessors of the origins of back edges, up to and including the loop 
- * start *)
-let findNaturalLoops (f: fundec) 
-                     (idomData: stmt option IH.t) : (stmt * stmt list) list = 
-  let loops = 
-    List.fold_left
-      (fun acc b -> 
-        (* Iterate over all successors, and see if they are among the 
-         * dominators for this block *)
-        List.fold_left
-          (fun acc s -> 
-            if dominates idomData s b then 
-              (* s is the start of a natural loop *)
-              let rec addNaturalLoop = function
-                  [] -> [(s, [b])]
-                | (s', backs) :: rest when s'.sid = s.sid -> 
-                    (s', b :: backs) :: rest
-                | l :: rest -> l :: addNaturalLoop rest
-              in
-              addNaturalLoop acc
-            else
-              acc)
-          acc
-          b.succs)
-      []
-      f.sallstmts 
-  in
-  
-  if debug then 
-    ignore (E.log "Natural loops:\n%a\n"
-              (docList ~sep:line
-                 (fun (s, backs) -> 
-                   dprintf "    Start: %d, backs:%a"
-                     s.sid
-                     (docList (fun b -> num b.sid))
-                     backs))
-              loops);
-  
-  loops
diff --git a/cil/src/ext/dominators.mli b/cil/src/ext/dominators.mli
deleted file mode 100755
index 0abf82e94..000000000
--- a/cil/src/ext/dominators.mli
+++ /dev/null
@@ -1,29 +0,0 @@
-
-
-(** Compute dominators using data flow analysis *)
-(** Author: George Necula   
-      5/28/2004 
- **)
-
-(** Invoke on a code after filling in the CFG info and it computes the 
- * immediate dominator information. We map each statement to its immediate 
- * dominator (None for the start statement, and for the unreachable 
- * statements). *)
-val computeIDom: Cil.fundec -> Cil.stmt option Inthash.t
-
-
-(** This is like Inthash.find but gives an error if the information is 
- * Not_found *)
-val getIdom:  Cil.stmt option Inthash.t -> Cil.stmt -> Cil.stmt option
-
-(** Check whether one statement dominates another. *)
-val dominates: Cil.stmt option Inthash.t -> Cil.stmt -> Cil.stmt -> bool
-
-
-(** Compute the start of the natural loops. This assumes that the "idom" 
- * field has been computed. For each start, keep a list of origin of a back 
- * edge. The loop consists of the loop start and all predecessors of the 
- * origins of back edges, up to and including the loop start *)
-val findNaturalLoops: Cil.fundec -> 
-                      Cil.stmt option Inthash.t -> 
-                      (Cil.stmt * Cil.stmt list) list
diff --git a/cil/src/ext/epicenter.ml b/cil/src/ext/epicenter.ml
deleted file mode 100644
index a8045e855..000000000
--- a/cil/src/ext/epicenter.ml
+++ /dev/null
@@ -1,114 +0,0 @@
-(* epicenter.ml *)
-(* code for epicenter.mli *)
-
-(* module maintainer: scott *)
-(* see copyright at end of this file *)
-
-open Callgraph
-open Cil
-open Trace
-open Pretty
-module H = Hashtbl
-module IH = Inthash
-
-let sliceFile (f:file) (epicenter:string) (maxHops:int) : unit =
-  (* compute the static call graph *)
-  let graph:callgraph = (computeGraph f) in
-
-  (* will accumulate here the set of names of functions already seen *)
-  let seen: (string, unit) H.t = (H.create 117) in
-
-  (* when removing "unused" symbols, keep all seen functions *)
-  let isRoot : global -> bool = function
-    | GFun ({svar = {vname = vname}}, _) ->
-	H.mem seen vname
-    | _ ->
-	false
-  in
-
-  (* recursive depth-first search through the call graph, finding
-   * all nodes within 'hops' hops of 'node' and marking them to
-   * to be retained *)
-  let rec dfs (node:callnode) (hops:int) : unit =
-    (* only recurse if we haven't already marked this node *)
-    if not (H.mem seen (nodeName node.cnInfo)) then
-      begin
-        (* add this node *)
-	H.add seen (nodeName node.cnInfo) ();
-	trace "epicenter" (dprintf "will keep %s\n" (nodeName node.cnInfo));
-	
-        (* if we cannot do any more hops, stop *)
-	if (hops > 0) then
-
-          (* recurse on all the node's callers and callees *)
-	  let recurse _ (adjacent:callnode) : unit =
-	    (dfs adjacent (hops - 1)) 
-          in
-	  IH.iter recurse node.cnCallees;
-	  IH.iter recurse node.cnCallers
-      end
-  in
-  dfs (Hashtbl.find graph epicenter) maxHops;
-
-  (* finally, throw away anything we haven't decided to keep *)
-  Cilutil.sliceGlobal := true;
-  Rmtmps.removeUnusedTemps ~isRoot:isRoot f
-
-let doEpicenter = ref false
-let epicenterName = ref ""
-let epicenterHops = ref 0
-
-let feature : featureDescr = 
-  { fd_name = "epicenter";
-    fd_enabled = doEpicenter;
-    fd_description = "remove all functions except those within some number " ^
-                     "of hops (in the call graph) from a given function";
-    fd_extraopt = 
-    [
-    ("--epicenter-name", 
-     Arg.String (fun s -> epicenterName := s),
-               "<name>: do an epicenter slice starting from function <name>");
-    ("--epicenter-hops", Arg.Int (fun n -> epicenterHops := n),
-     "<n>: specify max # of hops for epicenter slice");
-    ];
-
-    fd_doit =
-    (fun f -> 
-      sliceFile f !epicenterName !epicenterHops);
-
-    fd_post_check = true;
-  } 
-
-
-(*
- *
- * Copyright (c) 2001-2002 by
- *  George C. Necula	necula@cs.berkeley.edu
- *  Scott McPeak        smcpeak@cs.berkeley.edu
- *  Wes Weimer          weimer@cs.berkeley.edu
- *  Ben Liblit          liblit@cs.berkeley.edu
- *
- * All rights reserved.  Permission to use, copy, modify and distribute
- * this software for research purposes only is hereby granted,
- * provided that the following conditions are met:
- * 1. XSRedistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * 3. The name of the authors may not be used to endorse or promote products
- * derived from  this software without specific prior written permission.
- *
- * DISCLAIMER:
- * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
- * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
- * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- *)
diff --git a/cil/src/ext/heap.ml b/cil/src/ext/heap.ml
deleted file mode 100644
index 10f48a045..000000000
--- a/cil/src/ext/heap.ml
+++ /dev/null
@@ -1,112 +0,0 @@
-(* See copyright notice at the end of the file *)
-
-(* The type of a heap (priority queue): keys are integers, data values
- * are whatever you like *)
-type ('a) t = {
-          elements  : (int * ('a option)) array ;
-  mutable size      : int ; (* current number of elements *)
-          capacity  : int ; (* max number of elements *)
-} 
-
-let create size = {
-  elements = Array.create (size+1) (max_int,None) ;
-  size = 0 ;
-  capacity = size ; 
-} 
-
-let clear heap = heap.size <- 0  
-
-let is_full heap = (heap.size = heap.capacity) 
-
-let is_empty heap = (heap.size = 0) 
-
-let insert heap prio elt = begin
-  if is_full heap then begin
-    raise (Invalid_argument "Heap.insert")
-  end ; 
-  heap.size <- heap.size + 1 ;
-  let i = ref heap.size in
-  while ( fst heap.elements.(!i / 2) < prio ) do
-    heap.elements.(!i) <- heap.elements.(!i / 2) ;
-    i := (!i / 2)
-  done ;
-  heap.elements.(!i) <- (prio,Some(elt))
-  end
-
-let examine_max heap = 
-  if is_empty heap then begin
-    raise (Invalid_argument "Heap.examine_max")
-  end ; 
-  match heap.elements.(1) with
-    p,Some(elt) -> p,elt
-  | p,None -> failwith "Heap.examine_max" 
-
-let extract_max heap = begin
-  if is_empty heap then begin
-    raise (Invalid_argument "Heap.extract_max")
-  end ; 
-  let max = heap.elements.(1) in
-  let last = heap.elements.(heap.size) in
-  heap.size <- heap.size - 1 ; 
-  let i = ref 1 in
-  let break = ref false in 
-  while (!i * 2 <= heap.size) && not !break do
-    let child = ref (!i * 2) in
-
-    (* find smaller child *)
-    if (!child <> heap.size && 
-        fst heap.elements.(!child+1) > fst heap.elements.(!child)) then begin
-        incr child 
-    end ; 
-
-    (* percolate one level *) 
-    if (fst last < fst heap.elements.(!child)) then begin
-      heap.elements.(!i) <- heap.elements.(!child) ; 
-      i := !child 
-    end else begin
-      break := true 
-    end
-  done ; 
-  heap.elements.(!i) <- last ;
-  match max with 
-    p,Some(elt) -> p,elt
-  | p,None -> failwith "Heap.examine_min" 
-  end
-
-
-(*
- *
- * Copyright (c) 2001-2002, 
- *  George C. Necula    <necula@cs.berkeley.edu>
- *  Scott McPeak        <smcpeak@cs.berkeley.edu>
- *  Wes Weimer          <weimer@cs.berkeley.edu>
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. The names of the contributors may not be used to endorse or promote
- * products derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
- * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
- * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- *)
diff --git a/cil/src/ext/heapify.ml b/cil/src/ext/heapify.ml
deleted file mode 100644
index a583181e7..000000000
--- a/cil/src/ext/heapify.ml
+++ /dev/null
@@ -1,250 +0,0 @@
-(*
- *
- * Copyright (c) 2001-2002, 
- *  George C. Necula    <necula@cs.berkeley.edu>
- *  Scott McPeak        <smcpeak@cs.berkeley.edu>
- *  Wes Weimer          <weimer@cs.berkeley.edu>
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. The names of the contributors may not be used to endorse or promote
- * products derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
- * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
- * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- *)
-
-(* 
- * Heapify: a program transform that looks over functions, finds those
- * that have local (stack) variables that contain arrays, puts all such
- * local variables into a single heap allocated structure, changes all
- * accesses to such variables into accesses to fields of that structure
- * and frees the structure on return. 
- *)
-open Cil
-
-(* utilities that should be in Cil.ml *)
-(* sfg: this function appears to never be called *)
-let mkSimpleField ci fn ft fl =
-  { fcomp = ci ; fname = fn ; ftype = ft ; fbitfield = None ; fattr = [];
-    floc = fl }
-
-
-(* actual Heapify begins *)
-
-let heapifyNonArrays = ref false
-
-(* Does this local var contain an array? *)
-let rec containsArray (t:typ) : bool =  (* does this type contain an array? *)
-  match unrollType t with
-    TArray _ -> true
-  | TComp(ci, _) -> (* look at the types of the fields *)
-      List.exists (fun fi -> containsArray fi.ftype) ci.cfields
-  | _ -> 
-    (* Ignore other types, including TInt and TPtr.  We don't care whether
-       there are arrays in the base types of pointers; only about whether
-       this local variable itself needs to be moved to the heap. *)
-   false
-
-
-class heapifyModifyVisitor big_struct big_struct_fields varlist free 
-    (currentFunction: fundec) = object(self)
-  inherit nopCilVisitor  (* visit lvalues and statements *)
-  method vlval l = match l with (* should we change this one? *)
-    Var(vi),vi_offset when List.mem_assoc vi varlist -> (* check list *)
-      let i = List.assoc vi varlist in (* find field offset *)
-      let big_struct_field = List.nth big_struct_fields i in
-      let new_lval = Mem(Lval(big_struct, NoOffset)),
-	Field(big_struct_field,vi_offset) in (* rewrite the lvalue *)
-      ChangeDoChildrenPost(new_lval, (fun l -> l))
-  | _ -> DoChildren (* ignore other lvalues *)
-  method vstmt s = match s.skind with (* also rewrite the return *)
-    Return(None,loc) -> 
-      let free_instr = Call(None,free,[Lval(big_struct,NoOffset)],loc) in
-      self#queueInstr [free_instr]; (* insert free_instr before the return *)
-      DoChildren
-  | Return(Some exp ,loc) ->
-      (* exp may depend on big_struct, so evaluate it before calling free. 
-       * This becomes:  tmp = exp; free(big_struct); return tmp; *)
-      let exp_new = visitCilExpr (self :> cilVisitor) exp in
-      let ret_tmp = makeTempVar currentFunction (typeOf exp_new) in
-      let eval_ret_instr = Set(var ret_tmp, exp_new, loc) in
-      let free_instr = Call(None,free,[Lval(big_struct,NoOffset)],loc) in
-      (* insert the instructions before the return *)
-      self#queueInstr [eval_ret_instr; free_instr];
-      s.skind <- (Return(Some(Lval(var ret_tmp)), loc));
-      DoChildren
-  | _ -> DoChildren (* ignore other statements *)
-end
-    
-class heapifyAnalyzeVisitor f alloc free = object 
-  inherit nopCilVisitor (* only look at function bodies *)
-  method vglob gl = match gl with
-    GFun(fundec,funloc) -> 
-      let counter = ref 0 in (* the number of local vars containing arrays *)
-      let varlist = ref [] in  (* a list of (var,id) pairs, in reverse order *)
-      List.iter (fun vi ->  
-         (* find all local vars with arrays.  If the user requests it,
-            we also look for non-array vars whose address is taken. *)
-        if (containsArray vi.vtype) || (vi.vaddrof && !heapifyNonArrays)
-        then begin
-          varlist := (vi,!counter) :: !varlist ; (* add it to the list *)
-          incr counter (* put the next such var in the next slot *)
-        end
-        ) fundec.slocals ; 
-      if (!varlist <> []) then begin (* some local vars contain arrays *)
-        let name = (fundec.svar.vname ^ "_heapify") in
-        let ci = mkCompInfo true name (* make a big structure *)
-	    (fun _ -> List.rev_map (* reverse the list to fix the order *)
-                (* each local var becomes a field *)
-		(fun (vi,i) -> vi.vname,vi.vtype,None,[],vi.vdecl) !varlist) [] in
-        let vi = makeLocalVar fundec name (TPtr(TComp(ci,[]),[])) in
-        let modify = new heapifyModifyVisitor (Var(vi)) ci.cfields
-	    !varlist free fundec in (* rewrite accesses to local vars *)
-        fundec.sbody <- visitCilBlock modify fundec.sbody ;
-        let alloc_stmt = mkStmt (* allocate the big struct on the heap *)
-            (Instr [Call(Some(Var(vi),NoOffset), alloc, 
-			 [SizeOf(TComp(ci,[]))],funloc)]) in
-        fundec.sbody.bstmts <- alloc_stmt :: fundec.sbody.bstmts ; 
-	fundec.slocals <- List.filter (fun vi -> (* remove local vars *)
-	  not (List.mem_assoc vi !varlist)) fundec.slocals ; 
-	let typedec = (GCompTag(ci,funloc)) in (* declare the big struct *)
-        ChangeTo([typedec ; GFun(fundec,funloc)])  (* done! *)
-      end else
-	DoChildren	(* ignore everything else *)
-  | _ -> DoChildren
-end
-    
-let heapify (f : file) (alloc : exp) (free : exp)  =
-  visitCilFile (new heapifyAnalyzeVisitor f alloc free) f;
-  f
-
-(* heapify code ends here *)
-
-let default_heapify (f : file) =
-  let alloc_fun = emptyFunction "malloc" in
-  let free_fun = emptyFunction "free" in
-  let alloc_exp = (Lval((Var(alloc_fun.svar)),NoOffset)) in
-  let free_exp = (Lval((Var(free_fun.svar)),NoOffset)) in
-  ignore (heapify f alloc_exp free_exp)
-    
-(* StackGuard clone *)
-
-class sgModifyVisitor restore_ra_stmt = object
-	inherit nopCilVisitor
-  method vstmt s = match s.skind with (* also rewrite the return *)
-    Return(_,loc) -> let new_block = mkBlock [restore_ra_stmt ; s] in 
-			ChangeTo(mkStmt (Block(new_block)))  
-	| _ -> DoChildren (* ignore other statements *)
-end
-
-class sgAnalyzeVisitor f push pop get_ra set_ra = object
-  inherit nopCilVisitor
-  method vfunc fundec = 
-    let needs_guarding = List.fold_left 
-	(fun acc vi -> acc || containsArray vi.vtype) 
-	false fundec.slocals in
-    if needs_guarding then begin
-      let ra_tmp = makeLocalVar fundec "return_address" voidPtrType in
-      let ra_exp = Lval(Var(ra_tmp),NoOffset) in 
-      let save_ra_stmt = mkStmt (* save the current return address *)
-	  (Instr [Call(Some(Var(ra_tmp),NoOffset), get_ra, [], locUnknown) ;
-		   Call(None, push, [ra_exp], locUnknown)]) in
-      let restore_ra_stmt = mkStmt (* restore the old return address *)
-	  (Instr [Call(Some(Var(ra_tmp),NoOffset), pop, [], locUnknown) ;
-		   Call(None, set_ra, [ra_exp], locUnknown)]) in
-      let modify = new sgModifyVisitor restore_ra_stmt in
-      fundec.sbody <- visitCilBlock modify fundec.sbody ;
-      fundec.sbody.bstmts <- save_ra_stmt :: fundec.sbody.bstmts ;
-      ChangeTo(fundec)  (* done! *)
-    end else DoChildren
-end
-          
-let stackguard (f : file) (push : exp) (pop : exp) 
-    (get_ra : exp) (set_ra : exp) = 
-  visitCilFileSameGlobals (new sgAnalyzeVisitor f push pop get_ra set_ra) f;
-  f
-    (* stackguard code ends *)
-    
-let default_stackguard (f : file) =
-  let expify fundec = Lval(Var(fundec.svar),NoOffset) in
-  let push = expify (emptyFunction "stackguard_push") in
-  let pop = expify (emptyFunction "stackguard_pop") in
-  let get_ra = expify (emptyFunction "stackguard_get_ra") in
-  let set_ra = expify (emptyFunction "stackguard_set_ra") in
-  let global_decl = 
-"extern void * stackguard_get_ra();
-extern void stackguard_set_ra(void *new_ra);
-/* You must provide an implementation for functions that get and set the
- * return address. Such code is unfortunately architecture specific.
- */
-struct stackguard_stack {
-  void * data;
-  struct stackguard_stack * next;
-} * stackguard_stack;
-
-void stackguard_push(void *ra) {
-  void * old = stackguard_stack;
-  stackguard_stack = (struct stackguard_stack *)
-    malloc(sizeof(stackguard_stack));
-  stackguard_stack->data = ra;
-  stackguard_stack->next = old;
-}
-
-void * stackguard_pop() {
-  void * ret = stackguard_stack->data;
-  void * next = stackguard_stack->next;
-  free(stackguard_stack);
-  stackguard_stack->next = next;
-  return ret;
-}" in
-    f.globals <- GText(global_decl) :: f.globals ;
-    ignore (stackguard f push pop get_ra set_ra )
-      
-      
-let feature1 : featureDescr = 
-  { fd_name = "stackGuard";
-    fd_enabled = Cilutil.doStackGuard;
-    fd_description = "instrument function calls and returns to maintain a separate stack for return addresses" ;
-    fd_extraopt = [];
-    fd_doit = (function (f: file) -> default_stackguard f);
-    fd_post_check = true;
-  } 
-let feature2 : featureDescr = 
-  { fd_name = "heapify";
-    fd_enabled = Cilutil.doHeapify;
-    fd_description = "move stack-allocated arrays to the heap" ;
-    fd_extraopt = [
-      "--heapifyAll", Arg.Set heapifyNonArrays,
-      "When using heapify, move all local vars whose address is taken, not just arrays.";
-    ];
-    fd_doit = (function (f: file) -> default_heapify f);
-    fd_post_check = true;
-  } 
-      
-
-
-
-
-
diff --git a/cil/src/ext/liveness.ml b/cil/src/ext/liveness.ml
deleted file mode 100644
index 72cd60732..000000000
--- a/cil/src/ext/liveness.ml
+++ /dev/null
@@ -1,190 +0,0 @@
-
-(* Calculate which variables are live at
- * each statememnt.
- *
- *
- *
- *)
-
-open Cil
-open Pretty
-
-module DF = Dataflow
-module UD = Usedef
-module IH = Inthash
-module E = Errormsg
-
-let debug = ref false
-
-let live_label = ref ""
-let live_func = ref ""
-
-module VS = UD.VS
-
-let debug_print () vs = (VS.fold
-    (fun vi d -> 
-      d ++ text "name: " ++ text vi.vname
-	++ text " id: " ++ num vi.vid ++ text " ")
-    vs nil) ++ line
-
-let min_print () vs = (VS.fold
-    (fun vi d ->
-      d ++ text vi.vname
-	++ text "(" ++ d_type () vi.vtype ++ text ")"
-	++ text ",")
-    vs nil) ++ line
-
-let printer = ref debug_print
-
-module LiveFlow = struct
-  let name = "Liveness"
-  let debug = debug
-  type t = VS.t
-
-  let pretty () vs =
-    let fn = !printer in
-    fn () vs
-    
-  let stmtStartData = IH.create 32
-
-  let combineStmtStartData (stm:stmt) ~(old:t) (now:t) =
-    if not(VS.compare old now = 0)
-    then Some(VS.union old now)
-    else None
-
-  let combineSuccessors = VS.union
-
-  let doStmt stmt =
-    if !debug then ignore(E.log "looking at: %a\n" d_stmt stmt);
-    match stmt.succs with
-      [] -> let u,d = UD.computeUseDefStmtKind stmt.skind in
-      if !debug then ignore(E.log "doStmt: no succs %d\n" stmt.sid);
-      DF.Done u
-    | _ ->
-	let handle_stm vs = match stmt.skind with
-	  Instr _ -> vs
-	| s -> let u, d = UD.computeUseDefStmtKind s in
-	  VS.union u (VS.diff vs d)
-	in
-	DF.Post handle_stm
-
-  let doInstr i vs =
-    let transform vs' =
-      let u,d = UD.computeUseDefInstr i in
-      VS.union u (VS.diff vs' d)
-    in
-    DF.Post transform
-
-  let filterStmt stm1 stm2 = true
-
-end
-
-module L = DF.BackwardsDataFlow(LiveFlow)
-
-let sink_stmts = ref []
-class sinkFinderClass = object(self)
-  inherit nopCilVisitor
-
-  method vstmt s = match s.succs with
-    [] -> (sink_stmts := s :: (!sink_stmts);
-	   DoChildren)
-  | _ -> DoChildren
-
-end
-
-(* gives list of return statements from a function *)
-(* fundec -> stm list *)
-let find_sinks fdec =
-  sink_stmts := [];
-  ignore(visitCilFunction (new sinkFinderClass) fdec);
-  !sink_stmts
-
-(* XXX: This does not compute the best ordering to
- * give to the work-list algorithm.
- *)
-let all_stmts = ref []
-class nullAdderClass = object(self)
-  inherit nopCilVisitor
-
-  method vstmt s =
-    all_stmts := s :: (!all_stmts);
-    IH.add LiveFlow.stmtStartData s.sid VS.empty;
-    DoChildren
-
-end
-
-let null_adder fdec =
-  ignore(visitCilFunction (new nullAdderClass) fdec);
-  !all_stmts
-
-let computeLiveness fdec =
-  IH.clear LiveFlow.stmtStartData;
-  UD.onlyNoOffsetsAreDefs := false;
-  all_stmts := [];
-  let a = null_adder fdec in
-  L.compute a
-
-let print_everything () =
-  let d = IH.fold (fun i vs d -> 
-    d ++ num i ++ text ": " ++ LiveFlow.pretty () vs) 
-      LiveFlow.stmtStartData nil in
-  ignore(printf "%t" (fun () -> d))
-
-let match_label lbl = match lbl with
-  Label(str,_,b) ->
-    if !debug then ignore(E.log "Liveness: label seen: %s\n" str);
-    (*b && *)(String.compare str (!live_label) = 0)
-| _ -> false
-
-class doFeatureClass = object(self)
-  inherit nopCilVisitor
-
-  method vfunc fd =
-    if String.compare fd.svar.vname (!live_func) = 0 then 
-      (Cfg.clearCFGinfo fd;
-       ignore(Cfg.cfgFun fd);
-       computeLiveness fd;
-       if String.compare (!live_label) "" = 0 then
-	 (printer := min_print;
-	  print_everything();
-	  SkipChildren)
-       else DoChildren)
-    else SkipChildren
-
-  method vstmt s =
-    if List.exists match_label s.labels then try
-      let vs = IH.find LiveFlow.stmtStartData s.sid in
-      (printer := min_print;
-       ignore(printf "%a" LiveFlow.pretty vs);
-       SkipChildren)
-    with Not_found -> 
-      if !debug then ignore(E.log "Liveness: stmt: %d not found\n" s.sid);
-      DoChildren
-    else 
-      (if List.length s.labels = 0 then
-	if !debug then ignore(E.log "Liveness: no label at sid=%d\n" s.sid);
-      DoChildren)
-
-end
-
-let do_live_feature (f:file) =
-  visitCilFile (new doFeatureClass) f
-
-let feature =
-  {
-   fd_name = "Liveness";
-   fd_enabled = ref false;
-   fd_description = "Spit out live variables at a label";
-   fd_extraopt = [
-   "--live_label",
-   Arg.String (fun s -> live_label := s),
-   "Output the variables live at this label";
-   "--live_func",
-   Arg.String (fun s -> live_func := s),
-   "Output the variables live at each statement in this function.";
-   "--live_debug",
-   Arg.Unit (fun n -> debug := true),
-   "Print lots of debugging info";];
-   fd_doit = do_live_feature;
-   fd_post_check = false
- }
diff --git a/cil/src/ext/logcalls.ml b/cil/src/ext/logcalls.ml
deleted file mode 100644
index 0cdbc1532..000000000
--- a/cil/src/ext/logcalls.ml
+++ /dev/null
@@ -1,268 +0,0 @@
-(** See copyright notice at the end of this file *)
-
-(** Add printf before each function call *)
-
-open Pretty
-open Cil
-open Trace
-module E = Errormsg
-module H = Hashtbl
-
-let i = ref 0
-let name = ref ""
-
-(* Switches *)
-let printFunctionName = ref "printf"
-
-let addProto = ref false
-
-let printf: varinfo option ref = ref None
-let makePrintfFunction () : varinfo = 
-    match !printf with 
-      Some v -> v
-    | None -> begin 
-        let v = makeGlobalVar !printFunctionName 
-                     (TFun(voidType, Some [("format", charPtrType, [])],
-                             true, [])) in
-        printf := Some v;
-        addProto := true;
-        v
-    end
-
-let mkPrint (format: string) (args: exp list) : instr = 
-  let p: varinfo = makePrintfFunction () in 
-  Call(None, Lval(var p), (mkString format) :: args, !currentLoc)
-  
-
-let d_string (fmt : ('a,unit,doc,string) format4) : 'a = 
-  let f (d: doc) : string = 
-    Pretty.sprint 200 d
-  in
-  Pretty.gprintf f fmt 
-
-let currentFunc: string ref = ref ""
-
-class logCallsVisitorClass = object
-  inherit nopCilVisitor
-
-  (* Watch for a declaration for our printer *)
-  
-  method vinst i = begin
-    match i with
-    | Call(lo,e,al,l) ->
-        let pre = mkPrint (d_string "call %a\n" d_exp e) [] in
-        let post = mkPrint (d_string "return from %a\n" d_exp e) [] in
-(*
-      let str1 = prefix ^
-        (Pretty.sprint 800 ( Pretty.dprintf "Calling %a(%a)\n"
-          d_exp e
-          (docList ~sep:(chr ',' ++ break ) (fun arg ->
-            try
-              match unrollType (typeOf arg) with
-                  TInt _ | TEnum _ -> dprintf "%a = %%d" d_exp arg
-                | TFloat _ -> dprintf "%a = %%g" d_exp arg
-                | TVoid _ -> text "void"
-                | TComp _ -> text "comp"
-                | _ -> dprintf "%a = %%p" d_exp arg
-            with  _ -> dprintf "%a = %%p" d_exp arg)) al)) in
-      let log_args = List.filter (fun arg ->
-        match unrollType (typeOf arg) with
-          TVoid _ | TComp _ -> false
-        | _ -> true) al in
-      let str2 = prefix ^ (Pretty.sprint 800
-        ( Pretty.dprintf "Returned from %a\n" d_exp e)) in
-      let newinst str args = ((Call (None, Lval(var printfFun.svar),
-                                ( [ (* one ; *) mkString str ] @ args),
-                                locUnknown)) : instr )in
-      let ilist = ([ (newinst str1 log_args) ; i ; (newinst str2 []) ] : instr list) in
- *)
-    ChangeTo [ pre; i; post ] 
-
-    | _ -> DoChildren
-  end
-  method vstmt (s : stmt) = begin
-    match s.skind with
-      Return _ -> 
-        let pre = mkPrint (d_string "exit %s\n" !currentFunc) [] in 
-        ChangeTo (mkStmt (Block (mkBlock [ mkStmtOneInstr pre; s ])))
-    | _ -> DoChildren
-
-(*
-(Some(e),l) ->
-      let str = prefix ^ Pretty.sprint 800 ( Pretty.dprintf
-        "Return(%%p) from %s\n" funstr ) in
-      let newinst = ((Call (None, Lval(var printfFun.svar),
-                                ( [ (* one ; *) mkString str ; e ]),
-                                locUnknown)) : instr )in
-      let new_stmt = mkStmtOneInstr newinst in
-      let slist = [ new_stmt ; s ] in
-      (ChangeTo(mkStmt(Block(mkBlock slist))))
-    | Return(None,l) ->
-      let str = prefix ^ (Pretty.sprint 800 ( Pretty.dprintf
-        "Return void from %s\n" funstr)) in
-      let newinst = ((Call (None, Lval(var printfFun.svar),
-                                ( [ (* one ; *) mkString str ]),
-                                locUnknown)) : instr )in
-      let new_stmt = mkStmtOneInstr newinst in
-      let slist = [ new_stmt ; s ] in
-      (ChangeTo(mkStmt(Block(mkBlock slist))))
-    | _ -> DoChildren
-*)
-  end
-end
-
-let logCallsVisitor = new logCallsVisitorClass
-
-
-let logCalls (f: file) : unit =
-
-  let doGlobal = function
-    | GVarDecl (v, _) when v.vname = !printFunctionName -> 
-          if !printf = None then
-             printf := Some v
-
-    | GFun (fdec, loc) ->
-        currentFunc := fdec.svar.vname;
-        (* do the body *)
-        ignore (visitCilFunction logCallsVisitor fdec);
-        (* Now add the entry instruction *)
-        let pre = mkPrint (d_string "enter %s\n" !currentFunc) [] in 
-        fdec.sbody <- 
-          mkBlock [ mkStmtOneInstr pre;
-                    mkStmt (Block fdec.sbody) ]
-(*
-	(* debugging 'anagram', it's really nice to be able to see the strings *)
-	(* inside fat pointers, even if it's a bit of a hassle and a hack here *)
-	let isFatCharPtr (cinfo:compinfo) =
-	  cinfo.cname="wildp_char" ||
-	  cinfo.cname="fseqp_char" ||
-	  cinfo.cname="seqp_char" in
-
-        (* Collect expressions that denote the actual arguments *)
-        let actargs =
-          (* make lvals out of args which pass test below *)
-          (List.map
-            (fun vi -> match unrollType vi.vtype with
-              | TComp(cinfo, _) when isFatCharPtr(cinfo) ->
-                  (* access the _p field for these *)
-                  (* luckily it's called "_p" in all three fat pointer variants *)
-                  Lval(Var(vi), Field(getCompField cinfo "_p", NoOffset))
-              | _ ->
-                  Lval(var vi))
-
-            (* decide which args to pass *)
-            (List.filter
-              (fun vi -> match unrollType vi.vtype with
-                | TPtr(TInt(k, _), _) when isCharType(k) ->
-                    !printPtrs || !printStrings
-                | TComp(cinfo, _) when isFatCharPtr(cinfo) ->
-                    !printStrings
-                | TVoid _ | TComp _ -> false
-                | TPtr _ | TArray _ | TFun _ -> !printPtrs
-                | _ -> true)
-              fdec.sformals)
-          ) in
-
-        (* make a format string for printing them *)
-        (* sm: expanded width to 200 because I want one per line *)
-        let formatstr = prefix ^ (Pretty.sprint 200
-          (dprintf "entering %s(%a)\n" fdec.svar.vname
-            (docList ~sep:(chr ',' ++ break)
-              (fun vi -> match unrollType vi.vtype with
-              | TInt _ | TEnum _ -> dprintf "%s = %%d" vi.vname
-              | TFloat _ -> dprintf "%s = %%g" vi.vname
-              | TVoid _ -> dprintf "%s = (void)" vi.vname
-              | TComp(cinfo, _) -> (
-                  if !printStrings && isFatCharPtr(cinfo) then
-                    dprintf "%s = \"%%s\"" vi.vname
-                  else
-                    dprintf "%s = (comp)" vi.vname
-                )
-              | TPtr(TInt(k, _), _) when isCharType(k) -> (
-                  if (!printStrings) then
-                    dprintf "%s = \"%%s\"" vi.vname
-                  else if (!printPtrs) then
-                    dprintf "%s = %%p" vi.vname
-                  else
-                    dprintf "%s = (str)" vi.vname
-                )
-              | TPtr _ | TArray _ | TFun _ -> (
-                  if (!printPtrs) then
-                    dprintf "%s = %%p" vi.vname
-                  else
-                    dprintf "%s = (ptr)" vi.vname
-                )
-              | _ -> dprintf "%s = (?type?)" vi.vname))
-            fdec.sformals)) in
-
-        i := 0 ;
-        name := fdec.svar.vname ;
-        if !allInsts then (
-          let thisVisitor = new verboseLogVisitor printfFun !name prefix in
-          fdec.sbody <- visitCilBlock thisVisitor fdec.sbody
-        );
-        fdec.sbody.bstmts <-
-              mkStmt (Instr [Call (None, Lval(var printfFun.svar),
-                                ( (* one :: *) mkString formatstr 
-                                   :: actargs),
-                                loc)]) :: fdec.sbody.bstmts
- *)
-    | _ -> ()
-  in
-  Stats.time "logCalls" (iterGlobals f) doGlobal;
-  if !addProto then begin
-     let p = makePrintfFunction () in 
-     E.log "Adding prototype for call logging function %s\n" p.vname;
-     f.globals <- GVarDecl (p, locUnknown) :: f.globals
-  end  
-
-let feature : featureDescr = 
-  { fd_name = "logcalls";
-    fd_enabled = Cilutil.logCalls;
-    fd_description = "generation of code to log function calls";
-    fd_extraopt = [
-      ("--logcallprintf", Arg.String (fun s -> printFunctionName := s), 
-       "the name of the printf function to use");
-      ("--logcalladdproto", Arg.Unit (fun s -> addProto := true), 
-       "whether to add the prototype for the printf function")
-    ];
-    fd_doit = logCalls;
-    fd_post_check = true
-  } 
-
-(*
- *
- * Copyright (c) 2001-2002, 
- *  George C. Necula    <necula@cs.berkeley.edu>
- *  Scott McPeak        <smcpeak@cs.berkeley.edu>
- *  Wes Weimer          <weimer@cs.berkeley.edu>
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. The names of the contributors may not be used to endorse or promote
- * products derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
- * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
- * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- *)
diff --git a/cil/src/ext/logcalls.mli b/cil/src/ext/logcalls.mli
deleted file mode 100644
index 22a1e96ad..000000000
--- a/cil/src/ext/logcalls.mli
+++ /dev/null
@@ -1,41 +0,0 @@
-(*
- *
- * Copyright (c) 2001-2002, 
- *  George C. Necula    <necula@cs.berkeley.edu>
- *  Scott McPeak        <smcpeak@cs.berkeley.edu>
- *  Wes Weimer          <weimer@cs.berkeley.edu>
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. The names of the contributors may not be used to endorse or promote
- * products derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
- * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
- * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- *)
-
-
-(* A simple CIL transformer that inserts calls to a runtime function to log 
- * the call in each function *)
-val feature: Cil.featureDescr
diff --git a/cil/src/ext/logwrites.ml b/cil/src/ext/logwrites.ml
deleted file mode 100644
index 3afd0679e..000000000
--- a/cil/src/ext/logwrites.ml
+++ /dev/null
@@ -1,139 +0,0 @@
-(*
- *
- * Copyright (c) 2001-2002, 
- *  George C. Necula    <necula@cs.berkeley.edu>
- *  Scott McPeak        <smcpeak@cs.berkeley.edu>
- *  Wes Weimer          <weimer@cs.berkeley.edu>
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. The names of the contributors may not be used to endorse or promote
- * products derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
- * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
- * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- *)
-
-open Pretty
-open Cil
-module E = Errormsg
-module H = Hashtbl
-
-(* David Park at Stanford points out that you cannot take the address of a
- * bitfield in GCC. *)
-
-(* Returns true if the given lvalue offset ends in a bitfield access. *) 
-let rec is_bitfield lo = match lo with
-  | NoOffset -> false
-  | Field(fi,NoOffset) -> not (fi.fbitfield = None)
-  | Field(_,lo) -> is_bitfield lo
-  | Index(_,lo) -> is_bitfield lo 
-
-(* Return an expression that evaluates to the address of the given lvalue.
- * For most lvalues, this is merely AddrOf(lv). However, for bitfields
- * we do some offset gymnastics. 
- *)
-let addr_of_lv (lh,lo) = 
-  if is_bitfield lo then begin
-    (* we figure out what the address would be without the final bitfield
-     * access, and then we add in the offset of the bitfield from the
-     * beginning of its enclosing comp *) 
-    let rec split_offset_and_bitfield lo = match lo with 
-      | NoOffset -> failwith "logwrites: impossible" 
-      | Field(fi,NoOffset) -> (NoOffset,fi)
-      | Field(e,lo) ->  let a,b = split_offset_and_bitfield lo in 
-                        ((Field(e,a)),b)
-      | Index(e,lo) ->  let a,b = split_offset_and_bitfield lo in
-                        ((Index(e,a)),b)
-    in 
-    let new_lv_offset, bf = split_offset_and_bitfield lo in
-    let new_lv = (lh, new_lv_offset) in 
-    let enclosing_type = TComp(bf.fcomp, []) in 
-    let bits_offset, bits_width = 
-      bitsOffset enclosing_type (Field(bf,NoOffset)) in
-    let bytes_offset = bits_offset / 8 in 
-    let lvPtr = mkCast ~e:(mkAddrOf (new_lv)) ~newt:(charPtrType) in
-    (BinOp(PlusPI, lvPtr, (integer bytes_offset), ulongType))
-  end else (AddrOf (lh,lo)) 
-
-class logWriteVisitor = object
-  inherit nopCilVisitor
-  (* Create a prototype for the logging function, but don't put it in the 
-   * file *)
-  val printfFun =   
-    let fdec = emptyFunction "syslog" in
-    fdec.svar.vtype <- TFun(intType, 
-                            Some [ ("prio", intType, []);
-                                   ("format", charConstPtrType, []) ], 
-                            true, []);
-    fdec
-
-  method vinst (i: instr) : instr list visitAction = 
-    match i with 
-      Set(lv, e, l) -> begin
-        (* Check if we need to log *)
-        match lv with 
-          (Var(v), off) when not v.vglob -> SkipChildren
-        | _ -> let str = Pretty.sprint 80 
-                (Pretty.dprintf "Write %%p to 0x%%08x at %%s:%%d (%a)\n" d_lval lv)
-              in 
-              ChangeTo 
-              [ Call((None), (Lval(Var(printfFun.svar),NoOffset)), 
-                     [ one ; 
-                       mkString str ; e ; addr_of_lv lv; 
-                       mkString l.file; 
-                       integer l.line], locUnknown);
-              i]
-      end 
-    | Call(Some lv, f, args, l) -> begin
-        (* Check if we need to log *)
-        match lv with 
-          (Var(v), off) when not v.vglob -> SkipChildren
-        | _ -> let str = Pretty.sprint 80 
-                (Pretty.dprintf "Write retval to 0x%%08x at %%s:%%d (%a)\n" d_lval lv)
-              in 
-              ChangeTo 
-              [ Call((None), (Lval(Var(printfFun.svar),NoOffset)), 
-                     [ one ; 
-                       mkString str ; AddrOf lv; 
-                       mkString l.file; 
-                       integer l.line], locUnknown);
-              i]
-      end 
-    | _ -> SkipChildren
-
-end
-
-let feature : featureDescr = 
-  { fd_name = "logwrites";
-    fd_enabled = Cilutil.logWrites;
-    fd_description = "generation of code to log memory writes";
-    fd_extraopt = [];
-    fd_doit = 
-    (function (f: file) -> 
-      let lwVisitor = new logWriteVisitor in
-      visitCilFileSameGlobals lwVisitor f);
-    fd_post_check = true;
-  } 
-
diff --git a/cil/src/ext/oneret.ml b/cil/src/ext/oneret.ml
deleted file mode 100644
index b3ce4a10f..000000000
--- a/cil/src/ext/oneret.ml
+++ /dev/null
@@ -1,187 +0,0 @@
-(* MODIF: Loop constructor replaced by 3 constructors: While, DoWhile, For. *)
-
-(*
- *
- * Copyright (c) 2001-2002, 
- *  George C. Necula    <necula@cs.berkeley.edu>
- *  Scott McPeak        <smcpeak@cs.berkeley.edu>
- *  Wes Weimer          <weimer@cs.berkeley.edu>
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. The names of the contributors may not be used to endorse or promote
- * products derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
- * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
- * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- *)
-
-(* Make sure that there is exactly one Return statement in the whole body. 
- * Replace all the other returns with Goto. This is convenient if you later 
- * want to insert some finalizer code, since you have a precise place where 
- * to put it *)
-open Cil
-open Pretty
-
-module E = Errormsg
-
-let dummyVisitor = new nopCilVisitor
-
-let oneret (f: Cil.fundec) : unit = 
-  let fname = f.svar.vname in
-  (* Get the return type *)
-  let retTyp = 
-    match f.svar.vtype with
-      TFun(rt, _, _, _) -> rt
-    | _ -> E.s (E.bug "Function %s does not have a function type\n" 
-                  f.svar.vname)
-  in
-  (* Does it return anything ? *)
-  let hasRet = match unrollType retTyp with TVoid _ -> false | _ -> true in
-
-  (* Memoize the return result variable. Use only if hasRet *)
-  let lastloc = ref locUnknown in 
-  let retVar : varinfo option ref = ref None in
-  let getRetVar (x: unit) : varinfo = 
-    match !retVar with
-      Some rv -> rv
-    | None -> begin
-        let rv = makeLocalVar f "__retres" retTyp in (* don't collide *)
-        retVar := Some rv;
-        rv
-    end
-  in
-  (* Remember if we have introduced goto's *)
-  let haveGoto = ref false in
-  (* Memoize the return statement *)
-  let retStmt : stmt ref = ref dummyStmt in
-  let getRetStmt (x: unit) : stmt = 
-    if !retStmt == dummyStmt then begin
-      (* Must create a statement *)
-      let rv = 
-        if hasRet then Some (Lval(Var (getRetVar ()), NoOffset)) else None
-      in
-      let sr = mkStmt (Return (rv, !lastloc)) in
-      retStmt := sr;
-      sr
-    end else
-      !retStmt
-  in
-  (* Now scan all the statements. Know if you are the main body of the 
-   * function and be prepared to add new statements at the end *)
-  let rec scanStmts (mainbody: bool) = function
-    | [] when mainbody -> (* We are at the end of the function. Now it is 
-                           * time to add the return statement *)
-        let rs = getRetStmt () in
-        if !haveGoto then
-          rs.labels <- (Label("return_label", !lastloc, false)) :: rs.labels;
-        [rs]
-
-    | [] -> []
-
-    | ({skind=Return (retval, l)} as s) :: rests -> 
-        currentLoc := l;
-(*
-        ignore (E.log "Fixing return(%a) at %a\n"
-                  insert
-                  (match retval with None -> text "None" 
-                  | Some e -> d_exp () e)
-                  d_loc l);
-*)
-        if hasRet && retval = None then 
-          E.s (error "Found return without value in function %s\n" fname);
-        if not hasRet && retval <> None then 
-          E.s (error "Found return in subroutine %s\n" fname);
-        (* Keep this statement because it might have labels. But change it to 
-         * an instruction that sets the return value (if any). *)
-        s.skind <- begin
-           match retval with 
-             Some rval -> Instr [Set((Var (getRetVar ()), NoOffset), rval, l)]
-           | None -> Instr []
-        end;
-        (* See if this is the last statement in function *)
-        if mainbody && rests == [] then
-          s :: scanStmts mainbody rests
-        else begin
-          (* Add a Goto *)
-          let sgref = ref (getRetStmt ()) in
-          let sg = mkStmt (Goto (sgref, l)) in
-          haveGoto := true;
-          s :: sg :: (scanStmts mainbody rests)
-        end
-
-    | ({skind=If(eb,t,e,l)} as s) :: rests -> 
-        currentLoc := l;
-        s.skind <- If(eb, scanBlock false t, scanBlock false e, l);
-        s :: scanStmts mainbody rests
-(*
-    | ({skind=Loop(b,l,lb1,lb2)} as s) :: rests -> 
-        currentLoc := l;
-        s.skind <- Loop(scanBlock false b, l,lb1,lb2);
-        s :: scanStmts mainbody rests
-*)
-    | ({skind=While(e,b,l)} as s) :: rests -> 
-        currentLoc := l;
-        s.skind <- While(e, scanBlock false b, l);
-        s :: scanStmts mainbody rests
-    | ({skind=DoWhile(e,b,l)} as s) :: rests -> 
-        currentLoc := l;
-        s.skind <- DoWhile(e, scanBlock false b, l);
-        s :: scanStmts mainbody rests
-    | ({skind=For(bInit,e,bIter,b,l)} as s) :: rests -> 
-        currentLoc := l;
-	s.skind <- For(scanBlock false bInit, e, scanBlock false bIter,
-		       scanBlock false b, l);
-        s :: scanStmts mainbody rests
-    | ({skind=Switch(e, b, cases, l)} as s) :: rests -> 
-        currentLoc := l;
-        s.skind <- Switch(e, scanBlock false b, cases, l);
-        s :: scanStmts mainbody rests
-    | ({skind=Block b} as s) :: rests -> 
-        s.skind <- Block (scanBlock false b);
-        s :: scanStmts mainbody rests
-    | ({skind=(Goto _ | Instr _ | Continue _ | Break _ 
-               | TryExcept _ | TryFinally _)} as s)
-      :: rests -> s :: scanStmts mainbody rests
-
-  and scanBlock (mainbody: bool) (b: block) = 
-    { bstmts = scanStmts mainbody b.bstmts; battrs = b.battrs; }
-
-  in
-  ignore (visitCilBlock dummyVisitor f.sbody) ; (* sets CurrentLoc *)
-  lastloc := !currentLoc ;  (* last location in the function *)
-  f.sbody <- scanBlock true f.sbody
-        
-      
-let feature : featureDescr = 
-  { fd_name = "oneRet";
-    fd_enabled = Cilutil.doOneRet;
-    fd_description = "make each function have at most one 'return'" ;
-    fd_extraopt = [];
-    fd_doit = (function (f: file) -> 
-      Cil.iterGlobals f (fun glob -> match glob with
-        Cil.GFun(fd,_) -> oneret fd; 
-      | _ -> ()));
-    fd_post_check = true;
-  } 
diff --git a/cil/src/ext/oneret.mli b/cil/src/ext/oneret.mli
deleted file mode 100644
index f98ab4d14..000000000
--- a/cil/src/ext/oneret.mli
+++ /dev/null
@@ -1,44 +0,0 @@
-(*
- *
- * Copyright (c) 2001-2002, 
- *  George C. Necula    <necula@cs.berkeley.edu>
- *  Scott McPeak        <smcpeak@cs.berkeley.edu>
- *  Wes Weimer          <weimer@cs.berkeley.edu>
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. The names of the contributors may not be used to endorse or promote
- * products derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
- * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
- * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- *)
-
-
-(* Make sure that there is only one Return statement in the whole body. 
- * Replace all the other returns with Goto. Make sure that there is a return 
- * if the function is supposed to return something, and it is not declared to 
- * not return. *)
-val oneret: Cil.fundec -> unit
-val feature : Cil.featureDescr 
diff --git a/cil/src/ext/partial.ml b/cil/src/ext/partial.ml
deleted file mode 100644
index 4beca3fc9..000000000
--- a/cil/src/ext/partial.ml
+++ /dev/null
@@ -1,851 +0,0 @@
-(* See copyright notice at the end of the file *)
-(*****************************************************************************
- * Partial Evaluation & Constant Folding
- *
- * Soundness Assumptions:
- * (1) Whole program analysis. You may call functions that are not defined
- *     (e.g., library functions) but they may not call back. 
- * (2) An undefined function may not return the address of a function whose
- *     address is not already taken in the code I can see. 
- * (3) A function pointer call may only call a function that has its
- *     address visibly taken in the code I can see. 
- *
- * (More assumptions in the comments below)
- *****************************************************************************)
-open Cil
-open Pretty
-
-(*****************************************************************************
- * A generic signature for Alias Analysis information. Used to compute the
- * call graph and do symbolic execution. 
- ****************************************************************************)
-module type AliasInfo =
-  sig
-    val can_have_the_same_value : Cil.exp -> Cil.exp -> bool
-    val resolve_function_pointer : Cil.exp -> (Cil.fundec list)
-  end
-
-(*****************************************************************************
- * A generic signature for Symbolic Execution execution algorithms. Such
- * algorithms are used below to perform constant folding and dead-code
- * elimination. You write a "basic-block" symex algorithm, we'll make it
- * a whole-program CFG-pruner. 
- ****************************************************************************)
-module type Symex = 
-  sig
-    type t (* the type of a symex algorithm state object *)
-    val empty : t                           (* all values unknown *)
-    val equal : t -> t -> bool              (* are these the same? *)
-    val assign : t -> Cil.lval -> Cil.exp  -> (Cil.exp * t) 
-      (* incorporate an assignment, return the RHS *)
-    val unassign : t -> Cil.lval -> t 
-      (* lose all information about the given lvalue: assume an 
-       * unknown external value has been assigned to it *)
-    val assembly : t -> Cil.instr -> t      (* handle ASM *)
-    val assume : t -> Cil.exp -> t          (* incorporate an assumption *) 
-    val evaluate : t -> Cil.exp -> Cil.exp  (* symbolic evaluation *)
-    val join : (t list) -> t                (* join a bunch of states *) 
-    val call : t -> Cil.fundec -> (Cil.exp list) -> (Cil.exp list * t)
-      (* we are calling the given function with the given actuals *)
-    val return : t -> Cil.fundec -> t
-      (* we are returning from the given function *)
-    val call_to_unknown_function : t -> t 
-      (* throw away information that may have been changed *) 
-    val debug : t -> unit
-  end
-
-(*****************************************************************************
- * A generic signature for whole-progam call graphs. 
- ****************************************************************************)
-module type CallGraph =
-  sig 
-    type t (* the type of a call graph *)
-    val compute : Cil.file -> t (* file for which we compute the graph *)
-    val can_call : t -> Cil.fundec -> (Cil.fundec list)
-    val can_be_called_by : t -> Cil.fundec -> (Cil.fundec list)
-    val fundec_of_varinfo : t -> Cil.varinfo -> Cil.fundec
-  end
-
-(*****************************************************************************
- * My cheap-o Alias Analysis. Assume all expressions can have the same 
- * value and any function with its address taken can be the target of
- * any function pointer. 
- *
- * Soundness Assumptions:
- * (1) Someone must call "find_all_functions_With_address_taken" before the
- *     results are valid. This is already done in the code below.
- ****************************************************************************)
-let all_functions_with_address_taken = ref [] 
-let find_all_functions_with_address_taken (f : Cil.file) =
-  iterGlobals f (fun g -> match g with
-    GFun(fd,_) -> if fd.svar.vaddrof then
-      all_functions_with_address_taken := fd :: 
-      !all_functions_with_address_taken
-  | _ -> ())  
-
-module EasyAlias =
-  struct
-    let can_have_the_same_value e1 e2 = true
-    let resolve_function_pointer e1 = !all_functions_with_address_taken
-  end
-
-(*****************************************************************************
- * My particular method for computing the Call Graph. 
- ****************************************************************************)
-module EasyCallGraph = functor (A : AliasInfo) -> 
-  struct
-    type callGraphNode = {
-              fd        : Cil.fundec ;
-      mutable calledBy  : Cil.fundec list ;
-      mutable calls     : Cil.fundec list ;
-    } 
-    type t = (Cil.varinfo, callGraphNode) Hashtbl.t 
-
-    let cgCreateNode cg fundec =
-      let newnode = { fd = fundec ; calledBy = [] ; calls = [] } in
-      Hashtbl.add cg fundec.svar newnode
-
-    let cgFindNode cg svar = Hashtbl.find cg svar 
-
-    let cgAddEdge cg caller callee = 
-      try 
-        let n1 = cgFindNode cg caller in
-        let n2 = cgFindNode cg callee in
-        n1.calls <- n2.fd :: n1.calls ;
-        n1.calledBy <- n1.fd :: n1.calledBy 
-      with _ -> () 
-
-    class callGraphVisitor cg = object
-      inherit nopCilVisitor 
-      val the_fun = ref None  
-
-      method vinst i = 
-        let _ = match i with
-          Call(_,Lval(Var(callee),NoOffset),_,_) -> begin
-            (* known function call *)
-            match !the_fun with
-              None -> failwith "callGraphVisitor: call outside of any function"
-            | Some(enclosing) -> cgAddEdge cg enclosing callee
-          end
-        | Call(_,e,_,_) -> begin 
-            (* unknown function call *)
-            match !the_fun with
-              None -> failwith "callGraphVisitor: call outside of any function"
-            | Some(enclosing) -> let lst = A.resolve_function_pointer e in 
-                List.iter (fun possible_target_fd ->
-                  cgAddEdge cg enclosing possible_target_fd.svar) lst
-          end
-        | _ -> () 
-        in SkipChildren 
-
-      method vfunc f = the_fun := Some(f.svar) ; DoChildren
-    end 
-
-    let compute (f : Cil.file) = 
-      let cg = Hashtbl.create 511 in 
-      iterGlobals f (fun g -> match g with
-          GFun(fd,_) -> cgCreateNode cg fd 
-        | _ -> ()
-      ) ; 
-      visitCilFileSameGlobals (new callGraphVisitor cg) f ;
-      cg
-
-    let can_call cg fd =
-      let n = cgFindNode cg fd.svar in n.calls
-    let can_be_called_by cg fd =
-      let n = cgFindNode cg fd.svar in n.calledBy
-    let fundec_of_varinfo cg vi = 
-      let n = cgFindNode cg vi in n.fd 
-  end (* END OF: module EasyCallGraph *)
-
-(*****************************************************************************
- * Necula's Constant Folding Strategem (re-written to be applicative) 
- *
- * Soundness Assumptions:
- * (1) Inline assembly does not affect constant folding. 
- ****************************************************************************)
-module OrderedInt = 
-  struct 
-    type t = int
-    let compare = compare
-  end
-module IntMap = Map.Make(OrderedInt) 
-
-module NeculaFolding = functor (A : AliasInfo) ->
-  struct
-    (* Register file. Maps identifiers of local variables to expressions.
-     * We also remember if the expression depends on memory or depends on
-     * variables that depend on memory *)
-    type reg = {
-      rvi : varinfo ;
-      rval : exp ;
-      rmem : bool
-    } 
-    type t = reg IntMap.t 
-    let empty = IntMap.empty 
-    let equal t1 t2 = (compare t1 t2 = 0) (* use OCAML here *)
-    let dependsOnMem = ref false
-    (* Rewrite an expression based on the current register file *)
-    class rewriteExpClass (regFile : t) = object
-      inherit nopCilVisitor
-      method vexpr = function
-        | Lval (Var v, NoOffset) -> begin
-            try
-              let defined = (IntMap.find v.vid regFile) in
-              if (defined.rmem) then dependsOnMem := true;
-              (match defined.rval with
-              | Const(x) -> ChangeTo (defined.rval)
-              | _ -> DoChildren)
-            with Not_found -> DoChildren
-          end
-        | Lval (Mem _, _) -> dependsOnMem := true; DoChildren
-        | _ -> DoChildren
-    end
-    (* Rewrite an expression and return the new expression along with an 
-     * indication of whether it depends on memory *)
-    let rewriteExp r (e: exp) : exp * bool = 
-      dependsOnMem := false;
-      let e' = constFold true (visitCilExpr (new rewriteExpClass r) e) in
-      e', !dependsOnMem
-    let eval r e = 
-      let new_e, depends = rewriteExp r e in
-      new_e
-
-    let setMemory regFile = 
-      (* Get a list of all mappings that depend on memory *)
-      let depids = ref [] in
-      IntMap.iter (fun id v -> if v.rmem then depids := id :: !depids) regFile;
-      (* And remove them from the register file *)
-      List.fold_left (fun acc id -> IntMap.remove id acc) regFile !depids
-
-    let setRegister regFile (v: varinfo) ((e,b): exp * bool) = 
-      IntMap.add v.vid { rvi = v ; rval = e ; rmem = b; } regFile 
-
-    let resetRegister regFile (id: int) =
-      IntMap.remove id regFile 
-
-    class findLval lv contains = object
-      inherit nopCilVisitor 
-      method vlval l = 
-        if l = lv then 
-          (contains := true ; SkipChildren)
-        else
-          DoChildren
-    end 
-
-    let removeMappingsThatDependOn regFile l =
-      (* Get a list of all mappings that depend on l *)
-      let depids = ref [] in
-      IntMap.iter (fun id reg -> 
-        let found = ref false in 
-        ignore (visitCilExpr (new findLval l found) reg.rval) ;
-        if !found then 
-          depids := id :: !depids
-      )  regFile ; 
-      (* And remove them from the register file *)
-      List.fold_left (fun acc id -> IntMap.remove id acc) regFile !depids
-
-    let assign r l e = 
-      let (newe,b) = rewriteExp r e in
-      let r' = match l with
-        (Var v, NoOffset) -> 
-            let r'' = setRegister r v (newe,b) in 
-            removeMappingsThatDependOn r'' l 
-      | (Mem _, _) -> setMemory r
-      | _ -> r 
-      in newe, r' 
-
-    let unassign r l = 
-      let r' = match l with
-        (Var v, NoOffset) -> 
-            let r'' = resetRegister r v.vid in
-            removeMappingsThatDependOn r'' l 
-      | (Mem _, _) -> setMemory r
-      | _ -> r 
-      in r' 
-
-    let assembly r i = r (* no-op in Necula-world *)
-    let assume r e = r (* no-op in Necula-world *)
-
-    let evaluate r e = 
-      let (newe,_) = rewriteExp r e in
-      newe
-
-    (* Join two symex states *)  
-    let join2 (r1 : t) (r2 : t) = 
-      let keep = ref [] in 
-      IntMap.iter (fun id reg -> 
-        try 
-          let reg' = IntMap.find id r2 in
-          if reg'.rval = reg.rval && reg'.rmem = reg.rmem then 
-            keep := (id,reg) :: !keep 
-        with _ -> ()
-      ) r1 ;
-      List.fold_left (fun acc (id,v) ->
-        IntMap.add id v acc) (IntMap.empty) !keep
-
-    let join (lst : t list) = match lst with
-        [] -> failwith "empty list"
-    | r :: tl -> List.fold_left 
-                  (fun (acc : t) (elt : t) -> join2 acc elt) r tl 
-
-    let call r fd el = 
-      let new_arg_list = ref [] in 
-      let final_r = List.fold_left2 (fun r vi e -> 
-        let newe, r' = assign r ((Var(vi),NoOffset)) e in
-        new_arg_list := newe :: !new_arg_list ;
-        r'
-      ) r fd.sformals el in
-      (List.rev !new_arg_list), final_r
-
-    let return r fd =
-      let regFile = 
-        List.fold_left (fun r vi -> IntMap.remove vi.vid r) r fd.sformals
-      in 
-      (* Get a list of all globals *)
-      let depids = ref [] in
-      IntMap.iter (fun vid reg -> 
-        if reg.rvi.vglob || reg.rvi.vaddrof then depids := vid :: !depids 
-      )  regFile ; 
-      (* And remove them from the register file *)
-      List.fold_left (fun acc id -> IntMap.remove id acc) regFile !depids
-
-
-    let call_to_unknown_function r =
-      setMemory r 
-
-    let debug r = 
-      IntMap.iter (fun key reg -> 
-        ignore (Pretty.printf "%s <- %a (%b)@!" reg.rvi.vname d_exp reg.rval reg.rmem)
-      ) r 
-  end (* END OF: NeculaFolding *)
-
-(*****************************************************************************
- * A transformation to make every function call end its statement. So
- * { x=1; Foo(); y=1; } 
- * becomes at least:
- * { { x=1; Foo(); }
- *   { y=1; } }
- * But probably more like:
- * { { x=1; } { Foo(); } { y=1; } }
- ****************************************************************************)
-let rec contains_call il = match il with
-    [] -> false
-  | Call(_) :: tl -> true
-  | _ :: tl -> contains_call tl 
-
-class callBBVisitor = object
-  inherit nopCilVisitor 
-
-  method vstmt s =
-    match s.skind with
-      Instr(il) when contains_call il -> begin
-        let list_of_stmts = List.map (fun one_inst -> 
-          mkStmtOneInstr one_inst) il in
-        let block = mkBlock list_of_stmts in
-        ChangeDoChildrenPost(s, (fun _ -> 
-          s.skind <- Block(block) ;
-          s))
-      end
-    | _ -> DoChildren
-
-  method vvdec _ = SkipChildren
-  method vexpr _ = SkipChildren
-  method vlval _ = SkipChildren
-  method vtype _ = SkipChildren
-end 
-
-let calls_end_basic_blocks f =
-  let thisVisitor = new callBBVisitor in
-  visitCilFileSameGlobals thisVisitor f  
-
-(*****************************************************************************
- * A transformation that gives each variable a unique identifier. 
- ****************************************************************************)
-class vidVisitor = object
-  inherit nopCilVisitor 
-  val count = ref 0 
-
-  method vvdec vi = 
-    vi.vid <- !count ;
-    incr count ; SkipChildren
-end 
-
-let globally_unique_vids f =
-  let thisVisitor = new vidVisitor in
-  visitCilFileSameGlobals thisVisitor f  
-
-(*****************************************************************************
- * The Weimeric Partial Evaluation Data-Flow Engine
- *
- * This functor performs flow-sensitive, context-insensitive whole-program
- * data-flow analysis with an eye toward partial evaluation and constant
- * folding. 
- *
- * Toposort the whole-program inter-procedural CFG to compute
- *  (1) the number of actual predecessors for each statement
- *  (2) the global toposort ordering
- *
- * Perform standard data-flow analysis (joins, etc) on the ICFG until you
- * hit a fixed point. If this changed the structure of the ICFG (by
- * removing an IF-branch or an empty function call), redo the whole thing.
- *
- * Soundness Assumptions:
- * (1) A "call instruction" is the last thing in its statement.
- *       Use "calls_end_basic_blocks" to get this. cil/src/main.ml does
- *       this when you pass --makeCFG.
- * (2) All variables have globally unique identifiers. 
- *       Use "globally_unique_vids" to get this. cil/src/main.ml does 
- *       this when you pass --makeCFG. 
- * (3) This may not be a strict soundness requirement, but I wrote this
- *       assuming that the input file has all switch/break/continue
- *       statements removed. 
- ****************************************************************************)
-module MakePartial =
-  functor (S : Symex) -> 
-  functor (C : CallGraph) -> 
-  functor (A : AliasInfo) -> 
-  struct
-
-    let debug = false 
-
-    (* We keep this information about every statement. Ideally this should
-     * be put in the stmt itself, but CIL doesn't give us space. *)
-    type sinfo = { (* statement info *)
-              incoming_state : (int, S.t) Hashtbl.t ;
-              (* mapping from stmt.sid to Symex.state *)
-              reachable_preds : (int, bool) Hashtbl.t ; 
-              (* basically a set of all of the stmt.sids that can really
-               * reach this statement *)
-      mutable last_used_state : S.t option ;
-              (* When we last did the Post() of this statement, what
-               * incoming state did we use? If our new incoming state is
-               * the same, we don't have to do it again. *)
-      mutable priority : int ; 
-              (* Whole-program toposort priority. High means "do me first".
-               * The first stmt in "main()" will have the highest priority.
-               *)
-    } 
-    let sinfo_ht = Hashtbl.create 511 
-    let clear_sinfo () = Hashtbl.clear sinfo_ht 
-
-    (* We construct sinfo nodes lazily: if you ask for one that isn't
-     * there, we build it. *)
-    let get_sinfo stmt = 
-      try
-        Hashtbl.find sinfo_ht stmt.sid
-      with _ ->
-        let new_sinfo = { incoming_state = Hashtbl.create 3 ;
-                          reachable_preds = Hashtbl.create 3 ; 
-                          last_used_state = None ; 
-                          priority = (-1) ; } in
-        Hashtbl.add sinfo_ht stmt.sid new_sinfo ;
-        new_sinfo 
-
-    (* Topological Sort is a DFS in which you assign a priority right as 
-     * you finished visiting the children. While we're there we compute
-     * the actual number of unique predecessors for each statement. The CIL
-     * information may be out of date because we keep changing the CFG by
-     * removing IFs and whatnot. *)
-    let toposort_counter = ref 1  
-    let add_edge s1 s2 =
-      let si2 = get_sinfo s2 in
-      Hashtbl.replace si2.reachable_preds s1.sid true 
-
-    let rec toposort c stmt = 
-      let si = get_sinfo stmt in 
-      if si.priority >= 0 then
-        () (* already visited! *)
-      else begin
-        si.priority <- 0 ; (* currently visiting *)
-        (* handle function calls in this basic block *) 
-        (match stmt.skind with
-          (Instr(il)) -> 
-            List.iter (fun i -> 
-              let fd_list = match i with
-                Call(_,Lval(Var(vi),NoOffset),_,_) -> 
-                  begin 
-                    try 
-                      let fd = C.fundec_of_varinfo c vi in
-                      [fd] 
-                    with e -> [] (* calling external function *)
-                  end 
-              | Call(_,e,_,_) -> 
-                  A.resolve_function_pointer e 
-              | _ -> []
-              in 
-              List.iter (fun fd -> 
-                if List.length fd.sbody.bstmts > 0 then 
-                  let fun_stmt = List.hd fd.sbody.bstmts in 
-                  add_edge stmt fun_stmt ; 
-                  toposort c fun_stmt 
-              ) fd_list 
-            ) il 
-        | _ -> ()); 
-        List.iter (fun succ -> 
-          add_edge stmt succ ; toposort c succ) stmt.succs ;
-        si.priority <- !toposort_counter ;
-        incr toposort_counter 
-      end
-
-    (* we set this to true whenever we eliminate an IF or otherwise 
-     * change the CFG *)
-    let changed_cfg = ref false 
-
-    (* Partially evaluate / constant fold a statement. Basically this just
-     * asks the Symex algorithm to evaluate the RHS in the current state
-     * and then compute a new state that incorporates the assignment. 
-     *
-     * However, we have special handling for ifs and calls. If we can
-     * evaluate an if predicate to a constant, we remove the if. 
-     *
-     * If we are going to make a call to a function with an empty body, we
-     * remove the function call. *)
-    let partial_stmt c state stmt handle_funcall = 
-      let result = match stmt.skind with
-        Instr(il) -> 
-          let state = ref state in 
-          let new_il = List.map (fun i -> 
-            if debug then begin 
-              ignore (Pretty.printf "Instr %a@!" d_instr i )
-            end ;
-            match i with
-            | Set(l,e,loc) -> 
-                let e', state' = S.assign !state l e in
-                state := state' ;
-                [Set(l,e',loc)]
-            | Call(lo,(Lval(Var(vi),NoOffset)),al,loc) -> 
-                let result = begin
-                  try 
-                    let fd = C.fundec_of_varinfo c vi in
-                    begin 
-                    match fd.sbody.bstmts with
-                      [] -> [] (* no point in making this call *)
-                    | hd :: tl -> 
-                        let al', state' = S.call !state fd al in
-                        handle_funcall stmt hd state' ;
-                        let state'' = S.return state' fd in 
-                        state := state'' ;
-                        [Call(lo,(Lval(Var(vi),NoOffset)),al',loc)]
-                    end
-                  with e ->
-                    let state'' = S.call_to_unknown_function !state in
-                    let al' = List.map (S.evaluate !state) al in 
-                    state := state'' ; 
-                    [Call(lo,(Lval(Var(vi),NoOffset)),al',loc)]
-                end in 
-                (* handle return value *)
-                begin 
-                  match lo with
-                    Some(lv) -> state := S.unassign !state lv 
-                  | _ -> () 
-                end ;
-                result
-            | Call(lo,f,al,loc) -> 
-                let al' = List.map (S.evaluate !state) al in 
-                state := S.call_to_unknown_function !state ;
-                (match lo with
-                  Some(lv) -> state := S.unassign !state lv
-                | None -> ()) ;
-                [Call(lo,f,al',loc)]
-            | Asm(_) -> state := S.assembly !state i ; [i] 
-          ) il in
-          stmt.skind <- Instr(List.flatten new_il) ;
-          if debug then begin 
-            ignore (Pretty.printf "New Stmt is %a@!" d_stmt stmt) ; 
-          end ;
-          !state
-
-      | If(e,b1,b2,loc) -> 
-          let e' = S.evaluate state e in 
-          (* Pretty.printf "%a evals to %a\n" d_exp e d_exp e' ; *)
-
-          (* helper function to remove an IF branch *)
-          let remove b remains = begin 
-            changed_cfg := true ; 
-            (match b.bstmts with
-            | [] -> ()
-            | hd :: tl -> 
-              stmt.succs <- List.filter (fun succ -> succ.sid <> hd.sid)
-                stmt.succs 
-            ) 
-          end in 
-
-          if (e' = one) then begin
-            if b2.bstmts = [] && b2.battrs = [] then begin
-              stmt.skind <- Block(b1) ;
-              match b1.bstmts with
-                [] -> failwith "partial: completely empty if" 
-              | hd :: tl -> stmt.succs <- [hd]
-            end else 
-              stmt.skind <- Block( 
-              { bstmts = 
-                [ mkStmt (Block(b1)) ;
-                  mkStmt (If(zero,b2,{bstmts=[];battrs=[];},loc)) ] ;
-                battrs = [] } ) ;
-            remove b2 b1 ;
-            state
-          end else if (e' = zero) then begin
-            if b1.bstmts = [] && b1.battrs = [] then begin
-              stmt.skind <- Block(b2) ;
-              match b2.bstmts with
-                [] -> failwith "partial: completely empty if" 
-              | hd :: tl -> stmt.succs <- [hd]
-            end else 
-            stmt.skind <- Block(
-            { bstmts = 
-              [ mkStmt (Block(b2)) ;
-                mkStmt (If(zero,b1,{bstmts=[];battrs=[];},loc)) ] ;
-              battrs = [] } ) ;
-            remove b1 b2 ; 
-            state
-          end else begin
-            stmt.skind <- If(e',b1,b2,loc) ;
-            state
-          end 
-
-      | Return(Some(e),loc) ->
-          let e' = S.evaluate state e in 
-          stmt.skind <- Return(Some(e'),loc) ;
-          state
-
-      | Block(b) ->
-          if debug && List.length stmt.succs > 1 then begin
-            ignore (Pretty.printf "(%a) has successors [%a]@!"
-              d_stmt stmt 
-              (docList ~sep:(chr '@') (d_stmt ()))
-              stmt.succs)
-          end ;
-          state
-
-      | _ -> state
-    in result
-
-    (* 
-     * This is the main conceptual entry-point for the partial evaluation 
-     * data-flow functor.
-     *)
-    let dataflow (file : Cil.file)         (* whole program *)
-                 (c : C.t)                 (* control-flow graph *)
-                 (initial_state : S.t)     (* any assumptions? *)
-                 (initial_stmt : Cil.stmt) (* entry point *) 
-    = begin
-      (* count the total number of statements in the program *)
-      let num_stmts = ref 1 in
-      iterGlobals file (fun g -> match g with
-        GFun(fd,_) -> begin
-          match fd.smaxstmtid with
-            Some(i) -> if i > !num_stmts then num_stmts := i 
-          | None -> () 
-          end
-      | _ -> () 
-      ) ;
-      (if debug then 
-      Printf.printf "Dataflow: at most %d statements in program\n" !num_stmts); 
-
-      (* create a priority queue in which to store statements *) 
-      let worklist = Heap.create !num_stmts in
-
-      let finished = ref false in
-      let passes = ref 0 in
-
-      (* add something to the work queue *)
-      let enqueue caller callee state = begin
-        let si = get_sinfo callee in 
-        Hashtbl.replace si.incoming_state caller.sid state ;
-        Heap.insert worklist si.priority callee
-      end in 
-
-      (* we will be finished when we complete a round of data-flow that
-       * does not change the ICFG *)
-      while not !finished do 
-        clear_sinfo () ; 
-        incr passes ; 
-
-        (* we must recompute the ordering and the predecessor information
-         * because we may have changed it by removing IFs *)
-        (if debug then Printf.printf "Dataflow: Topological Sorting & Reachability\n" );
-        toposort c initial_stmt ;  
-
-        let initial_si = get_sinfo initial_stmt in
-        Heap.insert worklist initial_si.priority initial_stmt ;
-
-        while not (Heap.is_empty worklist) do
-          let (p,s) = Heap.extract_max worklist in 
-          if debug then begin 
-            ignore (Pretty.printf "Working on stmt %d (%a) %a@!" 
-              s.sid 
-              (docList ~sep:(chr ',' ++ break) (fun s -> dprintf "%d" s.sid))
-              s.succs
-              d_stmt s) ; 
-            flush stdout ;
-          end ; 
-          let si = get_sinfo s in 
-
-          (* Even though this stmt is on the worklist, we may not have
-           * to do anything with it if the join of all of the incoming
-           * states is the same as the last state we used here. *) 
-          let must_recompute, incoming_state = 
-            begin
-              let list_of_incoming_states = ref [] in
-              Hashtbl.iter (fun true_pred_sid b -> 
-                let this_pred_state =
-                  try
-                    Hashtbl.find si.incoming_state true_pred_sid
-                  with _ -> 
-                    (* this occurs when we're evaluating a statement and we
-                     * have not yet evaluated all of its predecessors (the
-                     * first time we look at a loop head, say). We must be
-                     * conservative. We'll come back later with better
-                     * information (as we work toward the fix-point). *) 
-                    S.empty 
-                in
-                if debug then begin 
-                  Printf.printf " Incoming State from %d\n" true_pred_sid ;
-                  S.debug this_pred_state ; 
-                  flush stdout ; 
-                end ; 
-                list_of_incoming_states := this_pred_state ::
-                  !list_of_incoming_states 
-              ) si.reachable_preds ; 
-              let merged_incoming_state = 
-                if !list_of_incoming_states = [] then
-                  (* this occurs when we're looking at the first statement
-                   * in "main" -- it has no preds *) 
-                  initial_state
-                else 
-                  S.join !list_of_incoming_states 
-              in
-              if debug then begin 
-                Printf.printf " Merged State:\n" ;
-                S.debug merged_incoming_state ; 
-                flush stdout ; 
-              end ;
-              let must_recompute = match si.last_used_state with
-                None -> true
-              | Some(last) -> not (S.equal merged_incoming_state last)
-              in must_recompute, merged_incoming_state 
-            end 
-          in 
-          if must_recompute then begin
-            si.last_used_state <- Some(incoming_state) ; 
-            let outgoing_state = 
-              (* partially evaluate and optimize the statement *) 
-              partial_stmt c incoming_state s enqueue in
-            let fresh_succs = s.succs in 
-            (* touch every successor so that we will reconsider it *)
-            List.iter (fun succ ->
-              enqueue s succ outgoing_state 
-            ) fresh_succs ;
-          end else begin
-            if debug then begin 
-              Printf.printf "No need to recompute.\n" 
-            end 
-          end
-        done ;
-        (if debug then Printf.printf "Dataflow: Pass %d Complete\n" !passes) ;
-        if !changed_cfg then begin
-          (if debug then Printf.printf "Dataflow: Restarting (CFG Changed)\n") ;
-          changed_cfg := false 
-        end else 
-          finished := true 
-      done ;
-      (if debug then Printf.printf "Dataflow: Completed (%d passes)\n" !passes) 
-
-    end 
-    
-  let simplify file c fd (assumptions : (Cil.lval * Cil.exp) list) =
-    let starting_state = List.fold_left (fun s (l,e) ->
-      let e',s' = S.assign s l e in 
-      s'
-    ) S.empty assumptions in 
-    dataflow file c starting_state (List.hd fd.sbody.bstmts)
-
-  end
-
-
-(* 
- * Currently our partial-eval optimizer is built out of basically nothing.  
- * The alias analysis is fake, the call grpah is cheap, and we're using
- * George's old basic-block symex. Still, it works. 
- *)
-(* Don't you love Functor application? *)
-module BasicCallGraph = EasyCallGraph(EasyAlias)
-module BasicSymex = NeculaFolding(EasyAlias)
-module BasicPartial = MakePartial(BasicSymex)(BasicCallGraph)(EasyAlias)
-
-(*
- * A very easy entry-point to partial evaluation/symbolic execution.
- * You pass the Cil file and a list of assumptions (lvalue, exp pairs that 
- * should be treated as assignments that occur before the program starts). 
- *
- * We partially evaluate and optimize starting from "main". The Cil.file
- * is modified in place. 
- *)
-let partial (f : Cil.file) (assumptions : (Cil.lval * Cil.exp) list) =
-  try 
-    find_all_functions_with_address_taken f ;
-    let c = BasicCallGraph.compute f in 
-    try 
-      iterGlobals f (fun g -> match g with
-        GFun(fd,_) when fd.svar.vname = "main" -> 
-          BasicPartial.simplify f c fd assumptions 
-      | _ -> ()) ;
-    with e -> begin
-      Printf.printf "Error in DataFlow: %s\n" (Printexc.to_string e) ;
-      raise e
-    end 
-  with e -> begin
-      Printf.printf "Error in Partial: %s\n" (Printexc.to_string e) ;
-      raise e
-    end 
-
-let feature : featureDescr = 
-  { fd_name = "partial";
-    fd_enabled = Cilutil.doPartial;
-    fd_description = "interprocedural partial evaluation and constant folding" ;
-    fd_extraopt = [];
-    fd_doit = (function (f: file) -> 
-      if not !Cilutil.makeCFG then begin
-        Errormsg.s (Errormsg.error "--dopartial: you must also specify --domakeCFG\n")
-      end ; 
-      partial f [] ) ;
-    fd_post_check = false;
-  } 
-
-(*
- *
- * Copyright (c) 2001-2002, 
- *  George C. Necula    <necula@cs.berkeley.edu>
- *  Scott McPeak        <smcpeak@cs.berkeley.edu>
- *  Wes Weimer          <weimer@cs.berkeley.edu>
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. The names of the contributors may not be used to endorse or promote
- * products derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
- * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
- * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- *)
diff --git a/cil/src/ext/pta/golf.ml b/cil/src/ext/pta/golf.ml
deleted file mode 100644
index 5ea47ff1a..000000000
--- a/cil/src/ext/pta/golf.ml
+++ /dev/null
@@ -1,1657 +0,0 @@
-(*
- *
- * Copyright (c) 2001-2002,
- *  John Kodumal        <jkodumal@eecs.berkeley.edu>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. The names of the contributors may not be used to endorse or promote
- * products derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
- * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
- * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- *)
-
-(***********************************************************************)
-(*                                                                     *)
-(* Exceptions                                                          *)
-(*                                                                     *)
-(***********************************************************************)
-
-exception Inconsistent (* raised if constraint system is inconsistent *)
-exception WellFormed   (* raised if types are not well-formed *)
-exception NoContents
-exception APFound      (* raised if an alias pair is found, a control
-                          flow exception *)
-
-
-module U = Uref
-module S = Setp
-module H = Hashtbl
-module Q = Queue
-
-
-(** Subtyping kinds *)
-type polarity =
-    Pos
-  | Neg
-  | Sub
-
-(** Path kinds, for CFL reachability *)
-type pkind =
-    Positive
-  | Negative
-  | Match
-  | Seed
-
-(** Context kinds -- open or closed *)
-type context =
-    Open
-  | Closed
-
-(* A configuration is a context (open or closed) coupled with a pair
-   of stamps representing a state in the cartesian product DFA. *)
-type configuration = context * int * int
-
-module ConfigHash =
-struct
-  type t = configuration
-  let equal t t' = t = t'
-  let hash t = Hashtbl.hash t
-end
-
-module CH = H.Make (ConfigHash)
-
-type config_map = unit CH.t
-
-(** Generic bounds *)
-type 'a bound = {index : int; info : 'a U.uref}
-
-(** For label paths. *)
-type 'a path = {
-  kind : pkind;
-  reached_global : bool;
-  head : 'a U.uref;
-  tail : 'a U.uref
-}
-
-module Bound =
-struct
-  type 'a t = 'a bound
-  let compare (x : 'a t) (y : 'a t) =
-    if U.equal (x.info, y.info) then x.index - y.index
-    else Pervasives.compare (U.deref x.info) (U.deref y.info)
-end
-
-module Path =
-struct
-  type 'a t = 'a path
-  let compare (x : 'a t) (y : 'a t) =
-    if U.equal (x.head, y.head) then
-      begin
-        if U.equal (x.tail, y.tail) then
-          begin
-            if x.reached_global = y.reached_global then
-              Pervasives.compare x.kind y.kind
-            else Pervasives.compare x.reached_global y.reached_global
-          end
-        else Pervasives.compare (U.deref x.tail) (U.deref y.tail)
-      end
-    else Pervasives.compare (U.deref x.head) (U.deref y.head)
-end
-
-module B = S.Make (Bound)
-
-module P = S.Make (Path)
-
-type 'a boundset = 'a B.t
-
-type 'a pathset = 'a P.t
-
-(** Constants, which identify elements in points-to sets *)
-(** jk : I'd prefer to make this an 'a constant and specialize it to varinfo
-    for use with the Cil frontend, but for now, this will do *)
-type constant = int * string * Cil.varinfo
-
-module Constant =
-struct
-  type t = constant
-  let compare (xid, _, _) (yid, _, _) = xid - yid
-end
-module C = Set.Make (Constant)
-
-(** Sets of constants. Set union is used when two labels containing
-  constant sets are unified *)
-type constantset = C.t
-
-type lblinfo = {
-  mutable l_name: string;
-  (** either empty or a singleton, the initial location for this label *)
-  loc : constantset;
-  (** Name of this label *)
-  l_stamp : int;
-  (** Unique integer for this label *)
-  mutable l_global : bool;
-  (** True if this location is globally accessible *)
-  mutable aliases: constantset;
-  (** Set of constants (tags) for checking aliases *)
-  mutable p_lbounds: lblinfo boundset;
-  (** Set of umatched (p) lower bounds *)
-  mutable n_lbounds: lblinfo boundset;
-  (** Set of unmatched (n) lower bounds *)
-  mutable p_ubounds: lblinfo boundset;
-  (** Set of umatched (p) upper bounds *)
-  mutable n_ubounds: lblinfo boundset;
-  (** Set of unmatched (n) upper bounds *)
-  mutable m_lbounds: lblinfo boundset;
-  (** Set of matched (m) lower bounds *)
-  mutable m_ubounds: lblinfo boundset;
-  (** Set of matched (m) upper bounds *)
-
-  mutable m_upath: lblinfo pathset;
-  mutable m_lpath: lblinfo pathset;
-  mutable n_upath: lblinfo pathset;
-  mutable n_lpath: lblinfo pathset;
-  mutable p_upath: lblinfo pathset;
-  mutable p_lpath: lblinfo pathset;
-
-  mutable l_seeded : bool;
-  mutable l_ret : bool;
-  mutable l_param : bool;
-}
-
-(** Constructor labels *)
-and label = lblinfo U.uref
-
-(** The type of lvalues. *)
-type lvalue = {
-  l: label;
-  contents: tau
-}
-
-and vinfo = {
-  v_stamp : int;
-  v_name : string;
-
-  mutable v_hole : (int,unit) H.t;
-  mutable v_global : bool;
-  mutable v_mlbs : tinfo boundset;
-  mutable v_mubs : tinfo boundset;
-  mutable v_plbs : tinfo boundset;
-  mutable v_pubs : tinfo boundset;
-  mutable v_nlbs : tinfo boundset;
-  mutable v_nubs : tinfo boundset
-}
-
-and rinfo = {
-  r_stamp : int;
-  rl : label;
-  points_to : tau;
-  mutable r_global: bool;
-}
-
-and finfo = {
-  f_stamp : int;
-  fl : label;
-  ret : tau;
-  mutable args : tau list;
-  mutable f_global : bool;
-}
-
-and pinfo = {
-  p_stamp : int;
-  ptr : tau;
-  lam : tau;
-  mutable p_global : bool;
-}
-
-and tinfo = Var of vinfo
-            | Ref of rinfo
-            | Fun of finfo
-            | Pair of pinfo
-
-and tau = tinfo U.uref
-
-type tconstraint = Unification of tau * tau
-                   | Leq of tau * (int * polarity) * tau
-
-
-(** Association lists, used for printing recursive types. The first element
-  is a type that has been visited. The second element is the string
-  representation of that type (so far). If the string option is set, then
-  this type occurs within itself, and is associated with the recursive var
-  name stored in the option. When walking a type, add it to an association
-  list.
-
-  Example : suppose we have the constraint 'a = ref('a). The type is unified
-  via cyclic unification, and would loop infinitely if we attempted to print
-  it. What we want to do is print the type u rv. ref(rv). This is accomplished
-  in the following manner:
-
-  -- ref('a) is visited. It is not in the association list, so it is added
-  and the string "ref(" is stored in the second element. We recurse to print
-  the first argument of the constructor.
-
-  -- In the recursive call, we see that 'a (or ref('a)) is already in the
-  association list, so the type is recursive. We check the string option,
-  which is None, meaning that this is the first recurrence of the type. We
-  create a new recursive variable, rv and set the string option to 'rv. Next,
-  we prepend u rv. to the string representation we have seen before, "ref(",
-  and return "rv" as the string representation of this type.
-
-  -- The string so far is "u rv.ref(". The recursive call returns, and we
-  complete the type by printing the result of the call, "rv", and ")"
-
-  In a type where the recursive variable appears twice, e.g. 'a = pair('a,'a),
-  the second time we hit 'a, the string option will be set, so we know to
-  reuse the same recursive variable name.
-*)
-type association = tau * string ref * string option ref
-
-module PathHash =
-struct
-  type t = int list
-  let equal t t' = t = t'
-  let hash t = Hashtbl.hash t
-end
-
-module PH = H.Make (PathHash)
-
-(***********************************************************************)
-(*                                                                     *)
-(* Global Variables                                                    *)
-(*                                                                     *)
-(***********************************************************************)
-
-(** Print the instantiations constraints. *)
-let print_constraints : bool ref = ref false
-
-(** If true, print all constraints (including induced) and show
-    additional debug output. *)
-let debug = ref false
-
-(** Just debug all the constraints (including induced) *)
-let debug_constraints = ref false
-
-(** Debug smart alias queries *)
-let debug_aliases = ref false
-
-let smart_aliases = ref false
-
-(** If true, make the flow step a no-op *)
-let no_flow = ref false
-
-(** If true, disable subtyping (unification at all levels) *)
-let no_sub = ref false
-
-(** If true, treat indexed edges as regular subtyping *)
-let analyze_mono = ref true
-
-(** A list of equality constraints. *)
-let eq_worklist : tconstraint Q.t = Q.create ()
-
-(** A list of leq constraints. *)
-let leq_worklist : tconstraint Q.t = Q.create ()
-
-let path_worklist : (lblinfo path) Q.t = Q.create ()
-
-let path_hash : (lblinfo path) PH.t = PH.create 32
-
-(** A count of the constraints introduced from the AST. Used for debugging. *)
-let toplev_count = ref 0
-
-(** A hashtable containing stamp pairs of labels that must be aliased. *)
-let cached_aliases : (int * int,unit) H.t = H.create 64
-
-(** A hashtable mapping pairs of tau's to their join node. *)
-let join_cache : (int * int, tau) H.t = H.create 64
-
-(***********************************************************************)
-(*                                                                     *)
-(* Utility Functions                                                   *)
-(*                                                                     *)
-(***********************************************************************)
-
-let find = U.deref
-
-let die s =
-  Printf.printf "*******\nAssertion failed: %s\n*******\n" s;
-  assert false
-
-let fresh_appsite : (unit -> int) =
-  let appsite_index = ref 0 in
-    fun () ->
-      incr appsite_index;
-      !appsite_index
-
-(** Generate a unique integer. *)
-let fresh_index : (unit -> int) =
-  let counter = ref 0 in
-    fun () ->
-      incr counter;
-      !counter
-
-let fresh_stamp : (unit -> int) =
-  let stamp = ref 0 in
-    fun () ->
-      incr stamp;
-      !stamp
-
-(** Return a unique integer representation of a tau *)
-let get_stamp (t : tau) : int =
-  match find t with
-      Var v -> v.v_stamp
-    | Ref r -> r.r_stamp
-    | Pair p -> p.p_stamp
-    | Fun f -> f.f_stamp
-
-(** Negate a polarity. *)
-let negate (p : polarity) : polarity =
-  match p with
-      Pos -> Neg
-    | Neg -> Pos
-    | Sub -> die "negate"
-
-(** Consistency checks for inferred types *)
-let pair_or_var (t : tau) =
-  match find t with
-      Pair _ -> true
-    | Var _ -> true
-    | _ -> false
-
-let ref_or_var (t : tau) =
-  match find t with
-      Ref _ -> true
-    | Var _ -> true
-    | _ -> false
-
-let fun_or_var (t : tau) =
-  match find t with
-      Fun _ -> true
-    | Var _ -> true
-    |  _ -> false
-
-
-
-(** Apply [f] structurally down [t]. Guaranteed to terminate, even if [t]
-    is recursive *)
-let iter_tau f t =
-  let visited : (int,tau) H.t = H.create 4 in
-  let rec iter_tau' t =
-    if H.mem visited (get_stamp t) then () else
-      begin
-        f t;
-        H.add visited (get_stamp t) t;
-        match U.deref t with
-            Pair p ->
-              iter_tau' p.ptr;
-              iter_tau' p.lam
-          | Fun f ->
-              List.iter iter_tau' (f.args);
-              iter_tau' f.ret
-          | Ref r -> iter_tau' r.points_to
-          | _ -> ()
-      end
-  in
-    iter_tau' t
-
-(* Extract a label's bounds according to [positive] and [upper]. *)
-let get_bounds (p :polarity ) (upper : bool) (l : label) : lblinfo boundset =
-  let li = find l in
-    match p with
-        Pos -> if upper then li.p_ubounds else li.p_lbounds
-      | Neg -> if upper then li.n_ubounds else li.n_lbounds
-      | Sub -> if upper then li.m_ubounds else li.m_lbounds
-
-let equal_tau (t : tau) (t' : tau) =
-  get_stamp t = get_stamp t'
-
-let get_label_stamp (l : label) : int =
-  (find l).l_stamp
-
-(** Return true if [t] is global (treated monomorphically) *)
-let get_global (t : tau) : bool =
-  match find t with
-      Var v -> v.v_global
-    | Ref r -> r.r_global
-    | Pair p -> p.p_global
-    | Fun f -> f.f_global
-
-let is_ret_label l = (find l).l_ret  || (find l).l_global (* todo - check *)
-
-let is_param_label l = (find l).l_param || (find l).l_global
-
-let is_global_label l = (find l).l_global
-
-let is_seeded_label l = (find l).l_seeded
-
-let set_global_label (l : label) (b : bool) : unit =
-  assert ((not (is_global_label l)) || b);
-  (U.deref l).l_global <- b
-
-(** Aliases for set_global *)
-let global_tau = get_global
-
-
-(** Get_global for lvalues *)
-let global_lvalue lv = get_global lv.contents
-
-
-
-(***********************************************************************)
-(*                                                                     *)
-(* Printing Functions                                                  *)
-(*                                                                     *)
-(***********************************************************************)
-
-let string_of_configuration (c, i, i') =
-  let context = match c with
-      Open -> "O"
-    | Closed -> "C"
-  in
-    Printf.sprintf "(%s,%d,%d)" context i i'
-
-let string_of_polarity p =
-  match p with
-      Pos -> "+"
-    | Neg -> "-"
-    | Sub -> "M"
-
-(** Convert a label to a string, short representation *)
-let string_of_label (l : label) : string =
-  "\"" ^ (find l).l_name ^ "\""
-
-(** Return true if the element [e] is present in the association list,
-    according to uref equality *)
-let rec assoc_list_mem (e : tau) (l : association list) =
-  match l with
-    | [] -> None
-    | (h, s, so) :: t ->
-        if U.equal (h,e) then Some (s, so) else assoc_list_mem e t
-
-(** Given a tau, create a unique recursive variable name. This should always
-    return the same name for a given tau *)
-let fresh_recvar_name (t : tau) : string =
-  match find t with
-      Pair p -> "rvp" ^ string_of_int p.p_stamp
-    | Ref r -> "rvr" ^ string_of_int r.r_stamp
-    | Fun f -> "rvf" ^ string_of_int f.f_stamp
-    | _ -> die "fresh_recvar_name"
-
-
-(** Return a string representation of a tau, using association lists. *)
-let string_of_tau (t : tau) : string =
-  let tau_map : association list ref = ref [] in
-  let rec string_of_tau' t =
-    match assoc_list_mem t !tau_map with
-        Some (s, so) -> (* recursive type. see if a var name has been set *)
-          begin
-            match !so with
-                None ->
-                  let rv = fresh_recvar_name t in
-                    s := "u " ^ rv ^ "." ^ !s;
-                    so := Some rv;
-                    rv
-              | Some rv -> rv
-          end
-      | None -> (* type's not recursive. Add it to the assoc list and cont. *)
-          let s = ref ""
-          and so : string option ref = ref None in
-            tau_map := (t, s, so) :: !tau_map;
-            begin
-              match find t with
-                  Var v -> s := v.v_name;
-                | Pair p ->
-                    assert (ref_or_var p.ptr);
-                    assert (fun_or_var p.lam);
-                    s := "{";
-                    s := !s ^ string_of_tau' p.ptr;
-                    s := !s ^ ",";
-                    s := !s ^ string_of_tau' p.lam;
-                    s := !s ^"}"
-                | Ref r ->
-                    assert (pair_or_var r.points_to);
-                    s := "ref(|";
-                    s := !s ^ string_of_label r.rl;
-                    s := !s ^ "|,";
-                    s := !s ^ string_of_tau' r.points_to;
-                    s := !s ^ ")"
-                | Fun f ->
-                    assert (pair_or_var f.ret);
-                    let rec string_of_args = function
-                        h :: [] ->
-                          assert (pair_or_var h);
-                          s := !s ^ string_of_tau' h
-                      | h :: t ->
-                          assert (pair_or_var h);
-                          s := !s ^ string_of_tau' h ^ ",";
-                          string_of_args t
-                      | [] -> ()
-                    in
-                      s := "fun(|";
-                      s := !s ^ string_of_label f.fl;
-                      s := !s ^ "|,";
-                      s := !s ^ "<";
-                      if List.length f.args > 0 then string_of_args f.args
-                      else s := !s ^ "void";
-                      s := !s ^">,";
-                      s := !s ^ string_of_tau' f.ret;
-                      s := !s ^ ")"
-            end;
-            tau_map := List.tl !tau_map;
-            !s
-  in
-    string_of_tau' t
-
-(** Convert an lvalue to a string *)
-let rec string_of_lvalue (lv : lvalue) : string =
-  let contents = string_of_tau lv.contents
-  and l = string_of_label lv.l in
-    assert (pair_or_var lv.contents); (* do a consistency check *)
-    Printf.sprintf "[%s]^(%s)" contents l
-
-let print_path (p : lblinfo path) : unit =
-  let string_of_pkind = function
-      Positive -> "p"
-    | Negative -> "n"
-    | Match -> "m"
-    | Seed -> "s"
-  in
-    Printf.printf
-      "%s --%s--> %s (%d) : "
-      (string_of_label p.head)
-      (string_of_pkind p.kind)
-      (string_of_label p.tail)
-      (PathHash.hash p)
-
-(** Print a list of tau elements, comma separated *)
-let rec print_tau_list (l : tau list) : unit =
-  let rec print_t_strings = function
-      h :: [] -> print_endline h
-    | h :: t ->
-        print_string h;
-        print_string ", ";
-        print_t_strings t
-    | [] -> ()
-  in
-    print_t_strings (List.map string_of_tau l)
-
-let print_constraint (c : tconstraint) =
-  match c with
-      Unification (t, t') ->
-        let lhs = string_of_tau t
-        and rhs = string_of_tau t' in
-          Printf.printf "%s == %s\n" lhs rhs
-    | Leq (t, (i, p), t') ->
-        let lhs = string_of_tau t
-        and rhs = string_of_tau t' in
-          Printf.printf "%s <={%d,%s} %s\n" lhs i (string_of_polarity p) rhs
-
-(***********************************************************************)
-(*                                                                     *)
-(* Type Operations -- these do not create any constraints              *)
-(*                                                                     *)
-(***********************************************************************)
-
-(** Create an lvalue with label [lbl] and tau contents [t]. *)
-let make_lval (lbl, t : label * tau) : lvalue =
-  {l = lbl; contents = t}
-
-let make_label_int (is_global : bool) (name :string) (vio : Cil.varinfo option) : label =
-  let locc =
-    match vio with
-        Some vi -> C.add (fresh_index (), name, vi) C.empty
-      | None -> C.empty
-  in
-    U.uref {
-      l_name = name;
-      l_global = is_global;
-      l_stamp = fresh_stamp ();
-      loc = locc;
-      aliases = locc;
-      p_ubounds = B.empty;
-      p_lbounds = B.empty;
-      n_ubounds = B.empty;
-      n_lbounds = B.empty;
-      m_ubounds = B.empty;
-      m_lbounds = B.empty;
-      m_upath = P.empty;
-      m_lpath = P.empty;
-      n_upath = P.empty;
-      n_lpath = P.empty;
-      p_upath = P.empty;
-      p_lpath = P.empty;
-      l_seeded = false;
-      l_ret = false;
-      l_param = false
-    }
-
-(** Create a new label with name [name]. Also adds a fresh constant
-    with name [name] to this label's aliases set. *)
-let make_label (is_global : bool) (name : string) (vio : Cil.varinfo option) : label =
-  make_label_int is_global name vio
-
-(** Create a new label with an unspecified name and an empty alias set. *)
-let fresh_label (is_global : bool) : label =
-  let index = fresh_index () in
-    make_label_int is_global ("l_" ^ string_of_int index) None
-
-(** Create a fresh bound (edge in the constraint graph). *)
-let make_bound (i, a : int * label) : lblinfo bound =
-  {index = i; info = a}
-
-let make_tau_bound (i, a : int * tau) : tinfo bound =
-  {index = i; info = a}
-
-(** Create a fresh named variable with name '[name]. *)
-let make_var (b: bool) (name : string) : tau =
-  U.uref (Var {v_name = ("'" ^ name);
-               v_hole = H.create 8;
-               v_stamp = fresh_index ();
-               v_global = b;
-               v_mlbs = B.empty;
-               v_mubs = B.empty;
-               v_plbs = B.empty;
-               v_pubs = B.empty;
-               v_nlbs = B.empty;
-               v_nubs = B.empty})
-
-(** Create a fresh unnamed variable (name will be 'fv). *)
-let fresh_var (is_global : bool) : tau =
-  make_var is_global ("fv" ^ string_of_int (fresh_index ()))
-
-(** Create a fresh unnamed variable (name will be 'fi). *)
-let fresh_var_i (is_global : bool) : tau =
-  make_var is_global ("fi" ^ string_of_int (fresh_index()))
-
-(** Create a Fun constructor. *)
-let make_fun (lbl, a, r : label * (tau list) * tau) : tau =
-  U.uref (Fun {fl = lbl;
-               f_stamp = fresh_index ();
-               f_global = false;
-               args = a;
-               ret = r })
-
-(** Create a Ref constructor. *)
-let make_ref (lbl,pt : label * tau) : tau =
-  U.uref (Ref {rl = lbl;
-               r_stamp = fresh_index ();
-               r_global = false;
-               points_to = pt})
-
-(** Create a Pair constructor. *)
-let make_pair (p,f : tau * tau) : tau =
-  U.uref (Pair {ptr = p;
-                p_stamp = fresh_index ();
-                p_global = false;
-                lam = f})
-
-(** Copy the toplevel constructor of [t], putting fresh variables in each
-    argement of the constructor. *)
-let copy_toplevel (t : tau) : tau =
-  match find t with
-      Pair _ -> make_pair (fresh_var_i false, fresh_var_i false)
-    | Ref  _ -> make_ref (fresh_label false, fresh_var_i false)
-    | Fun  f ->
-        let fresh_fn = fun _ -> fresh_var_i false in
-          make_fun (fresh_label false,
-                    List.map fresh_fn f.args, fresh_var_i false)
-    | _ -> die "copy_toplevel"
-
-
-let has_same_structure (t : tau) (t' : tau) =
-  match find t, find t' with
-      Pair _, Pair _ -> true
-    | Ref _, Ref _ -> true
-    | Fun _, Fun _ -> true
-    | Var _, Var _ -> true
-    | _ -> false
-
-
-let pad_args (f, f' : finfo * finfo) : unit =
-  let padding = ref ((List.length f.args) - (List.length f'.args))
-  in
-    if !padding == 0 then ()
-    else
-      let to_pad =
-        if !padding > 0 then f' else (padding := -(!padding); f)
-      in
-        for i = 1 to !padding do
-          to_pad.args <- to_pad.args @ [fresh_var false]
-        done
-
-
-let pad_args2 (fi, tlr : finfo * tau list ref) : unit =
-  let padding = ref (List.length fi.args - List.length !tlr)
-  in
-    if !padding == 0 then ()
-    else
-      if !padding > 0 then
-        for i = 1 to !padding do
-          tlr := !tlr @ [fresh_var false]
-        done
-      else
-        begin
-          padding := -(!padding);
-          for i = 1 to !padding do
-            fi.args <- fi.args @ [fresh_var false]
-          done
-        end
-
-(***********************************************************************)
-(*                                                                     *)
-(* Constraint Generation/ Resolution                                   *)
-(*                                                                     *)
-(***********************************************************************)
-
-
-(** Make the type a global type *)
-let set_global (t : tau) (b : bool) : unit =
-  let set_global_down t =
-    match find t with
-        Var v -> v.v_global <- true
-      | Ref r -> set_global_label r.rl true
-      | Fun f -> set_global_label f.fl true
-      | _ -> ()
-  in
-    if !debug && b then Printf.printf "Set global: %s\n" (string_of_tau t);
-    assert ((not (get_global t)) || b);
-    if b then iter_tau set_global_down t;
-    match find t with
-        Var v -> v.v_global <- b
-      | Ref r -> r.r_global <- b
-      | Pair p -> p.p_global <- b
-      | Fun f -> f.f_global <- b
-
-
-let rec unify_int (t, t' : tau * tau) : unit =
-  if equal_tau t t' then ()
-  else
-    let ti, ti' = find t, find t' in
-      U.unify combine (t, t');
-      match ti, ti' with
-          Var v, Var v' ->
-            set_global t' (v.v_global || get_global t');
-            merge_vholes (v, v');
-            merge_vlbs (v, v');
-            merge_vubs (v, v')
-        | Var v, _ ->
-            set_global t' (v.v_global || get_global t');
-            trigger_vhole v t';
-            notify_vlbs t v;
-            notify_vubs t v
-        | _, Var v ->
-            set_global t (v.v_global || get_global t);
-            trigger_vhole v t;
-            notify_vlbs t' v;
-            notify_vubs t' v
-        | Ref r, Ref r' ->
-            set_global t (r.r_global || r'.r_global);
-            unify_ref (r, r')
-        | Fun f, Fun f' ->
-            set_global t (f.f_global || f'.f_global);
-            unify_fun (f, f')
-        | Pair p, Pair p' -> ()
-        | _ -> raise Inconsistent
-and notify_vlbs (t : tau) (vi : vinfo) : unit =
-  let notify p bounds =
-    List.iter
-      (fun b ->
-         add_constraint (Unification (b.info,copy_toplevel t));
-         add_constraint (Leq (b.info, (b.index, p), t)))
-      bounds
-  in
-    notify Sub (B.elements vi.v_mlbs);
-    notify Pos (B.elements vi.v_plbs);
-    notify Neg (B.elements vi.v_nlbs)
-and notify_vubs (t : tau) (vi : vinfo) : unit =
-  let notify p bounds =
-    List.iter
-      (fun b ->
-         add_constraint (Unification (b.info,copy_toplevel t));
-         add_constraint (Leq (t, (b.index, p), b.info)))
-      bounds
-  in
-    notify Sub (B.elements vi.v_mubs);
-    notify Pos (B.elements vi.v_pubs);
-    notify Neg (B.elements vi.v_nubs)
-and unify_ref (ri,ri' : rinfo * rinfo) : unit =
-  add_constraint (Unification (ri.points_to, ri'.points_to))
-and unify_fun (fi, fi' : finfo * finfo) : unit =
-  let rec union_args  = function
-      _, [] -> false
-    | [], _ -> true
-    | h :: t, h' :: t' ->
-        add_constraint (Unification (h, h'));
-        union_args(t, t')
-  in
-    unify_label(fi.fl, fi'.fl);
-    add_constraint (Unification (fi.ret, fi'.ret));
-    if union_args (fi.args, fi'.args) then fi.args <- fi'.args;
-and unify_label (l, l' : label * label) : unit =
-  let pick_name (li, li' : lblinfo * lblinfo) =
-    if String.length li.l_name > 1 && String.sub (li.l_name) 0 2 = "l_" then
-      li.l_name <- li'.l_name
-    else ()
-  in
-  let combine_label (li, li' : lblinfo *lblinfo) : lblinfo =
-    let rm_self b = not (li.l_stamp = get_label_stamp b.info)
-    in
-      pick_name (li, li');
-      li.l_global <- li.l_global || li'.l_global;
-      li.aliases <- C.union li.aliases li'.aliases;
-      li.p_ubounds <- B.union li.p_ubounds li'.p_ubounds;
-      li.p_lbounds <- B.union li.p_lbounds li'.p_lbounds;
-      li.n_ubounds <- B.union li.n_ubounds li'.n_ubounds;
-      li.n_lbounds <- B.union li.n_lbounds li'.n_lbounds;
-      li.m_ubounds <- B.union li.m_ubounds (B.filter rm_self li'.m_ubounds);
-      li.m_lbounds <- B.union li.m_lbounds (B.filter rm_self li'.m_lbounds);
-      li.m_upath <- P.union li.m_upath li'.m_upath;
-      li.m_lpath<- P.union li.m_lpath li'.m_lpath;
-      li.n_upath <- P.union li.n_upath li'.n_upath;
-      li.n_lpath <- P.union li.n_lpath li'.n_lpath;
-      li.p_upath <- P.union li.p_upath li'.p_upath;
-      li.p_lpath <- P.union li.p_lpath li'.p_lpath;
-      li.l_seeded <- li.l_seeded || li'.l_seeded;
-      li.l_ret <- li.l_ret || li'.l_ret;
-      li.l_param <- li.l_param || li'.l_param;
-      li
-  in
-    if !debug_constraints then
-       Printf.printf "%s == %s\n" (string_of_label l) (string_of_label l');
-    U.unify combine_label (l, l')
-and merge_vholes (vi, vi' : vinfo * vinfo) : unit =
-  H.iter
-    (fun i -> fun _ -> H.replace vi'.v_hole i ())
-    vi.v_hole
-and merge_vlbs (vi, vi' : vinfo * vinfo) : unit =
-  vi'.v_mlbs <- B.union vi.v_mlbs vi'.v_mlbs;
-  vi'.v_plbs <- B.union vi.v_plbs vi'.v_plbs;
-  vi'.v_nlbs <- B.union vi.v_nlbs vi'.v_nlbs
-and merge_vubs (vi, vi' : vinfo * vinfo) : unit =
-  vi'.v_mubs <- B.union vi.v_mubs vi'.v_mubs;
-  vi'.v_pubs <- B.union vi.v_pubs vi'.v_pubs;
-  vi'.v_nubs <- B.union vi.v_nubs vi'.v_nubs
-and trigger_vhole (vi : vinfo) (t : tau) =
-  let add_self_loops (t : tau) : unit =
-    match find t with
-        Var v ->
-          H.iter
-            (fun i -> fun _ -> H.replace v.v_hole i ())
-            vi.v_hole
-      | Ref r ->
-          H.iter
-            (fun i -> fun _ ->
-               leq_label (r.rl, (i, Pos), r.rl);
-               leq_label (r.rl, (i, Neg), r.rl))
-            vi.v_hole
-      | Fun f ->
-          H.iter
-            (fun i -> fun _ ->
-               leq_label (f.fl, (i, Pos), f.fl);
-               leq_label (f.fl, (i, Neg), f.fl))
-            vi.v_hole
-      | _ -> ()
-  in
-    iter_tau add_self_loops t
-(** Pick the representative info for two tinfo's. This function prefers the
-  first argument when both arguments are the same structure, but when
-  one type is a structure and the other is a var, it picks the structure.
-  All other actions (e.g., updating the info) is done in unify_int *)
-and combine (ti, ti' : tinfo * tinfo) : tinfo =
-  match ti, ti' with
-      Var _, _ -> ti'
-    | _, _ -> ti
-and leq_int (t, (i, p), t') : unit =
-  if equal_tau t t' then ()
-  else
-    let ti, ti' = find t, find t' in
-      match ti, ti' with
-          Var v, Var v' ->
-            begin
-              match p with
-                  Pos ->
-                    v.v_pubs <- B.add (make_tau_bound (i, t')) v.v_pubs;
-                    v'.v_plbs <- B.add (make_tau_bound (i, t)) v'.v_plbs
-                | Neg ->
-                    v.v_nubs <- B.add (make_tau_bound (i, t')) v.v_nubs;
-                    v'.v_nlbs <- B.add (make_tau_bound (i, t)) v'.v_nlbs
-                | Sub ->
-                    v.v_mubs <- B.add (make_tau_bound (i, t')) v.v_mubs;
-                    v'.v_mlbs <- B.add (make_tau_bound (i, t)) v'.v_mlbs
-            end
-        | Var v, _ ->
-            add_constraint (Unification (t, copy_toplevel t'));
-            add_constraint (Leq (t, (i, p), t'))
-        | _, Var v ->
-            add_constraint (Unification (t', copy_toplevel t));
-            add_constraint (Leq (t, (i, p), t'))
-        | Ref r, Ref r' -> leq_ref (r, (i, p), r')
-        | Fun f, Fun f' -> add_constraint (Unification (t, t'))
-        | Pair pr, Pair pr' ->
-            add_constraint (Leq (pr.ptr, (i, p), pr'.ptr));
-            add_constraint (Leq (pr.lam, (i, p), pr'.lam))
-        | _ -> raise Inconsistent
-and leq_ref (ri, (i, p), ri') : unit =
-  let add_self_loops (t : tau) : unit =
-    match find t with
-        Var v -> H.replace v.v_hole i ()
-      | Ref r ->
-          leq_label (r.rl, (i, Pos), r.rl);
-          leq_label (r.rl, (i, Neg), r.rl)
-      | Fun f ->
-          leq_label (f.fl, (i, Pos), f.fl);
-          leq_label (f.fl, (i, Neg), f.fl)
-      | _ -> ()
-  in
-    iter_tau add_self_loops ri.points_to;
-    add_constraint (Unification (ri.points_to, ri'.points_to));
-    leq_label(ri.rl, (i, p), ri'.rl)
-and leq_label (l,(i, p), l') : unit =
-  if !debug_constraints then
-    Printf.printf
-      "%s <={%d,%s} %s\n"
-      (string_of_label l) i (string_of_polarity p) (string_of_label l');
-  let li, li' = find l, find l' in
-    match p with
-        Pos ->
-          li.l_ret <- true;
-          li.p_ubounds <- B.add (make_bound (i, l')) li.p_ubounds;
-          li'.p_lbounds <- B.add (make_bound (i, l)) li'.p_lbounds
-      | Neg ->
-          li'.l_param <- true;
-          li.n_ubounds <- B.add (make_bound (i, l')) li.n_ubounds;
-          li'.n_lbounds <- B.add (make_bound (i, l)) li'.n_lbounds
-      | Sub ->
-          if U.equal (l, l') then ()
-          else
-            begin
-              li.m_ubounds <- B.add (make_bound(0, l')) li.m_ubounds;
-              li'.m_lbounds <- B.add (make_bound(0, l)) li'.m_lbounds
-            end
-and add_constraint_int (c : tconstraint) (toplev : bool) =
-  if !debug_constraints && toplev then
-    begin
-      Printf.printf "%d:>" !toplev_count;
-      print_constraint c;
-      incr toplev_count
-    end
-  else
-    if !debug_constraints then print_constraint c else ();
-  begin
-    match c with
-        Unification _ -> Q.add c eq_worklist
-      | Leq _ -> Q.add c leq_worklist
-  end;
-  solve_constraints ()
-and add_constraint (c : tconstraint) =
-  add_constraint_int c false
-and add_toplev_constraint (c : tconstraint) =
-  if !print_constraints && not !debug_constraints then
-    begin
-      Printf.printf "%d:>" !toplev_count;
-      incr toplev_count;
-      print_constraint c
-    end
-  else ();
-  add_constraint_int c true
-and fetch_constraint () : tconstraint option =
-  try Some (Q.take eq_worklist)
-  with Q.Empty -> (try Some (Q.take leq_worklist)
-                   with Q.Empty -> None)
-(** The main solver loop. *)
-and solve_constraints () : unit =
-  match fetch_constraint () with
-      Some c ->
-        begin
-          match c with
-              Unification (t, t') -> unify_int (t, t')
-            | Leq (t, (i, p), t') ->
-                if !no_sub then unify_int (t, t')
-                else
-                  if !analyze_mono then leq_int (t, (0, Sub), t')
-                  else leq_int (t, (i, p), t')
-        end;
-        solve_constraints ()
-    | None -> ()
-
-
-(***********************************************************************)
-(*                                                                     *)
-(* Interface Functions                                                 *)
-(*                                                                     *)
-(***********************************************************************)
-
-(** Return the contents of the lvalue. *)
-let rvalue (lv : lvalue) : tau =
-  lv.contents
-
-(** Dereference the rvalue. If it does not have enough structure to support
-  the operation, then the correct structure is added via new unification
-  constraints. *)
-let rec deref (t : tau) : lvalue =
-  match U.deref t with
-      Pair p ->
-        begin
-          match U.deref p.ptr with
-              Var _ ->
-                let is_global = global_tau p.ptr in
-                let points_to = fresh_var is_global in
-                let l = fresh_label is_global in
-                let r = make_ref (l, points_to)
-                in
-                  add_toplev_constraint (Unification (p.ptr, r));
-                  make_lval (l, points_to)
-            | Ref r -> make_lval (r.rl, r.points_to)
-            | _ -> raise WellFormed
-        end
-    | Var v ->
-        let is_global = global_tau t in
-          add_toplev_constraint
-            (Unification (t, make_pair (fresh_var is_global,
-                                        fresh_var is_global)));
-          deref t
-    | _ -> raise WellFormed
-
-(** Form the union of [t] and [t'], if it doesn't exist already. *)
-let join (t : tau) (t' : tau) : tau =
-  try H.find join_cache (get_stamp t, get_stamp t')
-  with Not_found ->
-    let t'' = fresh_var false in
-      add_toplev_constraint (Leq (t, (0, Sub), t''));
-      add_toplev_constraint (Leq (t', (0, Sub), t''));
-      H.add join_cache (get_stamp t, get_stamp t') t'';
-      t''
-
-(** Form the union of a list [tl], expected to be the initializers of some
-  structure or array type. *)
-let join_inits (tl : tau list) : tau =
-  let t' = fresh_var false in
-    List.iter
-      (fun t -> add_toplev_constraint (Leq (t, (0, Sub), t')))
-      tl;
-    t'
-
-(** Take the address of an lvalue. Does not add constraints. *)
-let address (lv  : lvalue) : tau =
-  make_pair (make_ref (lv.l, lv.contents), fresh_var false)
-
-(** For this version of golf, instantiation is handled at [apply] *)
-let instantiate (lv : lvalue) (i : int) : lvalue =
-  lv
-
-(** Constraint generated from assigning [t] to [lv]. *)
-let assign (lv : lvalue) (t : tau) : unit =
-  add_toplev_constraint (Leq (t, (0, Sub), lv.contents))
-
-let assign_ret (i : int) (lv : lvalue) (t : tau) : unit =
-  add_toplev_constraint (Leq (t, (i, Pos), lv.contents))
-
-(** Project out the first (ref) component or a pair. If the argument [t] has
-  no discovered structure, raise NoContents. *)
-let proj_ref (t : tau) : tau =
-  match U.deref t with
-      Pair p -> p.ptr
-    | Var v -> raise NoContents
-    | _ ->  raise WellFormed
-
-(* Project out the second (fun) component of a pair. If the argument [t] has
-   no discovered structure, create it on the fly by adding constraints. *)
-let proj_fun (t : tau) : tau =
-  match U.deref t with
-      Pair p -> p.lam
-    | Var v ->
-        let p, f = fresh_var false, fresh_var false in
-          add_toplev_constraint (Unification (t, make_pair(p, f)));
-          f
-    | _ -> raise WellFormed
-
-let get_args (t : tau) : tau list =
-  match U.deref t with
-      Fun f -> f.args
-    | _ -> raise WellFormed
-
-let get_finfo (t : tau) : finfo =
-  match U.deref t with
-      Fun f -> f
-    | _ -> raise WellFormed
-
-(** Function type [t] is applied to the arguments [actuals]. Unifies the
-  actuals with the formals of [t]. If no functions have been discovered for
-  [t] yet, create a fresh one and unify it with t. The result is the return
-  value of the function plus the index of this application site. *)
-let apply (t : tau) (al : tau list) : (tau * int) =
-  let i = fresh_appsite () in
-  let f = proj_fun t in
-  let actuals = ref al in
-  let fi,ret =
-    match U.deref f with
-        Fun fi -> fi, fi.ret
-      | Var v ->
-          let new_l, new_ret, new_args =
-            fresh_label false, fresh_var false,
-            List.map (function _ -> fresh_var false) !actuals
-          in
-          let new_fun = make_fun (new_l, new_args, new_ret) in
-            add_toplev_constraint (Unification (new_fun, f));
-            (get_finfo new_fun, new_ret)
-      | _ -> raise WellFormed
-  in
-    pad_args2 (fi, actuals);
-    List.iter2
-      (fun actual -> fun formal ->
-         add_toplev_constraint (Leq (actual,(i, Neg), formal)))
-      !actuals fi.args;
-    (ret, i)
-
-(** Create a new function type with name [name], list of formal arguments
-  [formals], and return value [ret]. Adds no constraints. *)
-let make_function (name : string) (formals : lvalue list) (ret : tau) : tau =
-  let f = make_fun (make_label false name None,
-                    List.map (fun x -> rvalue x) formals,
-                    ret)
-  in
-    make_pair (fresh_var false, f)
-
-(** Create an lvalue. If [is_global] is true, the lvalue will be treated
-    monomorphically. *)
-let make_lvalue (is_global : bool) (name : string) (vio : Cil.varinfo option) : lvalue =
-  if !debug && is_global then
-    Printf.printf "Making global lvalue : %s\n" name
-  else ();
-  make_lval (make_label is_global name vio, make_var is_global name)
-
-(** Create a fresh non-global named variable. *)
-let make_fresh (name : string) : tau =
-  make_var false name
-
-(** The default type for constants. *)
-let bottom () : tau =
-  make_var false "bottom"
-
-(** Unify the result of a function with its return value. *)
-let return (t : tau) (t' : tau) =
-  add_toplev_constraint (Leq (t', (0, Sub), t))
-
-(***********************************************************************)
-(*                                                                     *)
-(* Query/Extract Solutions                                             *)
-(*                                                                     *)
-(***********************************************************************)
-
-let make_summary = leq_label
-
-let path_signature k l l' b : int list =
-  let ksig =
-    match k with
-        Positive -> 1
-      | Negative -> 2
-      | _ -> 3
-  in
-    [ksig;
-     get_label_stamp l;
-     get_label_stamp l';
-     if b then 1 else 0]
-
-let make_path (k, l, l', b) =
-  let psig = path_signature k l l' b in
-    if PH.mem path_hash psig then ()
-    else
-      let new_path = {kind = k; head = l; tail = l'; reached_global = b}
-      and li, li' = find l, find l' in
-        PH.add path_hash psig new_path;
-        Q.add new_path path_worklist;
-        begin
-          match k with
-              Positive ->
-                li.p_upath <- P.add new_path li.p_upath;
-                li'.p_lpath <- P.add new_path li'.p_lpath
-            | Negative ->
-                li.n_upath <- P.add new_path li.n_upath;
-                li'.n_lpath <- P.add new_path li'.n_lpath
-            | _ ->
-                li.m_upath <- P.add new_path li.m_upath;
-                li'.m_lpath <- P.add new_path li'.m_lpath
-        end;
-        if !debug then
-          begin
-            print_string "Discovered path : ";
-            print_path new_path;
-            print_newline ()
-          end
-
-let backwards_tabulate (l : label) : unit =
-  let rec loop () =
-    let rule1 p =
-      if !debug then print_endline "rule1";
-      B.iter
-        (fun lb ->
-           make_path (Match, lb.info, p.tail,
-                      p.reached_global || is_global_label p.head))
-        (find p.head).m_lbounds
-    and rule2 p =
-      if !debug then print_endline "rule2";
-      B.iter
-        (fun lb ->
-           make_path (Negative, lb.info, p.tail,
-                      p.reached_global || is_global_label p.head))
-        (find p.head).n_lbounds
-    and rule2m p =
-      if !debug then print_endline "rule2m";
-      B.iter
-        (fun lb ->
-           make_path (Match, lb.info, p.tail,
-                      p.reached_global || is_global_label p.head))
-        (find p.head).n_lbounds
-    and rule3 p =
-      if !debug then print_endline "rule3";
-      B.iter
-        (fun lb ->
-           make_path (Positive, lb.info, p.tail,
-                      p.reached_global || is_global_label p.head))
-        (find p.head).p_lbounds
-    and rule4 p =
-      if !debug then print_endline "rule4";
-      B.iter
-        (fun lb ->
-           make_path(Negative, lb.info, p.tail,
-                     p.reached_global || is_global_label p.head))
-        (find p.head).m_lbounds
-    and rule5 p =
-      if !debug then print_endline "rule5";
-      B.iter
-        (fun lb ->
-           make_path (Positive, lb.info, p.tail,
-                      p.reached_global || is_global_label p.head))
-        (find p.head).m_lbounds
-    and rule6 p =
-      if !debug then print_endline "rule6";
-      B.iter
-        (fun lb ->
-           if is_seeded_label lb.info then ()
-           else
-             begin
-               (find lb.info).l_seeded <- true; (* set seeded *)
-               make_path (Seed, lb.info, lb.info,
-                          is_global_label lb.info)
-             end)
-        (find p.head).p_lbounds
-    and rule7 p =
-      if !debug then print_endline "rule7";
-      if not (is_ret_label p.tail && is_param_label p.head) then ()
-      else
-        B.iter
-          (fun lb ->
-             B.iter
-               (fun ub ->
-                  if lb.index = ub.index then
-                    begin
-                      if !debug then
-                        Printf.printf "New summary : %s %s\n"
-                          (string_of_label lb.info)
-                          (string_of_label ub.info);
-                      make_summary (lb.info, (0, Sub), ub.info);
-                      (* rules 1, 4, and 5 *)
-                      P.iter
-                        (fun ubp -> (* rule 1 *)
-                           make_path (Match, lb.info, ubp.tail,
-                                      ubp.reached_global))
-                        (find ub.info).m_upath;
-                      P.iter
-                        (fun ubp -> (* rule 4 *)
-                           make_path (Negative, lb.info, ubp.tail,
-                                      ubp.reached_global))
-                        (find ub.info).n_upath;
-                      P.iter
-                        (fun ubp -> (* rule 5 *)
-                           make_path (Positive, lb.info, ubp.tail,
-                                      ubp.reached_global))
-                        (find ub.info).p_upath
-                    end)
-               (find p.tail).p_ubounds)
-          (find p.head).n_lbounds
-    in
-    let matched_backward_rules p =
-      rule1 p;
-      if p.reached_global then rule2m p else rule2 p;
-      rule3 p;
-      rule6 p;
-      rule7 p
-    and negative_backward_rules p =
-      rule2 p;
-      rule3 p;
-      rule4 p;
-      rule6 p;
-      rule7 p
-    and positive_backward_rules p =
-      rule3 p;
-      rule5 p;
-      rule6 p;
-      rule7 p
-    in (* loop *)
-      if Q.is_empty path_worklist then ()
-      else
-        let p = Q.take path_worklist in
-          if !debug then
-            begin
-              print_string "Processing path: ";
-              print_path p;
-              print_newline ()
-            end;
-          begin
-            match p.kind with
-                Positive ->
-                  if is_global_label p.tail then matched_backward_rules p
-                  else positive_backward_rules p
-              | Negative -> negative_backward_rules p
-              | _ -> matched_backward_rules p
-          end;
-          loop ()
-  in (* backwards_tabulate *)
-    if !debug then
-      begin
-        Printf.printf "Tabulating for %s..." (string_of_label l);
-        if is_global_label l then print_string "(global)";
-        print_newline ()
-      end;
-    make_path (Seed, l, l, is_global_label l);
-    loop ()
-
-let collect_ptsets (l : label) : constantset = (* todo -- cache aliases *)
-  let li = find l
-  and collect init s =
-    P.fold (fun x a -> C.union a (find x.head).aliases) s init
-  in
-    backwards_tabulate l;
-    collect (collect (collect li.aliases li.m_lpath) li.n_lpath) li.p_lpath
-
-let extract_ptlabel (lv : lvalue) : label option =
-  try
-    match find (proj_ref lv.contents) with
-        Var v -> None
-      | Ref r ->  Some r.rl;
-      | _ -> raise WellFormed
-  with NoContents -> None
-
-let points_to_aux (t : tau) : constant list =
-  try
-    match find (proj_ref t) with
-        Var v -> []
-      | Ref r -> C.elements (collect_ptsets r.rl)
-      | _ -> raise WellFormed
-  with NoContents -> []
-
-let points_to_names (lv : lvalue) : string list =
-  List.map (fun (_, str, _) -> str) (points_to_aux lv.contents)
-
-let points_to (lv : lvalue) : Cil.varinfo list =
-  let rec get_vinfos l : Cil.varinfo list = match l with
-    | (_, _, h) :: t -> h :: get_vinfos t
-    | [] -> []
-  in
-    get_vinfos (points_to_aux lv.contents)
-
-let epoints_to (t : tau) : Cil.varinfo list =
-  let rec get_vinfos l : Cil.varinfo list = match l with
-    | (_, _, h) :: t -> h :: get_vinfos t
-    | [] -> []
-  in
-    get_vinfos (points_to_aux t)
-
-let smart_alias_query (l : label) (l' : label) : bool =
-  (* Set of dead configurations *)
-  let dead_configs : config_map = CH.create 16 in
-    (* the set of discovered configurations *)
-  let discovered : config_map = CH.create 16 in
-  let rec filter_match (i : int) =
-    B.filter (fun (b : lblinfo bound) -> i = b.index)
-  in
-  let rec simulate c l l' =
-    let config = (c, get_label_stamp l, get_label_stamp l') in
-      if U.equal (l, l') then
-        begin
-          if !debug then
-            Printf.printf
-              "%s and %s are aliased\n"
-              (string_of_label l)
-              (string_of_label l');
-          raise APFound
-        end
-      else if CH.mem discovered config then ()
-      else
-        begin
-          if !debug_aliases then
-            Printf.printf
-              "Exploring configuration %s\n"
-              (string_of_configuration config);
-          CH.add discovered config ();
-          B.iter
-            (fun lb -> simulate c lb.info l')
-            (get_bounds Sub false l); (* epsilon closure of l *)
-          B.iter
-            (fun lb -> simulate c l lb.info)
-            (get_bounds Sub false l'); (* epsilon closure of l' *)
-          B.iter
-            (fun lb ->
-               let matching =
-                 filter_match lb.index (get_bounds Pos false l')
-               in
-                 B.iter
-                   (fun b -> simulate Closed lb.info b.info)
-                   matching;
-                 if is_global_label l' then (* positive self-loops on l' *)
-                   simulate Closed lb.info l')
-            (get_bounds Pos false l); (* positive transitions on l *)
-          if is_global_label l then
-            B.iter
-              (fun lb -> simulate Closed l lb.info)
-              (get_bounds Pos false l'); (* positive self-loops on l *)
-          begin
-            match c with  (* negative transitions on l, only if Open *)
-                Open ->
-                  B.iter
-                    (fun lb ->
-                       let matching =
-                         filter_match lb.index (get_bounds Neg false l')
-                       in
-                         B.iter
-                           (fun b -> simulate Open lb.info b.info)
-                           matching ;
-                         if is_global_label l' then (* neg self-loops on l' *)
-                           simulate Open lb.info l')
-                    (get_bounds Neg false l);
-                  if is_global_label l then
-                    B.iter
-                      (fun lb -> simulate Open l lb.info)
-                      (get_bounds Neg false l') (* negative self-loops on l *)
-              | _ -> ()
-          end;
-          (* if we got this far, then the configuration was not used *)
-          CH.add dead_configs config ();
-        end
-  in
-    try
-      begin
-        if H.mem cached_aliases (get_label_stamp l, get_label_stamp l') then
-          true
-        else
-          begin
-            simulate Open l l';
-            if !debug then
-              Printf.printf
-                "%s and %s are NOT aliased\n"
-                (string_of_label l)
-                (string_of_label l');
-            false
-          end
-      end
-    with APFound ->
-      CH.iter
-        (fun config -> fun _ ->
-           if not (CH.mem dead_configs config) then
-             H.add
-               cached_aliases
-               (get_label_stamp l, get_label_stamp l')
-               ())
-        discovered;
-      true
-
-(** todo : uses naive alias query for now *)
-let may_alias (t1 : tau) (t2 : tau) : bool =
-  try
-    let l1 =
-      match find (proj_ref t1) with
-          Ref r -> r.rl
-        | Var v -> raise NoContents
-        | _ -> raise WellFormed
-    and l2 =
-      match find (proj_ref t2) with
-          Ref r -> r.rl
-        | Var v -> raise NoContents
-        | _ -> raise WellFormed
-    in
-      not (C.is_empty (C.inter (collect_ptsets l1) (collect_ptsets l2)))
-  with NoContents -> false
-
-let alias_query (b : bool) (lvl : lvalue list) : int * int =
-  let naive_count = ref 0 in
-  let smart_count = ref 0 in
-  let lbls = List.map extract_ptlabel lvl in (* label option list *)
-  let ptsets =
-    List.map
-      (function
-           Some l -> collect_ptsets l
-         | None -> C.empty)
-      lbls in
-  let record_alias s lo s' lo' =
-    match lo, lo' with
-        Some l, Some l' ->
-          if !debug_aliases then
-            Printf.printf
-              "Checking whether %s and %s are aliased...\n"
-              (string_of_label l)
-              (string_of_label l');
-          if C.is_empty (C.inter s s') then ()
-          else
-            begin
-              incr naive_count;
-              if !smart_aliases && smart_alias_query l l' then
-                incr smart_count
-            end
-      | _ -> ()
-  in
-  let rec check_alias sets labels =
-    match sets,labels with
-        s :: st, l :: lt ->
-          List.iter2 (record_alias s l) ptsets lbls;
-          check_alias st lt
-      | [], [] -> ()
-      | _ -> die "check_alias"
-  in
-    check_alias ptsets lbls;
-    (!naive_count, !smart_count)
-
-let alias_frequency (lvl : (lvalue * bool) list) : int * int =
-  let extract_lbl (lv, b : lvalue * bool) = (lv.l, b) in
-  let naive_count = ref 0 in
-  let smart_count = ref 0 in
-  let lbls = List.map extract_lbl lvl in
-  let ptsets =
-    List.map
-      (fun (lbl, b) ->
-         if b then (find lbl).loc (* symbol access *)
-         else collect_ptsets lbl)
-      lbls in
-  let record_alias s (l, b) s' (l', b') =
-    if !debug_aliases then
-      Printf.printf
-        "Checking whether %s and %s are aliased...\n"
-        (string_of_label l)
-        (string_of_label l');
-    if C.is_empty (C.inter s s') then ()
-    else
-      begin
-        if !debug_aliases then
-          Printf.printf
-            "%s and %s are aliased naively...\n"
-            (string_of_label l)
-            (string_of_label l');
-        incr naive_count;
-        if !smart_aliases then
-          if b || b' || smart_alias_query l l' then incr smart_count
-          else
-            Printf.printf
-              "%s and %s are not aliased by smart queries...\n"
-              (string_of_label l)
-              (string_of_label l');
-      end
-  in
-  let rec check_alias sets labels =
-    match sets, labels with
-        s :: st, l :: lt ->
-          List.iter2 (record_alias s l) ptsets lbls;
-          check_alias st lt
-      | [], [] -> ()
-      | _ -> die "check_alias"
-  in
-    check_alias ptsets lbls;
-    (!naive_count, !smart_count)
-
-
-(** an interface for extracting abstract locations from this analysis *)
-
-type absloc = label
-
-let absloc_of_lvalue (l : lvalue) : absloc = l.l
-let absloc_eq (a1, a2) = smart_alias_query a1 a2
-let absloc_print_name = ref true
-let d_absloc () (p : absloc) =
-  let a = find p in
-    if !absloc_print_name then Pretty.dprintf "%s" a.l_name
-    else Pretty.dprintf "%d" a.l_stamp
-
-let phonyAddrOf (lv : lvalue) : lvalue =
-  make_lval (fresh_label true, address lv)
-
-(* transitive closure of points to, starting from l *)
-let rec tauPointsTo (l : tau) : absloc list =
-  match find l with
-      Var _ -> []
-    | Ref r -> r.rl :: tauPointsTo r.points_to
-    | _ -> []
-
-let rec absloc_points_to (l : lvalue) : absloc list =
-  tauPointsTo l.contents
-
-
-(** The following definitions are only introduced for the
-    compatability with Olf. *)
-
-exception UnknownLocation
-
-let finished_constraints () = ()
-let apply_undefined (_ : tau list) = (fresh_var true, 0)
-let assign_undefined (_ : lvalue) = ()
-
-let absloc_epoints_to = tauPointsTo
diff --git a/cil/src/ext/pta/golf.mli b/cil/src/ext/pta/golf.mli
deleted file mode 100644
index 569855c59..000000000
--- a/cil/src/ext/pta/golf.mli
+++ /dev/null
@@ -1,83 +0,0 @@
-(*
- *
- * Copyright (c) 2001-2002,
- *  John Kodumal        <jkodumal@eecs.berkeley.edu>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. The names of the contributors may not be used to endorse or promote
- * products derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
- * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
- * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- *)
-type lvalue
-type tau
-type absloc
-
-(* only for compatability with Olf *)
-exception UnknownLocation
-
-val debug : bool ref
-val debug_constraints : bool ref
-val debug_aliases : bool ref
-val smart_aliases : bool ref
-val finished_constraints : unit -> unit (* only for compatability with Olf *)
-val print_constraints : bool ref
-val no_flow : bool ref
-val no_sub : bool ref
-val analyze_mono : bool ref
-val solve_constraints : unit -> unit
-val rvalue : lvalue -> tau
-val deref : tau -> lvalue
-val join : tau -> tau -> tau
-val join_inits : tau list -> tau
-val address : lvalue -> tau
-val instantiate : lvalue -> int -> lvalue
-val assign : lvalue -> tau -> unit
-val assign_ret : int -> lvalue -> tau -> unit
-val apply : tau -> tau list -> (tau * int)
-val apply_undefined : tau list -> (tau * int) (* only for compatability with Olf *)
-val assign_undefined : lvalue -> unit (* only for compatability with Olf *)
-val make_function :  string -> lvalue list -> tau -> tau
-val make_lvalue : bool -> string -> (Cil.varinfo option) -> lvalue
-val bottom : unit -> tau
-val return : tau -> tau -> unit
-val make_fresh : string -> tau
-val points_to_names : lvalue -> string list
-val points_to : lvalue -> Cil.varinfo list
-val epoints_to : tau -> Cil.varinfo list
-val string_of_lvalue : lvalue -> string
-val global_lvalue : lvalue -> bool
-val alias_query : bool -> lvalue list -> int * int
-val alias_frequency : (lvalue * bool) list -> int * int
-
-val may_alias : tau -> tau -> bool
-
-val absloc_points_to : lvalue -> absloc list
-val absloc_epoints_to : tau -> absloc list
-val absloc_of_lvalue : lvalue -> absloc
-val absloc_eq : (absloc * absloc) -> bool
-val d_absloc : unit -> absloc -> Pretty.doc
-val phonyAddrOf : lvalue -> lvalue
diff --git a/cil/src/ext/pta/olf.ml b/cil/src/ext/pta/olf.ml
deleted file mode 100644
index 0d7700287..000000000
--- a/cil/src/ext/pta/olf.ml
+++ /dev/null
@@ -1,1108 +0,0 @@
-(*
- *
- * Copyright (c) 2001-2002,
- *  John Kodumal        <jkodumal@eecs.berkeley.edu>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. The names of the contributors may not be used to endorse or promote
- * products derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
- * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
- * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- *)
-
-(***********************************************************************)
-(*                                                                     *)
-(* Exceptions                                                          *)
-(*                                                                     *)
-(***********************************************************************)
-
-exception Inconsistent (* raised if constraint system is inconsistent *)
-exception WellFormed   (* raised if types are not well-formed *)
-exception NoContents
-exception APFound      (* raised if an alias pair is found, a control
-                          flow exception *)
-exception ReachedTop   (* raised if top (from an undefined function)
-                          flows to a c_absloc during the flow step *)
-exception UnknownLocation
-
-let solve_constraints () = () (* only for compatability with Golf *)
-
-open Cil
-
-module U = Uref
-module S = Setp
-module H = Hashtbl
-module Q = Queue
-
-(** Generic bounds *)
-type 'a bound = {info : 'a U.uref}
-
-module Bound =
-struct
-  type 'a t = 'a bound
-  let compare (x : 'a t) (y : 'a t) =
-    Pervasives.compare (U.deref x.info) (U.deref y.info)
-end
-
-module B = S.Make (Bound)
-
-type 'a boundset = 'a B.t
-
-(** Abslocs, which identify elements in points-to sets *)
-(** jk : I'd prefer to make this an 'a absloc and specialize it to
-    varinfo for use with the Cil frontend, but for now, this will do *)
-type absloc = int * string * Cil.varinfo option
-
-module Absloc =
-struct
-  type t = absloc
-  let compare (xid, _, _) (yid, _, _) = xid - yid
-end
-
-module C = Set.Make (Absloc)
-
-(** Sets of abslocs. Set union is used when two c_abslocs containing
-    absloc sets are unified *)
-type abslocset = C.t
-
-let d_absloc () (a: absloc) : Pretty.doc =
-  let i,s,_ = a in
-  Pretty.dprintf "<%d, %s>" i s
-
-type c_abslocinfo = {
-  mutable l_name: string;   (** name of the location *)
-  loc : absloc;
-  l_stamp : int;
-  mutable l_top : bool;
-  mutable aliases : abslocset;
-  mutable lbounds : c_abslocinfo boundset;
-  mutable ubounds : c_abslocinfo boundset;
-  mutable flow_computed : bool
-}
-and c_absloc = c_abslocinfo U.uref
-
-(** The type of lvalues. *)
-type lvalue = {
-  l: c_absloc;
-  contents: tau
-}
-and vinfo = {
-  v_stamp : int;
-  v_name : string;
-  mutable v_top : bool;
-  mutable v_lbounds : tinfo boundset;
-  mutable v_ubounds : tinfo boundset
-}
-and rinfo = {
-  r_stamp : int;
-  rl : c_absloc;
-  points_to : tau
-}
-and finfo = {
-  f_stamp : int;
-  fl : c_absloc;
-  ret : tau;
-  mutable args : tau list
-}
-and pinfo = {
-  p_stamp : int;
-  ptr : tau;
-  lam : tau
-}
-and tinfo =
-    Var of vinfo
-  | Ref of rinfo
-  | Fun of finfo
-  | Pair of pinfo
-and tau = tinfo U.uref
-
-type tconstraint =
-    Unification of tau * tau
-  | Leq of tau * tau
-
-(** Association lists, used for printing recursive types. The first
-    element is a type that has been visited. The second element is the
-    string representation of that type (so far). If the string option is
-    set, then this type occurs within itself, and is associated with the
-    recursive var name stored in the option. When walking a type, add it
-    to an association list.
-
-    Example: suppose we have the constraint 'a = ref('a). The type is
-    unified via cyclic unification, and would loop infinitely if we
-    attempted to print it. What we want to do is print the type u
-    rv. ref(rv). This is accomplished in the following manner:
-
-    -- ref('a) is visited. It is not in the association list, so it is
-    added and the string "ref(" is stored in the second element. We
-    recurse to print the first argument of the constructor.
-
-    -- In the recursive call, we see that 'a (or ref('a)) is already
-    in the association list, so the type is recursive. We check the
-    string option, which is None, meaning that this is the first
-    recurrence of the type. We create a new recursive variable, rv and
-    set the string option to 'rv. Next, we prepend u rv. to the string
-    representation we have seen before, "ref(", and return "rv" as the
-    string representation of this type.
-
-    -- The string so far is "u rv.ref(". The recursive call returns,
-    and we complete the type by printing the result of the call, "rv",
-    and ")"
-
-    In a type where the recursive variable appears twice, e.g. 'a =
-    pair('a,'a), the second time we hit 'a, the string option will be
-    set, so we know to reuse the same recursive variable name.
-*)
-type association = tau * string ref * string option ref
-
-(** The current state of the solver engine either adding more
-    constraints, or finished adding constraints and querying graph *)
-type state =
-    AddingConstraints
-  | FinishedConstraints
-
-(***********************************************************************)
-(*                                                                     *)
-(* Global Variables                                                    *)
-(*                                                                     *)
-(***********************************************************************)
-
-(** A count of the constraints introduced from the AST. Used for
-    debugging. *)
-let toplev_count = ref 0
-
-let solver_state : state ref = ref AddingConstraints
-
-(** Print the instantiations constraints. *)
-let print_constraints : bool ref = ref false
-
-(** If true, print all constraints (including induced) and show
-    additional debug output. *)
-let debug = ref false
-
-(** Just debug all the constraints (including induced) *)
-let debug_constraints = ref false
-
-(** Debug the flow step *)
-let debug_flow_step = ref false
-
-(** Compatibility with GOLF *)
-let debug_aliases = ref false
-let smart_aliases = ref false
-let no_flow = ref false
-let analyze_mono = ref false
-
-(** If true, disable subtyping (unification at all levels) *)
-let no_sub = ref false
-
-(** A list of equality constraints. *)
-let eq_worklist : tconstraint Q.t = Q.create ()
-
-(** A list of leq constraints. *)
-let leq_worklist : tconstraint Q.t = Q.create ()
-
-(** A hashtable containing stamp pairs of c_abslocs that must be aliased. *)
-let cached_aliases : (int * int, unit) H.t = H.create 64
-
-(** A hashtable mapping pairs of tau's to their join node. *)
-let join_cache : (int * int, tau) H.t = H.create 64
-
-(** *)
-let label_prefix = "l_"
-
-
-(***********************************************************************)
-(*                                                                     *)
-(* Utility Functions                                                   *)
-(*                                                                     *)
-(***********************************************************************)
-
-let starts_with s p =
-  let n = String.length p in
-    if String.length s < n then false
-    else String.sub s 0 n = p
-
-
-let die s =
-  Printf.printf "*******\nAssertion failed: %s\n*******\n" s;
-  assert false
-
-let insist b s =
-  if not b then die s else ()
-
-
-let can_add_constraints () =
-  !solver_state = AddingConstraints
-
-let can_query_graph () =
-  !solver_state = FinishedConstraints
-
-let finished_constraints () =
-  insist (!solver_state = AddingConstraints) "inconsistent states";
-  solver_state := FinishedConstraints
-
-let find = U.deref
-
-(** return the prefix of the list up to and including the first
-    element satisfying p. if no element satisfies p, return the empty
-    list *)
-let rec keep_until p l =
-  match l with
-      [] -> []
-    | x :: xs -> if p x then [x] else x :: keep_until p xs
-
-
-(** Generate a unique integer. *)
-let fresh_index : (unit -> int) =
-  let counter = ref 0 in
-    fun () ->
-      incr counter;
-      !counter
-
-let fresh_stamp : (unit -> int) =
-  let stamp = ref 0 in
-    fun () ->
-      incr stamp;
-      !stamp
-
-(** Return a unique integer representation of a tau *)
-let get_stamp (t : tau) : int =
-  match find t with
-      Var v -> v.v_stamp
-    | Ref r -> r.r_stamp
-    | Pair p -> p.p_stamp
-    | Fun f -> f.f_stamp
-
-(** Consistency checks for inferred types *)
-let  pair_or_var (t : tau) =
-  match find t with
-      Pair _ -> true
-    | Var _ -> true
-    | _ -> false
-
-let ref_or_var (t : tau) =
-   match find t with
-       Ref _ -> true
-     | Var _ -> true
-     | _ -> false
-
-let fun_or_var (t : tau) =
-  match find t with
-      Fun _ -> true
-    | Var _ -> true
-    |  _ -> false
-
-
-(** Apply [f] structurally down [t]. Guaranteed to terminate, even if [t]
-    is recursive *)
-let iter_tau f t =
-  let visited : (int, tau) H.t = H.create 4 in
-  let rec iter_tau' t =
-    if H.mem visited (get_stamp t) then () else
-      begin
-        f t;
-        H.add visited (get_stamp t) t;
-        match find t with
-            Pair p ->
-              iter_tau' p.ptr;
-              iter_tau' p.lam
-          | Fun f ->
-              List.iter iter_tau' f.args;
-              iter_tau' f.ret;
-          | Ref r -> iter_tau' r.points_to
-          | _ -> ()
-      end
-  in
-    iter_tau' t
-
-let equal_absloc = function
-    (i, _, _), (i', _, _) -> i = i'
-
-let equal_c_absloc l l' =
-  (find l).l_stamp = (find l').l_stamp
-
-let equal_tau (t : tau) (t' : tau) =
-  get_stamp t = get_stamp t'
-
-let top_c_absloc l =
-  (find l).l_top
-
-let get_flow_computed l =
-  (find l).flow_computed
-
-let set_flow_computed l =
-  (find l).flow_computed <- true
-
-let rec top_tau (t : tau) =
-  match find t with
-      Pair p -> top_tau p.ptr || top_tau p.lam
-    | Ref r -> top_c_absloc r.rl
-    | Fun f -> top_c_absloc f.fl
-    | Var v -> v.v_top
-
-let get_c_absloc_stamp (l : c_absloc) : int =
-  (find l).l_stamp
-
-let set_top_c_absloc (l : c_absloc) (b: bool) : unit =
-  (find l).l_top <- b
-
-let get_aliases (l : c_absloc) =
-  if top_c_absloc l then raise ReachedTop
-  else (find l).aliases
-
-(***********************************************************************)
-(*                                                                     *)
-(* Printing Functions                                                  *)
-(*                                                                     *)
-(***********************************************************************)
-
-(** Convert a c_absloc to a string, short representation *)
-let string_of_c_absloc (l : c_absloc) : string =
-  "\"" ^
-    (find l).l_name ^
-    if top_c_absloc l then "(top)" else "" ^
-      "\""
-
-(** Return true if the element [e] is present in the association list,
-    according to uref equality *)
-let rec assoc_list_mem (e : tau) (l : association list) =
-  match l with
-      [] -> None
-    | (h, s, so) :: t ->
-        if U.equal (h, e) then Some (s, so)
-        else assoc_list_mem e t
-
-(** Given a tau, create a unique recursive variable name. This should
-    always return the same name for a given tau *)
-let fresh_recvar_name (t : tau) : string =
-  match find t with
-      Pair p -> "rvp" ^ string_of_int p.p_stamp
-    | Ref r -> "rvr" ^ string_of_int r.r_stamp
-    | Fun f -> "rvf" ^ string_of_int f.f_stamp
-    | _ -> die "fresh_recvar_name"
-
-
-(** Return a string representation of a tau, using association lists. *)
-let string_of_tau (t : tau) : string =
-  let tau_map : association list ref = ref [] in
-  let rec string_of_tau' t =
-    match assoc_list_mem t !tau_map with
-        Some (s, so) -> (* recursive type. see if a var name has been set *)
-          begin
-            match !so with
-                None ->
-                  let rv = fresh_recvar_name t in
-                    s := "u " ^ rv ^ "." ^ !s;
-                    so := Some rv;
-                    rv
-              | Some rv -> rv
-          end
-      | None -> (* type's not recursive. Add it to the assoc list and cont. *)
-          let s = ref ""
-          and so : string option ref = ref None in
-            tau_map := (t, s, so) :: !tau_map;
-            begin
-              match find t with
-                  Var v -> s := v.v_name
-                | Pair p ->
-                    insist (ref_or_var p.ptr) "wellformed";
-                    insist (fun_or_var p.lam) "wellformed";
-                    s := "{";
-                    s := !s ^ string_of_tau' p.ptr;
-                    s := !s ^ ",";
-                    s := !s ^ string_of_tau' p.lam;
-                    s := !s ^ "}"
-                | Ref r ->
-                    insist (pair_or_var r.points_to) "wellformed";
-                    s := "ref(|";
-                    s := !s ^ string_of_c_absloc r.rl;
-                    s := !s ^ "|,";
-                    s := !s ^ string_of_tau' r.points_to;
-                    s := !s ^ ")"
-                | Fun f ->
-                    let rec string_of_args = function
-                        [] -> ()
-                      | h :: [] ->
-                          insist (pair_or_var h) "wellformed";
-                          s := !s ^ string_of_tau' h
-                      | h :: t ->
-                          insist (pair_or_var h) "wellformed";
-                          s := !s ^ string_of_tau' h ^ ",";
-                          string_of_args t
-                    in
-                      insist (pair_or_var f.ret) "wellformed";
-                      s := "fun(|";
-                      s := !s ^ string_of_c_absloc f.fl;
-                      s := !s ^ "|,";
-                      s := !s ^ "<";
-                      if List.length f.args > 0 then string_of_args f.args
-                      else s := !s ^ "void";
-                      s := !s ^ ">,";
-                      s := !s ^ string_of_tau' f.ret;
-                      s := !s ^ ")"
-            end;
-            tau_map := List.tl !tau_map;
-            !s
-  in
-    string_of_tau' t
-
-(** Convert an lvalue to a string *)
-let rec string_of_lvalue (lv : lvalue) : string =
-  let contents = string_of_tau lv.contents
-  and l = string_of_c_absloc lv.l
-  in
-    insist (pair_or_var lv.contents) "inconsistency at string_of_lvalue";
-    (* do a consistency check *)
-    Printf.sprintf "[%s]^(%s)" contents l
-
-(** Print a list of tau elements, comma separated *)
-let rec print_tau_list (l : tau list) : unit =
-  let rec print_t_strings = function
-      [] -> ()
-    | h :: [] -> print_endline h
-    | h :: t ->
-        print_string h;
-        print_string ", ";
-        print_t_strings t
-  in
-    print_t_strings (List.map string_of_tau l)
-
-let print_constraint (c : tconstraint) =
-  match c with
-      Unification (t, t') ->
-        let lhs = string_of_tau t in
-        let rhs = string_of_tau t' in
-          Printf.printf "%s == %s\n" lhs rhs
-    | Leq (t, t') ->
-        let lhs = string_of_tau t in
-        let rhs = string_of_tau t' in
-          Printf.printf "%s <= %s\n" lhs  rhs
-
-(***********************************************************************)
-(*                                                                     *)
-(* Type Operations -- these do not create any constraints              *)
-(*                                                                     *)
-(***********************************************************************)
-
-(** Create an lvalue with c_absloc [lbl] and tau contents [t]. *)
-let make_lval (loc, t : c_absloc * tau) : lvalue =
-  {l = loc; contents = t}
-
-let make_c_absloc_int (is_top : bool) (name : string) (vio : Cil.varinfo option) : c_absloc =
-  let my_absloc = (fresh_index (), name, vio) in
-  let locc = C.add my_absloc C.empty
-  in
-    U.uref {
-      l_name = name;
-      l_top = is_top;
-      l_stamp = fresh_stamp ();
-      loc = my_absloc;
-      aliases = locc;
-      ubounds = B.empty;
-      lbounds = B.empty;
-      flow_computed = false
-    }
-
-(** Create a new c_absloc with name [name]. Also adds a fresh absloc
-    with name [name] to this c_absloc's aliases set. *)
-let make_c_absloc (is_top : bool) (name : string) (vio : Cil.varinfo option) =
-  make_c_absloc_int is_top name vio
-
-let fresh_c_absloc (is_top : bool) : c_absloc =
-  let index = fresh_index () in
-    make_c_absloc_int is_top (label_prefix ^ string_of_int index) None
-
-(** Create a fresh bound (edge in the constraint graph). *)
-let make_bound (a : c_absloc) : c_abslocinfo bound =
-  {info = a}
-
-let make_tau_bound (t : tau) : tinfo bound =
-  {info = t}
-
-(** Create a fresh named variable with name '[name]. *)
-let make_var (is_top : bool) (name : string) : tau =
-  U.uref (Var {v_name = ("'" ^ name);
-               v_top = is_top;
-               v_stamp = fresh_index ();
-               v_lbounds = B.empty;
-               v_ubounds = B.empty})
-
-let fresh_var  (is_top : bool) : tau =
-  make_var is_top ("fi" ^ string_of_int (fresh_index ()))
-
-(** Create a fresh unnamed variable (name will be 'fi). *)
-let fresh_var_i (is_top : bool) : tau =
-  make_var is_top ("fi" ^ string_of_int (fresh_index ()))
-
-(** Create a Fun constructor. *)
-let make_fun (lbl, a, r : c_absloc * (tau list) * tau) : tau =
-  U.uref (Fun {fl = lbl;
-               f_stamp = fresh_index ();
-               args = a;
-               ret = r})
-
-(** Create a Ref constructor. *)
-let make_ref (lbl, pt : c_absloc * tau) : tau =
-  U.uref (Ref {rl = lbl;
-               r_stamp = fresh_index ();
-               points_to = pt})
-
-(** Create a Pair constructor. *)
-let make_pair (p, f : tau * tau) : tau =
-  U.uref (Pair {ptr = p;
-                p_stamp = fresh_index ();
-                lam = f})
-
-(** Copy the toplevel constructor of [t], putting fresh variables in each
-    argement of the constructor. *)
-let copy_toplevel (t : tau) : tau =
-  match find t with
-      Pair _ -> make_pair (fresh_var_i false, fresh_var_i false)
-    | Ref  _ -> make_ref (fresh_c_absloc false, fresh_var_i false)
-    | Fun f ->
-        make_fun (fresh_c_absloc false,
-                  List.map (fun _ -> fresh_var_i false) f.args,
-                  fresh_var_i false)
-    | _ -> die "copy_toplevel"
-
-let has_same_structure (t : tau) (t' : tau) =
-  match find t, find t' with
-      Pair _, Pair _ -> true
-    | Ref _, Ref _ -> true
-    | Fun _, Fun _ -> true
-    | Var _, Var _ -> true
-    | _ -> false
-
-let pad_args (fi, tlr : finfo * tau list ref) : unit =
-  let padding = List.length fi.args - List.length !tlr
-  in
-    if padding == 0 then ()
-    else
-      if padding > 0 then
-        for i = 1 to padding do
-          tlr := !tlr @ [fresh_var false]
-        done
-      else
-        for i = 1 to -padding do
-          fi.args <- fi.args @ [fresh_var false]
-        done
-
-(***********************************************************************)
-(*                                                                     *)
-(* Constraint Generation/ Resolution                                   *)
-(*                                                                     *)
-(***********************************************************************)
-
-let set_top (b : bool) (t : tau) : unit =
-  let set_top_down t =
-    match find t with
-        Var v -> v.v_top <- b
-      | Ref r -> set_top_c_absloc r.rl b
-      | Fun f -> set_top_c_absloc f.fl b
-      | Pair p -> ()
-  in
-    iter_tau set_top_down t
-
-let rec unify_int (t, t' : tau * tau) : unit =
-  if equal_tau t t' then ()
-  else
-    let ti, ti' = find t, find t' in
-      U.unify combine (t, t');
-      match ti, ti' with
-          Var v, Var v' ->
-            set_top (v.v_top || v'.v_top) t';
-            merge_v_lbounds (v, v');
-            merge_v_ubounds (v, v')
-        | Var v, _ ->
-            set_top (v.v_top || top_tau t') t';
-            notify_vlbounds t v;
-            notify_vubounds t v
-        | _, Var v ->
-            set_top (v.v_top || top_tau t) t;
-            notify_vlbounds t' v;
-            notify_vubounds t' v
-        | Ref r, Ref r' -> unify_ref (r, r')
-        | Fun f, Fun f' -> unify_fun (f, f')
-        | Pair p, Pair p' -> unify_pair (p, p')
-        | _ -> raise Inconsistent
-and notify_vlbounds (t : tau) (vi : vinfo) : unit =
-  let notify bounds =
-    List.iter
-      (fun b ->
-         add_constraint (Unification (b.info, copy_toplevel t));
-         add_constraint (Leq (b.info, t)))
-      bounds
-  in
-    notify (B.elements vi.v_lbounds)
-and notify_vubounds (t : tau) (vi : vinfo) : unit =
-  let notify bounds =
-    List.iter
-      (fun b ->
-         add_constraint (Unification (b.info, copy_toplevel t));
-         add_constraint (Leq (t, b.info)))
-      bounds
-  in
-    notify (B.elements vi.v_ubounds)
-and unify_ref (ri, ri' : rinfo * rinfo) : unit =
-  unify_c_abslocs (ri.rl, ri'.rl);
-  add_constraint (Unification (ri.points_to, ri'.points_to))
-and unify_fun (fi, fi' : finfo * finfo) : unit =
-  let rec union_args  = function
-      _, [] -> false
-    | [], _ -> true
-    | h :: t, h' :: t' ->
-        add_constraint (Unification (h, h'));
-        union_args(t, t')
-  in
-    unify_c_abslocs (fi.fl, fi'.fl);
-    add_constraint (Unification (fi.ret, fi'.ret));
-    if union_args (fi.args, fi'.args) then fi.args <- fi'.args
-and unify_pair (pi, pi' : pinfo * pinfo) : unit =
-  add_constraint (Unification (pi.ptr, pi'.ptr));
-  add_constraint (Unification (pi.lam, pi'.lam))
-and unify_c_abslocs (l, l' : c_absloc * c_absloc) : unit =
-  let pick_name (li, li' : c_abslocinfo * c_abslocinfo) =
-    if starts_with li.l_name label_prefix then li.l_name <- li'.l_name
-    else () in
-  let combine_c_absloc (li, li' : c_abslocinfo * c_abslocinfo) : c_abslocinfo =
-    pick_name (li, li');
-    li.l_top <- li.l_top || li'.l_top;
-    li.aliases <- C.union li.aliases li'.aliases;
-    li.ubounds <- B.union li.ubounds li'.ubounds;
-    li.lbounds <- B.union li.lbounds li'.lbounds;
-    li
-  in
-    if !debug_constraints then
-      Printf.printf
-        "%s == %s\n"
-        (string_of_c_absloc l)
-        (string_of_c_absloc l');
-    U.unify combine_c_absloc (l, l')
-and merge_v_lbounds (vi, vi' : vinfo * vinfo) : unit =
-  vi'.v_lbounds <- B.union vi.v_lbounds vi'.v_lbounds;
-and merge_v_ubounds (vi, vi' : vinfo * vinfo) : unit =
-  vi'.v_ubounds <- B.union vi.v_ubounds vi'.v_ubounds;
-(** Pick the representative info for two tinfo's. This function
-    prefers the first argument when both arguments are the same
-    structure, but when one type is a structure and the other is a
-    var, it picks the structure.  All other actions (e.g., updating
-    the info) is done in unify_int *)
-and combine (ti, ti' : tinfo * tinfo) : tinfo =
-  match ti, ti' with
-      Var _, _ -> ti'
-    | _, _ -> ti
-and leq_int (t, t') : unit =
-  if equal_tau t t' then ()
-  else
-    let ti, ti' = find t, find t' in
-      match ti, ti' with
-          Var v, Var v' ->
-            v.v_ubounds <- B.add (make_tau_bound t') v.v_ubounds;
-            v'.v_lbounds <- B.add (make_tau_bound t) v'.v_lbounds
-        | Var v, _ ->
-            add_constraint (Unification (t, copy_toplevel t'));
-            add_constraint (Leq (t, t'))
-        | _, Var v ->
-            add_constraint (Unification (t', copy_toplevel t));
-            add_constraint (Leq (t, t'))
-        | Ref r, Ref r' -> leq_ref (r, r')
-        | Fun f, Fun f' ->
-            (* TODO: check, why not do subtyping here? *)
-            add_constraint (Unification (t, t'))
-        | Pair pr, Pair pr' ->
-            add_constraint (Leq (pr.ptr, pr'.ptr));
-            add_constraint (Leq (pr.lam, pr'.lam))
-        | _ -> raise Inconsistent
-and leq_ref (ri, ri') : unit =
-  leq_c_absloc (ri.rl, ri'.rl);
-  add_constraint (Unification (ri.points_to, ri'.points_to))
-and leq_c_absloc (l, l') : unit =
-  let li, li' = find l, find l' in
-    if !debug_constraints then
-      Printf.printf
-        "%s <= %s\n"
-        (string_of_c_absloc l)
-        (string_of_c_absloc l');
-    if U.equal (l, l') then ()
-    else
-      begin
-        li.ubounds <- B.add (make_bound l') li.ubounds;
-        li'.lbounds <- B.add (make_bound l) li'.lbounds
-      end
-and add_constraint_int (c : tconstraint) (toplev : bool) =
-  if !debug_constraints && toplev then
-    begin
-      Printf.printf "%d:>" !toplev_count;
-      print_constraint c;
-      incr toplev_count
-    end
-  else
-    if !debug_constraints then print_constraint c else ();
-  insist (can_add_constraints ()) 
-    "can't add constraints after compute_results is called";
-  begin
-    match c with
-        Unification _ -> Q.add c eq_worklist
-      | Leq _ -> Q.add c leq_worklist
-  end;
-  solve_constraints () (* solve online *)
-and add_constraint (c : tconstraint) =
-  add_constraint_int c false
-and add_toplev_constraint (c : tconstraint) =
-  if !print_constraints && not !debug_constraints then
-    begin
-      Printf.printf "%d:>" !toplev_count;
-      incr toplev_count;
-      print_constraint c
-    end
-  else ();
-  add_constraint_int c true
-and fetch_constraint () : tconstraint option =
-  try Some (Q.take eq_worklist)
-  with Q.Empty ->
-    begin
-      try Some (Q.take leq_worklist)
-      with Q.Empty -> None
-    end
-(** The main solver loop. *)
-and solve_constraints () : unit =
-  match fetch_constraint () with
-      None -> ()
-    | Some c ->
-        begin
-          match c with
-              Unification (t, t') -> unify_int (t, t')
-            | Leq (t, t') ->
-                if !no_sub then unify_int (t, t')
-                else leq_int (t, t')
-        end;
-        solve_constraints ()
-
-(***********************************************************************)
-(*                                                                     *)
-(* Interface Functions                                                 *)
-(*                                                                     *)
-(***********************************************************************)
-
-(** Return the contents of the lvalue. *)
-let rvalue (lv : lvalue) : tau =
-  lv.contents
-
-(** Dereference the rvalue. If it does not have enough structure to
-    support the operation, then the correct structure is added via new
-    unification constraints. *)
-let rec deref (t : tau) : lvalue =
-  match find t with
-      Pair p ->
-        begin
-          match find p.ptr with
-            | Var _ ->
-                let is_top = top_tau p.ptr in
-                let points_to = fresh_var is_top in
-                let l = fresh_c_absloc is_top in
-                let r = make_ref (l, points_to)
-                in
-                  add_toplev_constraint (Unification (p.ptr, r));
-                  make_lval (l, points_to)
-            | Ref r -> make_lval (r.rl, r.points_to)
-            | _ -> raise WellFormed
-        end
-    | Var v ->
-        let is_top = top_tau t in
-          add_toplev_constraint
-            (Unification (t, make_pair (fresh_var is_top, fresh_var is_top)));
-          deref t
-    | _ -> raise WellFormed
-
-
-(** Form the union of [t] and [t'], if it doesn't exist already. *)
-let join (t : tau) (t' : tau) : tau =
-  let s, s' = get_stamp t, get_stamp t' in
-    try H.find join_cache (s, s')
-    with Not_found ->
-      let t'' = fresh_var false in
-        add_toplev_constraint (Leq (t, t''));
-        add_toplev_constraint (Leq (t', t''));
-        H.add join_cache (s, s') t'';
-        t''
-
-(** Form the union of a list [tl], expected to be the initializers of some
-  structure or array type. *)
-let join_inits (tl : tau list) : tau =
-  let t' = fresh_var false in
-    List.iter (function t -> add_toplev_constraint (Leq (t, t'))) tl;
-    t'
-
-(** Take the address of an lvalue. Does not add constraints. *)
-let address (lv  : lvalue) : tau =
-  make_pair (make_ref (lv.l, lv.contents), fresh_var false )
-
-(** No instantiation in this analysis *)
-let instantiate (lv : lvalue) (i : int) : lvalue =
-  lv
-
-(** Constraint generated from assigning [t] to [lv]. *)
-let assign (lv : lvalue) (t : tau) : unit =
-  add_toplev_constraint (Leq (t, lv.contents))
-
-let assign_ret (i : int) (lv : lvalue) (t : tau) : unit =
-  add_toplev_constraint (Leq (t, lv.contents))
-
-(** Project out the first (ref) component or a pair. If the argument
-    [t] has no discovered structure, raise NoContents. *)
-let proj_ref (t : tau) : tau =
-  match find t with
-      Pair p -> p.ptr
-    | Var v -> raise NoContents
-    | _ ->  raise WellFormed
-
-(* Project out the second (fun) component of a pair. If the argument
-   [t] has no discovered structure, create it on the fly by adding
-   constraints. *)
-let proj_fun (t : tau) : tau =
-  match find t with
-      Pair p -> p.lam
-    | Var v ->
-        let p, f = fresh_var false, fresh_var false in
-          add_toplev_constraint (Unification (t, make_pair (p, f)));
-          f
-    | _ -> raise WellFormed
-
-let get_args (t : tau) : tau list =
-  match find t with
-      Fun f -> f.args
-    | _ -> raise WellFormed
-
-let get_finfo (t : tau) : finfo =
-  match find t with
-      Fun f -> f
-    | _ -> raise WellFormed
-
-(** Function type [t] is applied to the arguments [actuals]. Unifies
-    the actuals with the formals of [t]. If no functions have been
-    discovered for [t] yet, create a fresh one and unify it with
-    t. The result is the return value of the function plus the index
-    of this application site.
-
-    For this analysis, the application site is always 0 *)
-let apply (t : tau) (al : tau list) : (tau * int) =
-  let f = proj_fun t in
-  let actuals = ref al in
-  let fi, ret =
-    match find f with
-        Fun fi -> fi, fi.ret
-      | Var v ->
-          let new_l, new_ret, new_args =
-            fresh_c_absloc false,
-            fresh_var false,
-            List.map (function _ -> fresh_var false) !actuals
-          in
-          let new_fun = make_fun (new_l, new_args, new_ret) in
-            add_toplev_constraint (Unification (new_fun, f));
-            (get_finfo new_fun, new_ret)
-      | _ -> raise WellFormed
-  in
-    pad_args (fi, actuals);
-    List.iter2
-      (fun actual -> fun formal ->
-         add_toplev_constraint (Leq (actual, formal)))
-      !actuals fi.args;
-    (ret, 0)
-
-let make_undefined_lvalue () =
-  make_lval (make_c_absloc false "undefined" None,
-             make_var true "undefined")
-
-let make_undefined_rvalue () =
-  make_var true "undefined"
-
-let assign_undefined (lv : lvalue) : unit =
-  assign lv (make_undefined_rvalue ())
-
-let apply_undefined (al : tau list) : (tau * int) =
-    List.iter
-      (fun actual ->  assign (make_undefined_lvalue ()) actual)
-      al;
-   (fresh_var true, 0)
-
-(** Create a new function type with name [name], list of formal
-    arguments [formals], and return value [ret]. Adds no constraints. *)
-let make_function (name : string) (formals : lvalue list) (ret : tau) : tau =
-  let f = make_fun (make_c_absloc false name None,
-                    List.map (fun x -> rvalue x) formals,
-                    ret)
-  in
-    make_pair (fresh_var false, f)
-
-(** Create an lvalue. *)
-let make_lvalue (b : bool ) (name : string) (vio : Cil.varinfo option) =
-  make_lval (make_c_absloc false name vio,
-             make_var false name)
-
-(** Create a fresh named variable. *)
-let make_fresh (name : string) : tau =
-  make_var false name
-
-(** The default type for abslocs. *)
-let bottom () : tau =
-  make_var false "bottom"
-
-(** Unify the result of a function with its return value. *)
-let return (t : tau) (t' : tau) =
-  add_toplev_constraint (Leq (t', t))
-
-(***********************************************************************)
-(*                                                                     *)
-(* Query/Extract Solutions                                             *)
-(*                                                                     *)
-(***********************************************************************)
-
-module IntHash = Hashtbl.Make (struct
-                                 type t = int
-                                 let equal x y = x = y
-                                 let hash x = x
-                               end)
-
-(** todo : reached_top !! *)
-let collect_ptset_fast (l : c_absloc) : abslocset =
-  let onpath : unit IntHash.t = IntHash.create 101 in
-  let path : c_absloc list ref = ref [] in
-  let compute_path (i : int) =
-    keep_until (fun l -> i = get_c_absloc_stamp l) !path in
-  let collapse_cycle (cycle : c_absloc list) =
-    match cycle with
-        l :: ls ->
-          List.iter (fun l' -> unify_c_abslocs (l, l')) ls;
-          C.empty
-      | [] -> die "collapse cycle" in
-  let rec flow_step (l : c_absloc) : abslocset =
-    let stamp = get_c_absloc_stamp l in
-      if IntHash.mem onpath stamp then (* already seen *)
-        collapse_cycle (compute_path stamp)
-      else
-        let li = find l in
-          IntHash.add onpath stamp ();
-          path := l :: !path;
-          B.iter
-            (fun lb -> li.aliases <- C.union li.aliases (flow_step lb.info))
-            li.lbounds;
-          path := List.tl !path;
-          IntHash.remove onpath stamp;
-          li.aliases
-  in
-    insist (can_query_graph ()) "collect_ptset_fast can't query graph";
-    if get_flow_computed l then get_aliases l
-    else
-      begin
-        set_flow_computed l;
-        flow_step l
-      end
-
-(** this is a quadratic flow step. keep it for debugging the fast
-    version above. *)
-let collect_ptset_slow (l : c_absloc) : abslocset =
-  let onpath : unit IntHash.t = IntHash.create 101 in
-  let rec flow_step (l : c_absloc) : abslocset =
-    if top_c_absloc l then raise ReachedTop
-    else
-      let stamp = get_c_absloc_stamp l in
-        if IntHash.mem onpath stamp then C.empty
-        else
-          let li = find l in
-            IntHash.add onpath stamp ();
-            B.iter
-              (fun lb -> li.aliases <- C.union li.aliases (flow_step lb.info))
-              li.lbounds;
-            li.aliases
-  in
-    insist (can_query_graph ()) "collect_ptset_slow can't query graph";
-    if get_flow_computed l then get_aliases l
-    else
-      begin
-        set_flow_computed l;
-        flow_step l
-      end
-
-let collect_ptset =
-  collect_ptset_slow
-  (* if !debug_flow_step then collect_ptset_slow
-     else collect_ptset_fast *)
-
-let may_alias (t1 : tau) (t2 : tau) : bool =
-  let get_l (t : tau) : c_absloc =
-    match find (proj_ref t) with
-        Ref r -> r.rl
-      | Var v -> raise NoContents
-      | _ ->  raise WellFormed
-  in
-    try
-      let l1 = get_l t1
-      and l2 = get_l t2 in
-        equal_c_absloc l1 l2 ||
-          not (C.is_empty (C.inter (collect_ptset l1) (collect_ptset l2)))
-    with
-        NoContents -> false
-      | ReachedTop -> raise UnknownLocation
-
-let points_to_aux (t : tau) : absloc list =
-  try
-    match find (proj_ref t) with
-        Var v -> []
-      | Ref r -> C.elements (collect_ptset r.rl)
-      | _ -> raise WellFormed
-  with
-      NoContents -> []
-    | ReachedTop -> raise UnknownLocation
-
-let points_to (lv : lvalue) : Cil.varinfo list =
-  let rec get_vinfos l : Cil.varinfo list =
-    match l with
-        [] -> []
-      | (_, _, Some h) :: t -> h :: get_vinfos t
-      | (_, _, None) :: t -> get_vinfos t
-  in
-    get_vinfos (points_to_aux lv.contents)
-
-let epoints_to (t : tau) : Cil.varinfo list =
-  let rec get_vinfos l : Cil.varinfo list = match l with
-      [] -> []
-    | (_, _, Some h) :: t -> h :: get_vinfos t
-    | (_, _, None) :: t -> get_vinfos t
-  in
-    get_vinfos (points_to_aux t)
-
-let points_to_names (lv : lvalue) : string list =
-  List.map (fun v -> v.vname) (points_to lv)
-
-let absloc_points_to (lv : lvalue) : absloc list =
-  points_to_aux lv.contents
-
-let absloc_epoints_to (t : tau) : absloc list =
-  points_to_aux t
-
-let absloc_of_lvalue (lv : lvalue) : absloc =
-  (find lv.l).loc
-
-let absloc_eq = equal_absloc
diff --git a/cil/src/ext/pta/olf.mli b/cil/src/ext/pta/olf.mli
deleted file mode 100644
index 437948250..000000000
--- a/cil/src/ext/pta/olf.mli
+++ /dev/null
@@ -1,80 +0,0 @@
-(*
- *
- * Copyright (c) 2001-2002, 
- *  John Kodumal        <jkodumal@eecs.berkeley.edu>
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. The names of the contributors may not be used to endorse or promote
- * products derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
- * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
- * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- *)
-type lvalue
-type tau
-type absloc
-
-(** Raised if a pointer flows to an undefined function.
-  We assume that such a function can have any effect on the pointer's contents
-*)
-exception UnknownLocation
-
-val debug : bool ref
-val debug_constraints : bool ref
-val debug_aliases : bool ref
-val smart_aliases : bool ref
-val finished_constraints : unit -> unit
-val print_constraints : bool ref
-val no_flow : bool ref
-val no_sub : bool ref
-val analyze_mono : bool ref
-val solve_constraints : unit -> unit (* only for compatability with Golf *)
-val rvalue : lvalue -> tau
-val deref : tau -> lvalue
-val join : tau -> tau -> tau
-val join_inits : tau list -> tau
-val address : lvalue -> tau
-val instantiate : lvalue -> int -> lvalue
-val assign : lvalue -> tau -> unit
-val assign_ret : int -> lvalue -> tau -> unit
-val apply : tau -> tau list -> (tau * int)
-val apply_undefined : tau list -> (tau * int)
-val assign_undefined : lvalue -> unit
-val make_function :  string -> lvalue list -> tau -> tau
-val make_lvalue : bool -> string -> (Cil.varinfo option) -> lvalue
-val bottom : unit -> tau
-val return : tau -> tau -> unit
-val make_fresh : string -> tau
-val points_to_names : lvalue -> string list
-val points_to : lvalue -> Cil.varinfo list
-val epoints_to : tau -> Cil.varinfo list   
-val string_of_lvalue : lvalue -> string
-val may_alias : tau -> tau -> bool
-
-val absloc_points_to : lvalue -> absloc list
-val absloc_epoints_to : tau -> absloc list
-val absloc_of_lvalue : lvalue -> absloc 
-val absloc_eq : (absloc * absloc) -> bool
-val d_absloc : unit -> absloc -> Pretty.doc
diff --git a/cil/src/ext/pta/ptranal.ml b/cil/src/ext/pta/ptranal.ml
deleted file mode 100644
index c91bda81f..000000000
--- a/cil/src/ext/pta/ptranal.ml
+++ /dev/null
@@ -1,597 +0,0 @@
-(* MODIF: Loop constructor replaced by 3 constructors: While, DoWhile, For. *)
-
-(*
- *
- * Copyright (c) 2001-2002,
- *  John Kodumal        <jkodumal@eecs.berkeley.edu>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. The names of the contributors may not be used to endorse or promote
- * products derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
- * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
- * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- *)
-
-exception Bad_return
-exception Bad_function
-
-
-open Cil
-
-module H = Hashtbl
-
-module A = Olf
-exception UnknownLocation = A.UnknownLocation
-
-type access = A.lvalue * bool
-
-type access_map = (lval, access) H.t
-
-(** a mapping from varinfo's back to fundecs *)
-module VarInfoKey =
-struct
-  type t = varinfo
-  let compare v1 v2 = v1.vid - v2.vid
-end
-
-module F = Map.Make (VarInfoKey)
-
-
-(***********************************************************************)
-(*                                                                     *)
-(* Global Variables                                                    *)
-(*                                                                     *)
-(***********************************************************************)
-
-let model_strings = ref false
-let print_constraints = A.print_constraints
-let debug_constraints = A.debug_constraints
-let debug_aliases = A.debug_aliases
-let smart_aliases = A.smart_aliases
-let debug = A.debug
-let analyze_mono = A.analyze_mono
-let no_flow = A.no_flow
-let no_sub = A.no_sub
-let fun_ptrs_as_funs = ref false
-let show_progress = ref false
-let debug_may_aliases = ref false
-
-let found_undefined = ref false
-
-let conservative_undefineds = ref false
-
-let current_fundec : fundec option ref = ref None
-
-let fun_access_map : (fundec, access_map) H.t = H.create 64
-
-(* A mapping from varinfos to fundecs *)
-let fun_varinfo_map = ref F.empty
-
-let current_ret : A.tau option ref = ref None
-
-let lvalue_hash : (varinfo,A.lvalue) H.t = H.create 64
-
-let expressions : (exp,A.tau) H.t = H.create 64
-
-let lvalues : (lval,A.lvalue) H.t = H.create 64
-
-let fresh_index : (unit -> int) =
-  let count = ref 0 in
-    fun () ->
-      incr count;
-      !count
-
-let alloc_names = [
-  "malloc";
-  "calloc";
-  "realloc";
-  "xmalloc";
-  "__builtin_alloca";
-  "alloca";
-  "kmalloc"
-]
-
-let all_globals : varinfo list ref = ref []
-let all_functions : fundec list ref = ref []
-
-
-(***********************************************************************)
-(*                                                                     *)
-(* Utility Functions                                                   *)
-(*                                                                     *)
-(***********************************************************************)
-
-let is_undefined_fun = function
-    Lval (lh, o) ->
-      if isFunctionType (typeOfLval (lh, o))  then
-        match lh with
-            Var v -> v.vstorage = Extern
-          | _ -> false
-      else false
-  | _ -> false
-
-let is_alloc_fun = function
-    Lval (lh, o) ->
-      if isFunctionType (typeOfLval (lh, o)) then
-        match lh with
-            Var v -> List.mem v.vname alloc_names
-          | _ -> false
-      else false
-  | _ -> false
-
-let next_alloc = function
-    Lval (Var v, o) ->
-      let name = Printf.sprintf "%s@%d" v.vname (fresh_index ())
-      in
-        A.address (A.make_lvalue false name (Some v)) (* check *)
-  | _ -> raise Bad_return
-
-let is_effect_free_fun = function
-    Lval (lh, o) when isFunctionType (typeOfLval (lh, o)) ->
-      begin
-        match lh with
-            Var v ->
-              begin
-                try ("CHECK_" = String.sub v.vname 0 6)
-                with Invalid_argument _ -> false
-              end
-          | _ -> false
-      end
-  | _ -> false
-
-
-(***********************************************************************)
-(*                                                                     *)
-(* AST Traversal Functions                                             *)
-(*                                                                     *)
-(***********************************************************************)
-
-(* should do nothing, might need to worry about Index case *)
-(* let analyzeOffset (o : offset ) : A.tau = A.bottom () *)
-
-let analyze_var_decl (v : varinfo ) : A.lvalue =
-  try H.find lvalue_hash v
-  with Not_found ->
-    let lv = A.make_lvalue false v.vname (Some v)
-    in
-      H.add lvalue_hash v lv;
-      lv
-
-let isFunPtrType (t : typ) : bool =
-  match t with
-      TPtr (t, _) -> isFunctionType t
-    | _ -> false
-
-let rec analyze_lval (lv : lval ) : A.lvalue =
-  let find_access (l : A.lvalue) (is_var : bool) : A.lvalue =
-    match !current_fundec with
-        None -> l
-      | Some f ->
-          let accesses = H.find fun_access_map f in
-            if H.mem accesses lv then l
-            else
-              begin
-                H.add accesses lv (l, is_var);
-                l
-              end in
-  let result =
-    match lv with
-        Var v, _ -> (* instantiate every syntactic occurrence of a function *)
-          let alv =
-            if isFunctionType (typeOfLval lv) then
-              A.instantiate (analyze_var_decl v) (fresh_index ())
-            else analyze_var_decl v
-          in
-            find_access alv true
-      | Mem e, _ ->
-          (* assert (not (isFunctionType(typeOf(e))) ); *)
-          let alv =
-            if !fun_ptrs_as_funs && isFunPtrType (typeOf e) then
-              analyze_expr_as_lval e
-            else A.deref (analyze_expr e)
-          in
-            find_access alv false
-  in
-    H.replace lvalues lv result;
-    result
-and analyze_expr_as_lval (e : exp) : A.lvalue =
-  match e with
-      Lval l ->  analyze_lval l
-    | _ -> assert false (* todo -- other kinds of expressions? *)
-and analyze_expr (e : exp ) : A.tau =
-  let result =
-    match e with
-        Const (CStr s) ->
-          if !model_strings then
-            A.address (A.make_lvalue
-                         false
-                         s
-                         (Some (makeVarinfo false s charConstPtrType)))
-          else A.bottom ()
-      | Const c -> A.bottom ()
-      | Lval l -> A.rvalue (analyze_lval l)
-      | SizeOf _ -> A.bottom ()
-      | SizeOfStr _ -> A.bottom ()
-      | AlignOf _ -> A.bottom ()
-      | UnOp (op, e, t) -> analyze_expr e
-      | BinOp (op, e, e', t) -> A.join (analyze_expr e) (analyze_expr e')
-      | CastE (t, e) -> analyze_expr e
-      | AddrOf l ->
-          if !fun_ptrs_as_funs && isFunctionType (typeOfLval l) then
-            A.rvalue (analyze_lval l)
-          else A.address (analyze_lval l)
-      | StartOf l -> A.address (analyze_lval l)
-      | AlignOfE _ -> A.bottom ()
-      | SizeOfE _ -> A.bottom ()
- in
-  H.add expressions e result;
-  result
-
-
-(* check *)
-let rec analyze_init (i : init ) : A.tau =
-  match i with
-      SingleInit e -> analyze_expr e
-    | CompoundInit (t, oi) ->
-        A.join_inits (List.map (function (_, i) -> analyze_init i) oi)
-
-let analyze_instr (i : instr ) : unit =
-  match i with
-      Set (lval, rhs, l) ->
-        A.assign (analyze_lval lval) (analyze_expr rhs)
-    | Call (res, fexpr, actuals, l) ->
-        if not (isFunctionType (typeOf fexpr)) then
-          () (* todo : is this a varargs? *)
-        else if is_alloc_fun fexpr then
-          begin
-            if !debug then print_string "Found allocation function...\n";
-            match res with
-                Some r -> A.assign (analyze_lval r) (next_alloc fexpr)
-              | None -> ()
-          end
-        else if is_effect_free_fun fexpr then
-          List.iter (fun e -> ignore (analyze_expr e)) actuals
-        else (* todo : check to see if the thing is an undefined function *)
-          let fnres, site =
-            if is_undefined_fun fexpr & !conservative_undefineds then
-              A.apply_undefined (List.map analyze_expr actuals)
-            else
-              A.apply (analyze_expr fexpr) (List.map analyze_expr actuals)
-          in
-            begin
-              match res with
-                  Some r ->
-                    begin
-                      A.assign_ret site (analyze_lval r) fnres;
-                      found_undefined := true;
-                    end
-                | None -> ()
-            end
-    | Asm _ -> ()
-
-let rec analyze_stmt (s : stmt ) : unit =
-  match s.skind with
-      Instr il -> List.iter analyze_instr il
-    | Return (eo, l) ->
-        begin
-          match eo with
-              Some e ->
-                begin
-                  match !current_ret with
-                      Some ret -> A.return ret (analyze_expr e)
-                    | None -> raise Bad_return
-                end
-            | None -> ()
-        end
-    | Goto (s', l) -> () (* analyze_stmt(!s') *)
-    | If (e, b, b', l) ->
-        (* ignore the expression e; expressions can't be side-effecting *)
-        analyze_block b;
-        analyze_block b'
-    | Switch (e, b, sl, l) ->
-        analyze_block b;
-        List.iter analyze_stmt sl
-(*
-    | Loop (b, l, _, _) -> analyze_block b
-*)
-    | While (_, b, _) -> analyze_block b
-    | DoWhile (_, b, _) -> analyze_block b
-    | For (bInit, _, bIter, b, _) ->
-	analyze_block bInit;
-	analyze_block bIter;
-	analyze_block b
-    | Block b -> analyze_block b
-    | TryFinally (b, h, _) ->
-        analyze_block b;
-        analyze_block h
-    | TryExcept (b, (il, _), h, _) ->
-        analyze_block b;
-        List.iter analyze_instr il;
-        analyze_block h
-    | Break l -> ()
-    | Continue l -> ()
-
-
-and analyze_block (b : block ) : unit =
-  List.iter analyze_stmt b.bstmts
-
-let analyze_function (f : fundec ) : unit =
-  let oldlv = analyze_var_decl f.svar in
-  let ret = A.make_fresh (f.svar.vname ^ "_ret") in
-  let formals = List.map analyze_var_decl f.sformals in
-  let newf = A.make_function f.svar.vname formals ret in
-    if !show_progress then
-      Printf.printf "Analyzing function %s\n" f.svar.vname;
-    fun_varinfo_map := F.add f.svar f (!fun_varinfo_map);
-    current_fundec := Some f;
-    H.add fun_access_map f (H.create 8);
-    A.assign oldlv newf;
-    current_ret := Some ret;
-    analyze_block f.sbody
-
-let analyze_global (g : global ) : unit =
-  match g with
-      GVarDecl (v, l) -> () (* ignore (analyze_var_decl(v)) -- no need *)
-    | GVar (v, init, l) ->
-        all_globals := v :: !all_globals;
-        begin
-          match init.init with
-              Some i -> A.assign (analyze_var_decl v) (analyze_init i)
-            | None -> ignore (analyze_var_decl v)
-        end
-    | GFun (f, l) ->
-        all_functions := f :: !all_functions;
-        analyze_function f
-    | _ -> ()
-
-let analyze_file (f : file) : unit =
-  iterGlobals f analyze_global
-
-
-(***********************************************************************)
-(*                                                                     *)
-(* High-level Query Interface                                          *)
-(*                                                                     *)
-(***********************************************************************)
-
-(* Same as analyze_expr, but no constraints. *)
-let rec traverse_expr (e : exp) : A.tau =
-  H.find expressions e
-
-and traverse_expr_as_lval (e : exp) : A.lvalue =
-  match e with
-    | Lval l -> traverse_lval l
-    | _ -> assert false (* todo -- other kinds of expressions? *)
-
-and traverse_lval (lv : lval ) : A.lvalue =
-  H.find lvalues lv
-
-let may_alias (e1 : exp) (e2 : exp) : bool =
-  let tau1,tau2 = traverse_expr e1, traverse_expr e2 in
-  let result = A.may_alias tau1 tau2 in
-    if !debug_may_aliases then
-      begin
-        let doc1 = d_exp () e1 in
-        let doc2 = d_exp () e2 in
-        let s1 = Pretty.sprint ~width:30 doc1 in
-        let s2 = Pretty.sprint ~width:30 doc2 in
-          Printf.printf
-            "%s and %s may alias? %s\n"
-            s1
-            s2
-            (if result then "yes" else "no")
-      end;
-    result
-
-let resolve_lval (lv : lval) : varinfo list =
-  A.points_to (traverse_lval lv)
-
-let resolve_exp (e : exp) : varinfo list =
-  A.epoints_to (traverse_expr e)
-
-let resolve_funptr (e : exp) : fundec list =
-  let varinfos = A.epoints_to (traverse_expr e) in
-    List.fold_left
-      (fun fdecs -> fun vinf ->
-         try F.find vinf !fun_varinfo_map :: fdecs
-         with Not_found -> fdecs)
-      []
-      varinfos
-
-let count_hash_elts h =
-  let result = ref 0 in
-    H.iter (fun _ -> fun _ -> incr result) lvalue_hash;
-    !result
-
-let compute_may_aliases (b : bool) : unit =
-  let rec compute_may_aliases_aux (exps : exp list) =
-    match exps with
-        [] -> ()
-      | h :: t ->
-          ignore (List.map (may_alias h) t);
-          compute_may_aliases_aux t
-  and exprs : exp list ref = ref [] in
-    H.iter (fun e -> fun _ -> exprs := e :: !exprs) expressions;
-    compute_may_aliases_aux !exprs
-
-
-let compute_results (show_sets : bool) : unit =
-  let total_pointed_to = ref 0
-  and total_lvalues = H.length lvalue_hash
-  and counted_lvalues = ref 0
-  and lval_elts : (string * (string list)) list ref = ref [] in
-  let print_result (name, set) =
-    let rec print_set s =
-      match s with
-          [] -> ()
-        | h :: [] -> print_string h
-        | h :: t ->
-            print_string (h ^ ", ");
-            print_set t
-    and ptsize = List.length set in
-      total_pointed_to := !total_pointed_to + ptsize;
-      if ptsize > 0 then
-        begin
-          print_string (name ^ "(" ^ (string_of_int ptsize) ^ ") -> ");
-          print_set set;
-          print_newline ()
-        end
-  in
-  (* Make the most pessimistic assumptions about globals if an
-     undefined function is present. Such a function can write to every
-     global variable *)
-  let hose_globals () : unit =
-    List.iter
-      (fun vd -> A.assign_undefined (analyze_var_decl vd))
-      !all_globals
-  in
-  let show_progress_fn (counted : int ref) (total : int) : unit =
-    incr counted;
-    if !show_progress then
-      Printf.printf "Computed flow for %d of %d sets\n" !counted total
-  in
-    if !conservative_undefineds && !found_undefined then hose_globals ();
-    A.finished_constraints ();
-    if show_sets then
-      begin
-        print_endline "Computing points-to sets...";
-        Hashtbl.iter
-          (fun vinf -> fun lv ->
-             show_progress_fn counted_lvalues total_lvalues;
-             try lval_elts := (vinf.vname, A.points_to_names lv) :: !lval_elts
-             with A.UnknownLocation -> ())
-          lvalue_hash;
-        List.iter print_result !lval_elts;
-        Printf.printf
-          "Total number of things pointed to: %d\n"
-          !total_pointed_to
-      end;
-    if !debug_may_aliases then
-      begin
-        Printf.printf "Printing may alias relationships\n";
-        compute_may_aliases true
-      end
-
-let print_types () : unit =
-  print_string "Printing inferred types of lvalues...\n";
-  Hashtbl.iter
-    (fun vi -> fun lv ->
-       Printf.printf "%s : %s\n" vi.vname (A.string_of_lvalue lv))
-    lvalue_hash
-
-
-
-(** Alias queries. For each function, gather sets of locals, formals, and
-    globals. Do n^2 work for each of these functions, reporting whether or not
-    each pair of values is aliased. Aliasing is determined by taking points-to
-    set intersections.
-*)
-let compute_aliases = compute_may_aliases
-
-
-(***********************************************************************)
-(*                                                                     *)
-(* Abstract Location Interface                                         *)
-(*                                                                     *)
-(***********************************************************************)
-
-type absloc = A.absloc
-
-let rec lvalue_of_varinfo (vi : varinfo) : A.lvalue =
-  H.find lvalue_hash vi
-
-let lvalue_of_lval = traverse_lval
-let tau_of_expr = traverse_expr
-
-(** return an abstract location for a varinfo, resp. lval *)
-let absloc_of_varinfo vi =
-  A.absloc_of_lvalue (lvalue_of_varinfo vi)
-
-let absloc_of_lval lv =
-  A.absloc_of_lvalue (lvalue_of_lval lv)
-
-let absloc_e_points_to e =
-  A.absloc_epoints_to (tau_of_expr e)
-
-let absloc_lval_aliases lv =
-  A.absloc_points_to (lvalue_of_lval lv)
-
-(* all abslocs that e transitively points to *)
-let absloc_e_transitive_points_to (e : Cil.exp) : absloc list =
-  let rec lv_trans_ptsto (worklist : varinfo list) (acc : varinfo list) : absloc list =
-    match worklist with
-        [] -> List.map absloc_of_varinfo acc
-      | vi :: wklst'' ->
-          if List.mem vi acc then lv_trans_ptsto wklst'' acc
-          else
-            lv_trans_ptsto
-              (List.rev_append
-                 (A.points_to (lvalue_of_varinfo vi))
-                 wklst'')
-              (vi :: acc)
-  in
-    lv_trans_ptsto (A.epoints_to (tau_of_expr e)) []
-
-let absloc_eq a b = A.absloc_eq (a, b)
-
-let d_absloc: unit -> absloc -> Pretty.doc = A.d_absloc
-
-
-let ptrAnalysis = ref false
-let ptrResults = ref false
-let ptrTypes = ref false
-
-
-
-(** Turn this into a CIL feature *)
-let feature : featureDescr = {
-  fd_name = "ptranal";
-  fd_enabled = ptrAnalysis;
-  fd_description = "alias analysis";
-  fd_extraopt = [
-    ("--ptr_may_aliases",
-     Arg.Unit (fun _ -> debug_may_aliases := true),
-     "Print out results of may alias queries");
-    ("--ptr_unify", Arg.Unit (fun _ -> no_sub := true),
-     "Make the alias analysis unification-based");
-    ("--ptr_model_strings", Arg.Unit (fun _ -> model_strings := true),
-     "Make the alias analysis model string constants");
-    ("--ptr_conservative",
-     Arg.Unit (fun _ -> conservative_undefineds := true),
-     "Treat undefineds conservatively in alias analysis");
-    ("--ptr_results", Arg.Unit (fun _ -> ptrResults := true),
-     "print the results of the alias analysis");
-    ("--ptr_mono", Arg.Unit (fun _ -> analyze_mono := true),
-     "run alias analysis monomorphically");
-    ("--ptr_types",Arg.Unit (fun _ -> ptrTypes := true),
-     "print inferred points-to analysis types")
-  ];
-  fd_doit = (function (f: file) ->
-               analyze_file f;
-               compute_results !ptrResults;
-               if !ptrTypes then print_types ());
-  fd_post_check = false (* No changes *)
-}
diff --git a/cil/src/ext/pta/ptranal.mli b/cil/src/ext/pta/ptranal.mli
deleted file mode 100644
index 36eb7a546..000000000
--- a/cil/src/ext/pta/ptranal.mli
+++ /dev/null
@@ -1,156 +0,0 @@
-(*
- *
- * Copyright (c) 2001-2002, 
- *  John Kodumal        <jkodumal@eecs.berkeley.edu>
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. The names of the contributors may not be used to endorse or promote
- * products derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
- * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
- * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- *)
-
-(***********************************************************************)
-(*                                                                     *)
-(* Flags                                                               *)
-(*                                                                     *)
-(***********************************************************************)
-
-(** Print extra debugging info *)
-val debug : bool ref
-
-(** Debug constraints (print all constraints) *)
-val debug_constraints : bool ref
-
-(** Debug smart alias queries *)
-val debug_aliases : bool ref
-
-(** Debug may alias queries *)
-val debug_may_aliases : bool ref
-
-val smart_aliases : bool ref
-
-(** Print out the top level constraints *)
-val print_constraints : bool ref
-
-(** Make the analysis monomorphic *)
-val analyze_mono : bool ref
-
-(** Disable subtyping *)
-val no_sub : bool ref
-
-(** Make the flow step a no-op *)
-val no_flow : bool ref 
-
-(** Show the progress of the flow step *)
-val show_progress : bool ref 
-
-(** Treat undefined functions conservatively *)
-val conservative_undefineds : bool ref
-
-(***********************************************************************)
-(*                                                                     *)
-(* Building the Points-to Graph                                        *)
-(*                                                                     *)
-(***********************************************************************)
-
-(** Analyze a file *)
-val analyze_file : Cil.file -> unit
-
-(** Print the type of each lvalue in the program *)
-val print_types : unit -> unit
-
-(***********************************************************************)
-(*                                                                     *)
-(* High-level Query Interface                                          *)
-(*                                                                     *)
-(***********************************************************************)
-
-(** If undefined functions are analyzed conservatively, any of the 
-  high-level queries may raise this exception *)
-exception UnknownLocation
-
-val may_alias : Cil.exp -> Cil.exp -> bool
-
-val resolve_lval : Cil.lval -> (Cil.varinfo list)
-
-val resolve_exp : Cil.exp -> (Cil.varinfo list)
-
-val resolve_funptr : Cil.exp -> (Cil.fundec list)
-
-(***********************************************************************)
-(*                                                                     *)
-(* Low-level Query Interface                                           *)
-(*                                                                     *)
-(***********************************************************************)
-
-(** type for abstract locations *)
-type absloc 
-
-(** Give an abstract location for a varinfo *)
-val absloc_of_varinfo : Cil.varinfo -> absloc
-
-(** Give an abstract location for an Cil lvalue *)
-val absloc_of_lval : Cil.lval -> absloc
-
-(** may the two abstract locations be aliased? *)
-val absloc_eq : absloc -> absloc -> bool
-
-val absloc_e_points_to  : Cil.exp -> absloc list
-val absloc_e_transitive_points_to : Cil.exp -> absloc list 
-
-val absloc_lval_aliases : Cil.lval -> absloc list
-
-(** Print a string representing an absloc, for debugging. *)
-val d_absloc : unit -> absloc -> Pretty.doc
-
-
-(***********************************************************************)
-(*                                                                     *)
-(* Printing results                                                    *)
-(*                                                                     *)
-(***********************************************************************)
-
-(** Compute points to sets for variables. If true is passed, print the sets. *)
-val compute_results : bool -> unit
-
-(*
-
-Deprecated these. -- jk
-
-(** Compute alias relationships. If true is passed, print all alias pairs. *)
- val compute_aliases : bool -> unit
-
-(** Compute alias frequncy *)
-val compute_alias_frequency : unit -> unit
-
-
-*)
-
-val compute_aliases : bool  -> unit
-
-
-val feature: Cil.featureDescr
diff --git a/cil/src/ext/pta/setp.ml b/cil/src/ext/pta/setp.ml
deleted file mode 100644
index a39b97226..000000000
--- a/cil/src/ext/pta/setp.ml
+++ /dev/null
@@ -1,342 +0,0 @@
-(*
- *
- * Copyright (c) 2001-2002, 
- *  John Kodumal        <jkodumal@eecs.berkeley.edu>
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. The names of the contributors may not be used to endorse or promote
- * products derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
- * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
- * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- *)
-(***********************************************************************)
-(*                                                                     *)
-(*                           Objective Caml                            *)
-(*                                                                     *)
-(*            Xavier Leroy, projet Cristal, INRIA Rocquencourt         *)
-(*                                                                     *)
-(*  Copyright 1996 Institut National de Recherche en Informatique et   *)
-(*  en Automatique.  All rights reserved.  This file is distributed    *)
-(*  under the terms of the GNU Library General Public License, with    *)
-(*  the special exception on linking described in file ../LICENSE.     *)
-(*                                                                     *)
-(***********************************************************************)
-
-(* $Id: setp.ml,v 1.3 2003-02-19 19:26:31 jkodumal Exp $ *)
-
-(* Sets over ordered types *)
-
-module type PolyOrderedType =
-  sig
-    type 'a t
-    val compare: 'a t -> 'a t -> int
-  end
-
-module type S =
-  sig
-    type 'a elt
-    type 'a t
-    val empty: 'a t
-    val is_empty: 'a t -> bool
-    val mem: 'a elt -> 'a t -> bool
-    val add: 'a elt -> 'a t -> 'a t
-    val singleton: 'a elt -> 'a t
-    val remove: 'a elt -> 'a t -> 'a t
-    val union: 'a t -> 'a t -> 'a t
-    val inter: 'a t -> 'a t -> 'a t
-    val diff: 'a t -> 'a t -> 'a t
-    val compare: 'a t -> 'a t -> int
-    val equal: 'a t -> 'a t -> bool
-    val subset: 'a t -> 'a t -> bool
-    val iter: ('a elt -> unit) -> 'a t -> unit
-    val fold: ('a elt -> 'b -> 'b) -> 'a t -> 'b -> 'b
-    val for_all: ('a elt -> bool) -> 'a t -> bool
-    val exists: ('a elt -> bool) -> 'a t -> bool
-    val filter: ('a elt -> bool) -> 'a t -> 'a t
-    val partition: ('a elt -> bool) -> 'a t -> 'a t * 'a t
-    val cardinal: 'a t -> int
-    val elements: 'a t -> 'a elt list
-    val min_elt: 'a t -> 'a elt
-    val max_elt: 'a t -> 'a elt
-    val choose: 'a t -> 'a elt
-  end
-
-module Make(Ord: PolyOrderedType) =
-  struct
-    type 'a elt = 'a Ord.t
-    type 'a t = Empty | Node of 'a t * 'a elt * 'a t * int
-
-    (* Sets are represented by balanced binary trees (the heights of the
-       children differ by at most 2 *)
-
-    let height = function
-        Empty -> 0
-      | Node(_, _, _, h) -> h
-
-    (* Creates a new node with left son l, value x and right son r.
-       l and r must be balanced and | height l - height r | <= 2.
-       Inline expansion of height for better speed. *)
-
-    let create l x r =
-      let hl = match l with Empty -> 0 | Node(_,_,_,h) -> h in
-      let hr = match r with Empty -> 0 | Node(_,_,_,h) -> h in
-      Node(l, x, r, (if hl >= hr then hl + 1 else hr + 1))
-
-    (* Same as create, but performs one step of rebalancing if necessary.
-       Assumes l and r balanced.
-       Inline expansion of create for better speed in the most frequent case
-       where no rebalancing is required. *)
-
-    let bal l x r =
-      let hl = match l with Empty -> 0 | Node(_,_,_,h) -> h in
-      let hr = match r with Empty -> 0 | Node(_,_,_,h) -> h in
-      if hl > hr + 2 then begin
-        match l with
-          Empty -> invalid_arg "Set.bal"
-        | Node(ll, lv, lr, _) ->
-            if height ll >= height lr then
-              create ll lv (create lr x r)
-            else begin
-              match lr with
-                Empty -> invalid_arg "Set.bal"
-              | Node(lrl, lrv, lrr, _)->
-                  create (create ll lv lrl) lrv (create lrr x r)
-            end
-      end else if hr > hl + 2 then begin
-        match r with
-          Empty -> invalid_arg "Set.bal"
-        | Node(rl, rv, rr, _) ->
-            if height rr >= height rl then
-              create (create l x rl) rv rr
-            else begin
-              match rl with
-                Empty -> invalid_arg "Set.bal"
-              | Node(rll, rlv, rlr, _) ->
-                  create (create l x rll) rlv (create rlr rv rr)
-            end
-      end else
-        Node(l, x, r, (if hl >= hr then hl + 1 else hr + 1))
-
-    (* Same as bal, but repeat rebalancing until the final result
-       is balanced. *)
-
-    let rec join l x r =
-      match bal l x r with
-        Empty -> invalid_arg "Set.join"
-      | Node(l', x', r', _) as t' ->
-          let d = height l' - height r' in
-          if d < -2 || d > 2 then join l' x' r' else t'
-
-    (* Merge two trees l and r into one.
-       All elements of l must precede the elements of r.
-       Assumes | height l - height r | <= 2. *)
-
-    let rec merge t1 t2 =
-      match (t1, t2) with
-        (Empty, t) -> t
-      | (t, Empty) -> t
-      | (Node(l1, v1, r1, h1), Node(l2, v2, r2, h2)) ->
-          bal l1 v1 (bal (merge r1 l2) v2 r2)
-
-    (* Same as merge, but does not assume anything about l and r. *)
-
-    let rec concat t1 t2 =
-      match (t1, t2) with
-        (Empty, t) -> t
-      | (t, Empty) -> t
-      | (Node(l1, v1, r1, h1), Node(l2, v2, r2, h2)) ->
-          join l1 v1 (join (concat r1 l2) v2 r2)
-
-    (* Splitting *)
-
-    let rec split x = function
-        Empty ->
-          (Empty, None, Empty)
-      | Node(l, v, r, _) ->
-          let c = Ord.compare x v in
-          if c = 0 then (l, Some v, r)
-          else if c < 0 then
-            let (ll, vl, rl) = split x l in (ll, vl, join rl v r)
-          else
-            let (lr, vr, rr) = split x r in (join l v lr, vr, rr)
-
-    (* Implementation of the set operations *)
-
-    let empty = Empty
-
-    let is_empty = function Empty -> true | _ -> false
-
-    let rec mem x = function
-        Empty -> false
-      | Node(l, v, r, _) ->
-          let c = Ord.compare x v in
-          c = 0 || mem x (if c < 0 then l else r)
-
-    let rec add x = function
-        Empty -> Node(Empty, x, Empty, 1)
-      | Node(l, v, r, _) as t ->
-          let c = Ord.compare x v in
-          if c = 0 then t else
-          if c < 0 then bal (add x l) v r else bal l v (add x r)
-
-    let singleton x = Node(Empty, x, Empty, 1)
-
-    let rec remove x = function
-        Empty -> Empty
-      | Node(l, v, r, _) ->
-          let c = Ord.compare x v in
-          if c = 0 then merge l r else
-          if c < 0 then bal (remove x l) v r else bal l v (remove x r)
-
-    let rec union s1 s2 =
-      match (s1, s2) with
-        (Empty, t2) -> t2
-      | (t1, Empty) -> t1
-      | (Node(l1, v1, r1, h1), Node(l2, v2, r2, h2)) ->
-          if h1 >= h2 then
-            if h2 = 1 then add v2 s1 else begin
-              let (l2, _, r2) = split v1 s2 in
-              join (union l1 l2) v1 (union r1 r2)
-            end
-          else
-            if h1 = 1 then add v1 s2 else begin
-              let (l1, _, r1) = split v2 s1 in
-              join (union l1 l2) v2 (union r1 r2)
-            end
-
-    let rec inter s1 s2 =
-      match (s1, s2) with
-        (Empty, t2) -> Empty
-      | (t1, Empty) -> Empty
-      | (Node(l1, v1, r1, _), t2) ->
-          match split v1 t2 with
-            (l2, None, r2) ->
-              concat (inter l1 l2) (inter r1 r2)
-          | (l2, Some _, r2) ->
-              join (inter l1 l2) v1 (inter r1 r2)
-
-    let rec diff s1 s2 =
-      match (s1, s2) with
-        (Empty, t2) -> Empty
-      | (t1, Empty) -> t1
-      | (Node(l1, v1, r1, _), t2) ->
-          match split v1 t2 with
-            (l2, None, r2) ->
-              join (diff l1 l2) v1 (diff r1 r2)
-          | (l2, Some _, r2) ->
-              concat (diff l1 l2) (diff r1 r2)
-
-    let rec compare_aux l1 l2 =
-        match (l1, l2) with
-        ([], []) -> 0
-      | ([], _)  -> -1
-      | (_, []) -> 1
-      | (Empty :: t1, Empty :: t2) ->
-          compare_aux t1 t2
-      | (Node(Empty, v1, r1, _) :: t1, Node(Empty, v2, r2, _) :: t2) ->
-          let c = Ord.compare v1 v2 in
-          if c <> 0 then c else compare_aux (r1::t1) (r2::t2)
-      | (Node(l1, v1, r1, _) :: t1, t2) ->
-          compare_aux (l1 :: Node(Empty, v1, r1, 0) :: t1) t2
-      | (t1, Node(l2, v2, r2, _) :: t2) ->
-          compare_aux t1 (l2 :: Node(Empty, v2, r2, 0) :: t2)
-
-    let compare s1 s2 =
-      compare_aux [s1] [s2]
-
-    let equal s1 s2 =
-      compare s1 s2 = 0
-
-    let rec subset s1 s2 =
-      match (s1, s2) with
-        Empty, _ ->
-          true
-      | _, Empty ->
-          false
-      | Node (l1, v1, r1, _), (Node (l2, v2, r2, _) as t2) ->
-          let c = Ord.compare v1 v2 in
-          if c = 0 then
-            subset l1 l2 && subset r1 r2
-          else if c < 0 then
-            subset (Node (l1, v1, Empty, 0)) l2 && subset r1 t2
-          else
-            subset (Node (Empty, v1, r1, 0)) r2 && subset l1 t2
-
-    let rec iter f = function
-        Empty -> ()
-      | Node(l, v, r, _) -> iter f l; f v; iter f r
-
-    let rec fold f s accu =
-      match s with
-        Empty -> accu
-      | Node(l, v, r, _) -> fold f l (f v (fold f r accu))
-
-    let rec for_all p = function
-        Empty -> true
-      | Node(l, v, r, _) -> p v && for_all p l && for_all p r
-
-    let rec exists p = function
-        Empty -> false
-      | Node(l, v, r, _) -> p v || exists p l || exists p r
-
-    let filter p s =
-      let rec filt accu = function
-        | Empty -> accu
-        | Node(l, v, r, _) ->
-            filt (filt (if p v then add v accu else accu) l) r in
-      filt Empty s
-
-    let partition p s =
-      let rec part (t, f as accu) = function
-        | Empty -> accu
-        | Node(l, v, r, _) ->
-            part (part (if p v then (add v t, f) else (t, add v f)) l) r in
-      part (Empty, Empty) s
-
-    let rec cardinal = function
-        Empty -> 0
-      | Node(l, v, r, _) -> cardinal l + 1 + cardinal r
-
-    let rec elements_aux accu = function
-        Empty -> accu
-      | Node(l, v, r, _) -> elements_aux (v :: elements_aux accu r) l
-
-    let elements s =
-      elements_aux [] s
-
-    let rec min_elt = function
-        Empty -> raise Not_found
-      | Node(Empty, v, r, _) -> v
-      | Node(l, v, r, _) -> min_elt l
-
-    let rec max_elt = function
-        Empty -> raise Not_found
-      | Node(l, v, Empty, _) -> v
-      | Node(l, v, r, _) -> max_elt r
-
-    let choose = min_elt
-
-  end
diff --git a/cil/src/ext/pta/setp.mli b/cil/src/ext/pta/setp.mli
deleted file mode 100644
index a3b30313c..000000000
--- a/cil/src/ext/pta/setp.mli
+++ /dev/null
@@ -1,180 +0,0 @@
-(*
- *
- * Copyright (c) 2001-2002, 
- *  John Kodumal        <jkodumal@eecs.berkeley.edu>
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. The names of the contributors may not be used to endorse or promote
- * products derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
- * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
- * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- *)
-(***********************************************************************)
-(*                                                                     *)
-(*                           Objective Caml                            *)
-(*                                                                     *)
-(*            Xavier Leroy, projet Cristal, INRIA Rocquencourt         *)
-(*                                                                     *)
-(*  Copyright 1996 Institut National de Recherche en Informatique et   *)
-(*  en Automatique.  All rights reserved.  This file is distributed    *)
-(*  under the terms of the GNU Library General Public License, with    *)
-(*  the special exception on linking described in file ../LICENSE.     *)
-(*                                                                     *)
-(***********************************************************************)
-
-(* $Id: setp.mli,v 1.3 2003-02-19 19:26:31 jkodumal Exp $ *)
-
-(** Sets over ordered types.
-
-   This module implements the set data structure, given a total ordering
-   function over the set elements. All operations over sets
-   are purely applicative (no side-effects).
-   The implementation uses balanced binary trees, and is therefore
-   reasonably efficient: insertion and membership take time
-   logarithmic in the size of the set, for instance. 
-*)
-
-module type PolyOrderedType = 
-  sig
-    type 'a t
-      (** The type of the set elements. *)
-    val compare :  'a t -> 'a t -> int
-      (** A total ordering function over the set elements.
-          This is a two-argument function [f] such that
-          [f e1 e2] is zero if the elements [e1] and [e2] are equal,
-          [f e1 e2] is strictly negative if [e1] is smaller than [e2],
-          and [f e1 e2] is strictly positive if [e1] is greater than [e2].
-          Example: a suitable ordering function is
-          the generic structural comparison function {!Pervasives.compare}. *)
-  end
-(** Input signature of the functor {!Set.Make}. *)
-
-module type S =
-  sig
-    type 'a elt
-    (** The type of the set elements. *)
-
-    type 'a t
-    (** The type of sets. *)
-
-    val empty: 'a t
-    (** The empty set. *)
-
-    val is_empty: 'a t -> bool
-    (** Test whether a set is empty or not. *)
-
-    val mem: 'a elt -> 'a t -> bool
-      (** [mem x s] tests whether [x] belongs to the set [s]. *)
-
-    val add: 'a elt -> 'a t -> 'a t
-    (** [add x s] returns a set containing all elements of [s],
-       plus [x]. If [x] was already in [s], [s] is returned unchanged. *)
-
-    val singleton: 'a elt -> 'a t
-    (** [singleton x] returns the one-element set containing only [x]. *)
-
-    val remove: 'a elt -> 'a t -> 'a t
-    (** [remove x s] returns a set containing all elements of [s],
-       except [x]. If [x] was not in [s], [s] is returned unchanged. *)
-
-    val union: 'a t -> 'a t -> 'a t
-    (** Set union. *)
-
-    val inter: 'a t -> 'a t -> 'a t
-    (** Set interseection. *)
-
-    (** Set difference. *)
-    val diff: 'a t -> 'a t -> 'a t
-
-    val compare: 'a t -> 'a t -> int
-    (** Total ordering between sets. Can be used as the ordering function
-       for doing sets of sets. *)
-
-    val equal: 'a t -> 'a t -> bool
-    (** [equal s1 s2] tests whether the sets [s1] and [s2] are
-       equal, that is, contain equal elements. *)
-
-    val subset: 'a t -> 'a t -> bool
-    (** [subset s1 s2] tests whether the set [s1] is a subset of
-       the set [s2]. *)
-
-    val iter: ('a elt -> unit) -> 'a t -> unit
-    (** [iter f s] applies [f] in turn to all elements of [s].
-       The order in which the elements of [s] are presented to [f]
-       is unspecified. *)
-
-    val fold: ('a elt -> 'b -> 'b) -> 'a t -> 'b -> 'b
-    (** [fold f s a] computes [(f xN ... (f x2 (f x1 a))...)],
-       where [x1 ... xN] are the elements of [s].
-       The order in which elements of [s] are presented to [f] is
-       unspecified. *)
-
-    val for_all: ('a elt -> bool) -> 'a t -> bool
-    (** [for_all p s] checks if all elements of the set
-       satisfy the predicate [p]. *)
-
-    val exists: ('a elt -> bool) -> 'a t -> bool
-    (** [exists p s] checks if at least one element of
-       the set satisfies the predicate [p]. *)
-        
-    val filter: ('a elt -> bool) -> 'a t -> 'a t
-    (** [filter p s] returns the set of all elements in [s]
-       that satisfy predicate [p]. *)
-
-    val partition: ('a elt -> bool) -> 'a t -> 'a t * 'a t
-    (** [partition p s] returns a pair of sets [(s1, s2)], where
-       [s1] is the set of all the elements of [s] that satisfy the
-       predicate [p], and [s2] is the set of all the elements of
-       [s] that do not satisfy [p]. *)
-
-    val cardinal: 'a t -> int
-    (** Return the number of elements of a set. *)
-
-    val elements: 'a t -> 'a elt list
-    (** Return the list of all elements of the given set.
-       The returned list is sorted in increasing order with respect
-       to the ordering [Ord.compare], where [Ord] is the argument
-       given to {!Set.Make}. *)
-
-    val min_elt: 'a t -> 'a elt
-    (** Return the smallest element of the given set
-       (with respect to the [Ord.compare] ordering), or raise
-       [Not_found] if the set is empty. *)
-
-    val max_elt: 'a t -> 'a elt
-    (** Same as {!Set.S.min_elt}, but returns the largest element of the
-       given set. *)
-
-    val choose: 'a t -> 'a elt
-    (** Return one element of the given set, or raise [Not_found] if
-       the set is empty. Which element is chosen is unspecified,
-       but equal elements will be chosen for equal sets. *)
-  end
-(** Output signature of the functor {!Set.Make}. *)
-
-module Make (Ord : PolyOrderedType) : S with type 'a elt = 'a Ord.t
-(** Functor building an implementation of the set structure
-   given a totally ordered type. *)
diff --git a/cil/src/ext/pta/steensgaard.ml b/cil/src/ext/pta/steensgaard.ml
deleted file mode 100644
index 636869347..000000000
--- a/cil/src/ext/pta/steensgaard.ml
+++ /dev/null
@@ -1,1417 +0,0 @@
-(*
- *
- * Copyright (c) 2001-2002, 
- *  John Kodumal        <jkodumal@eecs.berkeley.edu>
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. The names of the contributors may not be used to endorse or promote
- * products derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
- * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
- * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- *)
-
-(***********************************************************************)
-(*                                                                     *)
-(*                                                                     *)
-(* This file is currently unused by CIL.  It is included in the        *)
-(*   distribution for reference only.                                  *)
-(*                                                                     *)
-(*                                                                     *)
-(***********************************************************************)
-
-
-(***********************************************************************)
-(*                                                                     *)
-(* Type Declarations                                                   *)
-(*                                                                     *)
-(***********************************************************************)
-
-exception Inconsistent of string
-exception Bad_cache
-exception No_contents
-exception Bad_proj
-exception Bad_type_copy
-exception Instantiation_cycle
-
-module U = Uref
-module S = Setp
-module H = Hashtbl
-module Q = Queue
-
-(** Polarity kinds-- positive, negative, or nonpolar. *)
-type polarity = Pos 
-		| Neg 
-		| Non
-
-(** Label bounds. The polymorphic type is a hack for recursive modules *)  
-type 'a bound = {index : int; info : 'a} 
-
-(** The 'a type may in general contain urefs, which makes Pervasives.compare
-  incorrect. However, the bounds will always be correct because if two tau's
-  get unified, their cached instantiations will be re-entered into the 
-  worklist, ensuring that any labels find the new bounds *)
-module Bound =
-struct 
-  type 'a t = 'a bound
-  let compare (x : 'a t) (y : 'a t) = 
-    Pervasives.compare x y
-end
-
-module B = S.Make(Bound)
-
-type 'a boundset = 'a B.t
-
-(** Constants, which identify elements in points-to sets *)
-type constant = int * string
-
-module Constant =
-struct
-  type t = constant
-
-  let compare ((xid,_) : t) ((yid,_) : t) =
-    Pervasives.compare xid yid
-end
-
-module C = Set.Make(Constant)
-
-(** Sets of constants. Set union is used when two labels containing 
-  constant sets are unified *)
-type constantset = C.t
-
-type lblinfo = {
-  mutable l_name: string;
-  (** Name of this label *)
-  mutable aliases: constantset;
-  (** Set of constants (tags) for checking aliases *)
-  p_bounds: label boundset U.uref; 
-  (** Set of umatched (p) lower bounds *)
-  n_bounds: label boundset U.uref; 
-  (** Set of unmatched (n) lower bounds *)
-  mutable p_cached: bool;
-  (** Flag indicating whether all reachable p edges have been locally cached *)
-  mutable n_cached: bool;
-  (** Flag indicating whether all reachable n edges have been locally cached *)
-  mutable on_path: bool;
-  (** For cycle detection during reachability queries *)
-}
-
-(** Constructor labels *)
-and label = lblinfo U.uref 
-
-(** The type of lvalues. *)
-type lvalue = {
-  l: label; 
-  contents: tau
-}
-
-(** Data for variables. *)
-and vinfo = {
-  v_name: string; 
-  mutable v_global: bool; 
-  v_cache: cache
-} 
-
-(** Data for ref constructors.  *)
-and rinfo = {
-  rl: label; 
-  mutable r_global: bool; 
-  points_to: tau; 
-  r_cache: cache
-}
-
-(** Data for fun constructors. *)
-and finfo = {
-  fl: label; 
-  mutable f_global: bool; 
-  args: tau list ref; 
-  ret: tau; 
-  f_cache: cache
-}
-
-(* Data for pairs. Note there is no label. *)
-and pinfo = {
-  mutable p_global: bool; 
-  ptr: tau; 
-  lam: tau; 
-  p_cache: cache
-}
-
-(** Type constructors discovered by type inference *)
-and tinfo = Wild
-            | Var of vinfo
-	    | Ref of rinfo
-	    | Fun of finfo
-	    | Pair of pinfo 
- 
-(** The top-level points-to type. *)
-and tau = tinfo U.uref
-
-(** The instantiation constraint cache. The index is used as a key. *)
-and cache = (int,polarity * tau) H.t
-
-(* Type of semi-unification constraints *)
-type su_constraint = Instantiation of tau * (int * polarity) * tau
-		     | Unification of tau * tau
-
-(** Association lists, used for printing recursive types. The first element 
-  is a type that has been visited. The second element is the string
-  representation of that type (so far). If the string option is set, then 
-  this type occurs within itself, and is associated with the recursive var
-  name stored in the option. When walking a type, add it to an association 
-  list. 
-
-  Example : suppose we have the constraint 'a = ref('a). The type is unified
-  via cyclic unification, and would loop infinitely if we attempted to print
-  it. What we want to do is print the type u rv. ref(rv). This is accomplished
-  in the following manner:
-  
-  -- ref('a) is visited. It is not in the association list, so it is added
-  and the string "ref(" is stored in the second element. We recurse to print
-  the first argument of the constructor.
-
-  -- In the recursive call, we see that 'a (or ref('a)) is already in the
-  association list, so the type is recursive. We check the string option,
-  which is None, meaning that this is the first recurrence of the type. We
-  create a new recursive variable, rv and set the string option to 'rv. Next,
-  we prepend u rv. to the string representation we have seen before, "ref(",
-  and return "rv" as the string representation of this type.
-
-  -- The string so far is "u rv.ref(". The recursive call returns, and we
-  complete the type by printing the result of the call, "rv", and ")"
-
-  In a type where the recursive variable appears twice, e.g. 'a = pair('a,'a),
-  the second time we hit 'a, the string option will be set, so we know to 
-  reuse the same recursive variable name.
-*)
-type association = tau * string ref * string option ref
-  
-(***********************************************************************)
-(*                                                                     *)
-(* Global Variables                                                    *)
-(*                                                                     *)
-(***********************************************************************)
-
-(** Print the instantiations constraints (loops with cyclic structures). *)
-let print_constraints : bool ref = ref false
-
-(** Solve constraints as they are introduced. If this is false, constraints
-  are solved in batch fashion at calls to solveConstraints. *)
-let solve_online : bool ref = ref true
-
-(** If true, print all constraints (including induced) and show additional 
- debug output. *)
-let debug = ref false			       
-let debug_constraints = debug
-
-(** If true, print out extra verbose debug information (including contents
-  of label sets *)
-let verbose_debug = ref false
-
-
-(** If true, make the flow step a no-op *)
-let no_flow = ref false
-
-let no_sub = ref false
-
-(** If true, do not add instantiation constraints *)
-let analyze_mono = ref false
-
-(** A counter for generating unique integers. *)
-let counter : int ref = ref 0
-
-(** A list of equality constraints. *)
-let eq_worklist : su_constraint Q.t = Q.create()
-
-(** A list of instantiation constraints. *)
-let inst_worklist : su_constraint Q.t = Q.create()
-
-(***********************************************************************)
-(*                                                                     *)
-(* Utility Functions                                                   *)
-(*                                                                     *)
-(***********************************************************************)
-
-(** Consistency check for inferred types *)
-let  pair_or_var (t : tau) = 
-  match (U.deref t) with
-    | Pair _ -> true
-    | Var _ -> true
-    | _ -> false
-
-let ref_or_var (t : tau) =
-   match (U.deref t) with
-     | Ref _ -> true
-     | Var _ -> true
-     | _ -> false
-
-let fun_or_var (t : tau) =
-  match (U.deref t) with
-    | Fun _ -> true
-    | Var _ -> true
-    |  _ -> false
-
-(** Generate a unique integer. *)
-let fresh_index () : int = 
-  incr counter; 
-  !counter
-
-(** Negate a polarity. *)
-let negate (p : polarity) : polarity =
-  match p with
-    | Pos -> Neg
-    | Neg -> Pos
-    | Non -> Non
-
-(** Compute the least-upper-bounds of two polarities. *)
-let lub (p,p' : polarity * polarity) : polarity = 
-  match p with
-    | Pos -> 
-	begin
-	  match p' with 
-	    | Pos -> Pos
-	    | _ -> Non
-	end
-    | Neg -> 
-	begin
-	  match p' with
-	    | Neg -> Neg 
-	    | _ -> Non
-	end
-    | Non -> Non
-
-(** Extract the cache from a type *)
-let get_cache (t : tau) : cache =
-  match U.deref t with 
-    | Wild -> raise Bad_cache
-    | Var v -> v.v_cache
-    | Ref r -> r.r_cache
-    | Pair p -> p.p_cache
-    | Fun f -> f.f_cache
-
-(** Determine whether or not a type is global *)
-let get_global (t : tau) : bool = 
-  match U.deref t with
-    |  Wild -> false
-    | Var v -> v.v_global
-    | Ref r -> r.r_global
-    | Pair p -> p.p_global
-    | Fun f -> f.f_global
-
-(** Return true if a type is monomorphic (global). *)
-let global_tau = get_global
-
-let global_lvalue lv = get_global lv.contents
-
-(** Return true if e is a member of l (according to uref equality) *)
-let rec ulist_mem e l =
-  match l with
-    | [] -> false
-    | h :: t -> if (U.equal(h,e)) then true else ulist_mem e t 
-
-(** Convert a polarity to a string *)
-let string_of_polarity p = 
-    match p with 
-      | Pos -> "+"
-      | Neg -> "-"
-      | Non -> "T"
-
-(** Convert a label to a string, short representation *)
-let string_of_label2 (l : label) : string = 
-  "\"" ^ (U.deref l).l_name ^ "\""
-
-(** Convert a label to a string, long representation *)
-let string_of_label (l : label ) : string =
-  let rec constset_to_string = function
-    | (_,s) :: [] -> s
-    | (_,s) :: t -> s ^ "," ^ (constset_to_string t)
-    | [] -> ""
-  in
-  let aliases = constset_to_string (C.elements ((U.deref l).aliases))
-  in
-    if ( (aliases = "") || (not !verbose_debug))
-    then string_of_label2 l 
-    else aliases
-
-(** Return true if the element [e] is present in the association list *)
-let rec assoc_list_mem (e : tau) (l : association list) =
-  match l with
-    | [] -> None
-    | (h,s,so) :: t -> 
-	if (U.equal(h,e)) then (Some (s,so)) else assoc_list_mem e t
-	
-(** Given a tau, create a unique recursive variable name. This should always
-  return the same name for a given tau *)
-let fresh_recvar_name (t : tau) : string =	    
-  match U.deref t with
-    | Pair p -> "rvp" ^ string_of_int((Hashtbl.hash p)) 
-    | Ref r -> "rvr" ^ string_of_int((Hashtbl.hash r)) 
-    | Fun f -> "rvf" ^ string_of_int((Hashtbl.hash f))
-    | _ -> raise (Inconsistent ("recvar_name"))
-
-(** Return a string representation of a tau, using association lists. *)
-let string_of_tau (t : tau ) : string = 
-  let tau_map : association list ref = ref [] in
-  let rec string_of_tau' t = 
-    match (assoc_list_mem t (!tau_map)) with
-      | Some (s,so) -> (* recursive type. see if a var name has been set *)
-	  begin
-	    match (!so) with
-	      | None ->
-		  begin
-		    let rv = fresh_recvar_name(t) in
-		      s := "u " ^ rv ^ "." ^ (!s);
-		      so := Some (rv);
-		      rv
-		  end
-	      | Some rv -> rv
-	  end
-      | None -> (* type's not recursive. Add it to the assoc list and cont. *)
-	  let s = ref "" in
-	  let so : string option ref = ref None in
-	    begin
-	      tau_map := (t,s,so) :: (!tau_map);
-
-	      (match (U.deref t) with
-		| Wild -> s := "_"; 
-		| Var v -> s := v.v_name;
-		| Pair p -> 
-		    begin
-		      assert (ref_or_var(p.ptr));
-		      assert (fun_or_var(p.lam));
-		      s := "{";
-		      s := (!s) ^ (string_of_tau' p.ptr);
-		      s := (!s) ^ ",";
-		      s := (!s) ^ (string_of_tau' p.lam);
-		      s := (!s) ^"}"
-		
-		    end
-		| Ref r ->
-		    begin
-		      assert(pair_or_var(r.points_to));
-		      s := "ref(|";
-		      s := (!s) ^ (string_of_label r.rl);
-		      s := (!s) ^ "|,";
-		      s := (!s) ^ (string_of_tau' r.points_to);
-		      s := (!s) ^ ")"
-		    
-		    end
-		| Fun f ->
-		    begin
-		      assert(pair_or_var(f.ret));
-		      let rec string_of_args = function
-			| h :: [] ->
-			    begin
-			      assert(pair_or_var(h));
-			      s := (!s) ^ (string_of_tau' h)
-			    end
-			| h :: t -> 
-			    begin
-			      assert(pair_or_var(h));
-			      s := (!s) ^ (string_of_tau' h) ^ ",";
-			      string_of_args t
-			    end
-			| [] -> ()
-		      in
-			s := "fun(|";
-			s := (!s) ^ (string_of_label f.fl);
-			s := (!s) ^ "|,";
-			s := (!s) ^ "<";
-			if (List.length !(f.args) > 0) 
-			then
-			  string_of_args !(f.args)
-			else
-			  s := (!s) ^ "void";
-			s := (!s) ^">,";
-			s := (!s) ^ (string_of_tau' f.ret);
-			s := (!s) ^ ")"
-		    end);
-	      tau_map := List.tl (!tau_map);
-	      !s
-	    end
-  in
-    string_of_tau' t
-
-(** Convert an lvalue to a string *)	
-let rec string_of_lvalue (lv : lvalue) : string =
-  let contents = (string_of_tau(lv.contents)) in
-  let l = (string_of_label lv.l) in
-    assert(pair_or_var(lv.contents));
-    Printf.sprintf "[%s]^(%s)" contents l
-	      
-(** Print a list of tau elements, comma separated *)
-let rec print_tau_list (l : tau list) : unit = 
-  let t_strings = List.map string_of_tau l in
-  let rec print_t_strings = function
-    | h :: [] -> print_string h; print_newline();
-    | h :: t -> print_string h; print_string ", "; print_t_strings t
-    | [] -> ()
-  in
-    print_t_strings t_strings
-
-(** Print a constraint. *)
-let print_constraint (c : su_constraint) = 
-  match c with 
-    | Unification (t,t') -> 
-	let lhs = string_of_tau t in
-	let rhs = string_of_tau t' in 
-	  Printf.printf "%s == %s\n" lhs rhs
-    | Instantiation (t,(i,p),t') ->
-	let lhs = string_of_tau t in
-	let rhs = string_of_tau t' in
-	let index = string_of_int i in
-	let pol = string_of_polarity p in
-	  Printf.printf "%s <={%s,%s} %s\n" lhs index pol rhs
-
-(* If [positive] is true, return the p-edge bounds, otherwise, return
-   the n-edge bounds. *)    
-let get_bounds (positive : bool) (l : label) : label boundset U.uref =
-  if (positive) then
-    (U.deref l).p_bounds
-  else
-    (U.deref l).n_bounds
-
-(** Used for cycle detection during the flow step. Returns true if the
- label [l] is found on the current path. *)
-let on_path (l : label) : bool =
-  (U.deref l).on_path
-
-(** Used for cycle detection during the flow step. Identifies [l] as being
-  on/off the current path. *) 
-let set_on_path (l : label) (b : bool) : unit =
-  (U.deref l).on_path <- b
-
-(** Make the type a global type *)
-let set_global (t : tau) (b : bool) : bool =
-  if (!debug && b) 
-  then 
-    Printf.printf "Setting a new global : %s\n" (string_of_tau t);
-  begin
-    assert ( (not (get_global(t)) ) || b );
-    (match U.deref t with
-       | Wild -> ()
-       | Var v -> v.v_global <- b
-       | Ref r -> r.r_global <- b
-       | Pair p -> p.p_global <- b
-       | Fun f -> f.f_global <- b);
-    b
-  end
-
-(** Return a label's bounds as a string *)
-let string_of_bounds (is_pos : bool) (l : label) : string =
-  let bounds = 
-    if (is_pos) then
-      U.deref ((U.deref l).p_bounds)
-    else
-      U.deref ((U.deref l).n_bounds)
-  in
-    B.fold (fun b -> fun res -> res ^ (string_of_label2 b.info) ^ " "
-	   ) bounds ""
-    
-(***********************************************************************)
-(*                                                                     *)
-(* Type Operations -- these do not create any constraints              *)
-(*                                                                     *)
-(***********************************************************************)
-
-let wild_val = U.uref Wild
-
-(** The wild (don't care) value. *)
-let wild () : tau =
-  wild_val
-
-(** Create an lvalue with label [lbl] and tau contents [t]. *)
-let make_lval (lbl,t : label * tau) : lvalue = 
-  {l = lbl; contents = t}
-
-(** Create a new label with name [name]. Also adds a fresh constant
- with name [name] to this label's aliases set. *)  
-let make_label (name : string) : label =
-  U.uref {
-    l_name = name;
-    aliases = (C.add (fresh_index(),name) C.empty); 
-    p_bounds = U.uref (B.empty); 
-    n_bounds = U.uref (B.empty);
-    p_cached = false;
-    n_cached = false;
-    on_path = false
- }
-
-(** Create a new label with an unspecified name and an empty alias set. *) 
-let fresh_label () : label =
-  U.uref {
-    l_name = "l_" ^ (string_of_int (fresh_index()));
-    aliases = (C.empty); 
-    p_bounds = U.uref (B.empty); 
-    n_bounds = U.uref (B.empty);
-    p_cached = false;
-    n_cached = false;
-    on_path = false
- }
-
-(** Create a fresh bound. *)
-let make_bound (i,a : int * 'a) : 'a bound = 
-  {index = i; info = a }
-
-(** Create a fresh named variable with name '[name]. *)
-let make_var (b: bool) (name : string) : tau =
-   U.uref (Var {v_name = ("'" ^name); 
-		v_global = b; 
-		v_cache = H.create 4})
-
-(** Create a fresh unnamed variable (name will be 'fv). *)
-let fresh_var () : tau =
-  make_var false ("fv" ^ (string_of_int (fresh_index())) )
-
-(** Create a fresh unnamed variable (name will be 'fi). *)
-let fresh_var_i () : tau = 
- make_var false ("fi" ^ (string_of_int (fresh_index())) )
-
-(** Create a Fun constructor. *)
-let make_fun (lbl,a,r : label * (tau list) * tau) : tau =
-  U.uref (Fun {fl = lbl ; 
-	       f_global = false; 
-	       args = ref a; 
-	       ret = r;
-	       f_cache = H.create 4})
-
-(** Create a Ref constructor. *)
-let make_ref (lbl,pt : label * tau) : tau =
-  U.uref (Ref {rl = lbl ; 
-	       r_global = false; 
-	       points_to = pt; 
-	       r_cache = H.create 4})
-
-(** Create a Pair constructor. *)
-let make_pair (p,f : tau * tau) : tau =
-  U.uref (Pair {ptr = p; 
-		p_global = false;
-		lam = f; 
-		p_cache = H.create 4})
-
-(** Copy the toplevel constructor of [t], putting fresh variables in each
-  argement of the constructor. *)
-let copy_toplevel (t : tau) : tau = 
-  match U.deref t with
-    | Pair _ -> 
-	make_pair (fresh_var_i(), fresh_var_i())
-    | Ref  _ -> 
-	make_ref (fresh_label(),fresh_var_i())
-    | Fun  f -> 
-	let fresh_fn = fun _ -> fresh_var_i()
-	in
-	  make_fun (fresh_label(), List.map fresh_fn !(f.args) , fresh_var_i())
-    | _ -> raise Bad_type_copy
-
-let pad_args (l,l' : (tau list ref) * (tau list ref)) : unit =
-  let padding = ref ((List.length (!l)) - (List.length (!l')))
-  in
-    if (!padding == 0) then ()
-    else 
-      let to_pad = 
-	if (!padding > 0) then l' else (padding := -(!padding);l)
-      in
-	for i = 1 to (!padding)  do
-	  to_pad := (!to_pad) @ [fresh_var()]
-	done
-
-(***********************************************************************)
-(*                                                                     *)
-(* Constraint Generation/ Resolution                                   *)
-(*                                                                     *)
-(***********************************************************************)
-
-(** Returns true if the constraint has no effect, i.e. either the left-hand
-  side or the right-hand side is wild. *)
-let wild_constraint (t,t' : tau * tau) : bool = 
-  let ti,ti' = U.deref t, U.deref t' in
-    match ti,ti' with
-      | Wild, _ -> true
-      | _, Wild -> true
-      | _ -> false
-
-exception Cycle_found
-
-(** Cycle detection between instantiations. Returns true if there is a cycle
-  from t to t' *)
-let exists_cycle (t,t' : tau * tau) : bool =
-  let visited : tau list ref = ref [] in
-  let rec exists_cycle' t =
-    if (ulist_mem t (!visited))
-    then
-      begin (*
-	print_string "Instantiation cycle found :";
-	print_tau_list (!visited);
-	print_newline();
-	print_string (string_of_tau t);
-	print_newline(); *)
-	(* raise Instantiation_cycle *) 
-	(* visited := List.tl (!visited) *) (* check *)
-      end
-    else
-      begin
-	visited := t :: (!visited);
-	if (U.equal(t,t')) 
-	then raise Cycle_found
-	else
-	  H.iter (fun _ -> fun (_,t'') -> 
-		    if (U.equal (t,t'')) then () 
-		    else
-		      ignore (exists_cycle' t'')
-		 ) (get_cache t) ;
-	visited := List.tl (!visited)
-      end
-  in
-    try
-      exists_cycle' t;
-      false
-    with
-      | Cycle_found -> true
-	
-exception Subterm
-  
-(** Returns true if [t'] is a proper subterm of [t] *)
-let proper_subterm (t,t') = 
-  let visited : tau list ref = ref [] in
-  let rec proper_subterm' t = 
-    if (ulist_mem t (!visited)) 
-    then () (* recursive type *)
-    else
-      if (U.equal (t,t'))
-      then raise Subterm
-      else
-	begin
-	  visited := t :: (!visited);
-	  (
-	    match (U.deref t) with
-	      | Wild -> ()
-	      | Var _ -> ()
-	      | Ref r ->
-		  proper_subterm' r.points_to
-	      | Pair p ->
-		  proper_subterm' p.ptr;
-		  proper_subterm' p.lam
-	      | Fun f ->
-		  proper_subterm' f.ret;
-		  List.iter (proper_subterm') !(f.args)
-	  );
-	  visited := List.tl (!visited)
-	  end
-  in
-    try
-      if (U.equal(t,t')) then false 
-      else
-	begin
-	  proper_subterm' t;
-	  false
-	end
-    with
-      | Subterm -> true
-
-(** The extended occurs check. Search for a cycle of instantiations from [t]
-  to [t']. If such a cycle exists, check to see that [t'] is a proper subterm
-  of [t]. If it is, then return true *)
-let eoc (t,t') : bool =
-  if (exists_cycle(t,t') && proper_subterm(t,t'))
-  then
-    begin
-      if (!debug)
-      then
-	Printf.printf "Occurs check : %s occurs within %s\n" (string_of_tau t')
-	  (string_of_tau t)
-      else 
-	();
-      true 
-    end
-  else
-   false
-  
-(** Resolve an instantiation constraint *)
-let rec instantiate_int (t,(i,p),t' : tau * (int * polarity) * tau) =
-  if  ( wild_constraint(t,t') || (not (store(t,(i,p),t'))) || 
-	U.equal(t,t') )
-  then ()
-  else 
-    let ti,ti' = U.deref t, U.deref t' in
-      match ti,ti' with 
-	| Ref r, Ref r' -> 
-	    instantiate_ref(r,(i,p),r')
-	| Fun f, Fun f' -> 
-	    instantiate_fun(f,(i,p),f')
-	| Pair pr, Pair pr' ->
-	    begin
-	      add_constraint_int (Instantiation (pr.ptr,(i,p),pr'.ptr));
-	      add_constraint_int (Instantiation (pr.lam,(i,p),pr'.lam))
-	    end
-	| Var v, _ -> ()
-	| _,Var v' -> 
-	    if eoc(t,t')
-	    then 
-	      add_constraint_int (Unification (t,t'))
-	    else
-	      begin
-		unstore(t,i);
-		add_constraint_int (Unification ((copy_toplevel t),t'));
-		add_constraint_int (Instantiation (t,(i,p),t')) 
-	      end
-	| _ -> raise (Inconsistent("instantiate"))
-
-(** Apply instantiations to the ref's label, and structurally down the type.
-  Contents of ref constructors are instantiated with polarity Non. *)
-and instantiate_ref (ri,(i,p),ri') : unit =
-  add_constraint_int (Instantiation(ri.points_to,(i,Non),ri'.points_to));
-  instantiate_label (ri.rl,(i,p),ri'.rl)
-
-(** Apply instantiations to the fun's label, and structurally down the type. 
-   Flip the polarity for the function's args. If the lengths of the argument
-   lists don't match, extend the shorter list as necessary.  *)
-and instantiate_fun (fi,(i,p),fi') : unit =
-    pad_args (fi.args, fi'.args);
-    assert(List.length !(fi.args) == List.length !(fi'.args));
-    add_constraint_int (Instantiation (fi.ret,(i,p),fi'.ret));
-    List.iter2 (fun t ->fun t' -> 
-		  add_constraint_int (Instantiation(t,(i,negate p),t'))) 
-      !(fi.args) !(fi'.args);
-    instantiate_label (fi.fl,(i,p),fi'.fl)
-
-(** Instantiate a label. Update the label's bounds with new flow edges. 
- *)
-and instantiate_label (l,(i,p),l' : label * (int * polarity) * label) : unit =
-  if (!debug) then
-    Printf.printf "%s <= {%d,%s} %s\n" (string_of_label l) i 
-      (string_of_polarity p) (string_of_label l');
-  let li,li' = U.deref l, U.deref l' in
-    match p with
-      | Pos ->
-	  U.update (li'.p_bounds, 
-		    B.add(make_bound (i,l)) (U.deref li'.p_bounds)
-		   )
-      | Neg -> 
-	  U.update (li.n_bounds, 
-		    B.add(make_bound (i,l')) (U.deref li.n_bounds)
-		   )
-      | Non ->
-	  begin
-	    U.update (li'.p_bounds, 
-		      B.add(make_bound (i,l)) (U.deref li'.p_bounds)
-		     );
-	    U.update (li.n_bounds, 
-		      B.add(make_bound (i,l')) (U.deref li.n_bounds)
-		     )
-	  end
-	     
-(** Resolve a unification constraint. Does the uref unification after grabbing
-  a copy of the information before the two infos are unified. The other 
-  interesting feature of this function is the way 'globalness' is propagated.
-  If a non-global is unified with a global, the non-global becomes global. 
-  If the ecr became global, there is a problem because none of its cached 
-  instantiations know that the type became monomorphic. In this case, they
-  must be re-inserted via merge-cache. Merge-cache always reinserts cached
-  instantiations from the non-ecr type, i.e. the type that was 'killed' by the
-  unification. *)
-and unify_int (t,t' : tau * tau) : unit = 
-  if (wild_constraint(t,t') || U.equal(t,t')) 
-  then ()
-  else 
-    let ti, ti' = U.deref t, U.deref t' in
-      begin
-	U.unify combine (t,t');
-	match ti,ti' with
-	  | Var v, _ -> 
-	      begin 
-		if (set_global t' (v.v_global || (get_global t')))
-		then (H.iter (merge_cache t') (get_cache t'))
-		else ();
-		H.iter (merge_cache t') v.v_cache
-	      end
-	  | _, Var v ->
-	      begin 
-		if (set_global t (v.v_global || (get_global t)))
-		then (H.iter (merge_cache t) (get_cache t))
-		else ();
-		H.iter (merge_cache t) v.v_cache
-	      end
-	  | Ref r, Ref r' -> 
-	      begin
-		if (set_global t (r.r_global || r'.r_global))
-		then (H.iter (merge_cache t) (get_cache t))
-		else ();
-		H.iter (merge_cache t) r'.r_cache;
-		unify_ref(r,r')
-	      end
-	  | Fun f, Fun f' -> 
-	      begin
-		if (set_global t (f.f_global || f'.f_global))
-		then (H.iter (merge_cache t) (get_cache t))
-		else (); 
-		H.iter (merge_cache t) f'.f_cache;
-		unify_fun (f,f');
-	      end
-	  | Pair p, Pair p' ->
-	      begin
-		if (set_global t (p.p_global || p'.p_global))
-		then (H.iter (merge_cache t) (get_cache t))
-		else (); 
-		H.iter (merge_cache t) p'.p_cache;
-		add_constraint_int (Unification (p.ptr,p'.ptr));
-		add_constraint_int (Unification (p.lam,p'.lam))
-	      end
-	  | _ -> raise (Inconsistent("unify"))
-      end
-
-(** Unify the ref's label, and apply unification structurally down the type. *)
-and unify_ref (ri,ri' : rinfo * rinfo) : unit =
-  add_constraint_int (Unification (ri.points_to,ri'.points_to));
-  unify_label(ri.rl,ri'.rl) 
-
-(** Unify the fun's label, and apply unification structurally down the type, 
-  at arguments and return value. When combining two lists of different lengths,
-  always choose the longer list for the representative. *)
-and unify_fun (li,li' : finfo * finfo) : unit = 
-  let rec union_args  = function
-    | _, [] -> false
-    | [], _ -> true
-    | h :: t, h' :: t' -> 
-	add_constraint_int (Unification (h,h')); union_args(t,t') 
-  in
-    begin
-      unify_label(li.fl,li'.fl);
-      add_constraint_int (Unification (li.ret,li'.ret));
-      if (union_args(!(li.args),!(li'.args))) 
-      then li.args := !(li'.args);
-    end
-
-(** Unify two labels, combining the set of constants denoting aliases. *)
-and unify_label (l,l' : label * label) : unit =
-  let pick_name (li,li' : lblinfo * lblinfo) = 
-    if ( (String.length li.l_name) > 1 && (String.sub (li.l_name) 0 2) = "l_") 
-    then 
-      li.l_name <- li'.l_name
-    else ()
-  in
-  let combine_label (li,li' : lblinfo *lblinfo) : lblinfo =
-    let p_bounds = U.deref (li.p_bounds) in
-    let p_bounds' = U.deref (li'.p_bounds) in
-    let n_bounds = U.deref (li.n_bounds) in
-    let n_bounds' = U.deref (li'.n_bounds) in 
-      begin
-	pick_name(li,li');
-	li.aliases <- C.union (li.aliases) (li'.aliases);
-	U.update (li.p_bounds, (B.union p_bounds p_bounds'));
-	U.update (li.n_bounds, (B.union n_bounds n_bounds'));
-	li
-    end
-  in(*
-    if (!debug) then
-      begin
-	Printf.printf "Unifying %s with %s...\n" 
-	  (string_of_label l) (string_of_label l');
-	Printf.printf "pbounds : %s\n" (string_of_bounds true l);
-	Printf.printf "nbounds : %s\n" (string_of_bounds false l);
-	Printf.printf "pbounds : %s\n" (string_of_bounds true l');
-	Printf.printf "nbounds : %s\n\n" (string_of_bounds false l')
-      end; *)
-    U.unify combine_label (l,l')
-    (* if (!debug) then
-      begin
-	Printf.printf "pbounds : %s\n" (string_of_bounds true l);
-	Printf.printf "nbounds : %s\n" (string_of_bounds false l)
-      end *)
-
-(** Re-assert a cached instantiation constraint, since the old type was 
-  killed by a unification *)
-and merge_cache (rep : tau) (i : int) (p,t' : polarity * tau) : unit =
-  add_constraint_int (Instantiation (rep,(i,p),t'))
-      
-(** Pick the representative info for two tinfo's. This function prefers the
-  first argument when both arguments are the same structure, but when
-  one type is a structure and the other is a var, it picks the structure. *)
-and combine (ti,ti' : tinfo * tinfo) : tinfo = 
-  match ti,ti' with
-    | Var _, _ -> ti'
-    | _,_ -> ti 
-
-(** Add a new constraint induced by other constraints. *)
-and add_constraint_int (c : su_constraint) =
-  if (!print_constraints && !debug) then print_constraint c else (); 
-  begin
-    match c with
-      | Instantiation _ ->
-	  Q.add c inst_worklist
-      | Unification _ ->
-	  Q.add c eq_worklist
-  end;
-  if (!debug) then solve_constraints() else ()
-  
-(** Add a new constraint introduced through this module's interface (a 
-  top-level constraint). *)
-and add_constraint (c : su_constraint) =
-  begin
-    add_constraint_int (c);
-    if (!print_constraints && not (!debug)) then print_constraint c else (); 
-    if (!solve_online) then solve_constraints() else ()
-  end
-
-
-(* Fetch constraints, preferring equalities. *)
-and fetch_constraint () : su_constraint option =
-  if (Q.length eq_worklist > 0)
-  then 
-    Some (Q.take eq_worklist)
-  else if (Q.length inst_worklist > 0)
-  then
-    Some (Q.take inst_worklist)
-  else
-    None 
-
-(** Returns the target of a cached instantiation, if it exists. *)
-and target (t,i,p : tau * int * polarity) : (polarity * tau) option =
-  let cache = get_cache t in
-    if (global_tau t) then Some (Non,t) 
-    else
-      try
-	Some (H.find cache i)
-      with 
-	| Not_found -> None
-	  
-(** Caches a new instantiation, or applies well-formedness. *)
-and store ( t,(i,p),t' : tau * (int * polarity) * tau) : bool =
-  let cache = get_cache t in
-    match target(t,i,p) with
-      | Some (p'',t'') ->
-	  if (U.equal (t',t'') && (lub(p,p'') = p''))
-	  then
-	      false
-	  else
-	    begin
-	      add_constraint_int (Unification (t',t''));
-	      H.replace cache i (lub(p,p''),t'');
-	      (* add a new forced instantiation as well *)
-	      if (lub(p,p'') = p'') 
-	      then ()
-	      else
-		begin
-		  unstore(t,i);
-		  add_constraint_int (Instantiation (t,(i,lub(p,p'')),t''))
-		end;
-	      false 
-	    end
-      | None ->
-	  begin
-	    H.add cache i (p,t');
-	    true
-	  end
-
-(** Remove a cached instantiation. Used when type structure changes *)
-and unstore (t,i : tau * int) =
-let cache = get_cache t in
-  H.remove cache i
-
-(** The main solver loop. *)
-and solve_constraints () : unit = 
-  match fetch_constraint () with
-    | Some c ->
-	begin
-	  (match c with
-	     | Instantiation (t,(i,p),t') -> instantiate_int (t,(i,p),t')
-	     | Unification (t,t') -> unify_int (t,t')
-	  );
-	  solve_constraints()
-	end
-    | None -> ()
-
-
-(***********************************************************************)
-(*                                                                     *)
-(* Interface Functions                                                 *)
-(*                                                                     *)
-(***********************************************************************)
-    
-(** Return the contents of the lvalue. *)
-let rvalue (lv : lvalue) : tau = 
-  lv.contents
-
-(** Dereference the rvalue. If it does not have enough structure to support
-  the operation, then the correct structure is added via new unification
-  constraints. *)
-let rec deref (t : tau) : lvalue =
-  match U.deref t with 
-    | Pair p ->
-	(
-	  match U.deref (p.ptr) with
-	    | Var _ ->
-		begin 
-		 (* let points_to = make_pair(fresh_var(),fresh_var()) in *)
-		  let points_to = fresh_var() in 
-		  let l = fresh_label() in
-		  let r = make_ref(l,points_to)
-		  in
-		    add_constraint (Unification (p.ptr,r));
-		    make_lval(l, points_to)
-		end
-	    | Ref r -> make_lval(r.rl, r.points_to)
-	    | _ -> raise (Inconsistent("deref"))
-	)
-    | Var v -> 
-	begin
-	  add_constraint (Unification (t,make_pair(fresh_var(),fresh_var())));
-	  deref t
-	end
-    | _ -> raise (Inconsistent("deref -- no top level pair"))
-
-(** Form the union of [t] and [t']. *)
-let join (t : tau) (t' : tau) : tau = 
-  let t''  = fresh_var() in
-    add_constraint (Unification (t,t''));
-    add_constraint (Unification (t',t''));
-    t''
-
-(** Form the union of a list [tl], expected to be the initializers of some
-  structure or array type. *)
-let join_inits (tl : tau list) : tau = 
-  let t' = fresh_var() in
-    begin
-      List.iter (function t'' -> add_constraint (Unification(t',t''))) tl;
-      t'
-    end
-
-(** Take the address of an lvalue. Does not add constraints. *)
-let address (lv  : lvalue) : tau = 
-  make_pair (make_ref (lv.l, lv.contents), fresh_var() )
-    
-(** Instantiate a type with index i. By default, uses positive polarity. 
- Adds an instantiation constraint. *)
-let instantiate (lv : lvalue) (i : int) : lvalue = 
-  if (!analyze_mono) then lv
-  else
-    begin
-      let l' = fresh_label () in
-      let t' = fresh_var_i () in
-	instantiate_label(lv.l,(i,Pos),l');
-	add_constraint (Instantiation (lv.contents,(i,Pos),t'));
-	make_lval(l',t') (* check -- fresh label ?? *)
-    end 
-    
-(** Constraint generated from assigning [t] to [lv]. *)
-let assign (lv : lvalue) (t : tau) : unit = 
-  add_constraint (Unification (lv.contents,t))
-    
-
-(** Project out the first (ref) component or a pair. If the argument [t] has
-  no discovered structure, raise No_contents. *)
-let proj_ref (t : tau) : tau = 
-  match U.deref t with
-    | Pair p -> p.ptr
-    | Var v -> raise No_contents
-    | _ -> raise Bad_proj
-
-(* Project out the second (fun) component of a pair. If the argument [t] has
- no discovered structure, create it on the fly by adding constraints. *)
-let proj_fun (t : tau) : tau = 
-  match U.deref t with
-    | Pair p -> p.lam
-    | Var v -> 
-	let p,f = fresh_var(), fresh_var() in
-	  add_constraint (Unification (t,make_pair(p,f)));
-	  f
-    | _ -> raise Bad_proj
-
-let get_args (t : tau) : tau list ref =
-  match U.deref t with 
-    | Fun f -> f.args
-    | _ -> raise (Inconsistent("get_args"))
-
-(** Function type [t] is applied to the arguments [actuals]. Unifies the 
-  actuals with the formals of [t]. If no functions have been discovered for 
-  [t] yet, create a fresh one and unify it with t. The result is the return
-  value of the function. *)
-let apply (t : tau) (al : tau list) : tau = 
-  let f = proj_fun(t) in
-  let actuals = ref al in 
-  let formals,ret =
-    match U.deref f with
-      | Fun fi -> (fi.args),fi.ret
-      | Var v ->
-	  let new_l,new_ret,new_args = 
-	    fresh_label(), fresh_var (), 
-	    List.map (function _ -> fresh_var()) (!actuals) 
-	  in
-	  let new_fun = make_fun(new_l,new_args,new_ret) in
-	    add_constraint (Unification(new_fun,f));
-	    (get_args new_fun,new_ret)
-      | Ref _ -> raise (Inconsistent ("apply_ref"))
-      | Pair _ -> raise (Inconsistent ("apply_pair"))
-      | Wild -> raise (Inconsistent("apply_wild"))
-  in
-    pad_args(formals,actuals);
-    List.iter2 (fun actual -> fun formal -> 
-		  add_constraint (Unification (actual,formal))
-	       ) !actuals !formals;
-    ret 
-    
-(** Create a new function type with name [name], list of formal arguments 
-  [formals], and return value [ret]. Adds no constraints. *)
-let make_function (name : string) (formals : lvalue list) (ret : tau) : tau = 
-  let 
-    f = make_fun(make_label(name),List.map (fun x -> rvalue x) formals, ret) 
-  in
-    make_pair(fresh_var(),f)
-
-(** Create an lvalue. If [is_global] is true, the lvalue will be treated 
-    monomorphically. *)
-let make_lvalue (is_global : bool) (name : string) : lvalue = 
-  if (!debug && is_global) 
-  then 
-    Printf.printf "Making global lvalue : %s\n" name
-  else ();
-  make_lval(make_label(name), make_var is_global name)
- 
-
-(** Create a fresh non-global named variable. *)
-let make_fresh (name : string) : tau =
-  make_var false (name)
-
-(** The default type for constants. *)
-let bottom () : tau = 
-  make_var false ("bottom")
-
-(** Unify the result of a function with its return value. *)
-let return (t : tau) (t' : tau) =
-  add_constraint (Unification (t,t'))
-
-
-(***********************************************************************)
-(*                                                                     *)
-(* Query/Extract Solutions                                             *)
-(*                                                                     *)
-(***********************************************************************)
-
-(** Unify the data stored in two label bounds. *)
-let combine_lbounds (s,s' : label boundset * label boundset) =
-  B.union s s'
-
-(** Truncates a list of urefs [l] to those elements up to and including the 
-  first occurence of the specified element [elt].  *)
-let truncate l elt = 
-  let keep = ref true in
-    List.filter 
-      (fun x -> 
-	 if (not (!keep)) 
-	 then 
-	     false
-	 else
-	   begin
-	     if  (U.equal(x,elt)) 
-	     then 
-	       keep := false
-	     else ();
-	     true
-	   end
-      ) l
-
-let debug_cycle_bounds is_pos c =
-  let rec debug_cycle_bounds' = function
-    | h :: [] -> 
-	Printf.printf "%s --> %s\n" (string_of_bounds is_pos h) 
-	(string_of_label2 h)
-    | h :: t ->
-	begin
-	  Printf.printf "%s --> %s\n" (string_of_bounds is_pos h)
-	    (string_of_label2 h);
-	  debug_cycle_bounds' t
-	end
-    | [] -> ()
-  in
-    debug_cycle_bounds' c
-
-(** For debugging, print a cycle of instantiations *)
-let debug_cycle (is_pos,c,l,p) =
-  let kind = if is_pos then "P" else "N" in
-  let rec string_of_cycle = function 
-    | h :: [] -> string_of_label2 h
-    | [] -> ""
-    | h :: t -> Printf.sprintf "%s,%s" (string_of_label2 h) (string_of_cycle t)
-  in
-    Printf.printf "Collapsing %s cycle around %s:\n" kind (string_of_label2 l);
-    Printf.printf "Elements are: %s\n" (string_of_cycle c);
-    Printf.printf "Per-element bounds:\n";
-    debug_cycle_bounds is_pos c;
-    Printf.printf "Full path is: %s" (string_of_cycle p);
-    print_newline()
-
-(** Compute pos or neg flow, depending on [is_pos]. Searches for cycles in the
-  instantiations (can these even occur?) and unifies either the positive or
-  negative edge sets for the labels on the cycle. Note that this does not 
-  ever unify the labels themselves. The return is the new bounds of the 
-  argument label *)
-let rec flow (is_pos : bool) (path : label list) (l : label) : label boundset =
-  let collapse_cycle () = 
-    let cycle = truncate path l in
-      debug_cycle (is_pos,cycle,l,path);
-      List.iter (fun x -> U.unify combine_lbounds 
-		   ((get_bounds is_pos x),get_bounds is_pos l)
-		) cycle
-  in
-    if (on_path l) 
-    then
-      begin
-	collapse_cycle (); 
-	(* set_on_path l false; *)
-	B.empty
-      end
-    else
-      if ( (is_pos && (U.deref l).p_cached) || 
-	   ( (not is_pos) && (U.deref l).n_cached) ) then
-	begin
-	  U.deref (get_bounds is_pos l)
-	end
-      else
-	begin
-	  let newbounds = ref B.empty in
-	  let base = get_bounds is_pos l in
-	    set_on_path l true;
-	    if (is_pos) then 
-	      (U.deref l).p_cached <- true 
-	    else 
-	      (U.deref l).n_cached <- true;
-	    B.iter 
-	      (fun x -> 
-		 if (U.equal(x.info,l)) then () 
-		 else
-		   (newbounds := 
-		    (B.union (!newbounds) (flow is_pos (l :: path) x.info)))
-	      ) (U.deref base); 
-	    set_on_path l false;
-	    U.update (base,(B.union (U.deref base) !newbounds));
-	    U.deref base
-	end
-	
-(** Compute and cache any positive flow. *)
-let pos_flow l : constantset  = 
-  let result = ref C.empty in 
-    begin
-      ignore (flow true [] l);
-      B.iter (fun x -> result := C.union (!result) (U.deref(x.info)).aliases )
-	(U.deref (get_bounds true l)); 
-      !result
-    end
-    
-(** Compute and cache any negative flow. *)
-let neg_flow l : constantset =
-  let result = ref C.empty in
-    begin
-      ignore (flow false [] l); 
-      B.iter (fun x -> result := C.union (!result) (U.deref(x.info)).aliases )
-	(U.deref (get_bounds false l));
-      !result
-    end
-    
-(** Compute and cache any pos-neg flow. Assumes that both pos_flow and
-  neg_flow have been computed for the label [l]. *)
-let pos_neg_flow(l : label) : constantset  =
-  let result = ref C.empty in
-    begin
-      B.iter (fun x -> result := C.union (!result) (pos_flow x.info))
-	(U.deref (get_bounds false l));
-      !result
-    end
-
-(** Compute a points-to set by computing positive, then negative, then
-  positive-negative flow for a label. *)
-let points_to_int (lv : lvalue) : constantset =
-  let visited_caches : cache list ref  = ref [] in
-  let rec points_to_tau (t : tau) : constantset =
-    try 
-      begin
-	match U.deref (proj_ref t) with
-	  | Var v -> C.empty
-	  | Ref r ->
-	      begin
-		let pos = pos_flow r.rl in
-		let neg = neg_flow r.rl in
-		let interproc = C.union (pos_neg_flow r.rl) (C.union pos neg)
-		in
-		  C.union ((U.deref(r.rl)).aliases) interproc
-	      end
-	  | _ -> raise (Inconsistent ("points_to"))
-      end
-    with
-      | No_contents ->
-	  begin
-	    match (U.deref t) with
-	      | Var v -> rebuild_flow v.v_cache
-	      | _ -> raise (Inconsistent ("points_to"))
-	  end
-  and rebuild_flow (c : cache) : constantset = 
-    if (List.mem c (!visited_caches) ) (* cyclic instantiations *)
-    then
-      begin
-	(* visited_caches := List.tl (!visited_caches); *) (* check *)
-	C.empty
-      end
-    else
-      begin
-	visited_caches :=  c :: (!visited_caches);
-	let result = ref (C.empty) in
-	  H.iter (fun _ -> fun(p,t) -> 
-		    match p with 
-		      | Pos -> () 
-		      | _ -> result := C.union (!result) (points_to_tau t)
-		 ) c;
-	  visited_caches := List.tl (!visited_caches);
-	  !result
-      end
-  in
-    if (!no_flow) then 
-      (U.deref lv.l).aliases
-    else 
-      points_to_tau (lv.contents)
-
-let points_to (lv : lvalue) : string list =
-  List.map snd (C.elements (points_to_int lv))
-
-let alias_query (a_progress : bool) (lv : lvalue list) : int * int = 
-  (0,0) (* todo *)
-(*
-  let a_count = ref 0 in
-  let ptsets = List.map points_to_int lv in
-  let total_sets = List.length ptsets in
-  let counted_sets = ref 0 in 
-  let record_alias s s' = 
-    if (C.is_empty (C.inter s s')) 
-    then ()
-    else (incr a_count)
-  in
-  let rec check_alias = function
-    | h :: t ->
-	begin
-	  List.iter (record_alias h) ptsets; 
-	  check_alias t 
-	end
-    | [] -> ()
-  in
-    check_alias ptsets;
-    !a_count
-*)
diff --git a/cil/src/ext/pta/steensgaard.mli b/cil/src/ext/pta/steensgaard.mli
deleted file mode 100644
index f009e7e0b..000000000
--- a/cil/src/ext/pta/steensgaard.mli
+++ /dev/null
@@ -1,71 +0,0 @@
-(*
- *
- * Copyright (c) 2001-2002, 
- *  John Kodumal        <jkodumal@eecs.berkeley.edu>
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. The names of the contributors may not be used to endorse or promote
- * products derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
- * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
- * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- *)
-
-(***********************************************************************)
-(*                                                                     *)
-(*                                                                     *)
-(* This file is currently unused by CIL.  It is included in the        *)
-(*   distribution for reference only.                                  *)
-(*                                                                     *)
-(*                                                                     *)
-(***********************************************************************)
-
-type lvalue
-type tau
-val debug : bool ref
-val debug_constraints : bool ref
-val print_constraints : bool ref
-val no_flow : bool ref
-val no_sub : bool ref
-val analyze_mono : bool ref
-val solve_online : bool ref
-val solve_constraints : unit -> unit
-val rvalue : lvalue -> tau
-val deref : tau -> lvalue
-val join : tau -> tau -> tau
-val join_inits : tau list -> tau
-val address : lvalue -> tau
-val instantiate : lvalue -> int -> lvalue
-val assign : lvalue -> tau -> unit
-val apply : tau -> tau list -> tau
-val make_function :  string -> lvalue list -> tau -> tau
-val make_lvalue : bool -> string -> lvalue
-val bottom : unit -> tau
-val return : tau -> tau -> unit
-val make_fresh : string -> tau
-val points_to : lvalue -> string list    
-val string_of_lvalue : lvalue -> string
-val global_lvalue : lvalue -> bool
-val alias_query : bool -> lvalue list -> int * int
diff --git a/cil/src/ext/pta/uref.ml b/cil/src/ext/pta/uref.ml
deleted file mode 100644
index 53f36400c..000000000
--- a/cil/src/ext/pta/uref.ml
+++ /dev/null
@@ -1,94 +0,0 @@
-(*
- *
- * Copyright (c) 2001-2002, 
- *  John Kodumal        <jkodumal@eecs.berkeley.edu>
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. The names of the contributors may not be used to endorse or promote
- * products derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
- * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
- * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- *)
-exception Bad_find
-
-type 'a urefC =
-    Ecr of 'a * int
-  | Link of 'a uref
-and 'a uref = 'a urefC ref
-
-let rec find p = 
-  match !p with
-    | Ecr _ -> p
-    | Link p' ->
-	let p'' = find p' 
-	in p := Link p''; p''
-
-let uref x = ref (Ecr(x,0))
-
-let equal (p,p') = (find p == find p')
-
-let deref p = 
-  match ! (find p) with 
-    | Ecr (x,_) -> x
-    | _ -> raise Bad_find
-
-let update (p,x) = 
-  let p' = find p 
-  in
-    match !p' with
-      | Ecr (_,rank) -> p' := Ecr(x,rank)
-      | _ -> raise Bad_find
-	  
-let unify f (p,q) = 
-  let p',q' = find p, find q in
-    match (!p',!q') with 
-      | (Ecr(px,pr),Ecr(qx,qr)) ->
-	let x = f(px,qx) in
-	  if (p' == q') then
-	    p' := Ecr(x,pr)
-	  else if pr == qr then
-	    (q' := Ecr(x,qr+1); p' := Link q')
-	  else if pr < qr then
-	    (q' := Ecr(x,qr); p' := Link q')
-	  else (* pr > qr *)
-	    (p' := Ecr(x,pr); q' := Link p')
-      | _ -> raise Bad_find
-	  
-let union (p,q) = 
-  let p',q' = find p, find q in
-    match (!p',!q') with 
-      | (Ecr(px,pr),Ecr(qx,qr)) ->
-	  if (p' == q') then 
-	    ()
-	  else if pr == qr then
-	    (q' := Ecr(qx, qr+1); p' := Link q')
-	  else if pr < qr then
-	    p' := Link q'
-	  else (* pr > qr *)
-	    q' := Link p'
-      | _ -> raise Bad_find
-	  
-
diff --git a/cil/src/ext/pta/uref.mli b/cil/src/ext/pta/uref.mli
deleted file mode 100644
index 1dee5036d..000000000
--- a/cil/src/ext/pta/uref.mli
+++ /dev/null
@@ -1,65 +0,0 @@
-(*
- *
- * Copyright (c) 2001-2002, 
- *  John Kodumal        <jkodumal@eecs.berkeley.edu>
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. The names of the contributors may not be used to endorse or promote
- * products derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
- * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
- * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- *)
-type 'a uref
-  
-(** Union-find with union by rank and path compression 
-  
-  This is an implementation of Tarjan's union-find data structure using 
-  generics. The interface is analagous to standard references, with the
-  addition of a union operation which makes two references indistinguishable.
-  
-*)
-  
-val uref: 'a -> 'a uref 
-  (** Create a new uref *)
-  
-val equal: 'a uref * 'a uref -> bool
-  (** Test whether two urefs share the same equivalence class *)
-  
-val deref: 'a uref -> 'a
-  (** Extract the contents of this reference *)
-  
-val update: 'a uref * 'a -> unit
-  (** Update the value stored in this reference *)
-  
-val unify: ('a * 'a -> 'a) -> 'a uref * 'a uref -> unit
-  (** [unify f (p,q)] unifies references [p] and [q], making them 
-    indistinguishable. The contents of the reference are the result of
-    [f] *)
-    
-val union: 'a uref * 'a uref -> unit
-  (** [unify (p,q)] unifies references [p] and [q], making them
-    indistinguishable. The contents of the reference are the contents of
-    one of the first or second arguments (unspecified) *)
diff --git a/cil/src/ext/reachingdefs.ml b/cil/src/ext/reachingdefs.ml
deleted file mode 100644
index b6af37cbd..000000000
--- a/cil/src/ext/reachingdefs.ml
+++ /dev/null
@@ -1,511 +0,0 @@
-(* Calculate reaching definitions for each instruction.
- * Determine when it is okay to replace some variables with
- * expressions.
- *
- * After calling computeRDs on a fundec,
- * ReachingDef.stmtStartData will contain a mapping from
- * statement ids to data about which definitions reach each
- * statement. ReachingDef.defIdStmtHash will contain a
- * mapping from definition ids to the statement in which
- * that definition takes place.
- *
- * instrRDs takes a list of instructions, and the
- * definitions that reach the first instruction, and
- * for each instruction figures out which definitions
- * reach into or out of each instruction.
- *
- *)
-
-open Cil
-open Pretty
-
-module E = Errormsg
-module DF = Dataflow
-module UD = Usedef
-module IH = Inthash
-module U = Util
-module S = Stats
-
-let debug_fn = ref ""
-
-module IOS = 
-  Set.Make(struct
-    type t = int option
-    let compare io1 io2 =
-      match io1, io2 with
-	Some i1, Some i2 -> Pervasives.compare i1 i2
-      | Some i1, None -> 1
-      | None, Some i2 -> -1
-      | None, None -> 0
-  end)
-
-let debug = ref false
-
-(* return the intersection of
-   Inthashes ih1 and ih2 *)
-let ih_inter ih1 ih2 =
-  let ih' = IH.copy ih1 in
-  IH.iter (fun id vi ->
-    if not(IH.mem ih2 id) then
-      IH.remove ih' id else
-      ()) ih1;
-  ih'
-
-let ih_union ih1 ih2 =
-  let ih' = IH.copy ih1 in
-  IH.iter (fun id vi ->
-    if not(IH.mem ih' id) 
-    then IH.add ih' id vi
-    else ()) ih2;
-  ih'
-
-(* Lookup varinfo in iosh. If the set contains None
-   or is not a singleton, return None, otherwise
-   return Some of the singleton *)
-(* IOS.t IH.t -> varinfo -> int option *)
-let iosh_singleton_lookup iosh vi =
-  if IH.mem iosh vi.vid then
-    let ios = IH.find iosh vi.vid in
-    if not (IOS.cardinal ios = 1) then None
-    else IOS.choose ios
-  else None
-
-(* IOS.t IH.t -> varinfo -> IOS.t *)
-let iosh_lookup iosh vi =
-  if IH.mem iosh vi.vid
-  then Some(IH.find iosh vi.vid)
-  else None
-
-(* return Some(vid) if iosh contains defId.
-   return None otherwise *)
-(* IOS.t IH.t -> int -> int option *)
-let iosh_defId_find iosh defId =
-  (* int -> IOS.t -> int option -> int option*)
-  let get_vid vid ios io =
-    match io with
-      Some(i) -> Some(i)
-    | None -> 
-	let there = IOS.exists 
-	    (function None -> false
-	      | Some(i') -> defId = i') ios in
-	if there then Some(vid) else None
-  in
-  IH.fold get_vid iosh None
-
-(* The resulting iosh will contain the
-   union of the same entries from iosh1 and
-   iosh2. If iosh1 has an entry that iosh2
-   does not, then the result will contain
-   None in addition to the things from the
-   entry in iosh1. *)
-(* XXX this function is a performance bottleneck *)
-let iosh_combine iosh1 iosh2 =
-  let iosh' = IH.copy iosh1 in
-  IH.iter (fun id ios1 ->
-    try let ios2 = IH.find iosh2 id in
-    let newset = IOS.union ios1 ios2 in
-    IH.replace iosh' id newset;
-    with Not_found ->
-      let newset = IOS.add None ios1 in
-      IH.replace iosh' id newset) iosh1;
-  IH.iter (fun id ios2 ->
-    if not(IH.mem iosh1 id) then
-      let newset = IOS.add None ios2 in
-      IH.add iosh' id newset) iosh2;
-  iosh'
-
-
-(* determine if two IOS.t IH.t s are the same *)
-let iosh_equals iosh1 iosh2 =
-(*  if IH.length iosh1 = 0 && not(IH.length iosh2 = 0) ||
-  IH.length iosh2 = 0 && not(IH.length iosh1 = 0)*)
-  if not(IH.length iosh1 = IH.length iosh2)
-  then 
-    (if !debug then ignore(E.log "iosh_equals: length not same\n");
-    false)
-  else
-    IH.fold (fun vid ios b ->
-      if not b then b else
-      try let ios2 = IH.find iosh2 vid in
-      if not(IOS.compare ios ios2 = 0) then
-	(if !debug then ignore(E.log "iosh_equals: sets for vid %d not equal\n" vid);
-	 false)
-      else true
-      with Not_found ->
-	(if !debug then ignore(E.log "iosh_equals: vid %d not in iosh2\n" vid);
-	 false)) iosh1 true
-      
-(* replace an entire set with a singleton.
-   if nothing was there just add the singleton *)
-(* IOS.t IH.t -> int -> varinfo -> unit *)
-let iosh_replace iosh i vi =
-  if IH.mem iosh vi.vid then
-    let newset = IOS.singleton (Some i) in
-    IH.replace iosh vi.vid newset
-  else
-    let newset = IOS.singleton (Some i) in
-    IH.add iosh vi.vid newset
-
-(* remove definitions that are killed.
-   add definitions that are gend *)
-(* Takes the defs, the data, and a function for
-   obtaining the next def id *)
-(* VS.t -> IOS.t IH.t -> (unit->int) -> unit *)
-let proc_defs vs iosh f = 
-  let pd vi =
-    let newi = f() in
-    (*if !debug then
-      ignore (E.log "proc_defs: genning %d\n" newi);*)
-    iosh_replace iosh newi vi
-  in
-  UD.VS.iter pd vs
-
-let idMaker () start =
-  let counter = ref start in
-  fun () ->
-    let ret = !counter in
-    counter := !counter + 1;
-    ret
-
-(* given reaching definitions into a list of
-   instructions, figure out the definitions that
-   reach in/out of each instruction *)
-(* if out is true then calculate the definitions that
-   go out of each instruction, if it is false then
-   calculate the definitions reaching into each instruction *)
-(* instr list -> int -> (varinfo IH.t * int) -> bool -> (varinfo IH.t * int) list *)
-let iRDsHtbl = Hashtbl.create 128
-let instrRDs il sid (ivih, s, iosh) out =
-  if Hashtbl.mem iRDsHtbl (sid,out) then Hashtbl.find iRDsHtbl (sid,out) else
-
-(*   let print_instr i (_,s', iosh') = *)
-(*     let d = d_instr () i ++ line in *)
-(*     fprint stdout 80 d; *)
-(*     flush stdout *)
-(*   in *)
-
-  let proc_one hil i =
-    match hil with
-    | [] -> 
-	let _, defd = UD.computeUseDefInstr i in
-	if UD.VS.is_empty defd 
-	then ((*if !debug then print_instr i ((), s, iosh);*)
-	      [((), s, iosh)])
-	else 
-	  let iosh' = IH.copy iosh in
-	  proc_defs defd iosh' (idMaker () s);
-	  (*if !debug then
-	    print_instr i ((), s + UD.VS.cardinal defd, iosh');*)
-	  ((), s + UD.VS.cardinal defd, iosh')::hil
-    | (_, s', iosh')::hrst as l ->
-	let _, defd = UD.computeUseDefInstr i in
-	if UD.VS.is_empty defd 
-	then 
-	  ((*if !debug then
-	    print_instr i ((),s', iosh');*)
-	   ((), s', iosh')::l)
-	else let iosh'' = IH.copy iosh' in
-	proc_defs defd iosh'' (idMaker () s');
-	(*if !debug then
-	  print_instr i ((), s' + UD.VS.cardinal defd, iosh'');*)
-	((),s' + UD.VS.cardinal defd, iosh'')::l
-  in
-  let folded = List.fold_left proc_one [((),s,iosh)] il in
-  let foldedout = List.tl (List.rev folded) in
-  let foldednotout = List.rev (List.tl folded) in
-  Hashtbl.add iRDsHtbl (sid,true) foldedout;
-  Hashtbl.add iRDsHtbl (sid,false) foldednotout;
-  if out then foldedout else foldednotout
-    
-
-
-(* The right hand side of an assignment is either
-   a function call or an expression *)
-type rhs = RDExp of exp | RDCall of instr
-
-(* take the id number of a definition and return
-   the rhs of the definition if there is one.
-   Returns None if, for example, the definition is
-   caused by an assembly instruction *)
-(* stmt IH.t -> (()*int*IOS.t IH.t) IH.t -> int -> (rhs * int * IOS.t IH.t) option *)
-let rhsHtbl = IH.create 64 (* to avoid recomputation *)
-let getDefRhs didstmh stmdat defId =
-  if IH.mem rhsHtbl defId then IH.find rhsHtbl defId else
-  let stm =
-    try IH.find didstmh defId 
-    with Not_found -> E.s (E.error "getDefRhs: defId %d not found\n" defId) in
-  let (_,s,iosh) = 
-    try IH.find stmdat stm.sid
-    with Not_found -> E.s (E.error "getDefRhs: sid %d not found \n" stm.sid) in
-  match stm.skind with
-    Instr il ->
-      let ivihl = instrRDs il stm.sid ((),s,iosh) true in (* defs that reach out of each instr *)
-      let ivihl_in = instrRDs il stm.sid ((),s,iosh) false in (* defs that reach into each instr *)
-      let iihl = List.combine (List.combine il ivihl) ivihl_in in
-      (try let ((i,(_,_,diosh)),(_,_,iosh_in)) = List.find (fun ((i,(_,_,iosh')),_) ->
-	match S.time "iosh_defId_find" (iosh_defId_find iosh') defId with
-	  Some vid -> 
-	    (match i with
-	      Set((Var vi',NoOffset),_,_) -> vi'.vid = vid (* _ -> NoOffset *)
-	    | Call(Some(Var vi',NoOffset),_,_,_) -> vi'.vid = vid (* _ -> NoOffset *)
-	    | Call(None,_,_,_) -> false
-	    | Asm(_,_,sll,_,_,_) -> List.exists 
-		  (function (_,(Var vi',NoOffset)) -> vi'.vid = vid | _ -> false) sll
-	    | _ -> false)
-	| None -> false) iihl in
-      (match i with
-	Set((lh,_),e,_) ->
-	  (match lh with
-	    Var(vi') -> 
-	      (IH.add rhsHtbl defId (Some(RDExp(e),stm.sid,iosh_in));
-	       Some(RDExp(e), stm.sid, iosh_in))
-	  | _ -> E.s (E.error "Reaching Defs getDefRhs: right vi not first\n"))
-      | Call(lvo,e,el,_) -> 
-	  (IH.add rhsHtbl defId (Some(RDCall(i),stm.sid,iosh_in));
-	   Some(RDCall(i), stm.sid, iosh_in))
-      | Asm(a,sl,slvl,sel,sl',_) -> None) (* ? *)
-      with Not_found ->
-	(if !debug then ignore (E.log "getDefRhs: No instruction defines %d\n" defId);
-	 IH.add rhsHtbl defId None;
-	 None))
-  | _ -> E.s (E.error "getDefRhs: defining statement not an instruction list %d\n" defId)
-	(*None*)
-
-let prettyprint didstmh stmdat () (_,s,iosh) = text ""
-  (*seq line (fun (vid,ios) ->
-    num vid ++ text ": " ++
-      IOS.fold (fun io d -> match io with
-	None -> d ++ text "None "
-      | Some i ->
-	  let stm = IH.find didstmh i in
-	  match getDefRhs didstmh stmdat i with
-	    None -> d ++ num i
-	  | Some(RDExp(e),_,_) ->
-	      d ++ num i ++ text " " ++ (d_exp () e)
-	  | Some(RDCall(c),_,_) ->
-	      d ++ num i ++ text " " ++ (d_instr () c))
-      ios nil)
-    (IH.tolist iosh)*)
-
-module ReachingDef =
-  struct
-
-    let name = "Reaching Definitions"
-
-    let debug = debug
-
-    (* Should the analysis calculate may-reach
-       or must-reach *)
-    let mayReach = ref false
-
- 
-    (* An integer that tells the id number of
-       the first definition *)
-    (* Also a hash from variable ids to a set of 
-       definition ids that reach this statement.
-       None means there is a path to this point on which
-       there is no definition of the variable *)
-    type t = (unit * int * IOS.t IH.t)
-
-    let copy (_, i, iosh) = ((), i, IH.copy iosh)
-
-    (* entries for starting statements must
-       be added before calling compute *)
-    let stmtStartData = IH.create 32
-
-    (* a mapping from definition ids to
-       the statement corresponding to that id *)
-    let defIdStmtHash = IH.create 32
-
-    (* mapping from statement ids to statements
-       for better performance of ok_to_replace *)
-    let sidStmtHash = IH.create 64
-
-    (* pretty printer *)
-    let pretty = prettyprint defIdStmtHash stmtStartData
-      
-
-    (* The first id to use when computeFirstPredecessor
-       is next called *)
-    let nextDefId = ref 0
-
-    (* Count the number of variable definitions in
-       a statement *)
-    let num_defs stm =
-      match stm.skind with
-	Instr(il) -> List.fold_left (fun s i ->
-	  let _, d = UD.computeUseDefInstr i in
-	  s + UD.VS.cardinal d) 0 il
-      | _ -> let _, d = UD.computeUseDefStmtKind stm.skind in
-	UD.VS.cardinal d
-
-    (* the first predecessor is just the data in along with
-       the id of the first definition of the statement,
-       which we get from nextDefId *)
-    let computeFirstPredecessor stm (_, s, iosh) =
-      let startDefId = max !nextDefId s in
-      let numds = num_defs stm in
-      let rec loop n =
-	if n < 0
-	then ()
-	else
-	  (if !debug then
-	    ignore (E.log "RD: defId %d -> stm %d\n" (startDefId + n) stm.sid);
-	   IH.add defIdStmtHash (startDefId + n) stm;
-	   loop (n-1))
-      in
-      loop (numds - 1);
-      nextDefId := startDefId + numds;
-      ((), startDefId, IH.copy iosh)
-
-     
-    let combinePredecessors (stm:stmt) ~(old:t) ((_, s, iosh):t) =
-      match old with (_, os, oiosh) ->
-	if S.time "iosh_equals" (iosh_equals oiosh) iosh then None else
-	Some((), os, S.time "iosh_combine" (iosh_combine oiosh) iosh)
-
-    (* return an action that removes things that
-       are redefinied and adds the generated defs *)
-    let doInstr inst (_, s, iosh) =
-      let transform (_, s', iosh') =
-	let _, defd = UD.computeUseDefInstr inst in
-	proc_defs defd iosh' (idMaker () s');
-	((), s' + UD.VS.cardinal defd, iosh')
-      in
-      DF.Post transform
-
-    (* all the work gets done at the instruction level *)
-    let doStmt stm (_, s, iosh) =
-      if not(IH.mem sidStmtHash stm.sid) then 
-	IH.add sidStmtHash stm.sid stm;
-      if !debug then ignore(E.log "RD: looking at %a\n" d_stmt stm);
-      DF.SDefault
-
-    let doGuard condition _ = DF.GDefault
-
-    let filterStmt stm = true
-
-end
-
-module RD = DF.ForwardsDataFlow(ReachingDef)
-
-(* map all variables in vil to a set containing
-   None in iosh *)
-(* IOS.t IH.t -> varinfo list -> () *)
-let iosh_none_fill iosh vil =
-  List.iter (fun vi -> 
-    IH.add iosh vi.vid (IOS.singleton None))
-    vil
-
-(* Computes the reaching definitions for a
-   function. *)
-(* Cil.fundec -> unit *)
-let computeRDs fdec =
-  try
-    if compare fdec.svar.vname (!debug_fn) = 0 then
-      (debug := true;
-       ignore (E.log "%s =\n%a\n" (!debug_fn) d_block fdec.sbody));
-    let bdy = fdec.sbody in
-    let slst = bdy.bstmts in
-    let _ = IH.clear ReachingDef.stmtStartData in
-    let _ = IH.clear ReachingDef.defIdStmtHash in
-    let _ = IH.clear rhsHtbl in
-    let _ = Hashtbl.clear iRDsHtbl in
-    let _ = ReachingDef.nextDefId := 0 in
-    let fst_stm = List.hd slst in
-    let fst_iosh = IH.create 32 in
-    let _ = UD.onlyNoOffsetsAreDefs := false in
-    (*let _ = iosh_none_fill fst_iosh fdec.sformals in*)
-    let _ = IH.add ReachingDef.stmtStartData fst_stm.sid ((), 0, fst_iosh) in
-    let _ = ReachingDef.computeFirstPredecessor fst_stm ((), 0, fst_iosh) in
-    if !debug then
-      ignore (E.log "computeRDs: fst_stm.sid=%d\n" fst_stm.sid);
-    RD.compute [fst_stm];
-    if compare fdec.svar.vname (!debug_fn) = 0 then
-      debug := false
-    (* now ReachingDef.stmtStartData has the reaching def data in it *)
-  with Failure "hd" -> if compare fdec.svar.vname (!debug_fn) = 0 then
-    debug := false
-
-(* return the definitions that reach the statement
-   with statement id sid *)
-let getRDs sid = 
-  try
-    Some (IH.find ReachingDef.stmtStartData sid)
-  with Not_found ->
-    None
-(*    E.s (E.error "getRDs: sid %d not found\n" sid) *)
-
-let getDefIdStmt defid =
-  try
-    Some(IH.find ReachingDef.defIdStmtHash defid)
-  with Not_found ->
-    None
-
-let getStmt sid =
-  try Some(IH.find ReachingDef.sidStmtHash sid)
-  with Not_found -> None
-
-(* Pretty print the reaching definition data for
-   a function *)
-let ppFdec fdec =
-  seq line (fun stm ->
-    let ivih = IH.find ReachingDef.stmtStartData stm.sid in
-    ReachingDef.pretty () ivih) fdec.sbody.bstmts
-
-
-(* If this class is extended with a visitor on expressions,
-   then the current rd data is available at each expression *)
-class rdVisitorClass = object (self)
-  inherit nopCilVisitor
-
-  (* the statement being worked on *)
-  val mutable sid = -1
-
-  (* if a list of instructions is being processed,
-     then this is the corresponding list of
-     reaching definitions *)
-  val mutable rd_dat_lst = []
-
-  (* these are the reaching defs for the current
-     instruction if there is one *)
-  val mutable cur_rd_dat = None
-
-  method vstmt stm =
-    sid <- stm.sid;
-    match getRDs sid with
-      None -> 
-	if !debug then ignore(E.log "rdVis: stm %d had no data\n" sid);
-	cur_rd_dat <- None;
-	DoChildren
-    | Some(_,s,iosh) ->
-	match stm.skind with
-	  Instr il ->
-	    if !debug then ignore(E.log "rdVis: visit il\n");
-	    rd_dat_lst <- instrRDs il stm.sid ((),s,iosh) false;
-	    DoChildren
-	| _ ->
-	    if !debug then ignore(E.log "rdVis: visit non-il\n");
-	    cur_rd_dat <- None;
-	    DoChildren
-
-  method vinst i =
-    if !debug then ignore(E.log "rdVis: before %a, rd_dat_lst is %d long\n" 
-			    d_instr i (List.length rd_dat_lst));
-    try
-      cur_rd_dat <- Some(List.hd rd_dat_lst);
-      rd_dat_lst <- List.tl rd_dat_lst;
-      DoChildren
-    with Failure "hd" -> 
-      if !debug then ignore(E.log "rdVis: il rd_dat_lst mismatch\n");
-      DoChildren
-
-  method get_cur_iosh () =
-    match cur_rd_dat with
-      None -> (match getRDs sid with
-	None -> None
-      | Some(_,_,iosh) -> Some iosh)
-    | Some(_,_,iosh) -> Some iosh
-
-end
-
diff --git a/cil/src/ext/sfi.ml b/cil/src/ext/sfi.ml
deleted file mode 100755
index 9886526cd..000000000
--- a/cil/src/ext/sfi.ml
+++ /dev/null
@@ -1,337 +0,0 @@
-(*
- *
- * Copyright (c) 2005, 
- *  George C. Necula    <necula@cs.berkeley.edu>
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. The names of the contributors may not be used to endorse or promote
- * products derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
- * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
- * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- *)
-
-(** This is a module that inserts runtime checks for memory reads/writes and 
- * allocations *)
-
-open Pretty
-open Cil
-module E = Errormsg
-module H = Hashtbl
-
-let doSfi = ref false
-let doSfiReads = ref false
-let doSfiWrites = ref true
-
-(* A number of functions to be skipped *)
-let skipFunctions : (string, unit) H.t = H.create 13
-let mustSfiFunction (f: fundec) : bool = 
-  not (H.mem skipFunctions f.svar.vname)
-
-(** Some functions are known to be allocators *)
-type dataLocation = 
-    InResult  (* Interesting data is in the return value *)
-  | InArg of int (* in the nth argument. Starts from 1. *)
-  | InArgTimesArg of int * int (* (for size) data is the product of two 
-                                * arguments *)
-  | PointedToByArg of int (* pointed to by nth argument *)
-
-(** Compute the data based on the location and the actual argument list *)
-let extractData (dl: dataLocation) (args: exp list) (res: lval option) : exp = 
-  let getArg (n: int) = 
-    try List.nth args (n - 1) (* Args are based at 1 *)
-    with _ -> E.s (E.bug "Cannot extract argument %d at %a" 
-                     n d_loc !currentLoc)
-  in
-  match dl with 
-    InResult -> begin
-      match res with 
-        None -> 
-          E.s (E.bug "Cannot extract InResult data (at %a)" d_loc !currentLoc)
-      | Some r -> Lval r
-    end
-  | InArg n -> getArg n
-  | InArgTimesArg (n1, n2) -> 
-      let a1 = getArg n1 in
-      let a2 = getArg n2 in 
-      BinOp(Mult, mkCast ~e:a1 ~newt:longType, 
-            mkCast ~e:a2 ~newt:longType, longType)
-  | PointedToByArg n -> 
-      let a = getArg n in 
-      Lval (mkMem a NoOffset)
-      
-
-
-(* for each allocator, where is the length and where is the result *)
-let allocators: (string, (dataLocation * dataLocation)) H.t = H.create 13
-let _ = 
-  H.add allocators "malloc" (InArg 1, InResult);
-  H.add allocators "calloc" (InArgTimesArg (1, 2), InResult);
-  H.add allocators "realloc" (InArg 2, InResult)
-
-(* for each deallocator, where is the data being deallocated *)
-let deallocators: (string, dataLocation) H.t = H.create 13
-let _= 
-  H.add deallocators "free" (InArg 1);
-  H.add deallocators "realloc" (InArg 1)
-  
-(* Returns true if the given lvalue offset ends in a bitfield access. *) 
-let rec is_bitfield lo = match lo with
-  | NoOffset -> false
-  | Field(fi,NoOffset) -> not (fi.fbitfield = None)
-  | Field(_,lo) -> is_bitfield lo
-  | Index(_,lo) -> is_bitfield lo 
-
-(* Return an expression that evaluates to the address of the given lvalue.
- * For most lvalues, this is merely AddrOf(lv). However, for bitfields
- * we do some offset gymnastics. 
- *)
-let addr_of_lv (lv: lval) = 
-  let lh, lo = lv in 
-  if is_bitfield lo then begin
-    (* we figure out what the address would be without the final bitfield
-     * access, and then we add in the offset of the bitfield from the
-     * beginning of its enclosing comp *) 
-    let rec split_offset_and_bitfield lo = match lo with 
-      | NoOffset -> failwith "logwrites: impossible" 
-      | Field(fi,NoOffset) -> (NoOffset,fi)
-      | Field(e,lo) ->  let a,b = split_offset_and_bitfield lo in 
-                        ((Field(e,a)),b)
-      | Index(e,lo) ->  let a,b = split_offset_and_bitfield lo in
-                        ((Index(e,a)),b)
-    in 
-    let new_lv_offset, bf = split_offset_and_bitfield lo in
-    let new_lv = (lh, new_lv_offset) in 
-    let enclosing_type = TComp(bf.fcomp, []) in 
-    let bits_offset, bits_width = 
-      bitsOffset enclosing_type (Field(bf,NoOffset)) in
-    let bytes_offset = bits_offset / 8 in
-    let lvPtr = mkCast ~e:(mkAddrOf (new_lv)) ~newt:(charPtrType) in
-    (BinOp(PlusPI, lvPtr, (integer bytes_offset), ulongType))
-  end else 
-    (mkAddrOf (lh,lo)) 
-
-
-let mustLogLval (forwrite: bool) (lv: lval) : bool = 
-  match lv with
-    Var v, off -> (* Inside a variable. We assume the array offsets are fine *)
-      false
-  | Mem e, off -> 
-      if forwrite && not !doSfiWrites then 
-        false
-      else if not forwrite && not !doSfiReads then 
-        false
-
-      (* If this is an lval of function type, we do not log it *) 
-      else if isFunctionType (typeOfLval lv) then 
-        false
-      else 
-        true
-
-(* Create prototypes for the logging functions *)
-let mkProto (name: string) (args: (string * typ * attributes) list) = 
-  let fdec = emptyFunction name in
-  fdec.svar.vtype <- TFun(voidType, 
-                          Some args, false, []);
-  fdec
-  
-
-let logReads = mkProto "logRead" [ ("addr", voidPtrType, []);
-                                   ("what", charPtrType, []);
-                                   ("file", charPtrType, []);
-                                   ("line", intType, []) ]
-let callLogRead (lv: lval) = 
-  let what = Pretty.sprint 80 (d_lval () lv) in
-  Call(None, 
-       Lval(Var(logReads.svar),NoOffset), 
-       [ addr_of_lv lv; mkString what; mkString !currentLoc.file;
-         integer !currentLoc.line], !currentLoc )
-
-let logWrites = mkProto "logWrite" [ ("addr", voidPtrType, []);
-                                     ("what", charPtrType, []);
-                                     ("file", charPtrType, []);
-                                     ("line", intType, []) ]
-let callLogWrite (lv: lval) = 
-  let what = Pretty.sprint 80 (d_lval () lv) in
-  Call(None, 
-       Lval(Var(logWrites.svar), NoOffset), 
-       [ addr_of_lv lv; mkString what; mkString !currentLoc.file;
-         integer !currentLoc.line], !currentLoc )
-
-let logStackFrame  = mkProto "logStackFrame" [ ("func", charPtrType, []) ]
-let callLogStack (fname: string) = 
-  Call(None, 
-       Lval(Var(logStackFrame.svar), NoOffset), 
-       [ mkString fname; ], !currentLoc )
-
-let logAlloc = mkProto "logAlloc" [ ("addr", voidPtrType, []);
-                                    ("size", intType, []);
-                                    ("file", charPtrType, []);
-                                    ("line", intType, []) ]
-let callLogAlloc (szloc: dataLocation) 
-                 (resLoc: dataLocation) 
-                 (args: exp list) 
-                 (res: lval option) = 
-  let sz = extractData szloc args res in 
-  let res = extractData resLoc args res in 
-  Call(None, 
-       Lval(Var(logAlloc.svar), NoOffset), 
-       [ res; sz; mkString !currentLoc.file;
-         integer !currentLoc.line ], !currentLoc )
-    
-  
-let logFree = mkProto "logFree" [ ("addr", voidPtrType, []);
-                                  ("file", charPtrType, []);
-                                  ("line", intType, []) ]
-let callLogFree  (dataloc: dataLocation) 
-                 (args: exp list) 
-                 (res: lval option) = 
-  let data = extractData dataloc args res in 
-  Call(None, 
-       Lval(Var(logFree.svar), NoOffset), 
-       [ data; mkString !currentLoc.file;
-         integer !currentLoc.line ], !currentLoc )
-
-class sfiVisitorClass : Cil.cilVisitor = object (self)
-  inherit nopCilVisitor
-      
-  method vexpr (e: exp) : exp visitAction = 
-    match e with 
-      Lval lv when mustLogLval false lv -> (* A read *)
-        self#queueInstr [ callLogRead lv ];
-        DoChildren
-
-    | _ -> DoChildren
-        
-    
-  method vinst (i: instr) : instr list visitAction = 
-    match i with 
-      Set(lv, e, l) when mustLogLval true lv ->
-        self#queueInstr [ callLogWrite lv ];
-        DoChildren
-
-    | Call(lvo, f, args, l) -> 
-        (* Instrument the write *)
-        (match lvo with 
-          Some lv when mustLogLval true lv -> 
-            self#queueInstr [ callLogWrite lv ]
-        | _ -> ());
-        (* Do the expressions in the call, and then see if we need to 
-         * instrument the function call *)
-        ChangeDoChildrenPost
-          ([i], 
-           (fun il -> 
-             currentLoc := l;
-             match f with 
-               Lval (Var fv, NoOffset) -> begin 
-                 (* Is it an allocator? *)
-                 try 
-                   let szloc, resloc = H.find allocators fv.vname in
-                   il @ [callLogAlloc szloc resloc args lvo]
-                 with Not_found -> begin
-                   (* Is it a deallocator? *)
-                   try 
-                     let resloc = H.find deallocators fv.vname in 
-                     il @ [ callLogFree resloc args lvo ]
-                   with Not_found -> 
-                     il
-                 end
-               end
-             | _ -> il))
-
-    | _ -> DoChildren
-
-  method vfunc (fdec: fundec) = 
-    (* Instead a stack log at the start of a function *)
-    ChangeDoChildrenPost 
-      (fdec,
-       fun fdec -> 
-         fdec.sbody <- 
-           mkBlock 
-             [ mkStmtOneInstr (callLogStack fdec.svar.vname);
-               mkStmt (Block fdec.sbody) ];
-         fdec)
-      
-end
-
-let doit (f: file) =
-  let sfiVisitor = new sfiVisitorClass in
-  let compileLoc (l: location) = function
-      ACons("inres", []) -> InResult
-    | ACons("inarg", [AInt n]) -> InArg n
-    | ACons("inargxarg", [AInt n1; AInt n2]) -> InArgTimesArg (n1, n2)
-    | ACons("pointedby", [AInt n]) -> PointedToByArg n
-    | _ -> E.warn "Invalid location at %a" d_loc l;
-        InResult
-  in
-  iterGlobals f
-    (fun glob -> 
-      match glob with 
-        GFun(fdec, _) when mustSfiFunction fdec -> 
-          ignore (visitCilFunction sfiVisitor fdec)
-      | GPragma(Attr("sfiignore", al), l) -> 
-          List.iter 
-            (function AStr fn -> H.add skipFunctions fn ()
-              | _ -> E.warn "Invalid argument in \"sfiignore\" pragma at %a"
-                            d_loc l)
-            al
-
-      | GPragma(Attr("sfialloc", al), l) -> begin
-          match al with 
-            AStr fname :: locsz :: locres :: [] -> 
-              H.add allocators fname (compileLoc l locsz, compileLoc l locres)
-          | _ -> E.warn "Invalid sfialloc pragma at %a" d_loc l
-      end
-                
-      | GPragma(Attr("sfifree", al), l) -> begin
-          match al with 
-            AStr fname :: locwhat :: [] -> 
-              H.add deallocators fname (compileLoc l locwhat)
-          | _ -> E.warn "Invalid sfifree pragma at %a" d_loc l
-      end
-                
-
-      | _ -> ());
-  (* Now add the prototypes for the instrumentation functions *)
-  f.globals <-
-    GVarDecl (logReads.svar, locUnknown) ::
-    GVarDecl (logWrites.svar, locUnknown) ::
-    GVarDecl (logStackFrame.svar, locUnknown) ::
-    GVarDecl (logAlloc.svar, locUnknown) :: 
-    GVarDecl (logFree.svar, locUnknown) :: f.globals
-
-
-let feature : featureDescr = 
-  { fd_name = "sfi";
-    fd_enabled = doSfi;
-    fd_description = "instrument memory operations";
-    fd_extraopt = [
-    "--sfireads", Arg.Set doSfiReads, "SFI for reads";
-    "--sfiwrites", Arg.Set doSfiWrites, "SFI for writes";
-    ];
-    fd_doit = doit;
-    fd_post_check = true;
-  } 
-
diff --git a/cil/src/ext/simplemem.ml b/cil/src/ext/simplemem.ml
deleted file mode 100644
index 1b27815c3..000000000
--- a/cil/src/ext/simplemem.ml
+++ /dev/null
@@ -1,132 +0,0 @@
-(*
- *
- * Copyright (c) 2001-2002, 
- *  George C. Necula    <necula@cs.berkeley.edu>
- *  Scott McPeak        <smcpeak@cs.berkeley.edu>
- *  Wes Weimer          <weimer@cs.berkeley.edu>
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. The names of the contributors may not be used to endorse or promote
- * products derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
- * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
- * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- *)
-
-(*
- * Simplemem: Transform a program so that all memory expressions are
- * "simple". Introduce well-typed temporaries to hold intermediate values
- * for expressions that would normally involve more than one memory
- * reference. 
- *
- * If simplemem succeeds, each lvalue should contain only one Mem()
- * constructor. 
- *)
-open Cil
-
-(* current context: where should we put our temporaries? *)
-let thefunc = ref None 
-
-(* build up a list of assignments to temporary variables *)
-let assignment_list = ref []
-
-(* turn "int a[5][5]" into "int ** temp" *)
-let rec array_to_pointer tau = 
-  match unrollType tau with
-    TArray(dest,_,al) -> TPtr(array_to_pointer dest,al)
-  | _ -> tau
-
-(* create a temporary variable in the current function *)
-let make_temp tau = 
-  let tau = array_to_pointer tau in 
-  match !thefunc with
-    Some(fundec) -> makeTempVar fundec ~name:("mem_") tau
-  | None -> failwith "simplemem: temporary needed outside a function"
-
-(* separate loffsets into "scalar addition parts" and "memory parts" *)
-let rec separate_loffsets lo = 
-  match lo with
-    NoOffset -> NoOffset, NoOffset
-  | Field(fi,rest) -> 
-      let s,m = separate_loffsets rest in
-      Field(fi,s) , m
-  | Index(_) -> NoOffset, lo
-
-(* Recursively decompose the lvalue so that what is under a "Mem()"
- * constructor is put into a temporary variable. *)
-let rec handle_lvalue (lb,lo) = 
-  let s,m = separate_loffsets lo in 
-  match lb with
-    Var(vi) -> 
-      handle_loffset (lb,s) m 
-  | Mem(Lval(Var(_),NoOffset)) ->
-			(* special case to avoid generating "tmp = ptr;" *)
-      handle_loffset (lb,s) m 
-  | Mem(e) -> 
-      begin
-        let new_vi = make_temp (typeOf e) in
-        assignment_list := (Set((Var(new_vi),NoOffset),e,!currentLoc)) 
-          :: !assignment_list ;
-        handle_loffset (Mem(Lval(Var(new_vi),NoOffset)),NoOffset) lo
-      end
-and handle_loffset lv lo = 
-  match lo with
-    NoOffset -> lv
-  | Field(f,o) -> handle_loffset (addOffsetLval (Field(f,NoOffset)) lv) o
-  | Index(exp,o) -> handle_loffset (addOffsetLval (Index(exp,NoOffset)) lv) o
-
-(* the transformation is implemented as a Visitor *)
-class simpleVisitor = object 
-  inherit nopCilVisitor
-
-  method vfunc fundec = (* we must record the current context *)
-    thefunc := Some(fundec) ;
-    DoChildren
-
-  method vlval lv = ChangeDoChildrenPost(lv,
-      (fun lv -> handle_lvalue lv))
-
-  method unqueueInstr () = 
-      let result = List.rev !assignment_list in
-      assignment_list := [] ;
-      result 
-end
-
-(* Main entry point: apply the transformation to a file *)
-let simplemem (f : file) =
-  try 
-    visitCilFileSameGlobals (new simpleVisitor) f;
-    f
-  with e -> Printf.printf "Exception in Simplemem.simplemem: %s\n"
-    (Printexc.to_string e) ; raise e
-
-let feature : featureDescr = 
-  { fd_name = "simpleMem";
-    fd_enabled = Cilutil.doSimpleMem;
-    fd_description = "simplify all memory expressions" ;
-    fd_extraopt = [];
-    fd_doit = (function (f: file) -> ignore (simplemem f)) ;
-    fd_post_check = true;
-  } 
diff --git a/cil/src/ext/simplify.ml b/cil/src/ext/simplify.ml
deleted file mode 100755
index 776d49163..000000000
--- a/cil/src/ext/simplify.ml
+++ /dev/null
@@ -1,845 +0,0 @@
-(*
- *
- * Copyright (c) 2001-2002, 
- *  George C. Necula    <necula@cs.berkeley.edu>
- *  Scott McPeak        <smcpeak@cs.berkeley.edu>
- *  Wes Weimer          <weimer@cs.berkeley.edu>
- *  Sumit Gulwani       <gulwani@cs.berkeley.edu>
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. The names of the contributors may not be used to endorse or promote
- * products derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
- * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
- * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- *)
-
-(* This module simplifies the expressions in a program in the following ways:
- 
-1. All expressions are either 
-
- basic::=
-    Const _ 
-    Addrof(Var v, NoOffset)
-    StartOf(Var v, NoOffset)
-    Lval(Var v, off), where v is a variable whose address is not taken
-                      and off contains only "basic"
-
- exp::=
-    basic
-    Lval(Mem basic, NoOffset)
-    BinOp(bop, basic, basic)
-    UnOp(uop, basic)
-    CastE(t, basic)
-   
- lval ::= 
-    Mem basic, NoOffset
-    Var v, off, where v is a variable whose address is not taken and off
-                contains only "basic"
-
- - all sizeof and alignof are turned into constants
- - accesses to variables whose address is taken is turned into "Mem" accesses
- - same for accesses to arrays
- - all field and index computations are turned into address arithmetic, 
-   including bitfields.
-
-*)
-
-
-open Pretty
-open Cil
-module E = Errormsg
-module H = Hashtbl
-
-type taExp = exp (* Three address expression *)
-type bExp = exp  (* Basic expression *)
-
-let debug = true
-
-(* Whether to split structs *)
-let splitStructs = ref true
-
-let onlyVariableBasics = ref false
-let noStringConstantsBasics = ref false
-
-exception BitfieldAccess
-
-(* Turn an expression into a three address expression (and queue some 
- * instructions in the process) *)
-let rec makeThreeAddress 
-    (setTemp: taExp -> bExp) (* Given an expression save it into a temp and 
-                              * return that temp *)
-    (e: exp) : taExp = 
-  match e with 
-    SizeOf _ | SizeOfE _ | AlignOf _ |  AlignOfE _ | SizeOfStr _ -> 
-      constFold true e
-  | Const _ -> e
-  | AddrOf (Var _, NoOffset) -> e
-  | Lval lv -> Lval (simplifyLval setTemp lv)
-  | BinOp(bo, e1, e2, tres) -> 
-      BinOp(bo, makeBasic setTemp e1, makeBasic setTemp e2, tres)
-  | UnOp(uo, e1, tres) -> 
-      UnOp(uo, makeBasic setTemp e1, tres)
-  | CastE(t, e) -> 
-      CastE(t, makeBasic setTemp e)
-  | AddrOf lv -> begin
-      match simplifyLval setTemp lv with 
-        Mem a, NoOffset -> a
-      | _ -> (* This is impossible, because we are taking the address 
-          * of v and simplifyLval should turn it into a Mem, except if the 
-          * sizeof has failed.  *)
-          E.s (bug "Simplify: makeThreeAddress for AddrOf(LV=%a, LVT=%a)"
-              d_lval lv d_type (typeOfLval lv))
-  end
-  | StartOf lv -> 
-      makeThreeAddress setTemp (AddrOf (addOffsetLval (Index(zero, NoOffset))
-                                          lv))
-
-(* Make a basic expression *)      
-and makeBasic (setTemp: taExp -> bExp) (e: exp) : bExp = 
-  let dump = false (* !currentLoc.line = 395 *) in
-  if dump then
-    ignore (E.log "makeBasic %a\n" d_plainexp e);
-  (* Make it a three address expression first *)
-  let e' = makeThreeAddress setTemp e in
-  if dump then 
-    ignore (E.log "   e'= %a\n" d_plainexp e);
-  (* See if it is a basic one *)
-  match e' with 
-  | Lval (Var _, _) -> e'
-  | Const _ | AddrOf (Var _, NoOffset) | StartOf (Var _, NoOffset) ->
-      if !onlyVariableBasics then setTemp e' else e'
-  | SizeOf _ | SizeOfE _ | AlignOf _ |  AlignOfE _ | SizeOfStr _ -> 
-      E.s (bug "Simplify: makeBasic found SizeOf: %a" d_exp e')
-
-   (* We cannot make a function to be Basic, unless it actually is a variable 
-    * already. If this is a function pointer the best we can do is to make 
-    * the address of the function basic *)
-  | Lval (Mem a, NoOffset) when isFunctionType (typeOf e') -> 
-      if dump then 
-        ignore (E.log "  a function type\n");
-      let a' = makeBasic setTemp a in
-      Lval (Mem a', NoOffset)
-
-  | _ -> setTemp e' (* Put it into a temporary otherwise *)
-
-
-and simplifyLval 
-    (setTemp: taExp -> bExp) 
-    (lv: lval) : lval = 
-  (* Add, watching for a zero *)
-  let add (e1: exp) (e2: exp) = 
-    if isZero e2 then e1 else BinOp(PlusA, e1, e2, !upointType) 
-  in
-  (* Convert an offset to an integer, and possibly a residual bitfield offset*)
-  let rec offsetToInt 
-      (t: typ) (* The type of the host *)
-      (off: offset) : exp * offset = 
-    match off with 
-      NoOffset -> zero, NoOffset
-    | Field(fi, off') -> begin
-        let start = 
-          try 
-            let start, _ = bitsOffset t (Field(fi, NoOffset)) in
-            start
-          with SizeOfError (whystr, t') -> 
-            E.s (E.bug "%a: Cannot compute sizeof: %s: %a"
-                   d_loc !currentLoc whystr d_type t')
-        in
-        if start land 7 <> 0 then begin
-          (* We have a bitfield *)
-          assert (off' = NoOffset);
-          zero, Field(fi, off')
-        end else begin
-          let next, restoff = offsetToInt fi.ftype off' in
-          add (integer (start / 8)) next,  restoff
-        end
-    end
-    | Index(ei, off') -> begin
-        let telem = match unrollType t with 
-          TArray(telem, _, _) -> telem
-        | _ -> E.s (bug "Simplify: simplifyLval: index on a non-array")
-        in
-        let next, restoff = offsetToInt telem off' in
-        add 
-          (BinOp(Mult, ei, SizeOf telem, !upointType)) 
-          next,
-        restoff
-    end
-  in
-  let tres = TPtr(typeOfLval lv, []) in
-  match lv with 
-    Mem a, off -> 
-      let offidx, restoff = offsetToInt (typeOfLval (Mem a, NoOffset)) off in
-      let a' = 
-        if offidx <> zero then 
-          add (mkCast a !upointType) offidx
-        else
-          a
-      in
-      let a' = makeBasic setTemp a' in
-      Mem (mkCast a' tres), restoff
-
-  | Var v, off when v.vaddrof -> (* We are taking this variable's address *)
-      let offidx, restoff = offsetToInt v.vtype off in
-      (* We cannot call makeBasic recursively here, so we must do it 
-       * ourselves *)
-      let a = mkAddrOrStartOf (Var v, NoOffset) in
-      let a' = 
-        if offidx = zero then a else 
-        add (mkCast a !upointType) (makeBasic setTemp offidx) 
-      in
-      let a' = setTemp a' in
-      Mem (mkCast a' tres), restoff
-
-  | Var v, off -> 
-      (Var v, simplifyOffset setTemp off)
-
-
-(* Simplify an offset and make sure it has only three address expressions in 
- * indices *)
-and simplifyOffset (setTemp: taExp -> bExp) = function
-    NoOffset -> NoOffset
-  | Field(fi, off) -> Field(fi, simplifyOffset setTemp off)
-  | Index(ei, off) -> 
-      let ei' = makeBasic setTemp ei in
-      Index(ei', simplifyOffset setTemp off)
-
-
-
-
-(** This is a visitor that will turn all expressions into three address code *)
-class threeAddressVisitor (fi: fundec) = object (self)
-  inherit nopCilVisitor
-
-  method private makeTemp (e1: exp) : exp = 
-    let t = makeTempVar fi (typeOf e1) in
-    (* Add this instruction before the current statement *)
-    self#queueInstr [Set(var t, e1, !currentLoc)];
-    Lval(var t)
-
-      (* We'll ensure that this gets called only for top-level expressions 
-       * inside functions. We must turn them into three address code. *)
-  method vexpr (e: exp) = 
-    let e' = makeThreeAddress self#makeTemp e in
-    ChangeTo e'
-
-
-     (** We want the argument in calls to be simple variables *)
-  method vinst (i: instr) =
-    match i with 
-      Call (someo, f, args, loc) -> 
-        let someo' = 
-          match someo with 
-            Some lv -> Some (simplifyLval self#makeTemp lv)
-          | _ -> None
-        in
-        let f' = makeBasic self#makeTemp f in
-        let args' = List.map (makeBasic self#makeTemp) args in 
-        ChangeTo [ Call (someo', f', args', loc) ]
-  | _ -> DoChildren
-
-      (* This method will be called only on top-level "lvals" (those on the 
-       * left of assignments and function calls) *)
-  method vlval (lv: lval) = 
-    ChangeTo (simplifyLval self#makeTemp lv)
-end
-
-(********************
-  Next is an old version of the code that was splitting structs into 
- * variables. It was not working on variables that are arguments or returns 
- * of function calls. 
-(** This is a visitor that splits structured variables into separate 
- * variables. *)
-let isStructType (t: typ): bool = 
-  match unrollType t with
-    TComp (ci, _)  -> ci.cstruct
-  | _ -> false
-
-(* Keep track of how we change the variables. For each variable id we keep a 
- * hash table that maps an offset (a sequence of fieldinfo) into a 
- * replacement variable. We also keep track of the splittable vars: those 
- * with structure type but whose address is not take and which do not appear 
- * as the argument to a Return *)
-let splittableVars: (int, unit) H.t = H.create 13
-let replacementVars: (int * offset, varinfo) H.t = H.create 13
-
-let findReplacement (fi: fundec) (v: varinfo) (off: offset) : varinfo = 
-  try
-    H.find replacementVars (v.vid, off)
-  with Not_found -> begin
-    let t = typeOfLval (Var v, off) in
-    (* make a name for this variable *)
-    let rec mkName = function
-      | Field(fi, off) -> "_" ^ fi.fname ^ mkName off
-      | _ -> ""
-    in
-    let v' = makeTempVar fi ~name:(v.vname ^ mkName off ^ "_") t in
-    H.add replacementVars (v.vid, off) v';
-    if debug then
-      ignore (E.log "Simplify: %s (%a) replace %a with %s\n"
-                fi.svar.vname
-                d_loc !currentLoc
-                d_lval (Var v, off)
-                v'.vname);
-    v'
-  end
-
-      (* Now separate the offset into a sequence of field accesses and the 
-      * rest of the offset *)
-let rec separateOffset (off: offset): offset * offset = 
-  match off with
-    NoOffset -> NoOffset, NoOffset
-  | Field(fi, off') when fi.fcomp.cstruct -> 
-      let off1, off2 = separateOffset off' in
-      Field(fi, off1), off2
-  | _ -> NoOffset, off
-
-
-class splitStructVisitor (fi: fundec) = object (self) 
-  inherit nopCilVisitor
-
-  method vlval (lv: lval) = 
-    match lv with 
-      Var v, off when H.mem splittableVars v.vid ->
-        (* The type of this lval better not be a struct *)
-        if isStructType (typeOfLval lv) then 
-          E.s (unimp "Simplify: found lval of struct type %a : %a\n"
-                 d_lval lv d_type (typeOfLval lv));
-        let off1, restoff = separateOffset off in
-        let lv' = 
-          if off1 <> NoOffset then begin
-            (* This is a splittable variable and we have an offset that makes 
-            * it a scalar. Find the replacement variable for this *)
-            let v' = findReplacement fi v off1 in
-            if restoff = NoOffset then 
-              Var v', NoOffset
-            else (* We have some more stuff. Use Mem *)
-              Mem (mkAddrOrStartOf (Var v', NoOffset)), restoff
-          end else begin (* off1 = NoOffset *)
-            if restoff = NoOffset then 
-              E.s (bug "Simplify: splitStructVisitor:lval")
-            else
-              simplifyLval 
-                (fun e1 -> 
-                  let t = makeTempVar fi (typeOf e1) in
-                  (* Add this instruction before the current statement *)
-                  self#queueInstr [Set(var t, e1, !currentLoc)];
-                  Lval(var t)) 
-                (Mem (mkAddrOrStartOf (Var v, NoOffset)), restoff)
-          end
-        in
-        ChangeTo lv'
-
-    | _ -> DoChildren
-
-  method vinst (i: instr) = 
-    (* Accumulate to the list of instructions a number of assignments of 
-     * non-splittable lvalues *)
-    let rec accAssignment (ci: compinfo) (dest: lval) (what: lval) 
-                         (acc: instr list) : instr list = 
-      List.fold_left
-        (fun acc f -> 
-          let dest' = addOffsetLval (Field(f, NoOffset)) dest in
-          let what' = addOffsetLval (Field(f, NoOffset)) what in
-          match unrollType f.ftype with 
-            TComp(ci, _) when ci.cstruct -> 
-              accAssignment ci dest' what' acc
-          | TArray _ -> (* We must copy the array *)
-              (Set((Mem (AddrOf dest'), NoOffset),
-                   Lval (Mem (AddrOf what'), NoOffset), !currentLoc)) :: acc
-          | _ -> (* If the type of f is not a struct then leave this alone *)
-              (Set(dest', Lval what', !currentLoc)) :: acc)
-        acc
-        ci.cfields
-    in
-    let doAssignment (ci: compinfo) (dest: lval) (what: lval) : instr list = 
-      let il' = accAssignment ci dest what [] in
-      List.concat (List.map (visitCilInstr (self :> cilVisitor)) il')
-    in
-    match i with 
-      Set(((Var v, off) as lv), what, _) when H.mem splittableVars v.vid ->
-        let off1, restoff = separateOffset off in
-        if restoff <> NoOffset then (* This means that we are only assigning 
-                                     * part of a replacement variable. Leave 
-                                     * this alone because the vlval will take 
-                                     * care of it *)
-          DoChildren
-        else begin
-          (* The type of the replacement has to be a structure *)
-          match unrollType (typeOfLval lv) with
-            TComp (ci, _) when ci.cstruct -> 
-              (* The assigned thing better be an lvalue *)
-              let whatlv = 
-                match what with 
-                  Lval lv -> lv
-                | _ -> E.s (unimp "Simplify: assigned struct is not lval")
-              in
-              ChangeTo (doAssignment ci (Var v, off) whatlv)
-              
-          | _ -> (* vlval will take care of it *)
-              DoChildren
-        end
-
-    | Set(dest, Lval (Var v, off), _) when H.mem splittableVars v.vid -> 
-        let off1, restoff = separateOffset off in
-        if restoff <> NoOffset then (* vlval will do this *)
-          DoChildren
-        else begin
-          (* The type of the replacement has to be a structure *)
-          match unrollType (typeOfLval dest) with
-            TComp (ci, _) when ci.cstruct -> 
-              ChangeTo (doAssignment ci dest (Var v, off))
-              
-          | _ -> (* vlval will take care of it *)
-              DoChildren
-        end
-          
-    | _ -> DoChildren
-        
-end
-*)
-
-(* Whether to split the arguments of functions *)
-let splitArguments = true
-
-(* Whether we try to do the splitting all in one pass. The advantage is that 
- * it is faster and it generates nicer names *)
-let lu = locUnknown
-
-(* Go over the code and split some temporary variables of stucture type into 
- * several separate variables. The hope is that the compiler will have an 
- * easier time to do standard optimizations with the resulting scalars *)
-(* Unfortunately, implementing this turns out to be more complicated than I 
- * thought *)
-
-(** Iterate over the fields of a structured type. Returns the empty list if 
- * no splits. The offsets are in order in which they appear in the structure 
- * type. Along with the offset we pass a string that identifies the 
- * meta-component, and the type of that component. *)
-let rec foldRightStructFields
-    (doit: offset -> string -> typ -> 'a) (* Invoked on non-struct fields *)
-    (off: offset)
-    (post: 'a list) (** A suffix to what you compute *)
-    (fields: fieldinfo list) : 'a list = 
-  List.fold_right
-    (fun f post -> 
-      let off' = addOffset (Field(f, NoOffset)) off in 
-      match unrollType f.ftype with 
-        TComp (comp, _) when comp.cstruct -> (* struct type: recurse *)
-          foldRightStructFields doit off' post comp.cfields
-      | _ -> 
-          (doit off' f.fname f.ftype) :: post)
-    fields
-    post
-  
-
-let rec foldStructFields
-    (t: typ) 
-    (doit: offset -> string -> typ -> 'a) 
-    : 'a list = 
-  match unrollType t with 
-    TComp (comp, _) when comp.cstruct -> 
-      foldRightStructFields doit NoOffset [] comp.cfields
-  | _ -> []
-      
-      
-(* Map a variable name to a list of component variables, along with the 
- * accessor offset. The fields are in the order in which they appear in the 
- * structure. *)
-let newvars : (string, (offset * varinfo) list) H.t = H.create 13
-
-(* Split a variable and return the replacements, in the proper order. If this 
- * variable is not split, then return just the variable. *)
-let splitOneVar (v: varinfo) 
-                (mknewvar: string -> typ -> varinfo) : varinfo list = 
-  try 
-    (* See if we have already split it *)
-    List.map snd (H.find newvars v.vname)
-  with Not_found -> begin
-    let vars: (offset * varinfo) list = 
-      foldStructFields v.vtype 
-        (fun off n t -> (* make a new one *)
-          let newname = v.vname ^ "_" ^ n in 
-          let v'= mknewvar newname t in
-          (off, v'))
-    in
-    if vars = [] then
-      [ v ]
-    else begin
-      (* Now remember the newly created vars *)
-      H.add newvars v.vname vars;
-      List.map snd vars (* Return just the vars *)
-    end
-  end
-
-
-(* A visitor that finds all locals that appear in a call or have their 
- * address taken *)
-let dontSplitLocals : (string, bool) H.t = H.create 111
-class findVarsCantSplitClass : cilVisitor = object (self) 
-  inherit nopCilVisitor
-        
-        (* expressions, to see the address being taken *)
-  method vexpr (e: exp) : exp visitAction =
-    match e with 
-      AddrOf (Var v, NoOffset) -> 
-        H.add dontSplitLocals v.vname true; SkipChildren
-      (* See if we take the address of the "_ms" field in a variable *)
-    | _ -> DoChildren
-
-
-          (* variables involved in call instructions *)
-  method vinst (i: instr) : instr list visitAction = 
-    match i with 
-      Call (res, f, args, _) -> 
-        (match res with 
-          Some (Var v, NoOffset) -> H.add dontSplitLocals v.vname true
-        | _ -> ());
-        if not splitArguments then 
-          List.iter (fun a -> 
-            match a with
-              Lval (Var v, NoOffset) -> H.add dontSplitLocals v.vname true
-            | _ -> ()) args; 
-        (* Now continue the visit *)
-        DoChildren
-
-    | _ -> DoChildren
-
-          (* Variables used in return should not be split *)
-  method vstmt (s: stmt) : stmt visitAction = 
-    match s.skind with 
-      Return (Some (Lval (Var v, NoOffset)), _) -> 
-        H.add dontSplitLocals v.vname true; DoChildren
-    | Return (Some e, _) -> 
-        DoChildren
-    | _ -> DoChildren
-
-  method vtype t = SkipChildren
-
-end
-let findVarsCantSplit = new findVarsCantSplitClass
-
-let isVar lv =
-  match lv with 
-      (Var v, NoOffset) -> true
-    | _ -> false
-
-
-class splitVarVisitorClass(func:fundec option) : cilVisitor = object (self)
-  inherit nopCilVisitor
-
-  method private makeTemp (e1: exp) : exp = 
-    let fi:fundec = match func with
-        Some f -> f
-      | None -> 
-          E.s (bug "You can't create a temporary if you're not in a function.")
-    in
-    let t = makeTempVar fi (typeOf e1) in
-    (* Add this instruction before the current statement *)
-    self#queueInstr [Set(var t, e1, !currentLoc)];
-    Lval(var t)
-
-
-  (* We must process the function types *)
-  method vtype t = 
-    (* We invoke the visitor first and then we fix it *)
-    let postProcessFunType (t: typ) : typ = 
-      match t with 
-        TFun(rt, Some params, isva, a) -> 
-          let rec loopParams = function
-              [] -> []
-            | ((pn, pt, pa) :: rest) as params -> 
-                let rest' = loopParams rest in
-                let res: (string * typ * attributes) list = 
-                  foldStructFields pt
-                    (fun off n t -> 
-                      (* Careful with no-name parameters, or we end up with 
-                       * many parameters named _p ! *)
-                      ((if pn <> "" then pn ^ n else ""), t, pa)) 
-                in
-                if res = [] then (* Not a fat *)
-                  if rest' == rest then 
-                    params (* No change at all. Try not to reallocate so that 
-                            * the visitor does not allocate. *)
-                  else
-                    (pn, pt, pa) :: rest'
-                else (* Some change *)
-                  res @ rest'
-          in
-          let params' = loopParams params in
-          if params == params' then 
-            t
-          else
-            TFun(rt, Some params', isva, a)
-          
-      | t -> t
-    in
-    if splitArguments then 
-      ChangeDoChildrenPost(t, postProcessFunType)
-    else
-      SkipChildren
-
-      (* Whenever we see a variable with a field access we try to replace it 
-       * by its components *)
-  method vlval ((b, off) : lval) : lval visitAction = 
-    try
-      match b, off with
-        Var v, (Field _ as off) ->
-          (* See if this variable has some splits.Might throw Not_found *)
-          let splits = H.find newvars v.vname in
-          (* Now find among the splits one that matches this offset. And 
-           * return the remaining offset *)
-          let rec find = function
-              [] -> 
-                E.s (E.bug "Cannot find component %a of %s\n" 
-                       (d_offset nil) off v.vname)
-            | (splitoff, splitvar) :: restsplits -> 
-                let rec matches = function 
-                    Field(f1, rest1), Field(f2, rest2) 
-                      when f1.fname = f2.fname -> 
-                        matches (rest1, rest2)
-                  | off, NoOffset -> 
-                      (* We found a match *)
-                      (Var splitvar, off)
-                  | NoOffset, restoff -> 
-                      ignore (warn "Found aggregate lval %a\n" 
-                                d_lval (b, off));
-                      find restsplits
-
-                  | _, _ -> (* We did not match this one; go on *)
-                      find restsplits
-                in
-                matches (off, splitoff)
-          in
-          ChangeTo (find splits)
-      | _ -> DoChildren
-    with Not_found -> DoChildren
-
-        (* Sometimes we pass the variable as a whole to a function or we 
-         * assign it to something *)
-  method vinst (i: instr) : instr list visitAction = 
-    match i with
-      (* Split into several instructions and then do children inside
-       * the rhs.  Howver, v might appear in the rhs and if we
-       * duplicate the instruction we might get bad
-       * results. (e.g. test/small1/simplify_Structs2.c). So first copy
-       * the rhs to temp variables, then to v. 
-       *
-       * Optimization: if the rhs is a variable, skip the temporary vars.
-       * Either the rhs = lhs, in which case this is all a nop, or it's not, 
-       * in which case the rhs and lhs don't overlap.*)
-
-      Set ((Var v, NoOffset), Lval lv, l) when H.mem newvars v.vname -> begin
-        let needTemps = not (isVar lv) in
-        let vars4v = H.find newvars v.vname in
-        if vars4v = [] then E.s (errorLoc l "No fields in split struct");
-        ChangeTo 
-          (List.map 
-             (fun (off, newv) ->  
-                let lv' = 
-                  visitCilLval (self :> cilVisitor)
-                    (addOffsetLval off lv) in
-                (* makeTemp creates a temp var and puts (Lval lv') in it,
-                   before any instructions in this ChangeTo list are handled.*)
-                let lv_tmp = if needTemps then
-                               self#makeTemp (Lval lv') 
-                             else 
-                               (Lval lv')
-                in
-                Set((Var newv, NoOffset), lv_tmp, l))
-             vars4v)
-      end 
- 
-      | Set (lv, Lval (Var v, NoOffset), l) when H.mem newvars v.vname -> begin
-          (* Split->NonSplit assignment.  no overlap between lhs and rhs 
-             is possible*)
-          let vars4v = H.find newvars v.vname in
-          if vars4v = [] then E.s (errorLoc l "No fields in split struct");
-          ChangeTo  
-            (List.map 
-               (fun (off, newv) -> 
-                  let lv' = 
-                    visitCilLval (self :> cilVisitor)
-                      (addOffsetLval off lv) in
-                  Set(lv', Lval (Var newv, NoOffset), l))
-               vars4v)
-        end 
-
-        (* Split all function arguments in calls *)
-      | Call (ret, f, args, l) when splitArguments ->
-          (* Visit the children first and then see if we must change the 
-           * arguments *)
-          let finishArgs = function
-              [Call (ret', f', args', l')] as i' -> 
-                let mustChange = ref false in
-                let newargs = 
-                  (* Look for opportunities to split arguments. If we can
-                   * split, we must split the original argument (in args).
-                   * Otherwise, we use the result of processing children
-                   * (in args'). *)
-                  List.fold_right2
-                    (fun a a' acc -> 
-                      match a with
-                        Lval (Var v, NoOffset) when H.mem newvars v.vname -> 
-                          begin
-                            mustChange := true;
-                            (List.map 
-                               (fun (_, newv) -> 
-                                 Lval (Var newv, NoOffset)) 
-                               (H.find newvars v.vname))
-                            @ acc
-                          end
-                      | Lval lv  -> begin
-                          let newargs = 
-                            foldStructFields (typeOfLval lv)
-                              (fun off n t ->
-                                 let lv' = addOffsetLval off lv in
-                                 Lval lv') in
-                          if newargs = [] then
-                            a' :: acc (* not a split var *)
-                          else begin
-                            mustChange := true;
-                            newargs @ acc
-                          end
-                        end
-                      | _ -> (* only lvals are split, right? *)
-                          a' :: acc)
-                    args args'
-                    []
-                in
-                if !mustChange then 
-                  [Call (ret', f', newargs, l')]
-                else
-                  i'
-            | _ -> E.s (E.bug "splitVarVisitorClass: expecting call")
-          in
-          ChangeDoChildrenPost ([i], finishArgs)
-
-      | _ -> DoChildren
-
-        
-  method vfunc (func: fundec) : fundec visitAction = 
-    H.clear newvars;
-    H.clear dontSplitLocals;
-    (* Visit the type of the function itself *)
-    if splitArguments then 
-      func.svar.vtype <- visitCilType (self :> cilVisitor) func.svar.vtype;
-
-    (* Go over the block and find the candidates *)
-    ignore (visitCilBlock findVarsCantSplit func.sbody);
-
-    (* Now go over the formals and create the splits *)
-    if splitArguments then begin
-      (* Split all formals because we will split all arguments in function 
-       * types *)
-      let newformals = 
-        List.fold_right 
-          (fun form acc -> 
-            (* Process the type first *)
-            form.vtype <- 
-               visitCilType (self : #cilVisitor :> cilVisitor) form.vtype;
-            let form' = 
-              splitOneVar form 
-                          (fun s t -> makeLocalVar func ~insert:false s t)
-            in
-            (* Now it is a good time to check if we actually can split this 
-             * one *)
-            if List.length form' > 1 &&
-               H.mem dontSplitLocals form.vname then
-              ignore (warn "boxsplit: can't split formal \"%s\" in %s. Make sure you never take the address of a formal.\n"
-                     form.vname func.svar.vname);
-            form' @ acc)
-          func.sformals [] 
-      in
-      (* Now make sure we fix the type.  *)
-      setFormals func newformals
-    end;
-    (* Now go over the locals and create the splits *)
-    List.iter 
-      (fun l ->
-        (* Process the type of the local *)
-        l.vtype <- visitCilType (self :> cilVisitor) l.vtype;
-        (* Now see if we must split it *)
-        if not (H.mem dontSplitLocals l.vname) then begin
-          ignore (splitOneVar l (fun s t -> makeTempVar func ~name:s t))
-        end) 
-      func.slocals;
-    (* Now visit the body and change references to these variables *)
-    ignore (visitCilBlock (self :> cilVisitor) func.sbody);
-    H.clear newvars;
-    H.clear dontSplitLocals;
-    SkipChildren  (* We are done with this function *)
-
-  (* Try to catch the occurrences of the variable in a sizeof expression *)
-  method vexpr (e: exp) = 
-    match e with 
-    | SizeOfE (Lval(Var v, NoOffset)) -> begin
-        try
-          let splits =  H.find newvars v.vname in
-          (* We cound here on no padding between the elements ! *)
-          ChangeTo
-            (List.fold_left
-               (fun acc (_, thisv) -> 
-                 BinOp(PlusA, SizeOfE(Lval(Var thisv, NoOffset)), 
-                       acc, uintType))
-               zero
-               splits)
-        with Not_found -> DoChildren
-    end
-    | _ -> DoChildren
-end
-
-let doGlobal = function 
-    GFun(fi, _) ->  
-      (* Visit the body and change all expressions into three address code *)
-      let v = new threeAddressVisitor fi in
-      fi.sbody <- visitCilBlock v fi.sbody;
-      if !splitStructs then begin
-        H.clear dontSplitLocals;
-        let splitVarVisitor = new splitVarVisitorClass (Some fi) in    
-        ignore (visitCilFunction splitVarVisitor fi);
-      end
-  | GVarDecl(vi, _) when isFunctionType vi.vtype ->
-      (* we might need to split the args/return value in the function type. *)
-      if !splitStructs then begin
-        H.clear dontSplitLocals;
-        let splitVarVisitor = new splitVarVisitorClass None in    
-        ignore (visitCilVarDecl splitVarVisitor vi);
-      end
-  | _ -> ()
-      
-let feature : featureDescr = 
-  { fd_name = "simplify";
-    fd_enabled = ref false;
-    fd_description = "compiles CIL to 3-address code";
-    fd_extraopt = [
-      ("--no-split-structs", Arg.Unit (fun _ -> splitStructs := false),
-                    "do not split structured variables"); 
-    ];
-    fd_doit = (function f -> iterGlobals f doGlobal);
-    fd_post_check = true;
-}
-
diff --git a/cil/src/ext/ssa.ml b/cil/src/ext/ssa.ml
deleted file mode 100644
index 942c92b64..000000000
--- a/cil/src/ext/ssa.ml
+++ /dev/null
@@ -1,696 +0,0 @@
-module B=Bitmap
-module E = Errormsg
-
-open Cil
-open Pretty
-
-let debug = false
-    
-(* Globalsread, Globalswritten should be closed under call graph *)
-
-module StringOrder = 
-  struct
-    type t = string
-    let compare s1 s2 = 
-      if s1 = s2 then 0 else
-      if s1 < s2 then -1 else 1
-  end
-  
-module StringSet = Set.Make (StringOrder)
-
-module IntOrder = 
-  struct
-    type t = int
-    let compare i1 i2 = 
-      if i1 = i2 then 0 else
-      if i1 < i2 then -1 else 1
-  end
-  
-module IntSet = Set.Make (IntOrder)
-
-
-type cfgInfo = {
-    name: string; (* The function name *)
-    start   : int;          
-    size    : int;    
-    blocks: cfgBlock array; (** Dominating blocks must come first *)
-    successors: int list array; (* block indices *)
-    predecessors: int list array;   
-    mutable nrRegs: int;
-    mutable regToVarinfo: varinfo array; (** Map register IDs to varinfo *)
-  } 
-
-(** A block corresponds to a statement *)
-and cfgBlock = { 
-    bstmt: Cil.stmt; 
-
-    (* We abstract the statement as a list of def/use instructions *)
-    instrlist: instruction list;
-    mutable livevars: (reg * int) list;  
-    (** For each variable ID that is live at the start of the block, the 
-     * block whose definition reaches this point. If that block is the same 
-     * as the current one, then the variable is a phi variable *)
-    mutable reachable: bool;
-  }
-  
-and instruction = (reg list * reg list) 
-  (* lhs variables, variables on rhs.  *)
-
-
-and reg = int
-
-type idomInfo = int array  (* immediate dominator *)
-
-and dfInfo = (int list) array  (* dominance frontier *)
-
-and oneSccInfo = {
-    nodes: int list;
-    headers: int list;
-    backEdges: (int*int) list;
-  } 
-
-and sccInfo = oneSccInfo list 
-
-(* Muchnick's Domin_Fast, 7.16 *)
-
-let compute_idom (flowgraph: cfgInfo): idomInfo = 
-  let start = flowgraph.start in
-  let size  = flowgraph.size in
-  let successors = flowgraph.successors in
-  let predecessors = flowgraph.predecessors in 
-  let n0 = size in (* a new node (not in the flowgraph) *)
-  let idom = Array.make size (-1) in (* Make an array of immediate dominators  *)
-  let nnodes  = size + 1 in
-  let nodeSet = B.init nnodes (fun i -> true) in
-  
-  let ndfs     = Array.create nnodes 0 in (* mapping from depth-first 
-                                         * number to nodes. DForder 
-                                         * starts at 1, with 0 used as 
-                                         * an invalid entry  *)
-  let parent   = Array.create nnodes 0 in (* the parent in depth-first 
-                                         * spanning tree  *) 
-
-      (* A semidominator of w is the node v with the minimal DForder such 
-       * that there is a path from v to w containing only nodes with the 
-       * DForder larger than w.  *)
-  let sdno     = Array.create nnodes 0 in (* depth-first number of 
-                                         * semidominator  *)
-  
-                                        (* The set of nodes whose 
-                                           * semidominator is ndfs(i) *)
-  let bucket   = Array.init nnodes (fun _ -> B.cloneEmpty nodeSet) in
-  
-       (* The functions link and eval maintain a forest within the 
-          * depth-first spanning tree. Ancestor is n0 is the node is a root in 
-          * the forest. Label(v) is the node in the ancestor chain with the 
-          * smallest depth-first number of its semidominator. Child and Size 
-          * are used to keep the trees in the forest balanced  *)
-  let ancestor = Array.create nnodes 0 in 
-  let label    = Array.create nnodes 0 in
-  let child    = Array.create nnodes 0 in
-  let size     = Array.create nnodes 0 in
-  
-  
-  let n = ref 0 in                  (* depth-first scan and numbering. 
-                                       * Initialize data structures. *)
-  ancestor.(n0) <- n0;
-  label.(n0)    <- n0;
-  let rec depthFirstSearchDom v =
-    incr n;
-  sdno.(v) <- !n;
-    ndfs.(!n) <- v; label.(v) <- v;
-    ancestor.(v) <- n0;             (* All nodes are roots initially *)
-    child.(v) <- n0; size.(v) <- 1;
-    List.iter 
-      (fun w ->
-	if sdno.(w) = 0 then begin 
-          parent.(w) <- v; depthFirstSearchDom w 
-	end)
-      successors.(v);
-  in
-       (* Determine the ancestor of v whose semidominator has the the minimal 
-          * DFnumber. In the process, compress the paths in the forest.  *)
-  let eval v =
-    let rec compress v =
-      if ancestor.(ancestor.(v)) <> n0 then
-	begin
-	  compress ancestor.(v);
-	  if sdno.(label.(ancestor.(v))) < sdno.(label.(v)) then
-	    label.(v) <- label.(ancestor.(v));
-	  ancestor.(v) <- ancestor.(ancestor.(v))
-      end
-    in
-    if ancestor.(v) = n0 then label.(v)
-    else begin
-      compress v;
-      if sdno.(label.(ancestor.(v))) >= sdno.(label.(v)) then
-	label.(v)
-      else label.(ancestor.(v))
-    end
-  in
-  
-  let link v w =
-    let s = ref w in
-    while sdno.(label.(w)) < sdno.(label.(child.(!s))) do
-      if size.(!s) + size.(child.(child.(!s))) >= 2* size.(child.(!s)) then
-	(ancestor.(child.(!s)) <- !s;
-	 child.(!s) <- child.(child.(!s)))
-      else
-	(size.(child.(!s)) <- size.(!s);
-	 ancestor.(!s) <- child.(!s); s := child.(!s));
-    done;
-    label.(!s) <- label.(w);
-    size.(v) <- size.(v) + size.(w);
-    if size.(v) < 2 * size.(w) then begin
-      let tmp = !s in
-      s :=  child.(v);
-      child.(v) <- tmp;
-    end;
-    while !s <> n0 do
-      ancestor.(!s) <- v;
-      s := child.(!s);
-    done;
-  in
-      (* Start now *)
-  depthFirstSearchDom start;
-  for i = !n downto 2 do
-    let w = ndfs.(i) in
-    List.iter (fun v ->
-      let u = eval v in
-      if sdno.(u) < sdno.(w) then sdno.(w) <- sdno.(u);)
-      predecessors.(w);
-    B.set bucket.(ndfs.(sdno.(w))) w true;
-    link parent.(w) w;
-    while not (B.empty bucket.(parent.(w))) do
-      let v =
-	match B.toList bucket.(parent.(w)) with
-	  x :: _ -> x
-	| [] -> ignore(print_string "Error in dominfast");0 in
-      B.set bucket.(parent.(w)) v false;
-      let u = eval v in
-      idom.(v) <- if sdno.(u) < sdno.(v) then u else parent.(w);
-    done;
-  done;
-  
-  for i=2 to !n do
-    let w = ndfs.(i) in
-    if idom.(w) <> ndfs.(sdno.(w)) then begin 
-      let newDom = idom.(idom.(w)) in
-      idom.(w) <- newDom;
-    end
-  done;
-  idom
-    
-    
-    
-    
-    
-let dominance_frontier (flowgraph: cfgInfo) : dfInfo = 
-  let idom = compute_idom flowgraph in
-  let size = flowgraph.size in
-  let children = Array.create size [] in 
-  for i = 0 to size - 1 do
-    if (idom.(i) != -1) then children.(idom.(i)) <- i :: children.(idom.(i));
-  done; 
-
-  let size  = flowgraph.size in
-  let start  = flowgraph.start in
-  let successors = flowgraph.successors in
-  
-  let df = Array.create size [] in
-                                        (* Compute the dominance frontier  *)
-  
-  let bottom = Array.make size true in  (* bottom of the dominator tree *)
-  for i = 0 to size - 1 do 
-    if (i != start) && idom.(i) <> -1 then bottom.(idom.(i)) <- false; 
-  done;
-
-  let processed = Array.make size false in (* to record the nodes added to work_list *) 
-  let workList = ref ([]) in (* to iterate in a bottom-up traversal of the dominator tree *)
-  for i = 0 to size - 1 do 
-    if (bottom.(i)) then workList := i :: !workList; 
-  done;
-  while (!workList != []) do
-    let x = List.hd !workList in
-    let update y = if idom.(y) <> x then df.(x) <- y::df.(x) in
-                                        (* compute local component *)
-    
-(* We use whichPred instead of whichSucc because ultimately this info is 
- * needed by control dependence dag which is constructed from REVERSE 
- * dominance frontier *)
-    List.iter (fun succ -> update succ) successors.(x);
-                                        (* add on up component *)
-    List.iter (fun z -> List.iter (fun y  -> update y) df.(z)) children.(x);
-    processed.(x) <- true;
-    workList := List.tl !workList;
-    if (x != start) then begin
-      let i = idom.(x) in
-      if i <> -1 && 
-         (List.for_all (fun child -> processed.(child)) children.(i)) then workList := i :: !workList; 
-    end;
-  done;
-  df
-    
-    
-(* Computes for each register, the set of nodes that need a phi definition 
- * for the register *)
-    
-let add_phi_functions_info (flowgraph: cfgInfo) : unit = 
-  let df = dominance_frontier flowgraph in
-  let size  = flowgraph.size in
-  let nrRegs = flowgraph.nrRegs in 
-  
-
-  let defs = Array.init size (fun i -> B.init nrRegs (fun j -> false)) in 
-  for i = 0 to size-1 do 
-    List.iter 
-      (fun (lhs,rhs) ->
-        List.iter (fun (r: reg) -> B.set defs.(i) r true) lhs;
-      ) 
-      flowgraph.blocks.(i).instrlist
-  done;
-  let iterCount = ref 0 in
-  let hasAlready = Array.create size 0 in 
-  let work = Array.create size 0 in 
-  let w = ref ([]) in 
-  let dfPlus = Array.init nrRegs (
-    fun i -> 
-      let defIn = B.make size in
-      for j = 0 to size - 1 do 
-	if B.get defs.(j) i then B.set defIn j true
-      done;
-      let res = ref [] in 
-      incr iterCount;
-      B.iter (fun x -> work.(x) <- !iterCount; w := x :: !w;) defIn;
-      while (!w != []) do 
-	let x = List.hd !w in
-	w := List.tl !w;
-	List.iter (fun y -> 
-	  if (hasAlready.(y) < !iterCount) then begin
-	    res := y :: !res;
-	    hasAlready.(y) <- !iterCount;
-	    if (work.(y) < !iterCount) then begin
-	      work.(y) <- !iterCount;
-	      w := y :: !w;
-	    end;
-	  end;
-		  ) df.(x)
-      done;
-      (* res := List.filter (fun blkId -> B.get liveIn.(blkId) i) !res; *)
-      !res
-   ) in
-  let result = Array.create size ([]) in
-  for i = 0 to nrRegs - 1 do
-    List.iter (fun node -> result.(node) <- i::result.(node);) dfPlus.(i) 
-  done;
-(* result contains for each node, the list of variables that need phi 
- * definition *)
-  for i = 0 to size-1 do
-    flowgraph.blocks.(i).livevars <- 
-      List.map (fun r -> (r, i)) result.(i);
-  done
-    
-  
-    
-(* add dominating definitions info *)
-    
-let add_dom_def_info (f: cfgInfo): unit = 
-  let blocks = f.blocks in
-  let start = f.start in
-  let size = f.size in
-  let nrRegs = f.nrRegs in
-
-  let idom = compute_idom f in
-  let children = Array.create size [] in 
-  for i = 0 to size - 1 do
-    if (idom.(i) != -1) then children.(idom.(i)) <- i :: children.(idom.(i));
-  done; 
-  
-  if debug then begin
-    ignore (E.log "Immediate dominators\n");
-    for i = 0 to size - 1 do 
-      ignore (E.log " block %d: idom=%d, children=%a\n"
-                i idom.(i)
-                (docList num) children.(i));
-    done
-  end;
-
-  (* For each variable, maintain a stack of blocks that define it. When you 
-   * process a block, the top of the stack is the closest dominator that 
-   * defines the variable *)
-  let s = Array.make nrRegs ([start]) in 
-  
-  (* Search top-down in the idom tree *)
-  let rec search (x: int): unit = (* x is a graph node *)
-    (* Push the current block for the phi variables *)
-    List.iter 
-      (fun ((r: reg), dr) -> 
-        if x = dr then s.(r) <- x::s.(r)) 
-      blocks.(x).livevars;
-
-    (* Clear livevars *)
-    blocks.(x).livevars <- [];
-    
-    (* Compute livevars *)
-    for i = 0 to nrRegs-1 do
-      match s.(i) with 
-      | [] -> assert false
-      | fst :: _ -> 
-          blocks.(x).livevars <- (i, fst) :: blocks.(x).livevars
-    done;
-
-
-    (* Update s for the children *)
-    List.iter 
-      (fun (lhs,rhs) ->
-	List.iter (fun (lreg: reg) -> s.(lreg) <- x::s.(lreg) ) lhs; 
-      ) 
-      blocks.(x).instrlist;
-    
-        
-    (* Go and do the children *)
-    List.iter search children.(x);
-    
-    (* Then we pop x, whenever it is on top of a stack *)
-    Array.iteri 
-      (fun i istack -> 
-        let rec dropX = function
-            [] -> []
-          |  x' :: rest when x = x' -> dropX rest
-          | l -> l
-        in
-        s.(i) <- dropX istack)
-      s;
-  in
-  search(start)
-  
-   
-
-let prune_cfg (f: cfgInfo): cfgInfo = 
- let size = f.size in 
- if size = 0 then f else
- let reachable = Array.make size false in
- let worklist = ref([f.start]) in
- while (!worklist != []) do 
-   let h = List.hd !worklist in
-   worklist := List.tl !worklist;
-   reachable.(h) <- true;
-   List.iter (fun s -> if (reachable.(s) = false) then worklist := s::!worklist; 
-	     ) f.successors.(h);
- done;
-(*
- let dummyblock = {  bstmt = mkEmptyStmt ();
-                     instrlist = [];
-                     livevars = [] } 
- in
-*)
- let successors = Array.init size (fun i -> List.filter (fun s -> reachable.(s)) f.successors.(i)) in
- let predecessors = Array.init size (fun i -> List.filter (fun s -> reachable.(s)) f.predecessors.(i)) in
- Array.iteri (fun i b -> b.reachable <- reachable.(i)) f.blocks;
- let result: cfgInfo = 
-        { name = f.name;
-          start = f.start;
-          size = f.size;
-          successors = successors;
-          predecessors = predecessors;
-          blocks = f.blocks;
-          nrRegs = f.nrRegs;
-          regToVarinfo = f.regToVarinfo;
-        }
- in
- result
- 
- 
-let add_ssa_info (f: cfgInfo): unit = 
-  let f = prune_cfg f in
-  let d_reg () (r: int) = 
-    dprintf "%s(%d)" f.regToVarinfo.(r).vname r
-  in
-  if debug then begin
-    ignore (E.log "Doing SSA for %s. Initial data:\n" f.name);
-    Array.iteri (fun i b -> 
-      ignore (E.log " block %d:\n    succs=@[%a@]\n    preds=@[%a@]\n   instr=@[%a@]\n"
-                i
-                (docList num) f.successors.(i)
-                (docList num) f.predecessors.(i)
-                (docList ~sep:line (fun (lhs, rhs) -> 
-                  dprintf "%a := @[%a@]"
-                    (docList (d_reg ())) lhs (docList (d_reg ())) rhs))
-                b.instrlist))
-      f.blocks;
-  end;
-
-  add_phi_functions_info f;
-  add_dom_def_info f;
-
-  if debug then begin
-    ignore (E.log "After SSA\n");
-    Array.iter (fun b -> 
-      ignore (E.log " block %d livevars: @[%a@]\n" 
-                b.bstmt.sid 
-                (docList (fun (i, fst) -> 
-                  dprintf "%a def at %d" d_reg i fst))
-                b.livevars))
-      f.blocks;
-  end
-
-
-let set2list s = 
-  let result = ref([]) in
-  IntSet.iter (fun element -> result := element::!result) s;
-  !result
-
-
-
-
-let preorderDAG (nrNodes: int) (successors: (int list) array): int list = 
-  let processed = Array.make nrNodes false in
-  let revResult = ref ([]) in
-  let predecessorsSet = Array.make nrNodes (IntSet.empty) in
-  for i = 0 to nrNodes -1 do 
-    List.iter (fun s -> predecessorsSet.(s) <- IntSet.add i predecessorsSet.(s)) successors.(i);
-  done;
-  let predecessors = Array.init nrNodes (fun i -> set2list predecessorsSet.(i)) in
-  let workList = ref([]) in
-  for i = 0 to nrNodes - 1 do
-    if (predecessors.(i) = []) then workList := i::!workList;
-  done;
-  while (!workList != []) do
-    let x = List.hd !workList in
-    workList := List.tl !workList;
-    revResult := x::!revResult;
-    processed.(x) <- true;
-    List.iter (fun s -> 
-      if (List.for_all (fun p -> processed.(p)) predecessors.(s)) then
-	workList := s::!workList;
-	      ) successors.(x);
-  done;
-  List.rev !revResult
-
-
-(* Muchnick Fig 7.12 *) 
-(* takes an SCC description as an input and returns prepares the appropriate SCC *)
-let preorder (nrNodes: int) (successors: (int list) array) (r: int): oneSccInfo = 
-  if debug then begin
-    ignore (E.log "Inside preorder \n");
-    for i = 0 to nrNodes - 1 do 
-      ignore (E.log "succ(%d) = %a" i (docList (fun i -> num i)) successors.(i)); 
-    done;
-  end;
-  let i = ref(0) in
-  let j = ref(0) in 
-  let pre = Array.make nrNodes (-1) in
-  let post = Array.make nrNodes (-1) in
-  let visit = Array.make nrNodes (false) in
-  let backEdges = ref ([]) in
-  let headers = ref(IntSet.empty) in
-  let rec depth_first_search_pp (x:int) =      
-    visit.(x) <- true; 
-    pre.(x) <- !j;
-    incr j;
-    List.iter (fun (y:int) -> 
-      if (not visit.(y)) then
-	(depth_first_search_pp y)
-      else 
-	if (post.(y) = -1) then begin
-          backEdges := (x,y)::!backEdges;
-	  headers := IntSet.add y !headers;
-	end;
-	      ) successors.(x);
-    post.(x) <- !i;
-    incr i;
-  in
-  depth_first_search_pp r;
-  let nodes = Array.make nrNodes (-1) in
-  for y = 0 to nrNodes - 1 do
-    if (pre.(y) != -1) then nodes.(pre.(y)) <- y;
-  done;
-  let nodeList = List.filter (fun i -> (i != -1)) (Array.to_list nodes) in
-  let result = { headers = set2list !headers; backEdges = !backEdges; nodes = nodeList; } in
-  result
-    
-
-exception Finished
-
-
-let strong_components (f: cfgInfo) (debug: bool) = 
-  let size = f.size in
-  let parent = Array.make size (-1) in
-  let color = Array.make size (-1) in
-  let finish = Array.make size (-1) in
-  let root = Array.make size (-1) in
-
-(* returns a list of SCC. Each SCC is a tuple of SCC root and SCC nodes *) 
-  let dfs (successors: (int list) array) (order: int array) = 
-    let time = ref(-1) in
-    let rec dfs_visit u = 
-      color.(u) <- 1;
-      incr time; 
-      (* d.(u) <- time; *)
-      List.iter (fun v ->
-	if color.(v) = 0 then (parent.(v) <- u; dfs_visit v) 
-		) successors.(u);
-      color.(u) <- 2;
-      incr time;
-      finish.(u) <- !time
-    in
-    for u = 0 to size - 1 do
-      color.(u) <- 0; (* white = 0, gray = 1, black = 2 *)
-      parent.(u) <- -1; (* nil = -1 *)
-      root.(u) <- 0; (* Is u a root? *)
-    done;
-    time := 0;
-    Array.iter (fun u -> 
-      if (color.(u) = 0) then begin 
-	root.(u) <- 1;
-	dfs_visit u;
-      end;
-	       ) order;
-  in
-
-  let simpleOrder = Array.init size (fun i -> i) in
-  dfs f.successors simpleOrder;
-  Array.sort (fun i j -> if (finish.(i) > finish.(j)) then -1 else 1) simpleOrder;
-  
-  dfs f.predecessors simpleOrder;
-(* SCCs have been computed. (The trees represented by non-null parent edges 
- * represent the SCCS. We call the black nodes as the roots). Now put the 
- * result in the ouput format *)
-  let allScc = ref([]) in
-  for u = 0 to size - 1 do 
-    if root.(u) = 1 then begin
-      let sccNodes = ref(IntSet.empty) in
-      let workList = ref([u]) in
-      while (!workList != []) do 
-	let h=List.hd !workList in
-	workList := List.tl !workList;
-	sccNodes := IntSet.add h !sccNodes;
-	List.iter (fun s -> if parent.(s)=h then workList := s::!workList;) f.predecessors.(h);
-      done;
-      allScc := (u,!sccNodes)::!allScc;
-      if (debug) then begin
-	ignore (E.log "Got an SCC with root %d and nodes %a" u (docList num) (set2list !sccNodes)); 
-      end;
-    end;
-  done;
-  !allScc
-      
- 
-let stronglyConnectedComponents (f: cfgInfo) (debug: bool): sccInfo = 
-  let size = f.size in
-  if (debug) then begin
-    ignore (E.log "size = %d\n" size);
-    for i = 0 to size - 1 do 
-      ignore (E.log "Successors(%d): %a\n" i (docList (fun n -> num n)) f.successors.(i));
-    done;
-  end;
-
-  let allScc = strong_components f debug in
-  let all_sccArray = Array.of_list allScc in
-
-  if (debug) then begin 
-    ignore (E.log "Computed SCCs\n");
-    for i = 0 to (Array.length all_sccArray) - 1 do
-      ignore(E.log "SCC #%d: " i);
-      let (_,sccNodes) = all_sccArray.(i) in
-      IntSet.iter (fun i -> ignore(E.log "%d, " i)) sccNodes;
-      ignore(E.log "\n");
-    done;
-  end;
-  
-
-  (* Construct sccId: Node -> Scc Id *)
-  let sccId = Array.make size (-1) in
-  Array.iteri (fun i (r,sccNodes) -> 
-    IntSet.iter (fun n -> sccId.(n) <- i) sccNodes; 
-	      ) all_sccArray;
-  
-  if (debug) then begin 
-    ignore (E.log "\nComputed SCC IDs: ");
-    for i = 0 to size - 1 do 
-      ignore (E.log "SCCID(%d) = %d " i sccId.(i));
-    done;
-  end;
-  
-
-  (* Construct sccCFG *)
-  let nrScc = Array.length all_sccArray in
-  let successors = Array.make nrScc [] in
-  for x = 0 to nrScc - 1 do
-    successors.(x) <- 
-      let s = ref(IntSet.empty) in 
-      IntSet.iter (fun y ->
-	List.iter (fun z -> 
-	  let sy = sccId.(y) in
-	  let sz = sccId.(z) in
-	  if (not(sy = sz)) then begin 
-	    s := IntSet.add sz !s;
-	  end
-		  ) f.successors.(y) 
-		  ) (snd all_sccArray.(x));
-      set2list !s
-  done;
- 
-  if (debug) then begin 
-    ignore (E.log "\nComputed SCC CFG, which should be a DAG:");
-    ignore (E.log "nrSccs = %d " nrScc);
-    for i = 0 to nrScc - 1 do  
-      ignore (E.log "successors(%d) = [%a] " i (docList (fun j -> num j)) successors.(i));
-    done;
-  end;
-  
-
-  (* Order SCCs. The graph is a DAG here *)
-  let sccorder = preorderDAG nrScc successors in
-
-  if (debug) then begin 
-    ignore (E.log "\nComputed SCC Preorder: ");
-    ignore (E.log "Nodes in Preorder = [%a]" (docList (fun i -> num i)) sccorder);
-  end;
-  
-  (* Order nodes of each SCC. The graph is a SCC here.*)
-  let scclist = List.map (fun i -> 
-    let successors = Array.create size [] in
-    for j = 0 to size - 1 do 
-      successors.(j) <- List.filter (fun x -> IntSet.mem x (snd all_sccArray.(i))) f.successors.(j);
-    done;
-    preorder f.size successors (fst all_sccArray.(i))  
-	   ) sccorder in
-  if (debug) then begin 
-    ignore (E.log "Computed Preorder for Nodes of each SCC\n");
-    List.iter (fun scc -> 
-      ignore (E.log "BackEdges = %a \n" 
-                (docList (fun (src,dest) -> dprintf "(%d,%d)" src dest))
-                scc.backEdges);) 
-      scclist;
-  end;
-  scclist
-
-
-
-
-    
-    
-    
-	
-    
diff --git a/cil/src/ext/ssa.mli b/cil/src/ext/ssa.mli
deleted file mode 100644
index be244d811..000000000
--- a/cil/src/ext/ssa.mli
+++ /dev/null
@@ -1,45 +0,0 @@
-type cfgInfo = {
-    name: string; (* The function name *)
-    start   : int;          
-    size    : int;    
-    blocks: cfgBlock array; (** Dominating blocks must come first *)
-    successors: int list array; (* block indices *)
-    predecessors: int list array;   
-    mutable nrRegs: int;
-    mutable regToVarinfo: Cil.varinfo array; (** Map register IDs to varinfo *)
-  } 
-
-(** A block corresponds to a statement *)
-and cfgBlock = { 
-    bstmt: Cil.stmt;
-
-    (* We abstract the statement as a list of def/use instructions *)
-    instrlist: instruction list;
-    mutable livevars: (reg * int) list;  
-    (** For each variable ID that is live at the start of the block, the 
-     * block whose definition reaches this point. If that block is the same 
-     * as the current one, then the variable is a phi variable *)
-    mutable reachable: bool;
-  }
-  
-and instruction = (reg list * reg list) 
-  (* lhs variables, variables on rhs.  *)
-
-
-and reg = int
-
-type idomInfo = int array  (* immediate dominator *)
-
-and dfInfo = (int list) array  (* dominance frontier *)
-
-and oneSccInfo = {
-    nodes: int list;
-    headers: int list;
-    backEdges: (int*int) list;
-  } 
-
-and sccInfo = oneSccInfo list 
-
-val add_ssa_info: cfgInfo -> unit
-val stronglyConnectedComponents: cfgInfo -> bool -> sccInfo 
-val prune_cfg: cfgInfo -> cfgInfo
diff --git a/cil/src/ext/stackoverflow.ml b/cil/src/ext/stackoverflow.ml
deleted file mode 100644
index da2c40183..000000000
--- a/cil/src/ext/stackoverflow.ml
+++ /dev/null
@@ -1,246 +0,0 @@
-(*
- *
- * Copyright (c) 2001-2002, 
- *  George C. Necula    <necula@cs.berkeley.edu>
- *  Scott McPeak        <smcpeak@cs.berkeley.edu>
- *  Wes Weimer          <weimer@cs.berkeley.edu>
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. The names of the contributors may not be used to endorse or promote
- * products derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
- * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
- * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- *)
-module H = Hashtbl
-open Cil
-open Pretty
-module E = Errormsg
-
-let debug = false
-
-
-(* For each function we have a node *)
-type node = { name: string;
-              mutable scanned: bool;
-              mutable mustcheck: bool;
-              mutable succs: node list }
-(* We map names to nodes *)
-let functionNodes: (string, node) H.t = H.create 113 
-let getFunctionNode (n: string) : node = 
-  Util.memoize 
-    functionNodes
-    n
-    (fun _ -> { name = n; mustcheck = false; scanned = false; succs = [] })
-
-(** Dump the function call graph. Assume that there is a main *)
-let dumpGraph = true
-let dumpFunctionCallGraph () = 
-  H.iter (fun _ x -> x.scanned <- false) functionNodes;
-  let rec dumpOneNode (ind: int) (n: node) : unit = 
-    output_string !E.logChannel "\n";
-    for i = 0 to ind do 
-      output_string !E.logChannel "  "
-    done;
-    output_string !E.logChannel (n.name ^ " ");
-    if n.scanned then (* Already dumped *)
-      output_string !E.logChannel " <rec> "
-    else begin
-      n.scanned <- true;
-      List.iter (dumpOneNode (ind + 1)) n.succs
-    end
-  in
-  try
-    let main = H.find functionNodes "main" in
-    dumpOneNode 0 main
-  with Not_found -> begin
-    ignore (E.log 
-              "I would like to dump the function graph but there is no main");
-  end
-  
-(* We add a dummy function whose name is "@@functionPointer@@" that is called 
- * at all invocations of function pointers and itself calls all functions 
- * whose address is taken.  *)
-let functionPointerName = "@@functionPointer@@"
-
-let checkSomeFunctions = ref false
-
-let init () = 
-  H.clear functionNodes;
-  checkSomeFunctions := false
-
-
-let addCall (caller: string) (callee: string) = 
-  let callerNode = getFunctionNode caller in
-  let calleeNode = getFunctionNode callee in
-  if not (List.exists (fun n -> n.name = callee) callerNode.succs) then begin
-    if debug then
-      ignore (E.log "found call from %s to %s\n" caller callee);
-    callerNode.succs <- calleeNode :: callerNode.succs;
-  end;
-  ()
-
-
-class findCallsVisitor (host: string) : cilVisitor = object
-  inherit nopCilVisitor
-
-  method vinst i =
-    match i with
-    | Call(_,Lval(Var(vi),NoOffset),_,l) -> 
-        addCall host vi.vname;
-        SkipChildren
-
-    | Call(_,e,_,l) -> (* Calling a function pointer *)
-        addCall host functionPointerName;
-        SkipChildren
-
-    | _ -> SkipChildren (* No calls in other instructions *)
-
-  (* There are no calls in expressions and types *)          
-  method vexpr e = SkipChildren
-  method vtype t = SkipChildren
-
-end
-
-(* Now detect the cycles in the call graph. Do a depth first search of the 
- * graph (stack is the list of nodes already visited in the current path). 
- * Return true if we have found a cycle. *)
-let rec breakCycles (stack: node list) (n: node) : bool = 
-  if n.scanned then (* We have already scanned this node. There are no cycles 
-                     * going through this node *)
-    false
-  else if n.mustcheck then 
-    (* We are reaching a node that we already know we much check. Return with 
-     * no new cycles. *)
-    false
-  else if List.memq n stack then begin
-    (* We have found a cycle. Mark the node n to be checked and return *)
-    if debug then
-      ignore (E.log "Will place an overflow check in %s\n" n.name);
-    checkSomeFunctions := true;
-    n.mustcheck <- true;
-    n.scanned <- true;
-    true
-  end else begin
-    let res = List.exists (fun nd -> breakCycles (n :: stack) nd) n.succs in
-    n.scanned <- true;
-    if res && n.mustcheck then 
-      false
-    else
-      res
-  end
-let findCheckPlacement () = 
-  H.iter (fun _ nd -> 
-    if nd.name <> functionPointerName 
-       && not nd.scanned && not nd.mustcheck then begin
-         ignore (breakCycles [] nd)
-       end)
-    functionNodes
-
-let makeFunctionCallGraph (f: Cil.file) : unit = 
-  init ();
-  (* Scan the file and construct the control-flow graph *)
-  List.iter
-    (function
-        GFun(fdec, _) -> 
-          if fdec.svar.vaddrof then 
-            addCall functionPointerName fdec.svar.vname;
-          let vis = new findCallsVisitor fdec.svar.vname in
-          ignore (visitCilBlock vis fdec.sbody)
-
-      | _ -> ())
-    f.globals
-
-let makeAndDumpFunctionCallGraph (f: file) = 
-  makeFunctionCallGraph f;
-  dumpFunctionCallGraph ()
-
-
-let addCheck (f: Cil.file) : unit = 
-  makeFunctionCallGraph f;
-  findCheckPlacement ();
-  if !checkSomeFunctions then begin
-    (* Add a declaration for the stack threshhold variable. The program is 
-     * stopped when the stack top is less than this value. *)
-    let stackThreshholdVar = makeGlobalVar "___stack_threshhold" !upointType in
-    stackThreshholdVar.vstorage <- Extern;
-    (* And the initialization function *)
-    let computeStackThreshhold = 
-      makeGlobalVar "___compute_stack_threshhold" 
-        (TFun(!upointType, Some [], false, [])) in
-    computeStackThreshhold.vstorage <- Extern;
-    (* And the failure function *)
-    let stackOverflow = 
-      makeGlobalVar "___stack_overflow" 
-        (TFun(voidType, Some [], false, [])) in
-    stackOverflow.vstorage <- Extern;
-    f.globals <- 
-       GVar(stackThreshholdVar, {init=None}, locUnknown) ::
-       GVarDecl(computeStackThreshhold, locUnknown) ::
-       GVarDecl(stackOverflow, locUnknown) :: f.globals;
-    (* Now scan and instrument each function definition *)
-    List.iter
-      (function 
-          GFun(fdec, l) -> 
-            (* If this is main we must introduce the initialization of the 
-             * bottomOfStack *)
-            let nd = getFunctionNode fdec.svar.vname in
-            if fdec.svar.vname = "main" then begin
-              if nd.mustcheck then 
-                E.s (E.error "The \"main\" function is recursive!!");
-              let loc = makeLocalVar fdec "__a_local" intType in
-              loc.vaddrof <- true;
-              fdec.sbody <- 
-                 mkBlock
-                   [ mkStmtOneInstr
-                       (Call (Some(var stackThreshholdVar), 
-                              Lval(var computeStackThreshhold), [], l));
-                     mkStmt (Block fdec.sbody) ]
-            end else if nd.mustcheck then begin
-              let loc = makeLocalVar fdec "__a_local" intType in
-              loc.vaddrof <- true;
-              fdec.sbody <- 
-                 mkBlock
-                   [ mkStmt
-                       (If(BinOp(Le, 
-                                 CastE(!upointType, AddrOf (var loc)),
-                                 Lval(var stackThreshholdVar), intType),
-                           mkBlock [mkStmtOneInstr
-                                  (Call(None, Lval(var stackOverflow),
-                                        [], l))],
-                           mkBlock [],
-                           l));
-                     mkStmt (Block fdec.sbody) ]
-            end else
-              ()
-
-        | _ -> ())
-      f.globals;
-    ()
-  end
-
-
-
-
diff --git a/cil/src/ext/stackoverflow.mli b/cil/src/ext/stackoverflow.mli
deleted file mode 100644
index 6ec020075..000000000
--- a/cil/src/ext/stackoverflow.mli
+++ /dev/null
@@ -1,43 +0,0 @@
-(*
- *
- * Copyright (c) 2001-2002, 
- *  George C. Necula    <necula@cs.berkeley.edu>
- *  Scott McPeak        <smcpeak@cs.berkeley.edu>
- *  Wes Weimer          <weimer@cs.berkeley.edu>
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. The names of the contributors may not be used to endorse or promote
- * products derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
- * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
- * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- *)
-
-(* This module inserts code to check for stack overflow. It saves the address 
- * of the top of the stack in "main" and then it picks one function *)
-
-val addCheck: Cil.file -> unit
-
-val makeAndDumpFunctionCallGraph: Cil.file -> unit
diff --git a/cil/src/ext/usedef.ml b/cil/src/ext/usedef.ml
deleted file mode 100755
index 57f226aac..000000000
--- a/cil/src/ext/usedef.ml
+++ /dev/null
@@ -1,188 +0,0 @@
-(* MODIF: Loop constructor replaced by 3 constructors: While, DoWhile, For. *)
-
-
-open Cil
-open Pretty
-
-(** compute use/def information *)
-
-module VS = Set.Make (struct 
-                        type t = Cil.varinfo
-                        let compare v1 v2 = Pervasives.compare v1.vid v2.vid
-                      end)
-
-(** Set this global to how you want to handle function calls *)
-let getUseDefFunctionRef: (exp -> VS.t * VS.t) ref = 
-  ref (fun _ -> (VS.empty, VS.empty))
-
-(** Say if you want to consider a variable use *)
-let considerVariableUse: (varinfo -> bool) ref = 
-  ref (fun _ -> true)
-
-
-(** Say if you want to consider a variable def *)
-let considerVariableDef: (varinfo -> bool) ref = 
-  ref (fun _ -> true)
-
-(** Save if you want to consider a variable addrof as a use *)
-let considerVariableAddrOfAsUse: (varinfo -> bool) ref = 
-  ref (fun _ -> true)
-
-(* When this is true, only definitions of a variable without
-   an offset are counted as definitions. So:
-   a = 5; would be a definition, but
-   a[1] = 5; would not *)
-let onlyNoOffsetsAreDefs: bool ref = ref false
-
-let varUsed: VS.t ref = ref VS.empty
-let varDefs: VS.t ref = ref VS.empty
-
-class useDefVisitorClass : cilVisitor = object (self)
-  inherit nopCilVisitor
-      
-  (** this will be invoked on variable definitions only because we intercept 
-   * all uses of variables in expressions ! *)
-  method vvrbl (v: varinfo) = 
-    if (!considerVariableDef) v &&
-      not(!onlyNoOffsetsAreDefs) then 
-      varDefs := VS.add v !varDefs;
-    SkipChildren
-
-  (** If onlyNoOffsetsAreDefs is true, then we need to see the
-   *  varinfo in an lval along with the offset. Otherwise just
-   *  DoChildren *)
-  method vlval (l: lval) =
-    if !onlyNoOffsetsAreDefs then
-      match l with
-	(Var vi, NoOffset) ->
-	  if (!considerVariableDef) vi then
-	    varDefs := VS.add vi !varDefs;
-	  SkipChildren
-      | _ -> DoChildren
-    else DoChildren
-
-  method vexpr = function
-      Lval (Var v, off) -> 
-        ignore (visitCilOffset (self :> cilVisitor) off);
-        if (!considerVariableUse) v then
-          varUsed := VS.add v !varUsed;
-        SkipChildren (* So that we do not see the v *)
-
-    | AddrOf (Var v, off) 
-    | StartOf (Var v, off) -> 
-        ignore (visitCilOffset (self :> cilVisitor) off);
-        if (!considerVariableAddrOfAsUse) v then 
-          varUsed := VS.add v !varUsed;
-        SkipChildren
-
-    | _ -> DoChildren
-
-  (* For function calls, do the transitive variable read/defs *)
-  method vinst = function
-      Call (_, f, _, _) -> begin
-        (* we will call DoChildren to compute the use and def that appear in 
-         * this instruction. We also add in the stuff computed by 
-         * getUseDefFunctionRef *)
-        let use, def = !getUseDefFunctionRef f in
-        varUsed := VS.union !varUsed use;
-        varDefs := VS.union !varDefs def;
-        DoChildren;
-      end
-    | Asm(_,_,slvl,_,_,_) -> List.iter (fun (s,lv) ->
-	match lv with (Var v, off) ->
-	  if s.[0] = '+' then
-	    varUsed := VS.add v !varUsed;
-	| _ -> ()) slvl;
-	DoChildren
-    | _ -> DoChildren
-        
-end
-
-let useDefVisitor = new useDefVisitorClass 
-
-(** Compute the use information for an expression (accumulate to an existing 
- * set) *)
-let computeUseExp ?(acc=VS.empty) (e: exp) : VS.t = 
-  varUsed := acc;
-  ignore (visitCilExpr useDefVisitor e);
-  !varUsed
-
-
-(** Compute the use/def information for an instruction *)
-let computeUseDefInstr ?(acc_used=VS.empty)
-                       ?(acc_defs=VS.empty) 
-                       (i: instr) : VS.t * VS.t = 
-  varUsed := acc_used;
-  varDefs := acc_defs;
-  ignore (visitCilInstr useDefVisitor i);
-  !varUsed, !varDefs
-
-
-(** Compute the use/def information for a statement kind. Do not descend into 
- * the nested blocks. *)
-let computeUseDefStmtKind ?(acc_used=VS.empty)
-                          ?(acc_defs=VS.empty) 
-                          (sk: stmtkind) : VS.t * VS.t =
-  varUsed := acc_used;
-  varDefs := acc_defs;
-  let ve e = ignore (visitCilExpr useDefVisitor e) in 
-  let _ = 
-    match sk with 
-      Return (None, _) -> ()
-    | Return (Some e, _) -> ve e
-    | If (e, _, _, _) -> ve e
-    | Break _ | Goto _ | Continue _ -> ()
-(*
-    | Loop (_, _, _, _) -> ()
-*)
-    | While _ | DoWhile _ | For _ -> ()
-    | Switch (e, _, _, _) -> ve e
-    | Instr il -> 
-        List.iter (fun i -> ignore (visitCilInstr useDefVisitor i)) il
-    | TryExcept _ | TryFinally _ -> ()
-    | Block _ -> ()
-  in
-  !varUsed, !varDefs
-
-(* Compute the use/def information for a statement kind.
-   DO descend into nested blocks *)
-let rec computeDeepUseDefStmtKind ?(acc_used=VS.empty)
-                                  ?(acc_defs=VS.empty) 
-                                   (sk: stmtkind) : VS.t * VS.t =
-  let handle_block b =
-    List.fold_left (fun (u,d) s ->
-      let u',d' = computeDeepUseDefStmtKind s.skind in
-      (VS.union u u', VS.union d d')) (VS.empty, VS.empty)
-      b.bstmts
-  in
-  varUsed := acc_used;
-  varDefs := acc_defs;
-  let ve e = ignore (visitCilExpr useDefVisitor e) in  
-  match sk with 
-    Return (None, _) -> !varUsed, !varDefs
-  | Return (Some e, _) -> 
-      let _ = ve e in
-      !varUsed, !varDefs
-  | If (e, tb, fb, _) ->
-      let _ = ve e in
-      let u, d = !varUsed, !varDefs in
-      let u', d' = handle_block tb in
-      let u'', d'' = handle_block fb in
-      (VS.union (VS.union u u') u'', VS.union (VS.union d d') d'')
-  | Break _ | Goto _ | Continue _ -> !varUsed, !varDefs
-(*
-  | Loop (b, _, _, _) -> handle_block b
-*)
-  | While (_, b, _) -> handle_block b
-  | DoWhile (_, b, _) -> handle_block b
-  | For (_, _, _, b, _) -> handle_block b
-  | Switch (e, b, _, _) -> 
-      let _ = ve e in
-      let u, d = !varUsed, !varDefs in
-      let u', d' = handle_block b in
-      (VS.union u u', VS.union d d')
-  | Instr il -> 
-      List.iter (fun i -> ignore (visitCilInstr useDefVisitor i)) il;
-      !varUsed, !varDefs
-  | TryExcept _ | TryFinally _ -> !varUsed, !varDefs
-  | Block b -> handle_block b
diff --git a/cil/src/formatcil.ml b/cil/src/formatcil.ml
deleted file mode 100644
index 33bc749f8..000000000
--- a/cil/src/formatcil.ml
+++ /dev/null
@@ -1,215 +0,0 @@
-(*
- *
- * Copyright (c) 2001-2002, 
- *  George C. Necula    <necula@cs.berkeley.edu>
- *  Scott McPeak        <smcpeak@cs.berkeley.edu>
- *  Wes Weimer          <weimer@cs.berkeley.edu>
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. The names of the contributors may not be used to endorse or promote
- * products derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
- * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
- * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- *)
-open Cil
-open Pretty
-open Trace      (* sm: 'trace' function *)
-module E = Errormsg
-module H = Hashtbl
-
-let noMemoize = ref false
-
-let expMemoTable :
-    (string, (((string * formatArg) list -> exp) * 
-               (exp -> formatArg list option))) H.t = H.create 23
-
-let typeMemoTable :
-    (string, (((string * formatArg) list -> typ) * 
-               (typ -> formatArg list option))) H.t = H.create 23
-
-let lvalMemoTable :
-    (string, (((string * formatArg) list -> lval) * 
-               (lval -> formatArg list option))) H.t = H.create 23
-
-let instrMemoTable :
-    (string, ((location -> (string * formatArg) list -> instr) * 
-               (instr -> formatArg list option))) H.t = H.create 23
-
-let stmtMemoTable :
-    (string, ((string -> typ -> varinfo) -> 
-              location -> 
-              (string * formatArg) list -> stmt)) H.t = H.create 23
-
-let stmtsMemoTable :
-    (string, ((string -> typ -> varinfo) -> 
-              location -> 
-              (string * formatArg) list -> stmt list)) H.t = H.create 23
-
-
-let doParse (prog: string) 
-            (theParser: (Lexing.lexbuf -> Formatparse.token) 
-                                          -> Lexing.lexbuf -> 'a)
-            (memoTable: (string, 'a) H.t) : 'a = 
-  try
-    if !noMemoize then raise Not_found else
-    H.find memoTable prog
-  with Not_found -> begin
-    let lexbuf = Formatlex.init prog in
-    try
-      Formatparse.initialize Formatlex.initial lexbuf;
-      let res = theParser Formatlex.initial lexbuf in
-      H.add memoTable prog res;
-      Formatlex.finish ();
-      res
-    with Parsing.Parse_error -> begin
-      Formatlex.finish ();
-      E.s (E.error "Parsing error: %s" prog)
-    end
-    | e -> begin
-        ignore (E.log "Caught %s while parsing\n" (Printexc.to_string e));
-        Formatlex.finish ();
-        raise e
-    end
-  end
-  
-
-let cExp (prog: string) : (string * formatArg) list -> exp = 
-  let cf = doParse prog Formatparse.expression expMemoTable in
-  (fst cf)
-
-let cLval (prog: string) : (string * formatArg) list -> lval = 
-  let cf = doParse prog Formatparse.lval lvalMemoTable in
-  (fst cf)
-
-let cType (prog: string) : (string * formatArg) list -> typ = 
-  let cf = doParse prog Formatparse.typename typeMemoTable in
-  (fst cf)
-
-let cInstr (prog: string) : location -> (string * formatArg) list -> instr = 
-  let cf = doParse prog Formatparse.instr instrMemoTable in
-  (fst cf)
-
-let cStmt (prog: string) : (string -> typ -> varinfo) -> 
-                           location -> (string * formatArg) list -> stmt = 
-  let cf = doParse prog Formatparse.stmt stmtMemoTable in
-  cf
-
-let cStmts (prog: string) : 
-    (string -> typ -> varinfo) -> 
-    location -> (string * formatArg) list -> stmt list = 
-  let cf = doParse prog Formatparse.stmt_list stmtsMemoTable in
-  cf
-
-
-
-(* Match an expression *)
-let dExp (prog: string) : exp -> formatArg list option = 
-  let df = doParse prog Formatparse.expression expMemoTable in
-  (snd df)
-
-(* Match an lvalue *)
-let dLval (prog: string) : lval -> formatArg list option = 
-  let df = doParse prog Formatparse.lval lvalMemoTable in
-  (snd df)
-
-
-(* Match a type *)
-let dType (prog: string) : typ -> formatArg list option = 
-  let df = doParse prog Formatparse.typename typeMemoTable in
-  (snd df)
-
-
-
-(* Match an instruction *)
-let dInstr (prog: string) : instr -> formatArg list option = 
-  let df = doParse prog Formatparse.instr instrMemoTable in
-  (snd df)
-
-
-let test () = 
-  (* Construct a dummy function *)
-  let func = emptyFunction "test_formatcil" in
-  (* Construct a few varinfo *)
-  let res = makeLocalVar func "res" (TPtr(intType, [])) in
-  let fptr = makeLocalVar func "fptr" 
-      (TPtr(TFun(intType, None, false, []), [])) in
-  (* Construct an instruction *)
-  let makeInstr () = 
-    Call(Some (var res), 
-         Lval (Mem (CastE(TPtr(TFun(TPtr(intType, []),
-                                    Some [ ("", intType, []);
-                                           ("a2", TPtr(intType, []), []);
-                                           ("a3", TPtr(TPtr(intType, []),
-                                                       []), []) ], 
-                                    false, []), []),
-                          Lval (var fptr))), 
-               NoOffset),
-         [  ], locUnknown) 
-  in
-  let times = 100000 in
-  (* Make the instruction the regular way *)
-  Stats.time "make instruction regular" 
-    (fun _ -> for i = 0 to times do ignore (makeInstr ()) done)
-    ();
-  (* Now make the instruction interpreted *)
-  noMemoize := true;
-  Stats.time "make instruction interpreted"
-    (fun _ -> for i = 0 to times do 
-      let _ = 
-        cInstr "%v:res = (* ((int * (*)(int, int * a2, int * * a3))%v:fptr))();"
-          locUnknown [ ("res", Fv res); 
-                       ("fptr", Fv fptr) ] 
-      in
-      ()
-    done)
-    ();
-  (* Now make the instruction interpreted with memoization *)
-  noMemoize := false;
-  Stats.time "make instruction interpreted memoized"
-    (fun _ -> for i = 0 to times do 
-      let _ = 
-        cInstr "%v:res = (* ((int * (*)(int, int * a2, int * * a3))%v:fptr))();"
-          locUnknown [ ("res", Fv res); ("fptr", Fv fptr) ] 
-      in
-      ()
-    done)
-    ();
-  (* Now make the instruction interpreted with partial application *)
-  let partInstr = 
-    cInstr "%v:res = (* ((int * (*)(int, int * a2, int * * a3))%v:fptr))();" in
-  Stats.time "make instruction interpreted partial"
-    (fun _ -> for i = 0 to times do 
-      let _ = 
-        partInstr
-          locUnknown [ ("res", Fv res); ("fptr", Fv fptr) ] 
-      in
-      ()
-    done)
-    ();
-    
-  ()
-  
-  
diff --git a/cil/src/formatcil.mli b/cil/src/formatcil.mli
deleted file mode 100644
index d353c5eb0..000000000
--- a/cil/src/formatcil.mli
+++ /dev/null
@@ -1,103 +0,0 @@
-(* 
- *
- * Copyright (c) 2001-2002, 
- *  George C. Necula    <necula@cs.berkeley.edu>
- *  Scott McPeak        <smcpeak@cs.berkeley.edu>
- *  Wes Weimer          <weimer@cs.berkeley.edu>
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. The names of the contributors may not be used to endorse or promote
- * products derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
- * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
- * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- *)
-
-
-(** {b An Interpreter for constructing CIL constructs} *)
-
-
-(** Constructs an expression based on the program and the list of arguments. 
- * Each argument consists of a name followed by the actual data. This 
- * argument will be placed instead of occurrences of "%v:name" in the pattern 
- * (where the "v" is dependent on the type of the data). The parsing of the 
- * string is memoized. * Only the first expression is parsed. *)
-val cExp: string -> (string * Cil.formatArg) list -> Cil.exp
-
-(** Constructs an lval based on the program and the list of arguments. 
- * Only the first lvalue is parsed. 
- * The parsing of the string is memoized. *)
-val cLval: string -> (string * Cil.formatArg) list -> Cil.lval
-
-(** Constructs a type based on the program and the list of arguments. 
- * Only the first type is parsed. 
- * The parsing of the string is memoized. *)
-val cType: string -> (string * Cil.formatArg) list -> Cil.typ
-
-
-(** Constructs an instruction based on the program and the list of arguments. 
- * Only the first instruction is parsed. 
- * The parsing of the string is memoized. *)
-val cInstr: string -> Cil.location -> 
-                      (string * Cil.formatArg) list -> Cil.instr
-
-(* Constructs a statement based on the program and the list of arguments. We 
- * also pass a function that can be used to make new varinfo's for the 
- * declared variables, and a location to be used for the statements. Only the 
- * first statement is parsed. The parsing of the string is memoized. *)
-val cStmt: string -> 
-           (string -> Cil.typ -> Cil.varinfo) -> 
-           Cil.location -> (string * Cil.formatArg) list -> Cil.stmt
-
-(** Constructs a list of statements *)
-val cStmts: string -> 
-            (string -> Cil.typ -> Cil.varinfo) -> 
-            Cil.location -> (string * Cil.formatArg) list -> 
-            Cil.stmt list
-
-(** Deconstructs an expression based on the program. Produces an optional 
- * list of format arguments. The parsing of the string is memoized. *)
-val dExp: string -> Cil.exp -> Cil.formatArg list option
-
-(** Deconstructs an lval based on the program. Produces an optional 
- * list of format arguments. The parsing of the string is memoized. *)
-val dLval: string -> Cil.lval -> Cil.formatArg list option
-
-
-(** Deconstructs a type based on the program. Produces an optional list of 
- * format arguments. The parsing of the string is memoized. *)
-val dType: string -> Cil.typ -> Cil.formatArg list option
-
-
-(** Deconstructs an instruction based on the program. Produces an optional 
- * list of format arguments. The parsing of the string is memoized. *)
-val dInstr: string -> Cil.instr -> Cil.formatArg list option
-
-
-(** If set then will not memoize the parsed patterns *)
-val noMemoize: bool ref
-
-(** Just a testing function *)
-val test: unit -> unit
diff --git a/cil/src/formatlex.mll b/cil/src/formatlex.mll
deleted file mode 100644
index 584a060d5..000000000
--- a/cil/src/formatlex.mll
+++ /dev/null
@@ -1,308 +0,0 @@
-(*
- *
- * Copyright (c) 2001-2002, 
- *  George C. Necula    <necula@cs.berkeley.edu>
- *  Scott McPeak        <smcpeak@cs.berkeley.edu>
- *  Wes Weimer          <weimer@cs.berkeley.edu>
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. The names of the contributors may not be used to endorse or promote
- * products derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
- * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
- * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- *)
-(* A simple lexical analyzer for constructing CIL based on format strings *)
-{
-open Formatparse
-exception Eof
-exception InternalError of string
-module H = Hashtbl
-module E = Errormsg
-(*
-** Keyword hashtable
-*)
-let keywords = H.create 211
-
-(*
-** Useful primitives
-*)
-let scan_ident id = 
-  try H.find keywords id
-  with Not_found -> IDENT id  (* default to variable name *)
-
-(*
-** Buffer processor
-*)
- 
-
-let init ~(prog: string) : Lexing.lexbuf =
-  H.clear keywords;
-  Lexerhack.currentPattern := prog;
-  List.iter 
-    (fun (key, token) -> H.add keywords key token)
-    [ ("const", CONST); ("__const", CONST); ("__const__", CONST);
-      ("static", STATIC);
-      ("extern", EXTERN);
-      ("long", LONG);
-      ("short", SHORT);
-      ("signed", SIGNED);
-      ("unsigned", UNSIGNED);
-      ("volatile", VOLATILE);
-      ("char", CHAR);
-      ("int", INT);
-      ("float", FLOAT);
-      ("double", DOUBLE);
-      ("void", VOID);
-      ("enum", ENUM);
-      ("struct", STRUCT);
-      ("typedef", TYPEDEF);
-      ("union", UNION);
-      ("break", BREAK);
-      ("continue", CONTINUE);
-      ("goto", GOTO); 
-      ("return", RETURN);
-      ("switch", SWITCH);
-      ("case", CASE); 
-      ("default", DEFAULT);
-      ("while", WHILE);  
-      ("do", DO);  
-      ("for", FOR);
-      ("if", IF);
-      ("else", ELSE);
-      ("__attribute__", ATTRIBUTE); ("__attribute", ATTRIBUTE);
-      ("__int64", INT64);
-      ("__builtin_va_arg", BUILTIN_VA_ARG);
-    ];
-  E.startParsingFromString prog
-
-let finish () = 
-  E.finishParsing ()
-
-(*** Error handling ***)
-let error msg =
-  E.parse_error msg 
-
-
-(*** escape character management ***)
-let scan_escape str =
-  match str with
-    "n" -> "\n"
-  | "r" -> "\r"
-  | "t" -> "\t"
-  | "b" -> "\b"
-  | "f" -> "\012"  (* ASCII code 12 *)
-  | "v" -> "\011"  (* ASCII code 11 *)
-  | "a" -> "\007"  (* ASCII code 7 *)
-  | "e" -> "\027"  (* ASCII code 27. This is a GCC extension *)
-  | _ -> str
-
-let get_value chr =
-  match chr with
-    '0'..'9' -> (Char.code chr) - (Char.code '0')
-  | 'a'..'z' -> (Char.code chr) - (Char.code 'a') + 10
-  | 'A'..'Z' -> (Char.code chr) - (Char.code 'A') + 10
-  | _ -> 0
-let scan_hex_escape str =
-  String.make 1 (Char.chr (
-		 (get_value (String.get str 0)) * 16
-		   + (get_value (String.get str 1))
-	           ))
-let scan_oct_escape str =
-  (* weimer: wide-character constants like L'\400' may be bigger than
-   * 256 (in fact, may be up to 511), so Char.chr cannot be used directly *)
-  let the_value = (get_value (String.get str 0)) * 64
-		   + (get_value (String.get str 1)) * 8
-		   + (get_value (String.get str 2)) in
-  if the_value < 256 then String.make 1 (Char.chr the_value )
-  else (String.make 1 (Char.chr (the_value / 256))) ^
-       (String.make 1 (Char.chr (the_value mod 256)))
-
-(* ISO standard locale-specific function to convert a wide character
- * into a sequence of normal characters. Here we work on strings. 
- * We convert L"Hi" to "H\000i\000" *)
-let wbtowc wstr =
-  let len = String.length wstr in 
-  let dest = String.make (len * 2) '\000' in 
-  for i = 0 to len-1 do 
-    dest.[i*2] <- wstr.[i] ;
-  done ;
-  dest
-
-(* This function converst the "Hi" in L"Hi" to { L'H', L'i', L'\0' } *)
-let wstr_to_warray wstr =
-  let len = String.length wstr in
-  let res = ref "{ " in
-  for i = 0 to len-1 do
-    res := !res ^ (Printf.sprintf "L'%c', " wstr.[i])
-  done ;
-  res := !res ^ "}" ;
-  !res
-
-let getArgName (l: Lexing.lexbuf) (prefixlen: int) =
-  let lexeme = Lexing.lexeme l in
-  let ll = String.length lexeme in
-  if  ll > prefixlen then 
-    String.sub lexeme (prefixlen + 1) (ll - prefixlen - 1)
-  else
-    ""
-}
-
-let decdigit = ['0'-'9']
-let octdigit = ['0'-'7']
-let hexdigit = ['0'-'9' 'a'-'f' 'A'-'F']
-let letter = ['a'- 'z' 'A'-'Z']
-
-let floatsuffix = ['f' 'F' 'l' 'L']
-
-let usuffix = ['u' 'U']
-let lsuffix = "l"|"L"|"ll"|"LL"
-let intsuffix = lsuffix | usuffix | usuffix lsuffix | lsuffix usuffix
-
-let intnum = decdigit+ intsuffix?
-let octnum = '0' octdigit+ intsuffix?
-let hexnum = '0' ['x' 'X'] hexdigit+ intsuffix?
-
-let exponent = ['e' 'E']['+' '-']? decdigit+
-let fraction  = '.' decdigit+
-let floatraw = (intnum? fraction)
-			|(intnum exponent)
-			|(intnum? fraction exponent)
-			|(intnum '.') 
-                        |(intnum '.' exponent) 
-let floatnum = floatraw floatsuffix?
-
-let ident = (letter|'_')(letter|decdigit|'_')* 
-let attribident = (letter|'_')(letter|decdigit|'_'|':')
-let blank = [' ' '\t' '\012' '\r']
-let escape = '\\' _
-let hex_escape = '\\' ['x' 'X'] hexdigit hexdigit
-let oct_escape = '\\' octdigit  octdigit octdigit
-
-
-(* The arguments are of the form %l:foo *)
-let argname = ':' ident
-
-rule initial =
-	parse 	blank			{ initial lexbuf}
-|               "/*"			{ let _ = comment lexbuf in 
-                                          initial lexbuf}
-|               "//"                    { endline lexbuf }
-|               "\n"                    { E.newline (); initial lexbuf}
-|		floatnum		{CST_FLOAT (Lexing.lexeme lexbuf)}
-|		hexnum			{CST_INT (Lexing.lexeme lexbuf)}
-|		octnum			{CST_INT (Lexing.lexeme lexbuf)}
-|		intnum			{CST_INT (Lexing.lexeme lexbuf)}
-
-|             "<<="                   {INF_INF_EQ}
-|             ">>="                   {SUP_SUP_EQ}
-|             "*="                    {STAR_EQ}
-|             "/="                    {SLASH_EQ}
-|             "&="                    {AND_EQ}
-|             "|="                    {PIPE_EQ}
-|             "^="                    {CIRC_EQ}
-|             "%="                    {PERCENT_EQ}
-
-
-|		"..."			{ELLIPSIS}
-|		"-="			{MINUS_EQ}
-|		"+="			{PLUS_EQ}
-|		"*="			{STAR_EQ}
-|		"<<"			{INF_INF}
-|		">>"			{SUP_SUP}
-| 		"=="			{EQ_EQ}
-| 		"!="			{EXCLAM_EQ}
-|		"<="			{INF_EQ}
-|		">="			{SUP_EQ}
-|		"="			{EQ}
-|		"<"			{INF}
-|		">"			{SUP}
-|		"++"			{PLUS_PLUS}
-|		"--"			{MINUS_MINUS}
-|		"->"			{ARROW}
-|		'+'			{PLUS}
-|		'-'			{MINUS}
-|		'*'			{STAR}
-|		'/'			{SLASH}
-|		'!'			{EXCLAM}
-|		'&'			{AND}
-|		'|'			{PIPE}
-|		'^'			{CIRC}
-|		'~'			{TILDE}
-|		'['			{LBRACKET}
-|		']'			{RBRACKET}
-|		'{'			{LBRACE}
-|		'}'			{RBRACE}
-|		'('			{LPAREN}
-|		')'			{RPAREN}
-|		';'			{SEMICOLON}
-|		','			{COMMA}
-|		'.'			{DOT}
-|               ':'                     {COLON}
-|               '?'                     {QUEST}
-|		"sizeof"		{SIZEOF}
-
-|               "%eo" argname           {ARG_eo (getArgName lexbuf 3) }
-|               "%e"  argname           {ARG_e  (getArgName lexbuf 2) }
-|               "%E"  argname           {ARG_E  (getArgName lexbuf 2) }
-|               "%u"  argname           {ARG_u  (getArgName lexbuf 2) }
-|               "%b"  argname           {ARG_b  (getArgName lexbuf 2) }
-|               "%t"  argname           {ARG_t  (getArgName lexbuf 2) }
-|               "%d"  argname           {ARG_d  (getArgName lexbuf 2) }
-|               "%lo" argname           {ARG_lo (getArgName lexbuf 3) }
-|               "%l"  argname           {ARG_l  (getArgName lexbuf 2) }
-|               "%i"  argname           {ARG_i  (getArgName lexbuf 2) }
-|               "%I"  argname           {ARG_I  (getArgName lexbuf 2) }
-|               "%o"  argname           {ARG_o  (getArgName lexbuf 2) }
-|               "%va" argname           {ARG_va (getArgName lexbuf 3) }
-|               "%v"  argname           {ARG_v  (getArgName lexbuf 2) }
-|               "%k"  argname           {ARG_k  (getArgName lexbuf 2) }
-|               "%f"  argname           {ARG_f  (getArgName lexbuf 2) }
-|               "%F"  argname           {ARG_F  (getArgName lexbuf 2) }
-|               "%p"  argname           {ARG_p  (getArgName lexbuf 2) }
-|               "%P"  argname           {ARG_P  (getArgName lexbuf 2) }
-|               "%s"  argname           {ARG_s  (getArgName lexbuf 2) }
-|               "%S"  argname           {ARG_S  (getArgName lexbuf 2) }
-|               "%g"  argname           {ARG_g  (getArgName lexbuf 2) }
-|               "%A"  argname           {ARG_A  (getArgName lexbuf 2) }
-|               "%c"  argname           {ARG_c  (getArgName lexbuf 2) } 
-
-|		'%'			{PERCENT}
-|		ident			{scan_ident (Lexing.lexeme lexbuf)}
-|		eof			{EOF}
-|		_			{E.parse_error 
-                                           "Formatlex: Invalid symbol"
-                                        }
-
-and comment =
-    parse 	
-      "*/"			        { () }
-|     '\n'                              { E.newline (); comment lexbuf }
-| 		_ 			{ comment lexbuf }
-
-
-and endline = parse 
-        '\n' 			{ E.newline (); initial lexbuf}
-|	_			{ endline lexbuf}
diff --git a/cil/src/formatparse.mly b/cil/src/formatparse.mly
deleted file mode 100644
index 75bdbb33e..000000000
--- a/cil/src/formatparse.mly
+++ /dev/null
@@ -1,1455 +0,0 @@
-/* MODIF: Loop constructor replaced by 3 constructors: While, DoWhile, For. */
-
-/*(* Parser for constructing CIL from format strings *)
-(*
- *
- * Copyright (c) 2001-2002, 
- *  George C. Necula    <necula@cs.berkeley.edu>
- *  Scott McPeak        <smcpeak@cs.berkeley.edu>
- *  Wes Weimer          <weimer@cs.berkeley.edu>
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. The names of the contributors may not be used to endorse or promote
- * products derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
- * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
- * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- *)
-*/
-%{
-open Cil
-open Pretty
-module E = Errormsg
-
-let parse_error msg : 'a =           (* sm: c++-mode highlight hack: -> ' <- *)
-  E.hadErrors := true;
-  E.parse_error
-    msg
-
-
-let getArg (argname: string) (args: (string * formatArg) list) = 
-  try 
-    snd (List.find (fun (n, a) -> n = argname) args)
-  with _ -> 
-    E.s (error "Pattern string %s does not have argument with name %s\n"
-           !Lexerhack.currentPattern argname)
-
-let wrongArgType (which: string) (expected: string) (found: formatArg) = 
-  E.s (bug "Expecting %s argument (%s) and found %a\n" 
-         expected which d_formatarg found)
-
-let doUnop (uo: unop) subexp = 
-  ((fun args -> 
-        let e = (fst subexp) args in
-        UnOp(uo, e, typeOf e)),
-
-   (fun e -> match e with 
-     UnOp(uo', e', _) when uo  = uo' -> (snd subexp) e' 
-   | _ -> None)) 
-
-let buildPlus e1 e2 : exp = 
-  let t1 = typeOf e1 in
-  if isPointerType t1 then 
-    BinOp(PlusPI, e1, e2, t1)
-  else 
-    BinOp(PlusA, e1, e2, t1)
-
-let buildMinus e1 e2 : exp = 
-  let t1 = typeOf e1 in
-  let t2 = typeOf e2 in
-  if isPointerType t1 then
-    if isPointerType t2 then
-      BinOp(MinusPP, e1, e2, intType)
-    else
-      BinOp(MinusPI, e1, e2, t1)
-  else
-    BinOp(MinusA, e1, e2, t1)
-
-let doBinop bop e1t e2t = 
-  ((fun args -> 
-    let e1 = (fst e1t) args in 
-    let e2 = (fst e2t) args in 
-    let t1 = typeOf e1 in
-    BinOp(bop, e1, e2, t1)),
-
-   (fun e -> match e with 
-     BinOp(bop', e1, e2, _) when bop' = bop -> begin
-       match (snd e1t) e1, (snd e2t) e2 with
-         Some m1, Some m2 -> Some (m1 @ m2)
-       | _, _ -> None
-     end
-   | _ -> None))
-
-(* Check the equivalence of two format lists *)
-let rec checkSameFormat (fl1: formatArg list) (fl2: formatArg list) = 
-  match fl1, fl2 with 
-    [], [] -> true
-  | h1::t1, h2::t2 -> begin
-      let rec checkOffsetEq o1 o2 = 
-        match o1, o2 with
-          NoOffset, NoOffset -> true
-        | Field(f1, o1'), Field(f2, o2') -> 
-            f1.fname = f2.fname && checkOffsetEq o1' o2'
-        | Index(e1, o1'), Index(e2, o2') -> 
-            checkOffsetEq o1' o2' && checkExpEq e1 e2
-        | _, _ -> false
-
-      and checkExpEq e1 e2 = 
-        match e1, e2 with 
-          Const(CInt64(n1, _, _)), Const(CInt64(n2, _, _)) -> n1 = n2
-        | Lval l1, Lval l2 -> checkLvalEq l1 l2
-        | UnOp(uo1, e1, _), UnOp(uo2, e2, _) -> 
-            uo1 = uo2 && checkExpEq e1 e2
-        | BinOp(bo1, e11, e12, _), BinOp(bo2, e21, e22, _) -> 
-            bo1 = bo2 && checkExpEq e11 e21 && checkExpEq e21 e22
-        | AddrOf l1, AddrOf l2 -> checkLvalEq l1 l2
-        | StartOf l1, StartOf l2 -> checkLvalEq l1 l2
-        | SizeOf t1, SizeOf t2 -> typeSig t1 = typeSig t2
-        | _, _ -> 
-            ignore (E.warn "checkSameFormat for Fe"); false
-
-      and checkLvalEq l1 l2 = 
-        match l1, l2 with
-          (Var v1, o1), (Var v2, o2) -> v1 == v2 && checkOffsetEq o1 o2
-        | (Mem e1, o1), (Mem e2, o2) -> 
-            checkOffsetEq o1 o2 && checkExpEq e1 e2
-        | _, _ -> false
-      in
-      let hdeq = 
-        match h1, h2 with 
-          Fv v1, Fv v2 -> v1 == v2
-        | Fd n1, Fd n2 -> n1 = n2
-        | Fe e1, Fe e2 -> checkExpEq e1 e2
-        | Fi i1, Fi i2 -> ignore (E.warn "checkSameFormat for Fi"); false
-        | Ft t1, Ft t2 -> typeSig t1 = typeSig t2
-        | Fl l1, Fl l2 -> checkLvalEq l1 l2
-        | Fo o1, Fo o2 -> checkOffsetEq o1 o2
-        | Fc c1, Fc c2 -> c1 == c2
-        | _, _ -> false
-      in
-      hdeq || checkSameFormat t1 t2
-  end
-  | _, _ -> false
-
-let matchBinopEq (bopeq: binop -> bool) lvt et = 
-  (fun i -> match i with 
-    Set (lv, BinOp(bop', Lval (lv'), e', _), l) when bopeq bop' -> begin
-      match lvt lv, lvt lv', et e' with 
-        Some m1, Some m1', Some m2 -> 
-          (* Must check that m1 and m2 are the same *)
-          if checkSameFormat m1 m1' then 
-            Some (m1 @ m2)
-          else
-            None
-      | _, _, _ -> None
-     end
-  | _ -> None)
-
-let doBinopEq bop lvt et = 
-  ((fun loc args -> 
-    let l = (fst lvt) args in
-    Set(l, BinOp(bop, (Lval l), (fst et) args, typeOfLval l), loc)),
-
-   matchBinopEq (fun bop' -> bop = bop') (snd lvt) (snd et))
-
-
-let getField (bt: typ) (fname: string) : fieldinfo = 
-  match unrollType bt with 
-    TComp(ci, _) -> begin
-      try
-        List.find (fun f -> fname = f.fname) ci.cfields
-      with Not_found -> 
-        E.s (bug "Cannot find field %s in %s\n" fname (compFullName ci))
-    end
-  | t -> E.s (bug "Trying to access field %s in non-struct\n" fname) 
-
-
-let matchIntType (ik: ikind) (t:typ) : formatArg list option = 
-  match unrollType t with 
-    TInt(ik', _) when ik = ik' -> Some []
-  | _ -> None
-
-let matchFloatType (fk: fkind) (t:typ) : formatArg list option = 
-  match unrollType t with 
-    TFloat(fk', _) when fk = fk' -> Some []
-  | _ -> None
-
-let doAttr (id: string) 
-           (aargs: (((string * formatArg) list -> attrparam list) * 
-                    (attrparam list -> formatArg list option)) option)
-    = 
-  let t = match aargs with 
-    Some t -> t
-  | None -> (fun _ -> []), 
-            (function [] -> Some [] | _ -> None)
-  in
-  ((fun args -> Attr (id, (fst t) args)), 
-   
-   (fun attrs -> 
-     (* Find the attributes with the same ID *)
-     List.fold_left 
-       (fun acc a -> 
-         match acc, a with 
-           Some _, _ -> acc (* We found one already *)
-         | None, Attr(id', args) when id = id' -> 
-             (* Now match the arguments *)
-             (snd t) args 
-         | None, _ -> acc)
-       None
-       attrs))
-
-
-type falist = formatArg list
-
-type maybeInit = 
-    NoInit
-  | InitExp of exp
-  | InitCall of lval * exp list
-
-%}
-
-%token <string> IDENT
-%token <string> CST_CHAR
-%token <string> CST_INT
-%token <string> CST_FLOAT
-%token <string> CST_STRING
-%token <string> CST_WSTRING
-%token <string> NAMED_TYPE
-
-%token EOF
-%token CHAR INT DOUBLE FLOAT VOID INT64 INT32
-%token ENUM STRUCT TYPEDEF UNION
-%token SIGNED UNSIGNED LONG SHORT
-%token VOLATILE EXTERN STATIC CONST RESTRICT AUTO REGISTER
-
-%token <string> ARG_e ARG_eo ARG_E ARG_u ARG_b ARG_t ARG_d ARG_lo ARG_l ARG_i
-%token <string> ARG_o ARG_va ARG_f ARG_F ARG_A ARG_v ARG_k ARG_c ARG_d
-%token <string> ARG_s ARG_p ARG_P ARG_I ARG_S ARG_g
-
-%token SIZEOF ALIGNOF
-
-%token EQ 
-%token ARROW DOT
-
-%token EQ_EQ EXCLAM_EQ INF SUP INF_EQ SUP_EQ
-%token MINUS_EQ PLUS_EQ STAR_EQ
-%token PLUS MINUS STAR SLASH PERCENT
-%token TILDE AND PIPE CIRC
-%token EXCLAM AND_AND PIPE_PIPE
-%token INF_INF SUP_SUP
-%token PLUS_PLUS MINUS_MINUS
-
-%token RPAREN LPAREN RBRACE LBRACE LBRACKET RBRACKET
-%token COLON SEMICOLON COMMA ELLIPSIS QUEST
-
-%token BREAK CONTINUE GOTO RETURN
-%token SWITCH CASE DEFAULT
-%token WHILE DO FOR
-%token IF THEN ELSE
-
-%token  PLUS_EQ MINUS_EQ STAR_EQ SLASH_EQ PERCENT_EQ
-%token  AND_EQ PIPE_EQ CIRC_EQ INF_INF_EQ SUP_SUP_EQ
-
-%token ATTRIBUTE INLINE ASM TYPEOF FUNCTION__ PRETTY_FUNCTION__ LABEL__
-%token BUILTIN_VA_ARG BUILTIN_VA_LIST
-%token BLOCKATTRIBUTE
-%token DECLSPEC
-%token <string> MSASM MSATTR
-%token PRAGMA
-
-
-/* operator precedence */
-%nonassoc 	IF
-%nonassoc 	ELSE
-
-
-%left	COMMA
-
- /*(* Set the following precedences higer than COMMA *)*/
-%nonassoc ARG_e ARG_d ARG_lo ARG_l ARG_i ARG_v ARG_I ARG_g
-%right	EQ PLUS_EQ MINUS_EQ STAR_EQ SLASH_EQ PERCENT_EQ
-                AND_EQ PIPE_EQ CIRC_EQ INF_INF_EQ SUP_SUP_EQ
-%right	COLON
-%left	PIPE_PIPE
-%left	AND_AND
-%left   ARG_b
-%left	PIPE
-%left 	CIRC
-%left	AND
-%left	EQ_EQ EXCLAM_EQ
-%left	INF SUP INF_EQ SUP_EQ
-%left	INF_INF SUP_SUP
-%left	PLUS MINUS
-%left	STAR SLASH PERCENT CONST RESTRICT VOLATILE
-%right	ARG_u EXCLAM TILDE PLUS_PLUS MINUS_MINUS CAST RPAREN ADDROF SIZEOF ALIGNOF
-%left 	LBRACKET
-%left	DOT ARROW LPAREN LBRACE
-%nonassoc IDENT QUEST CST_INT
-
-%start initialize expression typename offset lval instr stmt stmt_list
-
-
-%type <unit> initialize
-%type <((string -> Cil.typ -> Cil.varinfo) -> Cil.location -> (string * Cil.formatArg) list -> Cil.stmt)> stmt
-%type <((string -> Cil.typ -> Cil.varinfo) -> Cil.location -> (string * Cil.formatArg) list -> Cil.stmt list)> stmt_list
-
-%type <((string * Cil.formatArg) list -> Cil.exp) * (Cil.exp -> Cil.formatArg list option)> expression
-
-%type <((string * Cil.formatArg) list -> Cil.exp) * (Cil.exp -> Cil.formatArg list option)> constant
-
-%type <((string * Cil.formatArg) list -> Cil.lval) * (Cil.lval -> Cil.formatArg list option)> lval
-
-%type <((string * Cil.formatArg) list -> Cil.typ) * (Cil.typ -> Cil.formatArg list option)> typename
-
-%type <(Cil.attributes -> (string * Cil.formatArg) list -> Cil.typ) * (Cil.typ -> Cil.formatArg list option)> type_spec
-
-%type <((string * Cil.formatArg) list -> (string * Cil.typ * Cil.attributes) list option * bool) * ((string * Cil.typ * Cil.attributes) list option * bool -> Cil.formatArg list option)> parameters
-
-
-%type <(Cil.location -> (string * Cil.formatArg) list -> Cil.instr) * (Cil.instr -> Cil.formatArg list option)> instr
-
-%type <(Cil.typ -> (string * Cil.formatArg) list -> Cil.offset) * (Cil.offset -> Cil.formatArg list option)> offset
-
-
-%%
-
-
-initialize: 
- /* empty */   {  }
-;
-
-/* (*** Expressions ***) */
-
-
-expression:
-|               ARG_e  {  (* Count arguments eagerly *) 
-                            let currentArg = $1 in 
-                            ((fun args ->
-                               match getArg currentArg args with 
-                                   Fe e -> e
-                                 | a -> wrongArgType currentArg 
-                                            "expression" a),
-
-                             (fun e -> Some [ Fe e ]))
-                         } 
-
-|        	constant { $1 }
-
-|               lval     %prec IDENT
-                        { ((fun args -> Lval ((fst $1) args)),
-
-                             (fun e -> match e with 
-                                Lval l -> (snd $1) l 
-                              | _ -> None))
-                         } 
-
-|		SIZEOF expression
-		        { ((fun args -> SizeOfE ((fst $2) args)),
-
-                           fun e -> match e with 
-                             SizeOfE e' -> (snd $2) e'
-                           | _ -> None)
-                        }
-
-|	 	SIZEOF LPAREN typename RPAREN
-                        { ((fun args -> SizeOf ((fst $3) args)),
-                          
-                           (fun e -> match e with 
-                              SizeOf t -> (snd $3) t
-                           |  _ -> None))
-                        }
-
-|		ALIGNOF expression
-		        { ((fun args -> AlignOfE ((fst $2) args)),
-
-                           (fun e -> match e with
-                             AlignOfE e' -> (snd $2) e' | _ -> None))
-                        }
-
-|	 	ALIGNOF LPAREN typename RPAREN
-		        { ((fun args -> AlignOf ((fst $3) args)),
-
-                           (fun e -> match e with
-                             AlignOf t' -> (snd $3) t' | _ -> None))
-                        } 
-
-|		PLUS expression
-		        { $2 }
-|		MINUS expression
-		        { doUnop Neg $2 }
-
-|		EXCLAM expression
-		        { doUnop LNot $2 }
-
-|		TILDE expression
-		        { doUnop BNot $2 }
-
-|               argu expression %prec ARG_u
-                        { ((fun args -> 
-                             let e = (fst $2) args in
-                             UnOp((fst $1) args, e, typeOf e)),
-
-                           (fun e -> match e with 
-                             UnOp(uo, e', _) -> begin
-                               match (snd $1) uo, (snd $2) e' with 
-                                 Some m1, Some m2 -> Some (m1 @ m2)
-                               | _ -> None
-                             end
-                           | _ -> None))
-                        } 
-                             
-                          
-|		AND expression				%prec ADDROF
-		        { ((fun args -> 
-                             match (fst $2) args with
-                                Lval l -> mkAddrOf l
-                              | _ -> E.s (bug "AddrOf applied to a non lval")),
-                          (fun e -> match e with 
-                            AddrOf l -> (snd $2) (Lval l)
-                          | e -> (snd $2) (Lval (mkMem e NoOffset))))
-                         }
-
-|               LPAREN expression RPAREN 
-                        { $2 }
-
-|		expression PLUS expression
-			{ ((fun args -> buildPlus ((fst $1) args) 
-                                                  ((fst $3) args)), 
-                          (fun e -> match e with 
-                            BinOp((PlusPI|PlusA), e1, e2, _) -> begin
-                              match (snd $1) e1, (snd $3) e2 with
-                                Some m1, Some m2 -> Some (m1 @ m2)
-                              | _, _ -> None
-                            end
-                          | _ -> None))
-                        } 
-
-|		expression MINUS expression
-                        { ((fun args -> buildMinus ((fst $1) args)
-                                                   ((fst $3) args)),
-
-                           (fun e -> match e with 
-                             BinOp((MinusPP|MinusPI|MinusA), e1, e2, _) -> 
-                               begin
-                                 match (snd $1) e1, (snd $3) e2 with
-                                   Some m1, Some m2 -> Some (m1 @ m2)
-                                 | _, _ -> None
-                               end
-                           | _ -> None))
-                        } 
-|               expression argb expression %prec ARG_b
-                        { ((fun args -> 
-                               let e1 = (fst $1) args in 
-                               let bop = (fst $2) args in
-                               let e2 = (fst $3) args in 
-                               let t1 = typeOf e1 in
-                               BinOp(bop, e1, e2, t1)),
-                           
-                           (fun e -> match e with 
-                             BinOp(bop, e1, e2, _) -> begin
-                               match (snd $1) e1,(snd $2) bop,(snd $3) e2 with
-                                 Some m1, Some m2, Some m3 -> 
-                                   Some (m1 @ m2 @ m3)
-                               | _, _, _ -> None
-                             end
-                           | _ -> None))
-                        } 
-
-|		expression STAR expression
-			{ doBinop Mult $1 $3 }
-|		expression SLASH expression
-			{ doBinop Div $1 $3 }
-|		expression PERCENT expression
-			{ doBinop Mod $1 $3 }
-|		expression  INF_INF expression
-			{ doBinop Shiftlt $1 $3 }
-|		expression  SUP_SUP expression
-			{ doBinop Shiftrt $1 $3 }
-|		expression AND expression
-			{ doBinop BAnd $1 $3 }
-|		expression PIPE expression
-			{ doBinop BOr $1 $3 }
-|		expression CIRC expression
-			{ doBinop BXor $1 $3 }
-|		expression EQ_EQ expression
-			{ doBinop Eq $1 $3 }
-|		expression EXCLAM_EQ expression
-			{ doBinop Ne $1 $3 }
-|		expression INF expression
-			{ doBinop Lt $1 $3 }
-|		expression SUP expression
-			{ doBinop Gt $1 $3 }
-|		expression INF_EQ expression
-			{ doBinop Le $1 $3 }
-|		expression SUP_EQ expression
-			{ doBinop Ge $1 $3 }
-
-|		LPAREN typename RPAREN expression
-		         { ((fun args -> 
-                              let t = (fst $2) args in
-                              let e = (fst $4) args in
-                              mkCast e t),
-                            
-                            (fun e -> 
-                              let t', e' = 
-                                match e with 
-                                  CastE (t', e') -> t', e'
-                                | _ -> typeOf e, e
-                              in
-                              match (snd $2) t', (snd $4 e') with
-                                Some m1, Some m2 -> Some (m1 @ m2)
-                              | _, _ -> None))
-                         } 
-;
-
-/*(* Separate the ARG_ to ensure that the counting of arguments is right *)*/
-argu :
-|   ARG_u              { let currentArg = $1 in
-                         ((fun args ->
-                           match getArg currentArg args with
-                             Fu uo -> uo
-                           | a -> wrongArgType currentArg "unnop" a),
-
-                          fun uo -> Some [ Fu uo ])
-                       } 
-;
-
-argb :
-|   ARG_b              { let currentArg = $1 in
-                         ((fun args ->
-                           match getArg currentArg args with
-                             Fb bo -> bo
-                           | a -> wrongArgType currentArg "binop" a),
-
-                          fun bo -> Some [ Fb bo ])
-                       } 
-;
-
-constant:
-|   ARG_d              { let currentArg = $1 in
-                           ((fun args ->
-                             match getArg currentArg args with
-                               Fd n -> integer n
-                              | a -> wrongArgType currentArg "integer" a),
-
-                            fun e -> match e with 
-                              Const(CInt64(n, _, _)) -> 
-                                Some [ Fd (Int64.to_int n) ]
-                            | _ -> None) 
-                         } 
-
-|   ARG_g             { let currentArg = $1 in
-                        ((fun args ->
-                             match getArg currentArg args with
-                               Fg s -> Const(CStr s)
-                              | a -> wrongArgType currentArg "string" a),
-
-                            fun e -> match e with 
-                              Const(CStr s) ->
-                                Some [ Fg s ]
-                            | _ -> None) 
-                         } 
-|   CST_INT              { let n = parseInt $1 in
-                           ((fun args -> n),
-
-                            (fun e -> match e, n with 
-                              Const(CInt64(e', _, _)), 
-                              Const(CInt64(n', _, _)) when e' = n' -> Some []
-                            | _ -> None))
-                         }
-;
-
-
-/*(***************** LVALUES *******************)*/
-lval: 
-|   ARG_l             { let currentArg = $1 in
-                           ((fun args -> 
-                                match getArg currentArg args with 
-                                  Fl l -> l
-                                | Fv v -> Var v, NoOffset
-                                | a -> wrongArgType currentArg "lval" a),
-
-                            fun l -> Some [ Fl l ])
-                         }
-
-|   argv offset       %prec ARG_v
-                         { ((fun args -> 
-                              let v = (fst $1) args in
-                               (Var v, (fst $2) v.vtype args)),
-
-                            (fun l -> match l with 
-                              Var vi, off -> begin
-                                match (snd $1) vi, (snd $2) off with 
-                                  Some m1, Some m2 -> Some (m1 @ m2)
-                                | _ -> None
-                              end
-                            | _ -> None))
-                         }
-
-|   STAR expression      { ((fun args -> mkMem ((fst $2) args) NoOffset),
-
-                           (fun l -> match l with 
-                              Mem e, NoOffset -> (snd $2) e
-                           | _, _ -> None))
-                         }
-
-|   expression ARROW IDENT offset 
-             { ((fun args -> 
-                   let e = (fst $1) args in
-                   let baset = 
-                     match unrollTypeDeep (typeOf e) with 
-                       TPtr (t, _) -> t
-                     | _ -> E.s (bug "Expecting a pointer for field %s\n" $3)
-                   in
-                   let fi = getField baset $3 in
-                   mkMem e (Field(fi, (fst $4) fi.ftype args))),
-
-                (fun l -> match l with 
-                   Mem e, Field(fi, off) when fi.fname = $3 -> begin
-                     match (snd $1) e, (snd $4) off with 
-                       Some m1, Some m2 -> Some (m1 @ m2)
-                     | _, _ -> None
-                   end
-                | _, _ -> None))
-             }
-
-|   LPAREN STAR expression RPAREN offset
-             { ((fun args -> 
-                 let e = (fst $3) args in
-                 let baset = 
-                   match unrollTypeDeep (typeOf e) with 
-                     TPtr (t, _) -> t
-                   | _ -> E.s (bug "Expecting a pointer\n")
-                 in
-                 mkMem e ((fst $5) baset args)),
-
-                (fun l -> match l with 
-                  Mem e, off -> begin
-                    match (snd $3) e, (snd $5 off) with 
-                      Some m1, Some m2 -> Some (m1 @ m2)
-                    | _, _ -> None
-                  end
-                | _, _ -> None))
-              }
-    ;
-
-argv :
-|   ARG_v              { let currentArg = $1 in
-                         ((fun args ->
-                           match getArg currentArg args with
-                             Fv v -> v
-                           | a -> wrongArgType currentArg "varinfo" a),
-
-                          fun v -> Some [ Fv v ])
-                       } 
-|  IDENT               { let currentArg = $1 in
-                         ((fun args -> 
-                           match getArg currentArg args with 
-                             Fv v -> v
-                           | a -> wrongArgType currentArg "varinfo" a),
-                         (fun v -> 
-                             E.s (bug "identifiers (%s) are not supported for deconstruction" currentArg)))
-                       } 
-;
-
-  
-/*(********** OFFSETS *************)*/
-offset: 
-|  ARG_o             { let currentArg = $1 in
-                            ((fun t args -> 
-                                match getArg currentArg args with 
-                                  Fo o -> o
-                                | a -> wrongArgType currentArg "offset" a),
-
-                              (fun off -> Some [ Fo off ]))
-                          }
-
-|  /* empty */            { ((fun t args -> NoOffset),
-
-                             (fun off -> match off with 
-                                NoOffset -> Some []
-                              | _ -> None))
-                          }
-
-|  DOT IDENT offset       { ((fun t args -> 
-                                let fi = getField t $2 in
-                                Field (fi, (fst $3) fi.ftype args)),
-
-                            (fun off -> match off with 
-                               Field (fi, off') when fi.fname = $2 -> 
-                                 (snd $3) off'
-                            | _ -> None))
-                          }
-
-|  LBRACKET expression RBRACKET offset
-                   { ((fun t args -> 
-                     let bt = 
-                       match unrollType t with 
-                         TArray(bt, _, _) -> bt 
-                       | _ -> E.s (error "Formatcil: expecting an array for index")
-                     in
-                     let e = (fst $2) args in 
-                     Index(e, (fst $4) bt args)),
-
-                    (fun off -> match off with 
-                      Index (e, off') -> begin
-                        match (snd $2) e, (snd $4) off with 
-                          Some m1, Some m2 -> Some (m1 @ m2)
-                        | _, _ -> None
-                      end
-                    | _ -> None))
-                    }
-;
-
-
-/*(************ TYPES **************)*/
-typename: one_formal  { ((fun args -> 
-                            let (_, ft, _) = (fst $1) args in
-                            ft),
-
-                         (fun t -> (snd $1) ("", t, [])))
-                      } 
-;
-
-one_formal: 
-/*(* Do not allow attributes for the name *)*/
-| type_spec attributes decl
-                   { ((fun args -> 
-                        let tal = (fst $2) args in
-                        let ts = (fst $1) tal args in
-                        let (fn, ft, _) = (fst $3) ts args in
-                        (fn, ft, [])),
-
-                      (fun (fn, ft, fa) -> 
-                         match (snd $3) (fn, ft) with 
-                           Some (restt, m3) -> begin
-                             match (snd $1) restt, 
-                                   (snd $2) (typeAttrs restt)with
-                               Some m1, Some m2 -> 
-                                 Some (m1 @ m2 @ m3)
-                             | _, _ -> None
-                           end
-                         | _ -> None))
-                   } 
-
-| ARG_f 
-                   { let currentArg = $1 in
-                     ((fun args -> 
-                         match getArg currentArg args with
-                          Ff (fn, ft, fa) -> (fn, ft, fa)
-                         | a  -> wrongArgType currentArg "formal" a),
-
-                      (fun (fn, ft, fa) -> Some [ Ff (fn, ft, fa) ]))
-                   } 
-;
-
-type_spec:  
-|   ARG_t       { let currentArg = $1 in
-                     ((fun al args -> 
-                       match getArg currentArg args with 
-                          Ft t -> typeAddAttributes al t
-                       | a -> wrongArgType currentArg "type" a),
-                      
-                      (fun t -> Some [ Ft t ]))
-                      }
-
-|   VOID            { ((fun al args -> TVoid al),
-
-                       (fun t -> match unrollType t with 
-                           TVoid _ -> Some []
-                         | _ -> None)) }
-
-|   ARG_k           { let currentArg = $1 in
-                      ((fun al args -> 
-                        match getArg currentArg args with 
-                          Fk ik -> TInt(ik, al)
-                        | a -> wrongArgType currentArg "ikind" a),
-
-                       (fun t -> match unrollType t with 
-                         TInt(ik, _) -> Some [ Fk ik ]
-                       | _ -> None))
-                    } 
-
-|   CHAR            { ((fun al args -> TInt(IChar, al)),
-                       (matchIntType IChar)) }
-|   UNSIGNED CHAR   { ((fun al args -> TInt(IUChar, al)), 
-                       matchIntType IUChar) }
-
-|   SHORT           { ((fun al args -> TInt(IShort, al)), 
-                       matchIntType IShort) }
-|   UNSIGNED SHORT  { ((fun al args -> TInt(IUShort, al)), 
-                       matchIntType IUShort) }
-
-|   INT             { ((fun al args -> TInt(IInt, al)), 
-                       matchIntType IInt) }
-|   UNSIGNED INT    { ((fun al args -> TInt(IUInt, al)), matchIntType IUInt) }
-
-|   LONG             { ((fun al args -> TInt(ILong, al)), 
-                        matchIntType ILong) }
-|   UNSIGNED LONG    { ((fun al args -> TInt(IULong, al)), 
-                        matchIntType IULong) }
-
-|   LONG LONG          { ((fun al args -> TInt(ILongLong, al)), 
-                          
-                          matchIntType ILongLong)
-                        }
-|   UNSIGNED LONG LONG    { ((fun al args -> TInt(IULongLong, al)),
-
-                             matchIntType IULongLong)
-                           }
-
-|   FLOAT           { ((fun al args -> TFloat(FFloat, al)),
-                       matchFloatType FFloat) 
-                    }
-|   DOUBLE          { ((fun al args -> TFloat(FDouble, al)),
-                       matchFloatType FDouble) }
-
-|   STRUCT ARG_c { let currentArg = $2 in
-                      ((fun al args -> 
-                         match getArg currentArg args with 
-                           Fc ci -> TComp(ci, al)
-                         | a -> wrongArgType currentArg "compinfo" a),
-
-                        (fun t -> match unrollType t with 
-                            TComp(ci, _) -> Some [ Fc ci ]
-                          | _ -> None))
-                    }
-|   UNION ARG_c { let currentArg = $2 in
-                     ((fun al args -> 
-                         match getArg currentArg args with 
-                           Fc ci -> TComp(ci, al)
-                         | a -> wrongArgType currentArg "compinfo" a),
-
-                        (fun t -> match unrollType t with 
-                            TComp(ci, _) -> Some [ Fc ci ]
-                          | _ -> None))
-
-                   }
-
-|   TYPEOF LPAREN expression RPAREN     
-                   { ((fun al args -> typeAddAttributes al 
-                                        (typeOf ((fst $3) args))),
-                    
-                      (fun t -> E.s (bug "Cannot match typeof(e)\n")))
-                   } 
-;
-
-decl: 
-|  STAR attributes decl  
-                    { ((fun ts args -> 
-                         let al = (fst $2) args in
-                         (fst $3) (TPtr(ts, al)) args),
-
-                       (fun (fn, ft) -> 
-                         match (snd $3) (fn, ft) with 
-                           Some (TPtr(bt, al), m2) -> begin
-                             match (snd $2) al with 
-                               Some m1 -> Some (bt, m1 @ m2)
-                             | _ -> None
-                           end
-                         | _ -> None))
-                    } 
-
-|  direct_decl  { $1 }
-;
-
-direct_decl: 
-|  /* empty */     { ((fun ts args -> ("", ts, [])),
-
-                      (* Match any name in this case *)
-                      (fun (fn, ft) -> 
-                         Some (unrollType ft, [])))
-                   }
-
-|  IDENT           { ((fun ts args -> ($1, ts, [])),
-
-                      (fun (fn, ft) -> 
-                        if fn = "" || fn = $1 then 
-                          Some (unrollType ft, []) 
-                        else 
-                          None))
-                   }
-
-|  LPAREN attributes decl RPAREN 
-                   { ((fun ts args -> 
-                          let al = (fst $2) args in
-                          (fst $3) (typeAddAttributes al ts) args),
-
-                      (fun (fn, ft) -> begin
-                        match (snd $3) (fn, ft) with
-                          Some (restt, m2) -> begin
-                            match (snd $2) (typeAttrs restt) with 
-                              Some m1 -> Some (restt, m1 @ m2)
-                            | _ -> None
-                          end
-                        | _ -> None
-                      end))
-                   } 
-
-|  direct_decl LBRACKET exp_opt RBRACKET
-                   { ((fun ts args -> 
-                        (fst $1) (TArray(ts, (fst $3) args, [])) args),
-
-                     (fun (fn, ft) -> 
-                       match (snd $1) (fn, ft) with 
-                         Some (TArray(bt, lo, _), m1) -> begin
-                           match (snd $3) lo with 
-                             Some m2 -> Some (unrollType bt, m1 @ m2)
-                           | _ -> None
-                         end 
-                       | _ -> None))
-                   }
-
-
-/*(* We use parentheses around the function to avoid conflicts *)*/
-|  LPAREN attributes decl RPAREN LPAREN parameters RPAREN 
-                   { ((fun ts args -> 
-                        let al = (fst $2) args in
-                        let pars, isva = (fst $6) args in
-                        (fst $3) (TFun(ts, pars, isva, al)) args),
-
-                      (fun (fn, ft) -> 
-                         match (snd $3) (fn, ft) with 
-                           Some (TFun(rt, args, isva, al), m1) -> begin
-                             match (snd $2) al, (snd $6) (args, isva) with 
-                               Some m2, Some m6 
-                               -> Some (unrollType rt, m1 @ m2 @ m6)
-                             | _ -> None
-                           end
-                         | _ -> None))
-                   }
-;
-
-parameters: 
-| /* empty */      { ((fun args -> (None, false)),
-
-                     (* Match any formals *)
-                      (fun (pars, isva) -> 
-                        match pars, isva with 
-                          (_, false) -> Some [] 
-                        | _ -> None))
-                   } 
-
-| parameters_ne    { ((fun args -> 
-                        let (pars : (string * typ * attributes) list), 
-                            (isva : bool) = (fst $1) args in
-                        (Some pars), isva),
-
-                     (function 
-                         ((Some pars), isva) -> (snd $1) (pars, isva)
-                       |  _ -> None))
-                   } 
-;
-parameters_ne: 
-| ELLIPSIS  
-                   { ((fun args -> ([], true)),
-
-                      (function 
-                          ([], true) -> Some [] 
-                        | _ -> None))
-                   }
-
-| ARG_va           { let currentArg = $1 in
-                     ((fun args -> 
-                       match getArg currentArg args with
-                         Fva isva -> ([], isva)
-                       | a -> wrongArgType currentArg "vararg" a),
-
-                     (function 
-                         ([], isva) -> Some [ Fva isva ] 
-                       | _ -> None))
-                   } 
-
-| ARG_F            { let currentArg = $1 in
-                     ((fun args -> 
-                       match getArg currentArg args with
-                        FF fl -> ( fl, false)
-                       | a  -> wrongArgType currentArg "formals" a),
-
-                      (function 
-                          (pars, false) -> Some [ FF pars ] 
-                        | _ -> None))
-                   } 
-
-| one_formal       { ((fun args -> ([(fst $1) args], false)),
-
-                     (function 
-                         ([ f ], false) -> (snd $1) f 
-                       | _ -> None))
-                   }
-
-
-| one_formal COMMA parameters_ne
-                   { ((fun args -> 
-                        let this = (fst $1) args in
-                        let (rest, isva) = (fst $3) args in
-                        (this :: rest, isva)),
-
-                      (function 
-                          ((f::rest, isva)) -> begin
-                            match (snd $1) f, (snd $3) (rest, isva) with 
-                              Some m1, Some m2 -> Some (m1 @ m2)
-                            | _, _ -> None
-                          end
-                        | _ -> None))
-                   } 
-;
-
-
-
-
-
-exp_opt: 
-   /* empty */     { ((fun args -> None),
-                      (* Match anything if the pattern does not have a len *)
-                      (fun _ -> Some [])) }
-
-|  expression      { ((fun args -> Some ((fst $1) args)),
-
-                      (fun lo -> match lo with
-                        Some e -> (snd $1) e
-                      | _ -> None))
-                   } 
-|  ARG_eo          { let currentArg = $1 in
-                     ((fun args ->
-                       match getArg currentArg args with
-                         Feo lo -> lo
-                       | a -> wrongArgType currentArg "exp_opt" a),
-
-                      fun lo -> Some [ Feo lo ])
-                   } 
-;
-
-
-
-attributes: 
-  /*(* Ignore other attributes *)*/
-  /* empty */     { ((fun args -> []), 
-                     (fun attrs -> Some [])) }
-          
-| ARG_A           { let currentArg = $1 in
-                    ((fun args -> 
-                        match getArg currentArg args with
-                          FA al -> al
-                        | a -> wrongArgType currentArg "attributes" a),
-
-                     (fun al -> Some [ FA al ]))
-                  } 
-                       
-| attribute attributes
-                  { ((fun args ->
-                       addAttribute ((fst $1) args) ((fst $2) args)),
-                     (* Pass all the attributes down *)
-                     (fun attrs ->
-                       match (snd $1) attrs, (snd $2) attrs with
-                         Some m1, Some m2 -> Some (m1 @ m2)
-                       | _, _ -> None))
-                  } 
-;
-
-attribute:
-|   CONST                               { doAttr "const" None }
-|   RESTRICT                            { doAttr "restrict" None }
-|   VOLATILE                            { doAttr "volatile" None }
-|   ATTRIBUTE LPAREN LPAREN attr RPAREN RPAREN	
-                                        { $4 }
-
-;
-
-  
-attr: 
-|   IDENT                                
-                          { doAttr $1 None }
-                                 
-|   IDENT LPAREN attr_args_ne RPAREN     
-                          { doAttr $1 (Some $3) }
-;
-
-attr_args_ne: 
-    attr_arg                     { ((fun args -> [ (fst $1) args ]),
-
-                                    (fun aargs -> match aargs with 
-                                      [ arg ] -> (snd $1) arg
-                                    | _ -> None))
-                                 } 
-|   attr_arg COMMA attr_args_ne  { ((fun args -> 
-                                      let this = (fst $1) args in
-                                      this :: ((fst $3) args)),
-
-                                    (fun aargs -> match aargs with 
-                                      h :: rest -> begin
-                                        match (snd $1) h, (snd $3) rest with
-                                          Some m1, Some m2 -> Some (m1 @ m2)
-                                        | _, _ -> None
-                                      end
-                                    | _ -> None))
-                                  } 
-|   ARG_P               { let currentArg = $1 in
-                          ((fun args -> 
-                            match getArg currentArg args with
-                              FP al -> al
-                            | a -> wrongArgType currentArg "attrparams" a),
-
-                           (fun al -> Some [ FP al ]))
-                        } 
-;
-
-attr_arg: 
-|   IDENT            { ((fun args -> ACons($1, [])),
-
-                        (fun aarg -> match aarg with 
-                            ACons(id, []) when id = $1 -> Some []
-                        | _ -> None))
-                     } 
-|   IDENT LPAREN attr_args_ne RPAREN   
-                     { ((fun args -> ACons($1, (fst $3) args)),
-
-                        (fun aarg -> match aarg with 
-                            ACons(id, args) when id = $1 -> 
-                              (snd $3) args
-                        | _ -> None))
-                     } 
-|   ARG_p            { let currentArg = $1 in
-                       ((fun args -> 
-                          match getArg currentArg args with
-                            Fp p -> p
-                          | a -> wrongArgType currentArg "attrparam" a),
-
-                        (fun ap -> Some [ Fp ap]))
-                     } 
-                          
-;
-
-/* (********** INSTRUCTIONS ***********) */
-instr: 
-|               ARG_i SEMICOLON
-                        { let currentArg = $1 in
-                          ((fun loc args -> 
-                                match getArg currentArg args with 
-                                  Fi i -> i
-                                | a -> wrongArgType currentArg "instr" a),
-
-                           (fun i -> Some [ Fi i]))
-                        }
-
-|		lval EQ expression SEMICOLON
-			{ ((fun loc args -> 
-                              Set((fst $1) args, (fst $3) args, loc)),
-
-                           (fun i -> match i with
-                             Set (lv, e, l) -> begin
-                               match (snd $1) lv, (snd $3) e with
-                                 Some m1, Some m2 -> Some (m1 @ m2)
-                               | _, _ -> None
-                             end
-                           | _ -> None))
-                        } 
-
-|		lval PLUS_EQ expression SEMICOLON
-			{ ((fun loc args -> 
-                              let l = (fst $1) args in
-                              Set(l, buildPlus (Lval l) ((fst $3) args), loc)),
-
-                           matchBinopEq 
-                             (fun bop -> bop = PlusPI || bop = PlusA)
-                             (snd $1) (snd $3)) 
-                        }
-
-|		lval MINUS_EQ expression SEMICOLON
-			{ ((fun loc args -> 
-                              let l = (fst $1) args in
-                              Set(l, 
-                                  buildMinus (Lval l) ((fst $3) args), loc)),
-
-                           matchBinopEq (fun bop -> bop = MinusA 
-                                               || bop = MinusPP 
-                                               || bop = MinusPI) 
-                                      (snd $1)  (snd $3)) 
-                        }
-|		lval STAR_EQ expression SEMICOLON
-			{ doBinopEq Mult $1 $3 }
-
-|		lval SLASH_EQ expression SEMICOLON
-			{ doBinopEq Div $1 $3 }
-
-|		lval PERCENT_EQ expression SEMICOLON
-			{ doBinopEq Mod $1 $3 }
-
-|		lval AND_EQ expression SEMICOLON
-			{ doBinopEq BAnd $1 $3 }
-
-|		lval PIPE_EQ expression SEMICOLON
-			{ doBinopEq BOr $1 $3 }
-
-|		lval CIRC_EQ expression SEMICOLON
-			{ doBinopEq BXor $1 $3 }
-
-|		lval INF_INF_EQ expression SEMICOLON
-			{ doBinopEq Shiftlt $1 $3 }
-
-|		lval SUP_SUP_EQ expression SEMICOLON
-			{ doBinopEq Shiftrt $1 $3 }
-
-/* (* Would be nice to be able to condense the next three rules but we get 
- * into conflicts *)*/
-|		lval EQ lval LPAREN arguments RPAREN  SEMICOLON
-			{ ((fun loc args -> 
-                              Call(Some ((fst $1) args), Lval ((fst $3) args), 
-                                     (fst $5) args, loc)),
-
-                           (fun i -> match i with 
-                             Call(Some l, Lval f, args, loc) -> begin
-                               match (snd $1) l, (snd $3) f, (snd $5) args with
-                                 Some m1, Some m2, Some m3 -> 
-                                   Some (m1 @ m2 @ m3)
-                               | _, _, _ -> None
-                             end
-                           | _ -> None))
-                        }
-
-|		        lval LPAREN arguments RPAREN  SEMICOLON
-			{ ((fun loc args -> 
-                              Call(None, Lval ((fst $1) args), 
-                                     (fst $3) args, loc)), 
-
-                           (fun i -> match i with 
-                             Call(None, Lval f, args, loc) -> begin
-                               match (snd $1) f, (snd $3) args with
-                                 Some m1, Some m2 -> Some (m1 @ m2)
-                               | _, _ -> None
-                             end
-                           | _ -> None))
-                         }
-
-|                 arglo lval LPAREN arguments RPAREN  SEMICOLON
-		     { ((fun loc args -> 
-                       Call((fst $1) args, Lval ((fst $2) args), 
-                            (fst $4) args, loc)), 
-                        
-                        (fun i -> match i with 
-                          Call(lo, Lval f, args, loc) -> begin
-                            match (snd $1) lo, (snd $2) f, (snd $4) args with
-                              Some m1, Some m2, Some m3 -> 
-                                Some (m1 @ m2 @ m3)
-                            | _, _, _ -> None
-                          end
-                        | _ -> None))
-                     }
-;
-
-/* (* Separate this out to ensure that the counting or arguments is right *)*/
-arglo: 
-    ARG_lo               { let currentArg = $1 in
-                           ((fun args -> 
-                             let res = 
-                               match getArg currentArg args with
-                                 Flo x -> x
-                               | a -> wrongArgType currentArg "lval option" a
-                             in
-                             res),
-
-                            (fun lo -> Some [ Flo lo ]))
-                         } 
-;                              
-arguments: 
-    /* empty */   { ((fun args -> []), 
-
-                     (fun actuals -> match actuals with 
-                          [] -> Some []
-                         | _ -> None))
-                  }
-
-| arguments_ne    { $1 }
-;
-
-arguments_ne:
-  expression      { ((fun args -> [ (fst $1) args ]),
-
-                     (fun actuals -> match actuals with 
-                        [ h ] -> (snd $1) h
-                       | _ -> None))
-                  }
-
-| ARG_E           {  let currentArg = $1 in
-                     ((fun args -> 
-                         match getArg currentArg args with
-                           FE el -> el
-                          | a -> wrongArgType currentArg "arguments" a),
-
-                      (fun actuals -> Some [ FE actuals ]))
-                  } 
-
-| expression COMMA arguments_ne
-                  { ((fun args -> ((fst $1) args) :: ((fst $3) args)),
-
-                     (fun actuals -> match actuals with 
-                         h :: rest -> begin
-                           match (snd $1) h, (snd $3) rest with 
-                             Some m1, Some m2 -> Some (m1 @ m2)
-                           | _, _ -> None
-                         end
-                       | _ -> None))
-                  }
-;
-
-
-/*(******** STATEMENTS *********)*/
-stmt: 
-    IF LPAREN expression RPAREN stmt           %prec IF
-                  { (fun mkTemp loc args -> 
-                         mkStmt (If((fst $3) args, 
-                                    mkBlock [ $5 mkTemp loc args ],
-                                    mkBlock [], loc)))
-                  }
-|   IF LPAREN expression RPAREN stmt ELSE stmt 
-                  { (fun mkTemp loc args -> 
-                         mkStmt (If((fst $3) args, 
-                                    mkBlock [ $5 mkTemp loc args ],
-                                    mkBlock [ $7 mkTemp loc args], loc)))
-                  }
-|   RETURN exp_opt SEMICOLON  
-                  { (fun mkTemp loc args -> 
-                         mkStmt (Return((fst $2) args, loc))) 
-                  }
-|   BREAK SEMICOLON  
-                  { (fun mkTemp loc args -> 
-                         mkStmt (Break loc))
-                  }
-|   CONTINUE SEMICOLON 
-                  { (fun mkTemp loc args -> 
-                         mkStmt (Continue loc))
-                  }
-|   LBRACE stmt_list RBRACE  
-                  { (fun mkTemp loc args -> 
-                         let stmts = $2 mkTemp loc args in
-                         mkStmt (Block (mkBlock (stmts))))
-                  }
-|   WHILE LPAREN expression RPAREN stmt  
-                  { (fun mkTemp loc args -> 
-                        let e = (fst $3) args in
-                        let e = 
-                          if isPointerType(typeOf e) then 
-                            mkCast e !upointType
-                          else e
-                        in
-(*
-                        mkStmt 
-                          (Loop (mkBlock [ mkStmt 
-                                             (If(e,
-                                                 mkBlock [],
-                                                 mkBlock [ mkStmt 
-                                                             (Break loc) ],
-                                                 loc));
-                                           $5 mkTemp loc args ],
-                                 loc, None, None))
-*)
-			mkStmt
-			  (While (e, mkBlock [ $5 mkTemp loc args ], loc)))
-                   } 
-|   instr_list    { (fun mkTemp loc args -> 
-                       mkStmt (Instr ($1 loc args)))
-                  }
-|   ARG_s         { let currentArg = $1 in
-                    (fun mkTemp loc args -> 
-                       match getArg currentArg args with
-                         Fs s -> s
-                       | a -> wrongArgType currentArg "stmt" a) }
-;
-
-stmt_list: 
-    /* empty */  { (fun mkTemp loc args -> []) }
-
-|   ARG_S        { let currentArg = $1 in
-                   (fun mkTemp loc args -> 
-                       match getArg currentArg args with 
-                       | FS sl -> sl 
-                       | a -> wrongArgType currentArg "stmts" a)
-                 }
-|   stmt stmt_list  
-                 { (fun mkTemp loc args -> 
-                      let this = $1 mkTemp loc args in
-                      this :: ($2 mkTemp loc args))
-                 }
-/* (* We can also have a declaration *) */
-|   type_spec attributes decl maybe_init SEMICOLON stmt_list 
-                { (fun mkTemp loc args -> 
-                     let tal = (fst $2) args in
-                     let ts  = (fst $1) tal args in
-                     let (n, t, _) = (fst $3) ts args in
-                     let init = $4 args in
-                     (* Before we proceed we must create the variable *)
-                     let v = mkTemp n t in
-                     (* Now we parse the rest *)
-                     let rest = $6 mkTemp loc ((n, Fv v) :: args) in
-                     (* Now we add the initialization instruction to the 
-                      * front *)
-                     match init with 
-                       NoInit -> rest
-                     | InitExp e -> 
-                         mkStmtOneInstr (Set((Var v, NoOffset), e, loc)) 
-                         :: rest
-                     | InitCall (f, args) ->
-                         mkStmtOneInstr (Call(Some (Var v, NoOffset), 
-                                              Lval f, args, loc))
-                         :: rest
-
-                                                           )
-                 } 
-;
-
-instr_list:
-     /*(* Set this rule to very low precedence to ensure that we shift as 
-          many instructions as possible *)*/
-    instr   %prec COMMA 
-                 { (fun loc args -> [ ((fst $1) loc args) ]) }
-|   ARG_I        { let currentArg = $1 in
-                   (fun loc args -> 
-                       match getArg currentArg args with 
-                       | FI il -> il 
-                       | a -> wrongArgType currentArg "instrs" a)
-                 }
-|   instr instr_list 
-                 { (fun loc args -> 
-                      let this = (fst $1) loc args in
-                      this :: ($2 loc args))
-                 }
-;
-
-
-maybe_init:
-|                               { (fun args -> NoInit) }
-| EQ expression                 { (fun args -> InitExp ((fst $2) args)) }
-| EQ lval LPAREN arguments RPAREN 
-                                { (fun args -> 
-                                    InitCall((fst $2) args, (fst $4) args)) }
-;
-%%
-
-
-
-
-
-
-
diff --git a/cil/src/frontc/cabs.ml b/cil/src/frontc/cabs.ml
deleted file mode 100644
index 78ac02f44..000000000
--- a/cil/src/frontc/cabs.ml
+++ /dev/null
@@ -1,396 +0,0 @@
-(* 
- *
- * Copyright (c) 2001-2002, 
- *  George C. Necula    <necula@cs.berkeley.edu>
- *  Scott McPeak        <smcpeak@cs.berkeley.edu>
- *  Wes Weimer          <weimer@cs.berkeley.edu>
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. The names of the contributors may not be used to endorse or promote
- * products derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
- * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
- * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- *)
-
-(** This file was originally part of Hugues Casee's frontc 2.0, and has been 
- * extensively changed since. 
-**
-** 1.0	3.22.99	Hugues Cassé	First version.
-** 2.0  George Necula 12/12/00: Many extensions
- **)
-
-(*
-** Types
-*)
-
-type cabsloc = {
- lineno : int;
- filename: string;
- byteno: int;
-}
-
-let cabslu = {lineno = -10; 
-	      filename = "cabs loc unknown"; 
-	      byteno = -10;}
-
-(* clexer puts comments here *)
-let commentsGA = GrowArray.make 100 (GrowArray.Elem(cabslu,"",false))
-
-type typeSpecifier = (* Merge all specifiers into one type *)
-    Tvoid                             (* Type specifier ISO 6.7.2 *)
-  | Tchar
-  | Tshort
-  | Tint
-  | Tlong
-  | Tint64
-  | Tfloat
-  | Tdouble
-  | Tsigned
-  | Tunsigned
-  | Tnamed of string
-  (* each of the following three kinds of specifiers contains a field 
-   * or item list iff it corresponds to a definition (as opposed to
-   * a forward declaration or simple reference to the type); they
-   * also have a list of __attribute__s that appeared between the
-   * keyword and the type name (definitions only) *)
-  | Tstruct of string * field_group list option * attribute list
-  | Tunion of string * field_group list option * attribute list
-  | Tenum of string * enum_item list option * attribute list
-  | TtypeofE of expression                      (* GCC __typeof__ *)
-  | TtypeofT of specifier * decl_type       (* GCC __typeof__ *)
-
-and storage =
-    NO_STORAGE | AUTO | STATIC | EXTERN | REGISTER
-
-and funspec = 
-    INLINE | VIRTUAL | EXPLICIT
-
-and cvspec =
-    CV_CONST | CV_VOLATILE | CV_RESTRICT
-
-(* Type specifier elements. These appear at the start of a declaration *)
-(* Everywhere they appear in this file, they appear as a 'spec_elem list', *)
-(* which is not interpreted by cabs -- rather, this "word soup" is passed *)
-(* on to the compiler.  Thus, we can represent e.g. 'int long float x' even *)
-(* though the compiler will of course choke. *)
-and spec_elem =
-    SpecTypedef          
-  | SpecCV of cvspec            (* const/volatile *)
-  | SpecAttr of attribute       (* __attribute__ *)
-  | SpecStorage of storage
-  | SpecInline
-  | SpecType of typeSpecifier
-  | SpecPattern of string       (* specifier pattern variable *)
-
-(* decided to go ahead and replace 'spec_elem list' with specifier *)
-and specifier = spec_elem list
-
-
-(* Declarator type. They modify the base type given in the specifier. Keep
- * them in the order as they are printed (this means that the top level
- * constructor for ARRAY and PTR is the inner-level in the meaning of the
- * declared type) *)
-and decl_type =
- | JUSTBASE                               (* Prints the declared name *)
- | PARENTYPE of attribute list * decl_type * attribute list
-                                          (* Prints "(attrs1 decl attrs2)".
-                                           * attrs2 are attributes of the
-                                           * declared identifier and it is as
-                                           * if they appeared at the very end
-                                           * of the declarator. attrs1 can
-                                           * contain attributes for the
-                                           * identifier or attributes for the
-                                           * enclosing type.  *)
- | ARRAY of decl_type * attribute list * expression
-                                          (* Prints "decl [ attrs exp ]".
-                                           * decl is never a PTR. *)
- | PTR of attribute list * decl_type      (* Prints "* attrs decl" *)
- | PROTO of decl_type * single_name list * bool 
-                                          (* Prints "decl (args[, ...])".
-                                           * decl is never a PTR.*)
-
-(* The base type and the storage are common to all names. Each name might
- * contain type or storage modifiers *)
-(* e.g.: int x, y; *)
-and name_group = specifier * name list
-
-(* The optional expression is the bitfield *)
-and field_group = specifier * (name * expression option) list
-
-(* like name_group, except the declared variables are allowed to have initializers *)
-(* e.g.: int x=1, y=2; *)
-and init_name_group = specifier * init_name list
-
-(* The decl_type is in the order in which they are printed. Only the name of
- * the declared identifier is pulled out. The attributes are those that are
- * printed after the declarator *)
-(* e.g: in "int *x", "*x" is the declarator; "x" will be pulled out as *)
-(* the string, and decl_type will be PTR([], JUSTBASE) *)
-and name = string * decl_type * attribute list * cabsloc
-
-(* A variable declarator ("name") with an initializer *)
-and init_name = name * init_expression
-
-(* Single names are for declarations that cannot come in groups, like
- * function parameters and functions *)
-and single_name = specifier * name
-
-
-and enum_item = string * expression * cabsloc
-
-(*
-** Declaration definition (at toplevel)
-*)
-and definition =
-   FUNDEF of single_name * block * cabsloc * cabsloc
- | DECDEF of init_name_group * cabsloc        (* global variable(s), or function prototype *)
- | TYPEDEF of name_group * cabsloc
- | ONLYTYPEDEF of specifier * cabsloc
- | GLOBASM of string * cabsloc
- | PRAGMA of expression * cabsloc
- | LINKAGE of string * cabsloc * definition list (* extern "C" { ... } *)
- (* toplevel form transformer, from the first definition to the *)
- (* second group of definitions *)
- | TRANSFORMER of definition * definition list * cabsloc
- (* expression transformer: source and destination *)
- | EXPRTRANSFORMER of expression * expression * cabsloc
-
-
-(* the string is a file name, and then the list of toplevel forms *)
-and file = string * definition list
-
-
-(*
-** statements
-*)
-
-(* A block contains a list of local label declarations ( GCC's ({ __label__ 
- * l1, l2; ... }) ) , a list of definitions and a list of statements  *)
-and block = 
-    { blabels: string list;
-      battrs: attribute list;
-      bstmts: statement list
-    } 
-
-(* GCC asm directives have lots of extra information to guide the optimizer *)
-and asm_details =
-    { aoutputs: (string * expression) list; (* constraints and expressions for outputs *)
-      ainputs: (string * expression) list; (* constraints and expressions for inputs *)
-      aclobbers: string list (* clobbered registers *)
-    }
-
-and statement =
-   NOP of cabsloc
- | COMPUTATION of expression * cabsloc
- | BLOCK of block * cabsloc
- | SEQUENCE of statement * statement * cabsloc
- | IF of expression * statement * statement * cabsloc
- | WHILE of expression * statement * cabsloc
- | DOWHILE of expression * statement * cabsloc
- | FOR of for_clause * expression * expression * statement * cabsloc
- | BREAK of cabsloc
- | CONTINUE of cabsloc
- | RETURN of expression * cabsloc
- | SWITCH of expression * statement * cabsloc
- | CASE of expression * statement * cabsloc
- | CASERANGE of expression * expression * statement * cabsloc
- | DEFAULT of statement * cabsloc
- | LABEL of string * statement * cabsloc
- | GOTO of string * cabsloc
- | COMPGOTO of expression * cabsloc (* GCC's "goto *exp" *)
- | DEFINITION of definition (*definition or declaration of a variable or type*)
-
- | ASM of attribute list * (* typically only volatile and const *)
-          string list * (* template *)
-          asm_details option * (* extra details to guide GCC's optimizer *)
-          cabsloc
-
-   (** MS SEH *)
- | TRY_EXCEPT of block * expression * block * cabsloc
- | TRY_FINALLY of block * block * cabsloc
- 
-and for_clause = 
-   FC_EXP of expression
- | FC_DECL of definition
-
-(*
-** Expressions
-*)
-and binary_operator =
-    ADD | SUB | MUL | DIV | MOD
-  | AND | OR
-  | BAND | BOR | XOR | SHL | SHR
-  | EQ | NE | LT | GT | LE | GE
-  | ASSIGN
-  | ADD_ASSIGN | SUB_ASSIGN | MUL_ASSIGN | DIV_ASSIGN | MOD_ASSIGN
-  | BAND_ASSIGN | BOR_ASSIGN | XOR_ASSIGN | SHL_ASSIGN | SHR_ASSIGN
-
-and unary_operator =
-    MINUS | PLUS | NOT | BNOT | MEMOF | ADDROF
-  | PREINCR | PREDECR | POSINCR | POSDECR
-
-and expression =
-    NOTHING
-  | UNARY of unary_operator * expression
-  | LABELADDR of string  (* GCC's && Label *)
-  | BINARY of binary_operator * expression * expression
-  | QUESTION of expression * expression * expression
-
-   (* A CAST can actually be a constructor expression *)
-  | CAST of (specifier * decl_type) * init_expression
-
-    (* There is a special form of CALL in which the function called is
-       __builtin_va_arg and the second argument is sizeof(T). This 
-       should be printed as just T *)
-  | CALL of expression * expression list
-  | COMMA of expression list
-  | CONSTANT of constant
-  | VARIABLE of string
-  | EXPR_SIZEOF of expression
-  | TYPE_SIZEOF of specifier * decl_type
-  | EXPR_ALIGNOF of expression
-  | TYPE_ALIGNOF of specifier * decl_type
-  | INDEX of expression * expression
-  | MEMBEROF of expression * string
-  | MEMBEROFPTR of expression * string
-  | GNU_BODY of block
-  | EXPR_PATTERN of string     (* pattern variable, and name *)
-
-and constant =
-  | CONST_INT of string   (* the textual representation *)
-  | CONST_FLOAT of string (* the textual representaton *)
-  | CONST_CHAR of int64 list
-  | CONST_WCHAR of int64 list
-  | CONST_STRING of string
-  | CONST_WSTRING of int64 list 
-    (* ww: wstrings are stored as an int64 list at this point because
-     * we might need to feed the wide characters piece-wise into an 
-     * array initializer (e.g., wchar_t foo[] = L"E\xabcd";). If that
-     * doesn't happen we will convert it to an (escaped) string before
-     * passing it to Cil. *) 
-
-and init_expression =
-  | NO_INIT
-  | SINGLE_INIT of expression
-  | COMPOUND_INIT of (initwhat * init_expression) list
-
-and initwhat =
-    NEXT_INIT
-  | INFIELD_INIT of string * initwhat
-  | ATINDEX_INIT of expression * initwhat
-  | ATINDEXRANGE_INIT of expression * expression
- 
-
-                                        (* Each attribute has a name and some
-                                         * optional arguments *)
-and attribute = string * expression list
-                                              
-
-(*********** HELPER FUNCTIONS **********)
-
-let missingFieldDecl = ("___missing_field_name", JUSTBASE, [], cabslu)
-
-let rec isStatic = function
-    [] -> false
-  | (SpecStorage STATIC) :: _ -> true
-  | _ :: rest -> isStatic rest
-
-let rec isExtern = function
-    [] -> false
-  | (SpecStorage EXTERN) :: _ -> true
-  | _ :: rest -> isExtern rest
-
-let rec isInline = function
-    [] -> false
-  | SpecInline :: _ -> true
-  | _ :: rest -> isInline rest
-
-let rec isTypedef = function
-    [] -> false
-  | SpecTypedef :: _ -> true
-  | _ :: rest -> isTypedef rest
-
-
-let get_definitionloc (d : definition) : cabsloc =
-  match d with
-  | FUNDEF(_, _, l, _) -> l
-  | DECDEF(_, l) -> l
-  | TYPEDEF(_, l) -> l
-  | ONLYTYPEDEF(_, l) -> l
-  | GLOBASM(_, l) -> l
-  | PRAGMA(_, l) -> l
-  | TRANSFORMER(_, _, l) -> l
-  | EXPRTRANSFORMER(_, _, l) -> l
-  | LINKAGE (_, l, _) -> l
-
-let get_statementloc (s : statement) : cabsloc =
-begin
-  match s with
-  | NOP(loc) -> loc
-  | COMPUTATION(_,loc) -> loc
-  | BLOCK(_,loc) -> loc
-  | SEQUENCE(_,_,loc) -> loc
-  | IF(_,_,_,loc) -> loc
-  | WHILE(_,_,loc) -> loc
-  | DOWHILE(_,_,loc) -> loc
-  | FOR(_,_,_,_,loc) -> loc
-  | BREAK(loc) -> loc
-  | CONTINUE(loc) -> loc
-  | RETURN(_,loc) -> loc
-  | SWITCH(_,_,loc) -> loc
-  | CASE(_,_,loc) -> loc
-  | CASERANGE(_,_,_,loc) -> loc
-  | DEFAULT(_,loc) -> loc
-  | LABEL(_,_,loc) -> loc
-  | GOTO(_,loc) -> loc
-  | COMPGOTO (_, loc) -> loc
-  | DEFINITION d -> get_definitionloc d
-  | ASM(_,_,_,loc) -> loc
-  | TRY_EXCEPT(_, _, _, loc) -> loc
-  | TRY_FINALLY(_, _, loc) -> loc
-end
-
-
-let explodeStringToInts (s: string) : int64 list =  
-  let rec allChars i acc = 
-    if i < 0 then acc
-    else allChars (i - 1) (Int64.of_int (Char.code (String.get s i)) :: acc)
-  in
-  allChars (-1 + String.length s) []
-
-let valueOfDigit chr =
-  let int_value = 
-    match chr with
-      '0'..'9' -> (Char.code chr) - (Char.code '0')
-    | 'a'..'z' -> (Char.code chr) - (Char.code 'a') + 10
-    | 'A'..'Z' -> (Char.code chr) - (Char.code 'A') + 10
-    | _ -> Errormsg.s (Errormsg.bug "not a digit") in
-  Int64.of_int int_value
-  
-    
-open Pretty
-let d_cabsloc () cl = 
-  text cl.filename ++ text ":" ++ num cl.lineno
diff --git a/cil/src/frontc/cabs2cil.ml b/cil/src/frontc/cabs2cil.ml
deleted file mode 100644
index 31b65b5b4..000000000
--- a/cil/src/frontc/cabs2cil.ml
+++ /dev/null
@@ -1,6238 +0,0 @@
-(* MODIF: allow E.Error to propagate *)
-
-(* MODIF: for pointer comparison, avoid systematic cast to unsigned int *)
-
-(* MODIF: Loop constructor replaced by 3 constructors: While, DoWhile, For. *)
-(* MODIF: Return statement no longer added when the body of the function
-          falls-through. *)
-
-(*
- *
- * Copyright (c) 2001-2002, 
- *  George C. Necula    <necula@cs.berkeley.edu>
- *  Scott McPeak        <smcpeak@cs.berkeley.edu>
- *  Wes Weimer          <weimer@cs.berkeley.edu>
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. The names of the contributors may not be used to endorse or promote
- * products derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
- * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
- * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- *)
-
-(* Type check and elaborate ABS to CIL *)
-
-(* The references to ISO means ANSI/ISO 9899-1999 *)
-module A = Cabs
-module E = Errormsg
-module H = Hashtbl
-module IH = Inthash
-module AL = Alpha
-
-open Cabs
-open Pretty
-open Cil
-open Trace
-
-
-let mydebugfunction () = 
-  E.s (error "mydebugfunction")
-
-let debugGlobal = false
-
-(** NDC added command line parameter **)
-(* Turn on tranformation that forces correct parameter evaluation order *)
-let forceRLArgEval = ref false
-
-(* Leave a certain global alone. Use a negative number to disable. *)
-let nocil: int ref = ref (-1)
-
-(* Indicates whether we're allowed to duplicate small chunks. *)
-let allowDuplication: bool ref = ref true
-
-(* ---------- source error message handling ------------- *)
-let lu = locUnknown
-let cabslu = {lineno = -10; 
-	      filename = "cabs lu"; 
-	      byteno = -10;}
-
-
-(** Interface to the Cprint printer *)
-let withCprint (f: 'a -> unit) (x: 'a) : unit = 
-  Cprint.commit (); Cprint.flush ();
-  let old = !Cprint.out in
-  Cprint.out := !E.logChannel;
-  f x;
-  Cprint.commit (); Cprint.flush ();
-  flush !Cprint.out;
-  Cprint.out := old
-
-
-(** Keep a list of the variable ID for the variables that were created to 
- * hold the result of function calls *)
-let callTempVars: unit IH.t = IH.create 13
-
-(* Keep a list of functions that were called without a prototype. *)
-let noProtoFunctions : bool IH.t = IH.create 13
-
-(* Check that s starts with the prefix p *)
-let prefix p s = 
-  let lp = String.length p in
-  let ls = String.length s in
-  lp <= ls && String.sub s 0 lp = p
-
-(***** COMPUTED GOTO ************)
-
-(* The address of labels are small integers (starting from 0). A computed 
- * goto is replaced with a switch on the address of the label. We generate 
- * only one such switch and we'll jump to it from all computed gotos. To 
- * accomplish this we'll add a local variable to store the target of the 
- * goto. *)
-
-(* The local variable in which to put the detination of the goto and the 
- * statement where to jump *) 
-let gotoTargetData: (varinfo * stmt) option ref = ref None
-
-(* The "addresses" of labels *)
-let gotoTargetHash: (string, int) H.t = H.create 13
-let gotoTargetNextAddr: int ref = ref 0
-
-
-(********** TRANSPARENT UNION ******)
-(* Check if a type is a transparent union, and return the first field if it 
- * is *)
-let isTransparentUnion (t: typ) : fieldinfo option = 
-  match unrollType t with 
-    TComp (comp, _) when not comp.cstruct -> 
-      (* Turn transparent unions into the type of their first field *)
-      if hasAttribute "transparent_union" (typeAttrs t) then begin
-        match comp.cfields with
-          f :: _ -> Some f
-        | _ -> E.s (unimp "Empty transparent union: %s" (compFullName comp))
-      end else 
-        None
-  | _ -> None
-
-(* When we process an argument list, remember the argument index which has a 
- * transparent union type, along with the original type. We need this to 
- * process function definitions *)
-let transparentUnionArgs : (int * typ) list ref = ref []
-
-let debugLoc = false
-let convLoc (l : cabsloc) =
-  if debugLoc then 
-    ignore (E.log "convLoc at %s: line %d, btye %d\n" l.filename l.lineno l.byteno);
-  {line = l.lineno; file = l.filename; byte = l.byteno;}
-
-
-let isOldStyleVarArgName n = 
-  if !msvcMode then n = "va_alist"
-  else n = "__builtin_va_alist"
-
-let isOldStyleVarArgTypeName n = 
-  if !msvcMode then n = "va_list"  || n = "__ccured_va_list" 
-  else n = "__builtin_va_alist_t"
-
-(* Weimer
- * multi-character character constants
- * In MSCV, this code works:
- *
- * long l1 = 'abcd';  // note single quotes
- * char * s = "dcba";
- * long * lptr = ( long * )s;
- * long l2 = *lptr;
- * assert(l1 == l2);
- *
- * We need to change a multi-character character literal into the
- * appropriate integer constant. However, the plot sickens: we
- * must also be able to handle things like 'ab\nd' (value = * "d\nba")
- * and 'abc' (vale = *"cba"). 
- *
- * First we convert 'AB\nD' into the list [ 65 ; 66 ; 10 ; 68 ], then we
- * multiply and add to get the desired value. 
- *)
-
-(* Given a character constant (like 'a' or 'abc') as a list of 64-bit
- * values, turn it into a CIL constant.  Multi-character constants are
- * treated as multi-digit numbers with radix given by the bit width of
- * the specified type (either char or wchar_t). *)
-let reduce_multichar typ : int64 list -> int64 =
-  let radix = bitsSizeOf typ in
-  List.fold_left
-    (fun acc -> Int64.add (Int64.shift_left acc radix))
-    Int64.zero
-
-let interpret_character_constant char_list =
-  let value = reduce_multichar charType char_list in
-  if value < (Int64.of_int 256) then  
-    (* ISO C 6.4.4.4.10: single-character constants have type int *)
-    (CChr(Char.chr (Int64.to_int value))), intType
-  else begin
-    let orig_rep = None (* Some("'" ^ (String.escaped str) ^ "'") *) in
-    if value <= (Int64.of_int32 Int32.max_int) then
-      (CInt64(value,IULong,orig_rep)),(TInt(IULong,[]))
-    else 
-      (CInt64(value,IULongLong,orig_rep)),(TInt(IULongLong,[]))
-  end
-
-(*** EXPRESSIONS *************)
-
-                                        (* We collect here the program *)
-let theFile : global list ref = ref []
-let theFileTypes : global list ref = ref []
-
-let initGlobals () = theFile := []; theFileTypes := []
-
-    
-let cabsPushGlobal (g: global) = 
-  pushGlobal g ~types:theFileTypes ~variables:theFile
-
-(* Keep track of some variable ids that must be turned into definitions. We 
- * do this when we encounter what appears a definition of a global but 
- * without initializer. We leave it a declaration because maybe down the road 
- * we see another definition with an initializer. But if we don't see any 
- * then we turn the last such declaration into a definition without 
- * initializer *)
-let mustTurnIntoDef: bool IH.t = IH.create 117
-
-(* Globals that have already been defined. Indexed by the variable name. *)
-let alreadyDefined: (string, location) H.t = H.create 117
-
-(* Globals that were created due to static local variables. We chose their 
- * names to be distinct from any global encountered at the time. But we might 
- * see a global with conflicting name later in the file. *)
-let staticLocals: (string, varinfo) H.t = H.create 13
-
-
-(* Typedefs. We chose their names to be distinct from any global encounterd 
- * at the time. But we might see a global with conflicting name later in the 
- * file *)
-let typedefs: (string, typeinfo) H.t = H.create 13
-
-let popGlobals () = 
-  let rec revonto (tail: global list) = function
-      [] -> tail
-
-    | GVarDecl (vi, l) :: rest 
-      when vi.vstorage != Extern && IH.mem mustTurnIntoDef vi.vid -> 
-        IH.remove mustTurnIntoDef vi.vid;
-        revonto (GVar (vi, {init = None}, l) :: tail) rest
-
-    | x :: rest -> revonto (x :: tail) rest
-  in
-  revonto (revonto [] !theFile) !theFileTypes
-
-
-(********* ENVIRONMENTS ***************)
-
-(* The environment is kept in two distinct data structures. A hash table maps
- * each original variable name into a varinfo (for variables, or an
- * enumeration tag, or a type). (Note that the varinfo might contain an
- * alpha-converted name different from that of the lookup name.) The Ocaml
- * hash tables can keep multiple mappings for a single key. Each time the
- * last mapping is returned and upon deletion the old mapping is restored. To
- * keep track of local scopes we also maintain a list of scopes (represented
- * as lists).  *)
-type envdata =
-    EnvVar of varinfo                   (* The name refers to a variable
-                                         * (which could also be a function) *)
-  | EnvEnum of exp * typ                (* The name refers to an enumeration
-                                         * tag for which we know the value
-                                         * and the host type *)
-  | EnvTyp of typ                       (* The name is of the form  "struct
-                                         * foo", or "union foo" or "enum foo"
-                                         * and refers to a type. Note that
-                                         * the name of the actual type might
-                                         * be different from foo due to alpha
-                                         * conversion *)
-  | EnvLabel of string                  (* The name refers to a label. This 
-                                         * is useful for GCC's locally 
-                                         * declared labels. The lookup name 
-                                         * for this category is "label foo" *)
-
-let env : (string, envdata * location) H.t = H.create 307
-(* We also keep a global environment. This is always a subset of the env *)
-let genv : (string, envdata * location) H.t = H.create 307
-
- (* In the scope we keep the original name, so we can remove them from the
-  * hash table easily *)
-type undoScope =
-    UndoRemoveFromEnv of string
-  | UndoResetAlphaCounter of location AL.alphaTableData ref * 
-                             location AL.alphaTableData
-  | UndoRemoveFromAlphaTable of string
-
-let scopes :  undoScope list ref list ref = ref []
-
-let isAtTopLevel () = 
-  !scopes = []
-
-
-(* When you add to env, you also add it to the current scope *)
-let addLocalToEnv (n: string) (d: envdata) = 
-(*  ignore (E.log "%a: adding local %s to env\n" d_loc !currentLoc n); *)
-  H.add env n (d, !currentLoc);
-    (* If we are in a scope, then it means we are not at top level. Add the 
-     * name to the scope *)
-  (match !scopes with
-    [] -> begin
-      match d with
-        EnvVar _ -> 
-          E.s (E.bug "addLocalToEnv: not in a scope when adding %s!" n)
-      | _ -> () (* We might add types *)
-    end
-  | s :: _ -> 
-      s := (UndoRemoveFromEnv n) :: !s)
-
-
-let addGlobalToEnv (k: string) (d: envdata) : unit = 
-(*  ignore (E.log "%a: adding global %s to env\n" d_loc !currentLoc k); *)
-  H.add env k (d, !currentLoc);
-  (* Also add it to the global environment *)
-  H.add genv k (d, !currentLoc)
-  
-  
-
-(* Create a new name based on a given name. The new name is formed from a 
- * prefix (obtained from the given name as the longest prefix that ends with 
- * a non-digit), followed by a '_' and then by a positive integer suffix. The 
- * first argument is a table mapping name prefixes with the largest suffix 
- * used so far for that prefix. The largest suffix is one when only the 
- * version without suffix has been used. *)
-let alphaTable : (string, location AL.alphaTableData ref) H.t = H.create 307 
-        (* vars and enum tags. For composite types we have names like "struct 
-         * foo" or "union bar" *)
-
-(* To keep different name scopes different, we add prefixes to names 
- * specifying the kind of name: the kind can be one of "" for variables or 
- * enum tags, "struct" for structures and unions (they share the name space), 
- * "enum" for enumerations, or "type" for types *)
-let kindPlusName (kind: string)
-                 (origname: string) : string =
-  if kind = "" then origname else
-  kind ^ " " ^ origname
-                
-
-let stripKind (kind: string) (kindplusname: string) : string = 
-  let l = 1 + String.length kind in
-  if l > 1 then 
-    String.sub kindplusname l (String.length kindplusname - l)
-  else
-    kindplusname
-   
-let newAlphaName (globalscope: bool) (* The name should have global scope *)
-                 (kind: string) 
-                 (origname: string) : string * location = 
-  let lookupname = kindPlusName kind origname in
-  (* If we are in a scope then it means that we are alpha-converting a local 
-   * name. Go and add stuff to reset the state of the alpha table but only to 
-   * the top-most scope (that of the enclosing function) *)
-  let rec findEnclosingFun = function
-      [] -> (* At global scope *)()
-    | [s] -> begin
-        let prefix = AL.getAlphaPrefix lookupname in
-        try
-          let countref = H.find alphaTable prefix in
-          s := (UndoResetAlphaCounter (countref, !countref)) :: !s
-        with Not_found ->
-          s := (UndoRemoveFromAlphaTable prefix) :: !s
-    end
-    | _ :: rest -> findEnclosingFun rest
-  in
-  if not globalscope then 
-    findEnclosingFun !scopes;
-  let newname, oldloc = 
-           AL.newAlphaName alphaTable None lookupname !currentLoc in
-  stripKind kind newname, oldloc
-
-
-  
-
-let explodeString (nullterm: bool) (s: string) : char list =  
-  let rec allChars i acc = 
-    if i < 0 then acc
-    else allChars (i - 1) ((String.get s i) :: acc)
-  in
-  allChars (-1 + String.length s) 
-    (if nullterm then [Char.chr 0] else [])
-    
-(*** In order to process GNU_BODY expressions we must record that a given 
- *** COMPUTATION is interesting *)
-let gnu_body_result : (A.statement * ((exp * typ) option ref)) ref 
-    = ref (A.NOP cabslu, ref None)
-
-(*** When we do statements we need to know the current return type *)
-let currentReturnType : typ ref = ref (TVoid([]))
-let currentFunctionFDEC: fundec ref = ref dummyFunDec
-
-  
-let lastStructId = ref 0
-let anonStructName (k: string) (suggested: string) = 
-  incr lastStructId;
-  "__anon" ^ k ^ (if suggested <> "" then "_"  ^ suggested else "") 
-  ^ "_" ^ (string_of_int (!lastStructId))
-
-
-let constrExprId = ref 0
-
-
-let startFile () = 
-  H.clear env;
-  H.clear genv;
-  H.clear alphaTable;
-  lastStructId := 0
-
-
-
-let enterScope () = 
-  scopes := (ref []) :: !scopes
-
-     (* Exit a scope and clean the environment. We do not yet delete from 
-      * the name table *)
-let exitScope () = 
-  let this, rest = 
-    match !scopes with
-      car :: cdr -> car, cdr
-    | [] -> E.s (error "Not in a scope")
-  in
-  scopes := rest;
-  let rec loop = function
-      [] -> ()
-    | UndoRemoveFromEnv n :: t -> 
-        H.remove env n; loop t
-    | UndoRemoveFromAlphaTable n :: t -> H.remove alphaTable n; loop t
-    | UndoResetAlphaCounter (vref, oldv) :: t -> 
-        vref := oldv;
-        loop t
-  in
-  loop !this
-
-(* Lookup a variable name. Return also the location of the definition. Might 
- * raise Not_found  *)
-let lookupVar (n: string) : varinfo * location = 
-  match H.find env n with
-    (EnvVar vi), loc -> vi, loc
-  | _ -> raise Not_found
-        
-let lookupGlobalVar (n: string) : varinfo * location = 
-  match H.find genv n with
-    (EnvVar vi), loc -> vi, loc
-  | _ -> raise Not_found
-        
-let docEnv () = 
-  let acc : (string * (envdata * location)) list ref = ref [] in
-  let doone () = function
-      EnvVar vi, l -> 
-        dprintf "Var(%s,global=%b) (at %a)" vi.vname vi.vglob d_loc l
-    | EnvEnum (tag, typ), l -> dprintf "Enum (at %a)" d_loc l
-    | EnvTyp t, l -> text "typ"
-    | EnvLabel l, _ -> text ("label " ^ l)
-  in
-  H.iter (fun k d -> acc := (k, d) :: !acc) env;
-  docList ~sep:line (fun (k, d) -> dprintf "  %s -> %a" k doone d) () !acc
-
-
-
-(* Add a new variable. Do alpha-conversion if necessary *)
-let alphaConvertVarAndAddToEnv (addtoenv: bool) (vi: varinfo) : varinfo = 
-(*
-  ignore (E.log "%t: alphaConvert(addtoenv=%b) %s" d_thisloc addtoenv vi.vname);
-*)
-  (* Announce the name to the alpha conversion table *)
-  let newname, oldloc = newAlphaName (addtoenv && vi.vglob) "" vi.vname in
-  (* Make a copy of the vi if the name has changed. Never change the name for 
-   * global variables *)
-  let newvi = 
-    if vi.vname = newname then 
-      vi 
-    else begin
-      if vi.vglob then begin
-        (* Perhaps this is because we have seen a static local which happened 
-         * to get the name that we later want to use for a global. *)
-        try 
-          let static_local_vi = H.find staticLocals vi.vname in
-          H.remove staticLocals vi.vname;
-          (* Use the new name for the static local *)
-          static_local_vi.vname <- newname;
-          (* And continue using the last one *)
-          vi
-        with Not_found -> begin
-          (* Or perhaps we have seen a typedef which stole our name. This is 
-           possible because typedefs use the same name space *)
-          try
-            let typedef_ti = H.find typedefs vi.vname in 
-            H.remove typedefs vi.vname;
-            (* Use the new name for the typedef instead *)
-            typedef_ti.tname <- newname;
-            (* And continue using the last name *)
-            vi
-          with Not_found -> 
-            E.s (E.error "It seems that we would need to rename global %s (to %s) because of previous occurrence at %a" 
-                   vi.vname newname d_loc oldloc);
-        end
-      end else begin 
-        (* We have changed the name of a local variable. Can we try to detect 
-         * if the other variable was also local in the same scope? Not for 
-         * now. *)
-        copyVarinfo vi newname
-      end
-    end
-  in
-  (* Store all locals in the slocals (in reversed order). We'll reverse them 
-   * and take out the formals at the end of the function *)
-  if not vi.vglob then
-    !currentFunctionFDEC.slocals <- newvi :: !currentFunctionFDEC.slocals;
-
-  (if addtoenv then 
-    if vi.vglob then
-      addGlobalToEnv vi.vname (EnvVar newvi)
-    else
-      addLocalToEnv vi.vname (EnvVar newvi));
-(*
-  ignore (E.log "  new=%s\n" newvi.vname);
-*)
-(*  ignore (E.log "After adding %s alpha table is: %a\n"
-            newvi.vname docAlphaTable alphaTable); *)
-  newvi
-
-
-(* Strip the "const" from the type. It is unfortunate that const variables 
- * can only be set in initialization. Once we decided to move all 
- * declarations to the top of the functions, we have no way of setting a 
- * "const" variable. Furthermore, if the type of the variable is an array or 
- * a struct we must recursively strip the "const" from fields and array 
- * elements. *)
-let rec stripConstLocalType (t: typ) : typ = 
-  let dc a = 
-    if hasAttribute "const" a then 
-      dropAttribute "const" a 
-    else a 
-  in
-  match t with 
-  | TPtr (bt, a) -> 
-      (* We want to be able to detect by pointer equality if the type has 
-       * changed. So, don't realloc the type unless necessary. *)
-      let a' = dc a in if a != a' then TPtr(bt, a') else t
-  | TInt (ik, a) -> 
-      let a' = dc a in if a != a' then TInt(ik, a') else t
-  | TFloat(fk, a) -> 
-      let a' = dc a in if a != a' then TFloat(fk, a') else t
-  | TNamed (ti, a) -> 
-      (* We must go and drop the consts from the typeinfo as well ! *)
-      let t' = stripConstLocalType ti.ttype in
-      if t != t' then begin
-        (* ignore (warn "Stripping \"const\" from typedef %s\n" ti.tname); *)
-        ti.ttype <- t'
-      end;
-      let a' = dc a in if a != a' then TNamed(ti, a') else t
-
-  | TEnum (ei, a) -> 
-      let a' = dc a in if a != a' then TEnum(ei, a') else t
-      
-  | TArray(bt, leno, a) -> 
-      (* We never assign to the array. So, no need to change the const. But 
-       * we must change it on the base type *)
-      let bt' = stripConstLocalType bt in
-      if bt' != bt then TArray(bt', leno, a) else t
-
-  | TComp(ci, a) ->
-      (* Must change both this structure as well as its fields *)
-      List.iter
-        (fun f -> 
-          let t' = stripConstLocalType f.ftype in
-          if t' != f.ftype then begin
-            ignore (warnOpt "Stripping \"const\" from field %s of %s\n" 
-                      f.fname (compFullName ci));
-            f.ftype <- t'
-          end)
-        ci.cfields;
-      let a' = dc a in if a != a' then TComp(ci, a') else t
-
-    (* We never assign functions either *)
-  | TFun(rt, args, va, a) -> t
-  | TVoid _ -> E.s (bug "cabs2cil: stripConstLocalType: void")
-  | TBuiltin_va_list a -> 
-      let a' = dc a in if a != a' then TBuiltin_va_list a' else t
-
-
-let constFoldTypeVisitor = object (self)
-  inherit nopCilVisitor
-  method vtype t: typ visitAction =
-    match t with
-      TArray(bt, Some len, a) -> 
-        let len' = constFold true len in
-        ChangeDoChildrenPost (
-          TArray(bt, Some len', a),
-          (fun x -> x)
-        )
-    | _ -> DoChildren
-end
-
-(* Const-fold any expressions that appear as array lengths in this type *)
-let constFoldType (t:typ) : typ =
-  visitCilType constFoldTypeVisitor t
-
-
-
-(* Create a new temporary variable *)
-let newTempVar typ = 
-  if !currentFunctionFDEC == dummyFunDec then 
-    E.s (bug "newTempVar called outside a function");
-(*  ignore (E.log "stripConstLocalType(%a) for temporary\n" d_type typ); *)
-  let t' = stripConstLocalType typ in
-  (* Start with the name "tmp". The alpha converter will fix it *)
-  let vi = makeVarinfo false "tmp" t' in
-  alphaConvertVarAndAddToEnv false  vi (* Do not add to the environment *)
-(*
-    { vname = "tmp";  (* addNewVar will make the name fresh *)
-      vid   = newVarId "tmp" false;
-      vglob = false;
-      vtype = t';
-      vdecl = locUnknown;
-      vinline = false;
-      vattr = [];
-      vaddrof = false;
-      vreferenced = false;   (* sm *)
-      vstorage = NoStorage;
-    } 
-*)
-
-let mkAddrOfAndMark ((b, off) as lval) : exp = 
-  (* Mark the vaddrof flag if b is a variable *)
-  (match b with 
-    Var vi -> vi.vaddrof <- true
-  | _ -> ());
-  mkAddrOf lval
-  
-(* Call only on arrays *)
-let mkStartOfAndMark ((b, off) as lval) : exp = 
-  (* Mark the vaddrof flag if b is a variable *)
-  (match b with 
-    Var vi -> vi.vaddrof <- true
-  | _ -> ());
-  let res = StartOf lval in
-  res
-  
-
-
-   (* Keep a set of self compinfo for composite types *)
-let compInfoNameEnv : (string, compinfo) H.t = H.create 113
-let enumInfoNameEnv : (string, enuminfo) H.t = H.create 113
-
-
-let lookupTypeNoError (kind: string) 
-                      (n: string) : typ * location = 
-  let kn = kindPlusName kind n in
-  match H.find env kn with
-    EnvTyp t, l -> t, l
-  | _ -> raise Not_found
-
-let lookupType (kind: string) 
-               (n: string) : typ * location = 
-  try
-    lookupTypeNoError kind n
-  with Not_found -> 
-    E.s (error "Cannot find type %s (kind:%s)\n" n kind)
-
-(* Create the self ref cell and add it to the map. Return also an indication 
- * if this is a new one. *)
-let createCompInfo (iss: bool) (n: string) : compinfo * bool = 
-  (* Add to the self cell set *)
-  let key = (if iss then "struct " else "union ") ^ n in
-  try
-    H.find compInfoNameEnv key, false (* Only if not already in *)
-  with Not_found -> begin
-    (* Create a compinfo. This will have "cdefined" false. *)
-    let res = mkCompInfo iss n (fun _ -> []) [] in
-    H.add compInfoNameEnv key res;
-    res, true
-  end
-
-(* Create the self ref cell and add it to the map. Return an indication 
- * whether this is a new one. *)
-let createEnumInfo (n: string) : enuminfo * bool = 
-  (* Add to the self cell set *)
-  try
-    H.find enumInfoNameEnv n, false (* Only if not already in *)
-  with Not_found -> begin
-    (* Create a enuminfo *)
-    let enum = { ename = n; eitems = []; 
-                 eattr = []; ereferenced = false; } in
-    H.add enumInfoNameEnv n enum;
-    enum, true
-  end
-
-
-   (* kind is either "struct" or "union" or "enum" and n is a name *)
-let findCompType (kind: string) (n: string) (a: attributes) = 
-  let makeForward () = 
-    (* This is a forward reference, either because we have not seen this 
-     * struct already or because we want to create a version with different 
-     * attributes  *)
-    if kind = "enum" then 
-      let enum, isnew = createEnumInfo n in
-      if isnew then
-        cabsPushGlobal (GEnumTagDecl (enum, !currentLoc));
-      TEnum (enum, a)
-    else 
-      let iss = if kind = "struct" then true else false in
-      let self, isnew = createCompInfo iss n in
-      if isnew then 
-        cabsPushGlobal (GCompTagDecl (self, !currentLoc));
-      TComp (self, a)
-  in
-  try
-    let old, _ = lookupTypeNoError kind n in (* already defined  *)
-    let olda = typeAttrs old in
-    if Util.equals olda a then old else makeForward ()
-  with Not_found -> makeForward ()
-  
-
-(* A simple visitor that searchs a statement for labels *)
-class canDropStmtClass pRes = object
-  inherit nopCilVisitor
-        
-  method vstmt s = 
-    if s.labels != [] then 
-      (pRes := false; SkipChildren)
-    else 
-      if !pRes then DoChildren else SkipChildren
-
-  method vinst _ = SkipChildren
-  method vexpr _ = SkipChildren
-      
-end
-let canDropStatement (s: stmt) : bool = 
-  let pRes = ref true in
-  let vis = new canDropStmtClass pRes in
-  ignore (visitCilStmt vis s);
-  !pRes
-
-(**** Occasionally we see structs with no name and no fields *)
-
-
-module BlockChunk = 
-  struct
-    type chunk = {
-        stmts: stmt list;
-        postins: instr list;              (* Some instructions to append at 
-                                           * the ends of statements (in 
-                                           * reverse order)  *)
-                                        (* A list of case statements visible at the 
-                                         * outer level *)
-        cases: (label * stmt) list
-      } 
-
-    let d_chunk () (c: chunk) = 
-      dprintf "@[{ @[%a@] };@?%a@]"
-           (docList ~sep:(chr ';') (d_stmt ())) c.stmts
-           (docList ~sep:(chr ';') (d_instr ())) (List.rev c.postins)
- 
-    let empty = 
-      { stmts = []; postins = []; cases = []; }
-
-    let isEmpty (c: chunk) = 
-      c.postins == [] && c.stmts == []
-
-    let isNotEmpty (c: chunk) = not (isEmpty c)
-
-    let i2c (i: instr) = 
-      { empty with postins = [i] }
-        
-    (* Occasionally, we'll have to push postins into the statements *)
-    let pushPostIns (c: chunk) : stmt list = 
-      if c.postins = [] then c.stmts
-      else
-        let rec toLast = function
-            [{skind=Instr il} as s] as stmts -> 
-              s.skind <- Instr (il @ (List.rev c.postins));
-              stmts
-
-          | [] -> [mkStmt (Instr (List.rev c.postins))]
-
-          | a :: rest -> a :: toLast rest
-        in
-        compactStmts (toLast c.stmts)
-
-
-    let c2block (c: chunk) : block = 
-      { battrs = [];
-        bstmts = pushPostIns c;
-      } 
-
-    (* Add an instruction at the end. Never refer to this instruction again 
-     * after you call this *)
-    let (+++) (c: chunk) (i : instr) =
-      {c with postins = i :: c.postins}
-
-    (* Append two chunks. Never refer to the original chunks after you call 
-     * this. And especially never share c2 with somebody else *)
-    let (@@) (c1: chunk) (c2: chunk) = 
-      { stmts = compactStmts (pushPostIns c1 @ c2.stmts);
-        postins = c2.postins;
-        cases = c1.cases @ c2.cases;
-      } 
-
-    let skipChunk = empty
-        
-    let returnChunk (e: exp option) (l: location) : chunk = 
-      { stmts = [ mkStmt (Return(e, l)) ];
-        postins = [];
-        cases = []
-      }
-
-    let ifChunk (be: exp) (l: location) (t: chunk) (e: chunk) : chunk = 
-      
-      { stmts = [ mkStmt(If(be, c2block t, c2block e, l))];
-        postins = [];
-        cases = t.cases @ e.cases;
-      } 
-
-        (* We can duplicate a chunk if it has a few simple statements, and if 
-         * it does not have cases *)
-    let duplicateChunk (c: chunk) = (* raises Failure if you should not 
-                                     * duplicate this chunk *)
-      if not !allowDuplication then
-        raise (Failure "cannot duplicate: disallowed by user");
-      if c.cases != [] then raise (Failure "cannot duplicate: has cases") else
-      let pCount = ref (List.length c.postins) in
-      { stmts = 
-        List.map 
-          (fun s -> 
-            if s.labels != [] then 
-              raise (Failure "cannot duplicate: has labels");
-(*
-            (match s.skind with 
-              If _ | Switch _ | (*Loop _*)
-	       While _ | DoWhile _ | For _ | Block _ -> 
-                raise (Failure "cannot duplicate: complex stmt")
-            | Instr il -> 
-                pCount := !pCount + List.length il
-            | _ -> incr pCount);
-            if !pCount > 5 then raise (Failure ("cannot duplicate: too many instr"));
-*)
-            (* We can just copy it because there is nothing to share here. 
-             * Except maybe for the ref cell in Goto but it is Ok to share 
-             * that, I think *)
-            { s with sid = s.sid}) c.stmts;
-        postins = c.postins; (* There is no shared stuff in instructions *)
-        cases = []
-      } 
-(*
-    let duplicateChunk (c: chunk) = 
-      if isEmpty c then c else raise (Failure ("cannot duplicate: isNotEmpty"))
-*)
-    (* We can drop a chunk if it does not have labels inside *)
-    let canDrop (c: chunk) =
-      List.for_all canDropStatement c.stmts
-
-(*
-    let loopChunk (body: chunk) : chunk = 
-      (* Make the statement *)
-      let loop = mkStmt (Loop (c2block body, !currentLoc, None, None)) in
-      { stmts = [ loop (* ; n *) ];
-        postins = [];
-        cases = body.cases;
-      } 
-*)
-
-    let whileChunk (e: exp) (body: chunk) : chunk = 
-      let loop = mkStmt (While (e, c2block body, !currentLoc)) in
-	
-	{ stmts = [ loop ];
-          postins = [];
-          cases = body.cases;
-	} 
-
-    let doWhileChunk (e: exp) (body: chunk) : chunk = 
-      let loop = mkStmt (DoWhile (e, c2block body, !currentLoc)) in
-	
-	{ stmts = [ loop ];
-          postins = [];
-          cases = body.cases;
-	} 
-      
-    let forChunk (bInit: chunk) (e: exp) (bIter: chunk)
-                 (body: chunk) : chunk = 
-      let loop = mkStmt (For (c2block bInit, e, c2block bIter,
-			      c2block body, !currentLoc)) in
-	
-	{ stmts = [ loop ];
-          postins = [];
-          cases = body.cases;
-	} 
-      
-    let breakChunk (l: location) : chunk = 
-      { stmts = [ mkStmt (Break l) ];
-        postins = [];
-        cases = [];
-      } 
-      
-    let continueChunk (l: location) : chunk = 
-      { stmts = [ mkStmt (Continue l) ];
-        postins = [];
-        cases = []
-      } 
-
-        (* Keep track of the gotos *)
-    let backPatchGotos : (string, stmt ref list ref) H.t = H.create 17
-    let addGoto (lname: string) (bref: stmt ref) : unit = 
-      let gotos = 
-        try
-          H.find backPatchGotos lname
-        with Not_found -> begin
-          let gotos = ref [] in
-          H.add backPatchGotos lname gotos;
-          gotos
-        end
-      in
-      gotos := bref :: !gotos
-
-        (* Keep track of the labels *)
-    let labelStmt : (string, stmt) H.t = H.create 17
-    let initLabels () = 
-      H.clear backPatchGotos;
-      H.clear labelStmt
-      
-    let resolveGotos () = 
-      H.iter
-        (fun lname gotos ->
-          try
-            let dest = H.find labelStmt lname in
-            List.iter (fun gref -> gref := dest) !gotos
-          with Not_found -> begin
-            E.s (error "Label %s not found\n" lname)
-          end)
-        backPatchGotos
-
-        (* Get the first statement in a chunk. Might need to change the 
-         * statements in the chunk *)
-    let getFirstInChunk (c: chunk) : stmt * stmt list = 
-      (* Get the first statement and add the label to it *)
-      match c.stmts with
-        s :: _ -> s, c.stmts
-      | [] -> (* Add a statement *)
-          let n = mkEmptyStmt () in
-          n, n :: c.stmts
-      
-    let consLabel (l: string) (c: chunk) (loc: location) 
-				(in_original_program_text : bool) : chunk = 
-      (* Get the first statement and add the label to it *)
-      let labstmt, stmts' = getFirstInChunk c in
-      (* Add the label *)
-      labstmt.labels <- Label (l, loc, in_original_program_text) :: 
-				labstmt.labels;
-      H.add labelStmt l labstmt;
-      if c.stmts == stmts' then c else {c with stmts = stmts'}
-
-    let s2c (s:stmt) : chunk = 
-      { stmts = [ s ];
-        postins = [];
-        cases = [];
-      } 
-
-    let gotoChunk (ln: string) (l: location) : chunk = 
-      let gref = ref dummyStmt in
-      addGoto ln gref;
-      { stmts = [ mkStmt (Goto (gref, l)) ];
-        postins = [];
-        cases = [];
-      }
-
-    let caseRangeChunk (el: exp list) (l: location) (next: chunk) = 
-      let fst, stmts' = getFirstInChunk next in
-      let labels = List.map (fun e -> Case (e, l)) el in
-      let cases  = List.map (fun l -> (l, fst)) labels in
-      fst.labels <- labels @ fst.labels;
-      { next with stmts = stmts'; cases = cases @ next.cases}
-        
-    let defaultChunk (l: location) (next: chunk) = 
-      let fst, stmts' = getFirstInChunk next in
-      let lb = Default l in
-      fst.labels <- lb :: fst.labels;
-      { next with stmts = stmts'; cases = (lb, fst) :: next.cases}
-
-        
-    let switchChunk (e: exp) (body: chunk) (l: location) =
-      (* Make the statement *)
-      let switch = mkStmt (Switch (e, c2block body, 
-                                   List.map (fun (_, s) -> s) body.cases, 
-                                   l)) in
-      { stmts = [ switch (* ; n *) ];
-        postins = [];
-        cases = [];
-      } 
-
-    let mkFunctionBody (c: chunk) : block = 
-      resolveGotos (); initLabels ();
-      if c.cases <> [] then
-        E.s (error "Switch cases not inside a switch statement\n");
-      c2block c
-      
-  end
-
-open BlockChunk 
-
-
-(************ Labels ***********)
-(*
-(* Since we turn dowhile and for loops into while we need to take care in 
- * processing the continue statement. For each loop that we enter we place a 
- * marker in a list saying what kinds of loop it is. When we see a continue 
- * for a Non-while loop we must generate a label for the continue *)
-type loopstate = 
-    While
-  | NotWhile of string ref
-
-let continues : loopstate list ref = ref []
-
-let startLoop iswhile = 
-  continues := (if iswhile then While else NotWhile (ref "")) :: !continues
-*)
-
-(* We need to take care while processing the continue statement...
- * For each loop that we enter we place a marker in a list saying what
- * chunk of code we must duplicate before each continue statement
- * in order to preserve the semantics. *)
-type loopMarker =
-  | DuplicateBeforeContinue of chunk
-  | ContinueUnchanged
-
-let continues : loopMarker list ref = ref []
-  
-let startLoop lstate =
-  continues := lstate :: !continues
-  
-let continueDuplicateChunk (l: location) : chunk = 
-  match !continues with
-    | []                             -> E.s (error "continue not in a loop")
-    | DuplicateBeforeContinue c :: _ -> c @@ continueChunk l
-    | ContinueUnchanged :: _         -> continueChunk l
-
-(* Sometimes we need to create new label names *)
-let newLabelName (base: string) = fst (newAlphaName false "label" base)
-
-(*
-let continueOrLabelChunk (l: location) : chunk = 
-  match !continues with
-    [] -> E.s (error "continue not in a loop")
-  | While :: _ -> continueChunk l
-  | NotWhile lr :: _ -> 
-      if !lr = "" then begin
-        lr := newLabelName "__Cont"
-      end;
-      gotoChunk !lr l
-
-let consLabContinue (c: chunk) = 
-  match !continues with
-    [] -> E.s (error "labContinue not in a loop")
-  | While :: rest -> c
-  | NotWhile lr :: rest -> if !lr = "" then c else consLabel !lr c !currentLoc false
-*)
-
-let exitLoop () = 
-  match !continues with
-    [] -> E.s (error "exit Loop not in a loop")
-  | _ :: rest -> continues := rest
-      
-
-(* In GCC we can have locally declared labels. *)
-let genNewLocalLabel (l: string) = 
-  (* Call the newLabelName to register the label name in the alpha conversion 
-   * table. *)
-  let l' = newLabelName l in
-  (* Add it to the environment *)
-  addLocalToEnv (kindPlusName "label" l) (EnvLabel l');
-  l'
-
-let lookupLabel (l: string) = 
-  try 
-    match H.find env (kindPlusName "label" l) with
-      EnvLabel l', _ -> l'
-    | _ -> raise Not_found
-  with Not_found -> 
-    l
-
-
-(** ALLOCA ***)
-let allocaFun () = 
-  let name = 
-    if !msvcMode then "alloca"
-      (* Use __builtin_alloca where possible, because this can be used
-         even when gcc is invoked with -fno-builtin *)
-    else "__builtin_alloca"
-  in
-  let fdec = emptyFunction name in
-  fdec.svar.vtype <- 
-     TFun(voidPtrType, Some [ ("len", !typeOfSizeOf, []) ], false, []);
-  fdec.svar
-  
-(* Maps local variables that are variable sized arrays to the expression that 
- * denotes their length *)
-let varSizeArrays : exp IH.t = IH.create 17
-  
-(**** EXP actions ***)
-type expAction = 
-    ADrop                               (* Drop the result. Only the 
-                                         * side-effect is interesting *)
-  | ASet of lval * typ                  (* Put the result in a given lval, 
-                                         * provided it matches the type. The 
-                                         * type is the type of the lval. *)
-  | AExp of typ option                  (* Return the exp as usual. 
-                                         * Optionally we can specify an 
-                                         * expected type. This is useful for 
-                                         * constants. The expected type is 
-                                         * informational only, we do not 
-                                         * guarantee that the converted 
-                                         * expression has that type.You must 
-                                         * use a doCast afterwards to make 
-                                         * sure. *)
-  | AExpLeaveArrayFun                   (* Do it like an expression, but do 
-                                         * not convert arrays of functions 
-                                         * into pointers *)
-
-
-(*** Result of compiling conditional expressions *)
-type condExpRes = 
-    CEExp of chunk * exp (* Do a chunk and then an expression *)
-  | CEAnd of condExpRes * condExpRes
-  | CEOr  of condExpRes * condExpRes
-  | CENot of condExpRes
-
-(******** CASTS *********)
-let integralPromotion (t : typ) : typ = (* c.f. ISO 6.3.1.1 *)
-  match unrollType t with
-          (* We assume that an IInt can hold even an IUShort *)
-    TInt ((IShort|IUShort|IChar|ISChar|IUChar), a) -> TInt(IInt, a)
-  | TInt _ -> t
-  | TEnum (_, a) -> TInt(IInt, a)
-  | t -> E.s (error "integralPromotion: not expecting %a" d_type t)
-  
-
-let arithmeticConversion    (* c.f. ISO 6.3.1.8 *)
-    (t1: typ)
-    (t2: typ) : typ = 
-  let checkToInt _ = () in  (* dummies for now *)
-  let checkToFloat _ = () in
-  match unrollType t1, unrollType t2 with
-    TFloat(FLongDouble, _), _ -> checkToFloat t2; t1
-  | _, TFloat(FLongDouble, _) -> checkToFloat t1; t2
-  | TFloat(FDouble, _), _ -> checkToFloat t2; t1
-  | _, TFloat (FDouble, _) -> checkToFloat t1; t2
-  | TFloat(FFloat, _), _ -> checkToFloat t2; t1
-  | _, TFloat (FFloat, _) -> checkToFloat t1; t2
-  | _, _ -> begin
-      let t1' = integralPromotion t1 in
-      let t2' = integralPromotion t2 in
-      match unrollType t1', unrollType t2' with
-        TInt(IULongLong, _), _ -> checkToInt t2'; t1'
-      | _, TInt(IULongLong, _) -> checkToInt t1'; t2'
-            
-      (* We assume a long long is always larger than a long  *)
-      | TInt(ILongLong, _), _ -> checkToInt t2'; t1'  
-      | _, TInt(ILongLong, _) -> checkToInt t1'; t2'
-            
-      | TInt(IULong, _), _ -> checkToInt t2'; t1'
-      | _, TInt(IULong, _) -> checkToInt t1'; t2'
-
-                    
-      | TInt(ILong,_), TInt(IUInt,_) 
-            when bitsSizeOf t1' <= bitsSizeOf t2' -> TInt(IULong,[])
-      | TInt(IUInt,_), TInt(ILong,_) 
-            when bitsSizeOf t2' <= bitsSizeOf t1' -> TInt(IULong,[])
-            
-      | TInt(ILong, _), _ -> checkToInt t2'; t1'
-      | _, TInt(ILong, _) -> checkToInt t1'; t2'
-
-      | TInt(IUInt, _), _ -> checkToInt t2'; t1'
-      | _, TInt(IUInt, _) -> checkToInt t1'; t2'
-            
-      | TInt(IInt, _), TInt (IInt, _) -> t1'
-
-      | _, _ -> E.s (error "arithmeticConversion")
-  end
-
-  
-(* Specify whether the cast is from the source code *)
-let rec castTo ?(fromsource=false) 
-                (ot : typ) (nt : typ) (e : exp) : (typ * exp ) = 
-(*
-  ignore (E.log "%t: castTo:%s %a->%a\n"
-            d_thisloc
-            (if fromsource then "(source)" else "")
-            d_type ot d_type nt);
-*)
-  if not fromsource && Util.equals (typeSig ot) (typeSig nt) then
-    (* Do not put the cast if it is not necessary, unless it is from the 
-     * source. *)
-    (ot, e) 
-  else begin
-    let result = (nt, 
-                  if !insertImplicitCasts || fromsource then mkCastT e ot nt else e) in
-(*
-    ignore (E.log "castTo: ot=%a nt=%a\n  result is %a\n" 
-              d_type ot d_type nt
-              d_plainexp (snd result));
-*)
-    (* Now see if we can have a cast here *)
-    match ot, nt with
-      TNamed(r, _), _ -> castTo ~fromsource:fromsource r.ttype nt e
-    | _, TNamed(r, _) -> castTo ~fromsource:fromsource ot r.ttype e
-    | TInt(ikindo,_), TInt(ikindn,_) -> 
-        (* We used to ignore attributes on integer-integer casts. Not anymore *)
-        (* if ikindo = ikindn then (nt, e) else *) 
-        result
-
-    | TPtr (told, _), TPtr(tnew, _) -> result
-          
-    | TInt _, TPtr _ -> result
-          
-    | TPtr _, TInt _ -> result
-          
-    | TArray _, TPtr _ -> result
-          
-    | TArray(t1,_,_), TArray(t2,None,_) when Util.equals (typeSig t1) (typeSig t2) -> (nt, e)
-          
-    | TPtr _, TArray(_,_,_) -> (nt, e)
-          
-    | TEnum _, TInt _ -> result
-    | TFloat _, (TInt _|TEnum _) -> result
-    | (TInt _|TEnum _), TFloat _ -> result
-    | TFloat _, TFloat _ -> result
-    | TInt _, TEnum _ -> result
-    | TEnum _, TEnum _ -> result
-
-    | TEnum _, TPtr _ -> result
-    | TBuiltin_va_list _, (TInt _ | TPtr _) -> 
-        result
-
-    | (TInt _ | TPtr _), TBuiltin_va_list _ ->
-        ignore (warnOpt "Casting %a to __builtin_va_list" d_type ot);
-        result
-
-    | TPtr _, TEnum _ -> 
-        ignore (warnOpt "Casting a pointer into an enumeration type");
-        result
-
-          (* The expression is evaluated for its side-effects *)
-    | (TInt _ | TEnum _ | TPtr _ ), TVoid _ -> 
-        (ot, e)
-
-          (* Even casts between structs are allowed when we are only 
-           * modifying some attributes *)
-    | TComp (comp1, a1), TComp (comp2, a2) when comp1.ckey = comp2.ckey -> 
-        (nt, e)
-          
-          (** If we try to pass a transparent union value to a function 
-           * expecting a transparent union argument, the argument type would 
-           * have been changed to the type of the first argument, and we'll 
-           * see a cast from a union to the type of the first argument. Turn 
-           * that into a field access *)
-    | TComp(tunion, a1), nt -> begin
-        match isTransparentUnion ot with 
-          None -> E.s (error "castTo %a -> %a@!" d_type ot d_type nt)
-        | Some fstfield -> begin
-            (* We do it now only if the expression is an lval *)
-            let e' = 
-              match e with 
-                Lval lv -> 
-                  Lval (addOffsetLval (Field(fstfield, NoOffset)) lv)
-              | _ -> E.s (unimp "castTo: transparent union expression is not an lval: %a\n" d_exp e)
-            in
-            (* Continue casting *)
-            castTo ~fromsource:fromsource fstfield.ftype nt e'
-        end
-    end
-    | _ -> E.s (error "cabs2cil: castTo %a -> %a@!" d_type ot d_type nt)
-  end
-
-
-(* A cast that is used for conditional expressions. Pointers are Ok *)
-let checkBool (ot : typ) (e : exp) : bool =
-  match unrollType ot with
-    TInt _ -> true
-  | TPtr _ -> true
-  | TEnum _ -> true
-  | TFloat _ -> true
-  |  _ -> E.s (error "castToBool %a" d_type ot)
-
-(* Given an expression that is being coerced to bool, 
-   is it a nonzero constant? *)
-let rec isConstTrue (e:exp): bool =
-  match e with
-  | Const(CInt64 (n,_,_)) -> n <> Int64.zero
-  | Const(CChr c) -> 0 <> Char.code c
-  | Const(CStr _ | CWStr _) -> true
-  | Const(CReal(f, _, _)) -> f <> 0.0;
-  | CastE(_, e) -> isConstTrue e
-  | _ -> false
-
-(* Given an expression that is being coerced to bool, is it zero? 
-   This is a more general version of Cil.isZero, which only handles integers.
-   On constant expressions, either isConstTrue or isConstFalse will hold. *)
-let rec isConstFalse (e:exp): bool =
-  match e with
-  | Const(CInt64 (n,_,_)) -> n = Int64.zero
-  | Const(CChr c) -> 0 = Char.code c
-  | Const(CReal(f, _, _)) -> f = 0.0;
-  | CastE(_, e) -> isConstFalse e
-  | _ -> false
-
-
-
-(* We have our own version of addAttributes that does not allow duplicates *)
-let cabsAddAttributes al0 (al: attributes) : attributes = 
-  if al0 == [] then al else
-  List.fold_left 
-    (fun acc (Attr(an, _) as a) -> 
-      (* See if the attribute is already in there *)
-      match filterAttributes an acc with
-        [] -> addAttribute a acc (* Nothing with that name *)
-      | a' :: _ -> 
-          if Util.equals a a' then 
-            acc (* Already in *)
-          else begin
-            ignore (warnOpt 
-                      "Duplicate attribute %a along with %a"
-                      d_attr a d_attr a');
-            (* let acc' = dropAttribute an acc in *)
-            (** Keep both attributes *)
-            addAttribute a acc
-          end)
-    al
-    al0
-      
-let cabsTypeAddAttributes a0 t =
-  begin
-    match a0 with
-    | [] ->
-        (* no attributes, keep same type *)
-          t
-    | _ ->
-        (* anything else: add a0 to existing attributes *)
-          let add (a: attributes) = cabsAddAttributes a0 a in
-          match t with
-            TVoid a -> TVoid (add a)
-          | TInt (ik, a) -> 
-              (* Here we have to watch for the mode attribute *)
-(* sm: This stuff is to handle a GCC extension where you can request integers*)
-(* of specific widths using the "mode" attribute syntax; for example:     *)
-(*   typedef int int8_t __attribute__ ((__mode__ (  __QI__ ))) ;          *)
-(* The cryptic "__QI__" defines int8_t to be 8 bits wide, instead of the  *)
-(* 32 bits you'd guess if you didn't know about "mode".  The relevant     *)
-(* testcase is test/small2/mode_sizes.c, and it was inspired by my        *)
-(* /usr/include/sys/types.h.                                              *)
-(*                                                                        *)
-(* A consequence of this handling is that we throw away the mode          *)
-(* attribute, which we used to go out of our way to avoid printing anyway.*)  
-              let ik', a0' = 
-                (* Go over the list of new attributes and come back with a 
-                 * filtered list and a new integer kind *)
-                List.fold_left
-                  (fun (ik', a0') a0one -> 
-                    match a0one with 
-                      Attr("mode", [ACons(mode,[])]) -> begin
-                        (trace "gccwidth" (dprintf "I see mode %s applied to an int type\n"
-                                             mode (* #$@!#@ ML! d_type t *) ));
-                        (* the cases below encode the 32-bit assumption.. *)
-                        match (ik', mode) with
-                        | (IInt, "__QI__")      -> (IChar, a0')
-                        | (IInt, "__byte__")    -> (IChar, a0')
-                        | (IInt, "__HI__")      -> (IShort,  a0')
-                        | (IInt, "__SI__")      -> (IInt, a0')   (* same as t *)
-                        | (IInt, "__word__")    -> (IInt, a0')
-                        | (IInt, "__pointer__") -> (IInt, a0')
-                        | (IInt, "__DI__")      -> (ILongLong, a0')
-                      
-                        | (IUInt, "__QI__")     -> (IUChar, a0')
-                        | (IUInt, "__byte__")   -> (IUChar, a0')
-                        | (IUInt, "__HI__")     -> (IUShort, a0')
-                        | (IUInt, "__SI__")     -> (IUInt, a0')
-                        | (IUInt, "__word__")   -> (IUInt, a0')
-                        | (IUInt, "__pointer__")-> (IUInt, a0')
-                        | (IUInt, "__DI__")     -> (IULongLong, a0')
-                              
-                        | _ -> 
-                            (ignore (error "GCC width mode %s applied to unexpected type, or unexpected mode"
-                                       mode));
-                            (ik', a0one :: a0')
- 
-                      end
-                    | _ -> (ik', a0one :: a0'))
-                  (ik, [])
-                  a0
-              in
-              TInt (ik', cabsAddAttributes a0' a)
-
-          | TFloat (fk, a) -> TFloat (fk, add a)
-          | TEnum (enum, a) -> TEnum (enum, add a)
-          | TPtr (t, a) -> TPtr (t, add a)
-          | TArray (t, l, a) -> TArray (t, l, add a)
-          | TFun (t, args, isva, a) -> TFun(t, args, isva, add a)
-          | TComp (comp, a) -> TComp (comp, add a)
-          | TNamed (t, a) -> TNamed (t, add a)
-          | TBuiltin_va_list a -> TBuiltin_va_list (add a)
-  end
-
-
-(* Do types *)
-    (* Combine the types. Raises the Failure exception with an error message. 
-     * isdef says whether the new type is for a definition *)
-type combineWhat = 
-    CombineFundef (* The new definition is for a function definition. The old 
-                   * is for a prototype *)
-  | CombineFunarg (* Comparing a function argument type with an old prototype 
-                   * arg *)
-  | CombineFunret (* Comparing the return of a function with that from an old 
-                   * prototype *)
-  | CombineOther
-
-(* We sometimes want to succeed in combining two structure types that are 
- * identical except for the names of the structs. We keep a list of types 
- * that are known to be equal *)
-let isomorphicStructs : (string * string, bool) H.t = H.create 15
-
-let rec combineTypes (what: combineWhat) (oldt: typ) (t: typ) : typ = 
-  match oldt, t with
-  | TVoid olda, TVoid a -> TVoid (cabsAddAttributes olda a)
-  | TInt (oldik, olda), TInt (ik, a) -> 
-      let combineIK oldk k = 
-        if oldk = k then oldk else
-        (* GCC allows a function definition to have a more precise integer 
-         * type than a prototype that says "int" *)
-        if not !msvcMode && oldk = IInt && bitsSizeOf t <= 32 
-           && (what = CombineFunarg || what = CombineFunret) then
-          k
-        else
-          raise (Failure "different integer types")
-      in
-      TInt (combineIK oldik ik, cabsAddAttributes olda a)
-  | TFloat (oldfk, olda), TFloat (fk, a) -> 
-      let combineFK oldk k = 
-        if oldk = k then oldk else
-        (* GCC allows a function definition to have a more precise integer 
-         * type than a prototype that says "double" *)
-        if not !msvcMode && oldk = FDouble && k = FFloat 
-           && (what = CombineFunarg || what = CombineFunret) then
-          k
-        else
-          raise (Failure "different floating point types")
-      in
-      TFloat (combineFK oldfk fk, cabsAddAttributes olda a)
-  | TEnum (_, olda), TEnum (ei, a) -> 
-      TEnum (ei, cabsAddAttributes olda a)
-        
-        (* Strange one. But seems to be handled by GCC *)
-  | TEnum (oldei, olda) , TInt(IInt, a) -> TEnum(oldei, 
-                                                 cabsAddAttributes olda a)
-        (* Strange one. But seems to be handled by GCC *)
-  | TInt(IInt, olda), TEnum (ei, a) -> TEnum(ei, cabsAddAttributes olda a)
-        
-        
-  | TComp (oldci, olda) , TComp (ci, a) -> 
-      if oldci.cstruct <> ci.cstruct then 
-        raise (Failure "different struct/union types");
-      let comb_a = cabsAddAttributes olda a in
-      if oldci.cname = ci.cname then 
-        TComp (oldci, comb_a)
-      else 
-        (* Now maybe they are actually the same *)
-        if H.mem isomorphicStructs (oldci.cname, ci.cname) then 
-          (* We know they are the same *)
-          TComp (oldci, comb_a)
-        else begin
-          (* If one has 0 fields (undefined) while the other has some fields 
-           * we accept it *)
-          let oldci_nrfields = List.length oldci.cfields in
-          let ci_nrfields = List.length ci.cfields in
-          if oldci_nrfields = 0 then
-            TComp (ci, comb_a)
-          else if ci_nrfields = 0 then
-            TComp (oldci, comb_a) 
-          else begin
-            (* Make sure that at least they have the same number of fields *)
-            if  oldci_nrfields <> ci_nrfields then begin
-(*
-              ignore (E.log "different number of fields: %s had %d and %s had %d\n"
-                        oldci.cname oldci_nrfields
-                        ci.cname ci_nrfields);
-*)
-              raise (Failure "different structs(number of fields)");
-            end;
-            (* Assume they are the same *)
-            H.add isomorphicStructs (oldci.cname, ci.cname) true;
-            H.add isomorphicStructs (ci.cname, oldci.cname) true;
-            (* Check that the fields are isomorphic and watch for Failure *)
-            (try
-              List.iter2 (fun oldf f -> 
-                if oldf.fbitfield <> f.fbitfield then 
-                  raise (Failure "different structs(bitfield info)");
-                if oldf.fattr <> f.fattr then 
-                  raise (Failure "different structs(field attributes)");
-                (* Make sure the types are compatible *)
-                ignore (combineTypes CombineOther oldf.ftype f.ftype);
-                ) oldci.cfields ci.cfields
-            with Failure _ as e -> begin 
-              (* Our assumption was wrong. Forget the isomorphism *)
-              ignore (E.log "\tFailed in our assumption that %s and %s are isomorphic\n"
-                        oldci.cname ci.cname);
-              H.remove isomorphicStructs (oldci.cname, ci.cname);
-              H.remove isomorphicStructs (ci.cname, oldci.cname);
-              raise e
-            end);
-            (* We get here if we succeeded *)
-            TComp (oldci, comb_a)
-          end
-        end
-
-  | TArray (oldbt, oldsz, olda), TArray (bt, sz, a) -> 
-      let newbt = combineTypes CombineOther oldbt bt in
-      let newsz = 
-        match oldsz, sz with
-          None, Some _ -> sz
-        | Some _, None -> oldsz
-        | None, None -> sz
-        | Some oldsz', Some sz' -> 
-            (* They are not structurally equal. But perhaps they are equal if 
-             * we evaluate them. Check first machine independent comparison  *)
-           let checkEqualSize (machdep: bool) = 
-              Util.equals (constFold machdep oldsz') 
-                          (constFold machdep sz') 
-           in
-           if checkEqualSize false then 
-              oldsz
-           else if checkEqualSize true then begin
-              ignore (warn "Array type comparison succeeds only based on machine-dependent constant evaluation: %a and %a\n" 
-                       d_exp oldsz' d_exp sz');
-              oldsz
-           end else
-              raise (Failure "different array lengths")
-           
-      in
-      TArray (newbt, newsz, cabsAddAttributes olda a)
-        
-  | TPtr (oldbt, olda), TPtr (bt, a) -> 
-      TPtr (combineTypes CombineOther oldbt bt, cabsAddAttributes olda a)
-        
-  | TFun (_, _, _, [Attr("missingproto",_)]), TFun _ -> t
-        
-  | TFun (oldrt, oldargs, oldva, olda), TFun (rt, args, va, a) ->
-      let newrt = combineTypes 
-          (if what = CombineFundef then CombineFunret else CombineOther) 
-          oldrt rt 
-      in
-      if oldva != va then 
-        raise (Failure "diferent vararg specifiers");
-      (* If one does not have arguments, believe the one with the 
-      * arguments *)
-      let newargs = 
-        if oldargs = None then args else
-        if args = None then oldargs else
-        let oldargslist = argsToList oldargs in
-        let argslist = argsToList args in
-        if List.length oldargslist <> List.length argslist then 
-          raise (Failure "different number of arguments")
-        else begin
-          (* Go over the arguments and update the old ones with the 
-          * adjusted types *)
-          Some 
-            (List.map2 
-               (fun (on, ot, oa) (an, at, aa) -> 
-                 (* Update the names. Always prefer the new name. This is 
-                  * very important if the prototype uses different names than 
-                  * the function definition. *)
-                 let n = if an <> "" then an else on in
-                 let t = 
-                   combineTypes 
-                     (if what = CombineFundef then 
-                       CombineFunarg else CombineOther) 
-                     ot at
-                 in
-                 let a = addAttributes oa aa in
-                 (n, t, a))
-               oldargslist argslist)
-        end
-      in
-      TFun (newrt, newargs, oldva, cabsAddAttributes olda a)
-        
-  | TNamed (oldt, olda), TNamed (t, a) when oldt.tname = t.tname ->
-      TNamed (oldt, cabsAddAttributes olda a)
-        
-  | TBuiltin_va_list olda, TBuiltin_va_list a -> 
-      TBuiltin_va_list (cabsAddAttributes olda a)
-
-        (* Unroll first the new type *)
-  | _, TNamed (t, a) -> 
-      let res = combineTypes what oldt t.ttype in
-      cabsTypeAddAttributes a res
-        
-        (* And unroll the old type as well if necessary *)
-  | TNamed (oldt, a), _ -> 
-      let res = combineTypes what oldt.ttype t in
-      cabsTypeAddAttributes a res
-        
-  | _ -> raise (Failure "different type constructors")
-
-
-(* Create and cache varinfo's for globals. Starts with a varinfo but if the 
- * global has been declared already it might come back with another varinfo. 
- * Returns the varinfo to use (might be the old one), and an indication 
- * whether the variable exists already in the environment *)
-let makeGlobalVarinfo (isadef: bool) (vi: varinfo) : varinfo * bool =
-  try (* See if already defined, in the global environment. We could also 
-       * look it up in the whole environment but in that case we might see a 
-       * local. This can happen when we declare an extern variable with 
-       * global scope but we are in a local scope. *)
-    let oldvi, oldloc = lookupGlobalVar vi.vname in
-    (* It was already defined. We must reuse the varinfo. But clean up the 
-     * storage.  *)
-    let newstorage = (** See 6.2.2 *)
-      match oldvi.vstorage, vi.vstorage with
-        (* Extern and something else is that thing *)
-      | Extern, other
-      | other, Extern -> other
-
-      | NoStorage, other
-      | other, NoStorage ->  other
-
-
-      | _ ->
-	  if vi.vstorage != oldvi.vstorage then
-            ignore (warn
-		      "Inconsistent storage specification for %s. Previous declaration: %a" 
-		      vi.vname d_loc oldloc);
-          vi.vstorage
-    in
-    oldvi.vinline <- oldvi.vinline || vi.vinline;
-    oldvi.vstorage <- newstorage;
-    (* Union the attributes *)
-    oldvi.vattr <- cabsAddAttributes oldvi.vattr vi.vattr;
-    begin 
-      try
-        oldvi.vtype <- 
-           combineTypes 
-             (if isadef then CombineFundef else CombineOther) 
-             oldvi.vtype vi.vtype;
-      with Failure reason -> 
-        ignore (E.log "old type = %a\n" d_plaintype oldvi.vtype);
-        ignore (E.log "new type = %a\n" d_plaintype vi.vtype);
-        E.s (error "Declaration of %s does not match previous declaration from %a (%s)." 
-               vi.vname d_loc oldloc reason)
-    end;
-      
-    (* Found an old one. Keep the location always from the definition *)
-    if isadef then begin 
-      oldvi.vdecl <- vi.vdecl;
-    end;
-    oldvi, true
-      
-  with Not_found -> begin (* A new one.  *)
-    (* Announce the name to the alpha conversion table. This will not 
-     * actually change the name of the vi. See the definition of 
-     * alphaConvertVarAndAddToEnv *)
-    alphaConvertVarAndAddToEnv true vi, false
-  end 
-
-let conditionalConversion (t2: typ) (t3: typ) : typ =
-  let tresult =  (* ISO 6.5.15 *)
-    match unrollType t2, unrollType t3 with
-      (TInt _ | TEnum _ | TFloat _), 
-      (TInt _ | TEnum _ | TFloat _) -> 
-        arithmeticConversion t2 t3 
-    | TComp (comp2,_), TComp (comp3,_) 
-          when comp2.ckey = comp3.ckey -> t2 
-    | TPtr(_, _), TPtr(TVoid _, _) -> t2
-    | TPtr(TVoid _, _), TPtr(_, _) -> t3
-    | TPtr _, TPtr _ when Util.equals (typeSig t2) (typeSig t3) -> t2
-    | TPtr _, TInt _  -> t2 (* most likely comparison with 0 *)
-    | TInt _, TPtr _ -> t3 (* most likely comparison with 0 *)
-
-          (* When we compare two pointers of diffent type, we combine them 
-           * using the same algorithm when combining multiple declarations of 
-           * a global *)
-    | (TPtr _) as t2', (TPtr _ as t3') -> begin
-        try combineTypes CombineOther t2' t3' 
-        with Failure msg -> begin
-          ignore (warn "A.QUESTION: %a does not match %a (%s)"
-                    d_type (unrollType t2) d_type (unrollType t3) msg);
-          t2 (* Just pick one *)
-        end
-    end
-    | _, _ -> E.s (error "A.QUESTION for invalid combination of types")
-  in
-  tresult
-
-(* Some utilitites for doing initializers *)
-
-let debugInit = false
-
-type preInit = 
-  | NoInitPre
-  | SinglePre of exp 
-  | CompoundPre of int ref (* the maximum used index *)
-                 * preInit array ref (* an array with initializers *)
-
-(* Instructions on how to handle designators *)
-type handleDesignators = 
-  | Handle (* Handle them yourself *)
-  | DoNotHandle (* Do not handle them your self *)
-  | HandleAsNext (* First behave as if you have a NEXT_INIT. Useful for going 
-                  * into nested designators *)
-  | HandleFirst (* Handle only the first designator *)
-
-(* Set an initializer *)
-let rec setOneInit (this: preInit)
-                   (o: offset) (e: exp) : preInit = 
-  match o with 
-    NoOffset -> SinglePre e
-  | _ -> 
-      let idx, (* Index in the current comp *)
-          restoff (* Rest offset *) =
-        match o with 
-        | Index(Const(CInt64(i,_,_)), off) -> Int64.to_int i, off
-        | Field (f, off) -> 
-            (* Find the index of the field *)
-            let rec loop (idx: int) = function
-                [] -> E.s (bug "Cannot find field %s" f.fname)
-              | f' :: _ when f'.fname = f.fname -> idx
-              | _ :: restf -> loop (idx + 1) restf
-            in
-            loop 0 f.fcomp.cfields, off
-        | _ -> E.s (bug "setOneInit: non-constant index")
-      in
-      let pMaxIdx, pArray = 
-        match this  with 
-          NoInitPre  -> (* No initializer so far here *)
-            ref idx, ref (Array.create (max 32 (idx + 1)) NoInitPre)
-              
-        | CompoundPre (pMaxIdx, pArray) -> 
-            if !pMaxIdx < idx then begin 
-              pMaxIdx := idx;
-              (* Maybe we also need to grow the array *)
-              let l = Array.length !pArray in
-              if l <= idx then begin
-                let growBy = max (max 32 (idx + 1 - l)) (l / 2) in
-                let newarray = Array.make (growBy + idx) NoInitPre in
-                Array.blit !pArray 0 newarray 0 l;
-                pArray := newarray
-              end
-            end;
-            pMaxIdx, pArray
-        | SinglePre e -> 
-            E.s (unimp "Index %d is already initialized" idx)
-      in
-      assert (idx >= 0 && idx < Array.length !pArray);
-      let this' = setOneInit !pArray.(idx) restoff e in
-      !pArray.(idx) <- this';
-      CompoundPre (pMaxIdx, pArray)
-
-
-(* collect a CIL initializer, given the original syntactic initializer
- * 'preInit'; this returns a type too, since initialization of an array
- * with unspecified size actually changes the array's type
- * (ANSI C, 6.7.8, para 22) *)
-let rec collectInitializer
-    (this: preInit)
-    (thistype: typ) : (init * typ) =
-  if this = NoInitPre then (makeZeroInit thistype), thistype
-  else
-    match unrollType thistype, this with 
-    | _ , SinglePre e -> SingleInit e, thistype
-    | TArray (bt, leno, at), CompoundPre (pMaxIdx, pArray) -> 
-        let (len: int), newtype =
-          (* normal case: use array's declared length, newtype=thistype *)
-          match leno with 
-            Some len -> begin
-              match constFold true len with 
-                Const(CInt64(ni, _, _)) when ni >= 0L -> 
-                  (Int64.to_int ni), TArray(bt,leno,at)
-
-              | _ -> E.s (error "Array length is not a constant expression %a"
-                            d_exp len)
-            end
-          | _ -> 
-              (* unsized array case, length comes from initializers *)
-              (!pMaxIdx + 1,
-               TArray (bt, Some (integer (!pMaxIdx + 1)), at))
-        in
-        if !pMaxIdx >= len then 
-          E.s (E.bug "collectInitializer: too many initializers(%d >= %d)\n"
-                 !pMaxIdx len);
-        (* len could be extremely big. So omit the last initializers, if they 
-         * are many (more than 16) *)
-(*
-        ignore (E.log "collectInitializer: len = %d, pMaxIdx= %d\n"
-                  len !pMaxIdx); *)
-        let endAt = 
-          if len - 1 > !pMaxIdx + 16 then 
-            !pMaxIdx 
-          else
-            len - 1
-        in
-        (* Make one zero initializer to be used next *)
-        let oneZeroInit = makeZeroInit bt in
-        let rec collect (acc: (offset * init) list) (idx: int) = 
-          if idx = -1 then acc
-          else
-            let thisi =
-              if idx > !pMaxIdx then oneZeroInit
-              else (fst (collectInitializer !pArray.(idx) bt))
-            in
-            collect ((Index(integer idx, NoOffset), thisi) :: acc) (idx - 1)
-        in
-        
-        CompoundInit (newtype, collect [] endAt), newtype
-
-    | TComp (comp, _), CompoundPre (pMaxIdx, pArray) when comp.cstruct ->
-        let rec collect (idx: int) = function
-            [] -> []
-          | f :: restf -> 
-              if f.fname = missingFieldName then 
-                collect (idx + 1) restf
-              else 
-                let thisi = 
-                  if idx > !pMaxIdx then 
-                    makeZeroInit f.ftype
-                  else
-                    collectFieldInitializer !pArray.(idx) f
-                in
-                (Field(f, NoOffset), thisi) :: collect (idx + 1) restf
-        in
-        CompoundInit (thistype, collect 0 comp.cfields), thistype
-
-    | TComp (comp, _), CompoundPre (pMaxIdx, pArray) when not comp.cstruct ->
-        (* Find the field to initialize *)
-        let rec findField (idx: int) = function
-            [] -> E.s (bug "collectInitializer: union")
-          | _ :: rest when idx < !pMaxIdx && !pArray.(idx) = NoInitPre -> 
-              findField (idx + 1) rest
-          | f :: _ when idx = !pMaxIdx -> 
-              Field(f, NoOffset), 
-              collectFieldInitializer !pArray.(idx) f
-          | _ -> E.s (error "Can initialize only one field for union")
-        in
-        if !msvcMode && !pMaxIdx != 0 then 
-          ignore (warn "On MSVC we can initialize only the first field of a union");
-        CompoundInit (thistype, [ findField 0 comp.cfields ]), thistype
-
-    | _ -> E.s (unimp "collectInitializer")
-                      
-and collectFieldInitializer 
-    (this: preInit)
-    (f: fieldinfo) : init =
-  (* collect, and rewrite type *)
-  let init,newtype = (collectInitializer this f.ftype) in
-  f.ftype <- newtype;
-  init
-            
-
-type stackElem = 
-    InArray of offset * typ * int * int ref (* offset of parent, base type, 
-                                             * length, current index. If the 
-                                             * array length is unspecified we 
-                                             * use Int.max_int  *)
-  | InComp  of offset * compinfo * fieldinfo list (* offset of parent, 
-                                                   base comp, current fields *)
-    
-
-(* A subobject is given by its address. The address is read from the end of 
- * the list (the bottom of the stack), starting with the current object *)
-type subobj = { mutable stack: stackElem list; (* With each stack element we 
-                                                * store the offset of its 
-                                                * PARENT  *)
-                mutable eof: bool; (* The stack is empty and we reached the 
-                                    * end *)
-                mutable soTyp: typ; (* The type of the subobject. Set using 
-                                     * normalSubobj after setting stack. *)
-                mutable soOff: offset; (* The offset of the subobject. Set 
-                                        * using normalSubobj after setting 
-                                        * stack.  *)
-                        curTyp: typ; (* Type of current object. See ISO for 
-                                      * the definition of the current object *)
-                        curOff: offset; (* The offset of the current obj *)
-                        host: varinfo; (* The host that we are initializing. 
-                                        * For error messages *)
-              }
-
-
-(* Make a subobject iterator *)  
-let rec makeSubobj 
-    (host: varinfo) 
-    (curTyp: typ)
-    (curOff: offset) = 
-  let so = 
-    { host = host; curTyp = curTyp; curOff = curOff; 
-      stack = []; eof = false;
-      (* The next are fixed by normalSubobj *)
-      soTyp = voidType; soOff = NoOffset } in
-  normalSubobj so;
-  so
-
-  (* Normalize a stack so the we always point to a valid subobject. Do not 
-   * descend into type *)
-and normalSubobj (so: subobj) : unit = 
-  match so.stack with 
-    [] -> so.soOff <- so.curOff; so.soTyp <- so.curTyp 
-        (* The array is over *)
-  | InArray (parOff, bt, leno, current) :: rest ->
-      if leno = !current then begin (* The array is over *)
-        if debugInit then ignore (E.log "Past the end of array\n");
-        so.stack <- rest; 
-        advanceSubobj so
-      end else begin
-        so.soTyp <- bt;
-        so.soOff <- addOffset (Index(integer !current, NoOffset)) parOff
-      end
-
-        (* The fields are over *)
-  | InComp (parOff, comp, nextflds) :: rest -> 
-      if nextflds == [] then begin (* No more fields here *)
-        if debugInit then ignore (E.log "Past the end of structure\n");
-        so.stack <- rest; 
-        advanceSubobj so
-      end else begin
-        let fst = List.hd nextflds in
-        so.soTyp <- fst.ftype;
-        so.soOff <- addOffset (Field(fst, NoOffset)) parOff
-      end
-
-  (* Advance to the next subobject. Always apply to a normalized object *)
-and advanceSubobj (so: subobj) : unit = 
-  if so.eof then E.s (bug "advanceSubobj past end");
-  match so.stack with
-  | [] -> if debugInit then ignore (E.log "Setting eof to true\n"); 
-          so.eof <- true 
-  | InArray (parOff, bt, leno, current) :: rest -> 
-      if debugInit then ignore (E.log "  Advancing to [%d]\n" (!current + 1));
-      (* so.stack <- InArray (parOff, bt, leno, current + 1) :: rest; *)
-      incr current;
-      normalSubobj so
-
-        (* The fields are over *)
-  | InComp (parOff, comp, nextflds) :: rest -> 
-      if debugInit then 
-        ignore (E.log "Advancing past .%s\n" (List.hd nextflds).fname);
-      let flds' = try List.tl nextflds with _ -> E.s (bug "advanceSubobj") in
-      so.stack <- InComp(parOff, comp, flds') :: rest;
-      normalSubobj so
-        
-        
-
-(* Find the fields to initialize in a composite. *)
-let fieldsToInit 
-    (comp: compinfo) 
-    (designator: string option) 
-    : fieldinfo list = 
-  (* Never look at anonymous fields *)
-  let flds1 = 
-    List.filter (fun f -> f.fname <> missingFieldName) comp.cfields in
-  let flds2 = 
-    match designator with 
-      None -> flds1
-    | Some fn -> 
-        let rec loop = function
-            [] -> E.s (error "Cannot find designated field %s" fn)
-          | (f :: _) as nextflds when f.fname = fn -> nextflds
-          | _ :: rest -> loop rest
-        in
-        loop flds1
-  in
-  (* If it is a union we only initialize one field *)
-  match flds2 with 
-    [] -> []
-  | (f :: rest) as toinit -> 
-      if comp.cstruct then toinit else [f]
-        
-
-let integerArrayLength (leno: exp option) : int = 
-  match leno with
-    None -> max_int
-  | Some len -> begin
-      try lenOfArray leno 
-      with LenOfArray -> 
-        E.s (error "Initializing non-constant-length array\n  length=%a\n"
-               d_exp len)
-  end
-
-(* sm: I'm sure something like this already exists, but ... *)
-let isNone (o : 'a option) : bool =
-  match o with
-  | None -> true
-  | Some _ -> false
-
-
-let annonCompFieldNameId = ref 0
-let annonCompFieldName = "__annonCompField"
- 
-                   
-
-(* Utility ***)
-let rec replaceLastInList 
-    (lst: A.expression list) 
-    (how: A.expression -> A.expression) : A.expression list= 
-  match lst with
-    [] -> []
-  | [e] -> [how e]
-  | h :: t -> h :: replaceLastInList t how
-
-
-
-
-
-let convBinOp (bop: A.binary_operator) : binop =
-  match bop with
-    A.ADD -> PlusA
-  | A.SUB -> MinusA
-  | A.MUL -> Mult
-  | A.DIV -> Div
-  | A.MOD -> Mod
-  | A.BAND -> BAnd
-  | A.BOR -> BOr
-  | A.XOR -> BXor
-  | A.SHL -> Shiftlt
-  | A.SHR -> Shiftrt
-  | A.EQ -> Eq
-  | A.NE -> Ne
-  | A.LT -> Lt
-  | A.LE -> Le
-  | A.GT -> Gt
-  | A.GE -> Ge
-  | _ -> E.s (error "convBinOp")
-
-(**** PEEP-HOLE optimizations ***)
-let afterConversion (c: chunk) : chunk = 
-  (* Now scan the statements and find Instr blocks *)
-
-  (** We want to collapse sequences of the form "tmp = f(); v = tmp". This 
-   * will help significantly with the handling of calls to malloc, where it 
-   * is important to have the cast at the same place as the call *)
-  let collapseCallCast = function
-      Call(Some(Var vi, NoOffset), f, args, l),
-      Set(destlv, CastE (newt, Lval(Var vi', NoOffset)), _) 
-      when (not vi.vglob && 
-            String.length vi.vname >= 3 &&
-            (* Watch out for the possibility that we have an implied cast in 
-             * the call *)
-           (let tcallres = 
-              match unrollType (typeOf f) with
-                 TFun (rt, _, _, _) -> rt
-               | _ -> E.s (E.bug "Function call to a non-function")
-           in 
-           Util.equals (typeSig tcallres) (typeSig vi.vtype) &&
-           Util.equals (typeSig newt) (typeSig (typeOfLval destlv))) && 
-           IH.mem callTempVars vi.vid &&
-           vi' == vi) 
-      -> Some [Call(Some destlv, f, args, l)]
-    | i1,i2 ->  None
-  in
-  (* First add in the postins *)
-  let sl = pushPostIns c in
-  peepHole2 collapseCallCast sl;
-  { c with stmts = sl; postins = [] }
-
-(***** Try to suggest a name for the anonymous structures *)
-let suggestAnonName (nl: A.name list) = 
-  match nl with 
-    [] -> ""
-  | (n, _, _, _) :: _ -> n
-
-
-(** Optional constant folding of binary operations *)
-let optConstFoldBinOp (machdep: bool) (bop: binop) 
-                      (e1: exp) (e2:exp) (t: typ) = 
-  if !lowerConstants then 
-    constFoldBinOp machdep bop e1 e2 t
-  else
-    BinOp(bop, e1, e2, t)
-  
-(****** TYPE SPECIFIERS *******)
-let rec doSpecList (suggestedAnonName: string) (* This string will be part of 
-                                                * the names for anonymous 
-                                                * structures and enums  *)
-                   (specs: A.spec_elem list) 
-       (* Returns the base type, the storage, whether it is inline and the 
-        * (unprocessed) attributes *)
-    : typ * storage * bool * A.attribute list =
-  (* Do one element and collect the type specifiers *)
-  let isinline = ref false in (* If inline appears *)
-  (* The storage is placed here *)
-  let storage : storage ref = ref NoStorage in
-
-  (* Collect the attributes.  Unfortunately, we cannot treat GCC
-   * __attributes__ and ANSI C const/volatile the same way, since they
-   * associate with structures differently.  Specifically, ANSI 
-   * qualifiers never apply to structures (ISO 6.7.3), whereas GCC
-   * attributes always do (GCC manual 4.30).  Therefore, they are 
-   * collected and processed separately. *)
-  let attrs : A.attribute list ref = ref [] in      (* __attribute__, etc. *)
-  let cvattrs : A.cvspec list ref = ref [] in       (* const/volatile *)
-
-  let doSpecElem (se: A.spec_elem)
-                 (acc: A.typeSpecifier list) 
-                  : A.typeSpecifier list = 
-    match se with 
-      A.SpecTypedef -> acc
-    | A.SpecInline -> isinline := true; acc
-    | A.SpecStorage st ->
-        if !storage <> NoStorage then 
-          E.s (error "Multiple storage specifiers");
-        let sto' = 
-          match st with
-            A.NO_STORAGE -> NoStorage
-          | A.AUTO -> NoStorage
-          | A.REGISTER -> Register
-          | A.STATIC -> Static
-          | A.EXTERN -> Extern
-        in
-        storage := sto';
-        acc
-
-    | A.SpecCV cv -> cvattrs := cv :: !cvattrs; acc
-    | A.SpecAttr a -> attrs := a :: !attrs; acc
-    | A.SpecType ts -> ts :: acc
-    | A.SpecPattern _ -> E.s (E.bug "SpecPattern in cabs2cil input")
-  in
-  (* Now scan the list and collect the type specifiers. Preserve the order *)
-  let tspecs = List.fold_right doSpecElem specs [] in
-  
-  let tspecs' = 
-    (* GCC allows a named type that appears first to be followed by things 
-     * like "short", "signed", "unsigned" or "long". *)
-    match tspecs with 
-      A.Tnamed n :: (_ :: _ as rest) when not !msvcMode -> 
-        (* If rest contains "short" or "long" then drop the Tnamed *)
-        if List.exists (function A.Tshort -> true 
-                               | A.Tlong -> true | _ -> false) rest then
-          rest
-        else
-          tspecs
-
-    | _ -> tspecs
-  in
-  (* Sort the type specifiers *)
-  let sortedspecs = 
-    let order = function (* Don't change this *)
-      | A.Tvoid -> 0
-      | A.Tsigned -> 1
-      | A.Tunsigned -> 2
-      | A.Tchar -> 3
-      | A.Tshort -> 4
-      | A.Tlong -> 5
-      | A.Tint -> 6
-      | A.Tint64 -> 7
-      | A.Tfloat -> 8
-      | A.Tdouble -> 9
-      | _ -> 10 (* There should be at most one of the others *)
-    in
-    List.stable_sort (fun ts1 ts2 -> compare (order ts1) (order ts2)) tspecs' 
-  in
-  let getTypeAttrs () : A.attribute list =
-    (* Partitions the attributes in !attrs.
-       Type attributes are removed from attrs and returned, so that they
-       can go into the type definition.  Name attributes are left in attrs,
-       so they will be returned by doSpecAttr and used in the variable 
-       declaration. 
-       Testcase: small1/attr9.c *)
-    let an, af, at = cabsPartitionAttributes ~default:AttrType !attrs in
-    attrs := an;      (* Save the name attributes for later *)
-    if af <> [] then
-      E.s (error "Invalid position for function type attributes.");
-    at
-  in 
-
-  (* And now try to make sense of it. See ISO 6.7.2 *)
-  let bt = 
-    match sortedspecs with
-      [A.Tvoid] -> TVoid []
-    | [A.Tchar] -> TInt(IChar, [])
-    | [A.Tsigned; A.Tchar] -> TInt(ISChar, [])
-    | [A.Tunsigned; A.Tchar] -> TInt(IUChar, [])
-
-    | [A.Tshort] -> TInt(IShort, [])
-    | [A.Tsigned; A.Tshort] -> TInt(IShort, [])
-    | [A.Tshort; A.Tint] -> TInt(IShort, [])
-    | [A.Tsigned; A.Tshort; A.Tint] -> TInt(IShort, [])
-
-    | [A.Tunsigned; A.Tshort] -> TInt(IUShort, [])
-    | [A.Tunsigned; A.Tshort; A.Tint] -> TInt(IUShort, [])
-
-    | [] -> TInt(IInt, [])
-    | [A.Tint] -> TInt(IInt, [])
-    | [A.Tsigned] -> TInt(IInt, [])
-    | [A.Tsigned; A.Tint] -> TInt(IInt, [])
-
-    | [A.Tunsigned] -> TInt(IUInt, [])
-    | [A.Tunsigned; A.Tint] -> TInt(IUInt, [])
-
-    | [A.Tlong] -> TInt(ILong, [])
-    | [A.Tsigned; A.Tlong] -> TInt(ILong, [])
-    | [A.Tlong; A.Tint] -> TInt(ILong, [])
-    | [A.Tsigned; A.Tlong; A.Tint] -> TInt(ILong, [])
-
-    | [A.Tunsigned; A.Tlong] -> TInt(IULong, [])
-    | [A.Tunsigned; A.Tlong; A.Tint] -> TInt(IULong, [])
-
-    | [A.Tlong; A.Tlong] -> TInt(ILongLong, [])
-    | [A.Tsigned; A.Tlong; A.Tlong] -> TInt(ILongLong, [])
-    | [A.Tlong; A.Tlong; A.Tint] -> TInt(ILongLong, [])
-    | [A.Tsigned; A.Tlong; A.Tlong; A.Tint] -> TInt(ILongLong, [])
-
-    | [A.Tunsigned; A.Tlong; A.Tlong] -> TInt(IULongLong, [])
-    | [A.Tunsigned; A.Tlong; A.Tlong; A.Tint] -> TInt(IULongLong, [])
-
-    (* int64 is to support MSVC *)
-    | [A.Tint64] -> TInt(ILongLong, [])
-    | [A.Tsigned; A.Tint64] -> TInt(ILongLong, [])
-
-    | [A.Tunsigned; A.Tint64] -> TInt(IULongLong, [])
-
-    | [A.Tfloat] -> TFloat(FFloat, [])
-    | [A.Tdouble] -> TFloat(FDouble, [])
-
-    | [A.Tlong; A.Tdouble] -> TFloat(FLongDouble, [])
-
-     (* Now the other type specifiers *)
-    | [A.Tnamed n] -> begin
-        if n = "__builtin_va_list" && 
-          Machdep.gccHas__builtin_va_list then begin
-            TBuiltin_va_list []
-        end else
-          let t = 
-            match lookupType "type" n with 
-              (TNamed _) as x, _ -> x
-            | typ -> E.s (error "Named type %s is not mapped correctly\n" n)
-          in
-          t
-    end
-
-    | [A.Tstruct (n, None, _)] -> (* A reference to a struct *)
-        if n = "" then E.s (error "Missing struct tag on incomplete struct");
-        findCompType "struct" n []
-    | [A.Tstruct (n, Some nglist, extraAttrs)] -> (* A definition of a struct *)
-      let n' =
-        if n <> "" then n else anonStructName "struct" suggestedAnonName in
-      (* Use the (non-cv, non-name) attributes in !attrs now *)
-      let a = extraAttrs @ (getTypeAttrs ()) in
-      makeCompType true n' nglist (doAttributes a)
-
-    | [A.Tunion (n, None, _)] -> (* A reference to a union *)
-        if n = "" then E.s (error "Missing union tag on incomplete union");
-        findCompType "union" n []
-    | [A.Tunion (n, Some nglist, extraAttrs)] -> (* A definition of a union *)
-        let n' =
-          if n <> "" then n else anonStructName "union" suggestedAnonName in
-        (* Use the attributes now *)
-        let a = extraAttrs @ (getTypeAttrs ()) in
-        makeCompType false n' nglist (doAttributes a)
-
-    | [A.Tenum (n, None, _)] -> (* Just a reference to an enum *)
-        if n = "" then E.s (error "Missing enum tag on incomplete enum");
-        findCompType "enum" n []
-
-    | [A.Tenum (n, Some eil, extraAttrs)] -> (* A definition of an enum *)
-        let n' =
-          if n <> "" then n else anonStructName "enum" suggestedAnonName in
-        (* make a new name for this enumeration *)
-        let n'', _  = newAlphaName true "enum" n' in
-
-        (* Create the enuminfo, or use one that was created already for a
-         * forward reference *)
-        let enum, _ = createEnumInfo n'' in 
-        let a = extraAttrs @ (getTypeAttrs ()) in 
-        enum.eattr <- doAttributes a;
-        let res = TEnum (enum, []) in
-
-        (* sm: start a scope for the enum tag values, since they *
-        * can refer to earlier tags *)
-        enterScope ();
-        
-        (* as each name,value pair is determined, this is called *)
-        let rec processName kname (i: exp) loc rest = begin
-          (* add the name to the environment, but with a faked 'typ' field; 
-           * we don't know the full type yet (since that includes all of the 
-           * tag values), but we won't need them in here  *)
-          addLocalToEnv kname (EnvEnum (i, res));
-          
-          (* add this tag to the list so that it ends up in the real 
-          * environment when we're finished  *)
-          let newname, _  = newAlphaName true "" kname in
-          
-          (kname, (newname, i, loc)) :: loop (increm i 1) rest
-        end
-            
-        and loop i = function
-            [] -> []
-          | (kname, A.NOTHING, cloc) :: rest ->
-              (* use the passed-in 'i' as the value, since none specified *)
-              processName kname i (convLoc cloc) rest
-                
-          | (kname, e, cloc) :: rest ->
-              (* constant-eval 'e' to determine tag value *)
-              let e' = getIntConstExp e in
-              let e' = 
-                match isInteger (constFold true e') with 
-                  Some i -> if !lowerConstants then kinteger64 IInt i else e'
-                | _ -> E.s (error "Constant initializer %a not an integer" d_exp e')
-              in
-              processName kname e' (convLoc cloc) rest
-        in
-        
-        (* sm: now throw away the environment we built for eval'ing the enum 
-        * tags, so we can add to the new one properly  *)
-        exitScope ();
-        
-        let fields = loop zero eil in
-        (* Now set the right set of items *)
-        enum.eitems <- List.map (fun (_, x) -> x) fields;
-        (* Record the enum name in the environment *)
-        addLocalToEnv (kindPlusName "enum" n'') (EnvTyp res);
-        (* And define the tag *)
-        cabsPushGlobal (GEnumTag (enum, !currentLoc));
-        res
-        
-          
-    | [A.TtypeofE e] -> 
-        let (c, e', t) = doExp false e AExpLeaveArrayFun in
-        let t' = 
-          match e' with 
-            StartOf(lv) -> typeOfLval lv
-                (* If this is a string literal, then we treat it as in sizeof*)
-          | Const (CStr s) -> begin
-              match typeOf e' with 
-                TPtr(bt, _) -> (* This is the type of array elements *)
-                  TArray(bt, Some (SizeOfStr s), [])
-              | _ -> E.s (bug "The typeOf a string is not a pointer type")
-          end
-          | _ -> t
-        in
-(*
-        ignore (E.log "typeof(%a) = %a\n" d_exp e' d_plaintype t');
-*)
-        t'
-
-    | [A.TtypeofT (specs, dt)] -> 
-        let typ = doOnlyType specs dt in
-        typ
-
-    | _ -> 
-        E.s (error "Invalid combination of type specifiers")
-  in
-  bt,!storage,!isinline,List.rev (!attrs @ (convertCVtoAttr !cvattrs))
-                                                           
-(* given some cv attributes, convert them into named attributes for
- * uniform processing *)
-and convertCVtoAttr (src: A.cvspec list) : A.attribute list =
-  match src with
-  | [] -> []
-  | CV_CONST    :: tl -> ("const",[])    :: (convertCVtoAttr tl)
-  | CV_VOLATILE :: tl -> ("volatile",[]) :: (convertCVtoAttr tl)
-  | CV_RESTRICT :: tl -> ("restrict",[]) :: (convertCVtoAttr tl)
-
-
-and makeVarInfoCabs 
-                ~(isformal: bool)
-                ~(isglobal: bool) 
-		(ldecl : location)
-                (bt, sto, inline, attrs)
-                (n,ndt,a) 
-      : varinfo = 
-  let vtype, nattr = 
-    doType (AttrName false) bt (A.PARENTYPE(attrs, ndt, a)) in
-  if inline && not (isFunctionType vtype) then
-    ignore (error "inline for a non-function: %s" n);
-  let t = 
-    if not isglobal && not isformal then begin
-      (* Sometimes we call this on the formal argument of a function with no 
-       * arguments. Don't call stripConstLocalType in that case *)
-(*      ignore (E.log "stripConstLocalType(%a) for %s\n" d_type vtype n); *)
-      stripConstLocalType vtype
-    end else 
-      vtype
-  in
-  let vi = makeVarinfo isglobal n t in
-  vi.vstorage <- sto;
-  vi.vattr <- nattr;
-  vi.vdecl <- ldecl;
-
-  if false then 
-    ignore (E.log "Created varinfo %s : %a\n" vi.vname d_type vi.vtype); 
-
-  vi
-
-(* Process a local variable declaration and allow variable-sized arrays *)
-and makeVarSizeVarInfo (ldecl : location)
-                       spec_res
-                       (n,ndt,a)
-   : varinfo * chunk * exp * bool = 
-  if not !msvcMode then 
-    match isVariableSizedArray ndt with
-      None -> 
-        makeVarInfoCabs ~isformal:false 
-                        ~isglobal:false 
-                        ldecl spec_res (n,ndt,a), empty, zero, false
-    | Some (ndt', se, len) -> 
-        makeVarInfoCabs ~isformal:false 
-                        ~isglobal:false 
-                        ldecl spec_res (n,ndt',a), se, len, true
-  else
-    makeVarInfoCabs ~isformal:false
-                    ~isglobal:false 
-                    ldecl spec_res (n,ndt,a), empty, zero, false
-
-and doAttr (a: A.attribute) : attribute list = 
-  (* Strip the leading and trailing underscore *)
-  let stripUnderscore (n: string) : string = 
-    let l = String.length n in
-    let rec start i = 
-      if i >= l then 
-        E.s (error "Invalid attribute name %s" n);
-      if String.get n i = '_' then start (i + 1) else i
-    in
-    let st = start 0 in
-    let rec finish i = 
-      (* We know that we will stop at >= st >= 0 *)
-      if String.get n i = '_' then finish (i - 1) else i
-    in
-    let fin = finish (l - 1) in
-    String.sub n st (fin - st + 1)
-  in
-  match a with
-  | (s, []) -> [Attr (stripUnderscore s, [])]
-  | (s, el) -> 
-      
-      let rec attrOfExp (strip: bool) 
-                        ?(foldenum=true) 
-                        (a: A.expression) : attrparam =
-        match a with
-          A.VARIABLE n -> begin
-            let n' = if strip then stripUnderscore n else n in
-            (** See if this is an enumeration *)
-            try
-              if not foldenum then raise Not_found;
-
-              match H.find env n' with 
-                EnvEnum (tag, _), _ -> begin
-                  match isInteger (constFold true tag) with 
-                    Some i64 when !lowerConstants -> AInt (Int64.to_int i64)
-                  |  _ -> ACons(n', [])
-                end
-              | _ -> ACons (n', [])
-            with Not_found -> ACons(n', [])
-          end
-        | A.CONSTANT (A.CONST_STRING s) -> AStr s
-        | A.CONSTANT (A.CONST_INT str) -> AInt (int_of_string str)
-        | A.CALL(A.VARIABLE n, args) -> begin
-            let n' = if strip then stripUnderscore n else n in
-            let ae' = List.map ae args in
-            ACons(n', ae')
-        end
-        | A.EXPR_SIZEOF e -> ASizeOfE (ae e)
-        | A.TYPE_SIZEOF (bt, dt) -> ASizeOf (doOnlyType bt dt)
-        | A.EXPR_ALIGNOF e -> AAlignOfE (ae e)
-        | A.TYPE_ALIGNOF (bt, dt) -> AAlignOf (doOnlyType bt dt)
-        | A.BINARY(A.AND, aa1, aa2) -> 
-            ABinOp(LAnd, ae aa1, ae aa2)
-        | A.BINARY(A.OR, aa1, aa2) -> 
-            ABinOp(LOr, ae aa1, ae aa2)
-        | A.BINARY(abop, aa1, aa2) -> 
-            ABinOp (convBinOp abop, ae aa1, ae aa2)
-        | A.UNARY(A.PLUS, aa) -> ae aa
-        | A.UNARY(A.MINUS, aa) -> AUnOp (Neg, ae aa)
-        | A.UNARY(A.BNOT, aa) -> AUnOp(BNot, ae aa)
-        | A.UNARY(A.NOT, aa) -> AUnOp(LNot, ae aa)
-        | A.MEMBEROF (e, s) -> ADot (ae e, s)
-        | _ -> 
-            ignore (E.log "Invalid expression in attribute: ");
-            withCprint Cprint.print_expression a;
-            E.s (error "cabs2cil: invalid expression")
-
-      and ae (e: A.expression) = attrOfExp false e in
-
-      (* Sometimes we need to convert attrarg into attr *)
-      let arg2attr = function
-        | ACons (s, args) -> Attr (s, args)
-        | a -> 
-            E.s (error "Invalid form of attribute: %a"
-                   d_attrparam a);
-      in
-      if s = "__attribute__" then (* Just a wrapper for many attributes*)
-        List.map (fun e -> arg2attr (attrOfExp true ~foldenum:false e)) el
-      else if s = "__blockattribute__" then (* Another wrapper *)
-        List.map (fun e -> arg2attr (attrOfExp true ~foldenum:false e)) el
-      else if s = "__declspec" then
-        List.map (fun e -> arg2attr (attrOfExp false ~foldenum:false e)) el
-      else
-        [Attr(stripUnderscore s, List.map (attrOfExp ~foldenum:false false) el)]
-
-and doAttributes (al: A.attribute list) : attribute list =
-  List.fold_left (fun acc a -> cabsAddAttributes (doAttr a) acc) [] al
-
-(* A version of Cil.partitionAttributes that works on CABS attributes.
-   It would  be better to use Cil.partitionAttributes instead to avoid
-   the extra doAttr conversions here, but that's hard to do in doSpecList.*)
-and cabsPartitionAttributes 
-    ~(default:attributeClass)  
-    (attrs:  A.attribute list) :
-    A.attribute list * A.attribute list * A.attribute list = 
-  let rec loop (n,f,t) = function
-      [] -> n, f, t
-    | a :: rest -> 
-        let kind = match doAttr a with 
-            [] -> default
-          | Attr(an, _)::_ -> 
-              (try H.find attributeHash an with Not_found -> default)
-        in
-        match kind with 
-          AttrName _ -> loop (a::n, f, t) rest
-        | AttrFunType _ -> 
-            loop (n, a::f, t) rest
-        | AttrType -> loop (n, f, a::t) rest
-  in
-  loop ([], [], []) attrs
-
-
-
-and doType (nameortype: attributeClass) (* This is AttrName if we are doing 
-                                         * the type for a name, or AttrType 
-                                         * if we are doing this type in a 
-                                         * typedef *)
-           (bt: typ)                    (* The base type *)
-           (dt: A.decl_type) 
-  (* Returns the new type and the accumulated name (or type attribute 
-    if nameoftype =  AttrType) attributes *)
-  : typ * attribute list = 
-
-  (* Now do the declarator type. But remember that the structure of the 
-   * declarator type is as printed, meaning that it is the reverse of the 
-   * right one *)
-  let rec doDeclType (bt: typ) (acc: attribute list) = function
-      A.JUSTBASE -> bt, acc
-    | A.PARENTYPE (a1, d, a2) -> 
-        let a1' = doAttributes a1 in
-        let a1n, a1f, a1t = partitionAttributes AttrType a1' in
-        let a2' = doAttributes a2 in
-        let a2n, a2f, a2t = partitionAttributes nameortype a2' in
-(*
-        ignore (E.log "doType: %a @[a1n=%a@!a1f=%a@!a1t=%a@!a2n=%a@!a2f=%a@!a2t=%a@]@!" d_loc !currentLoc d_attrlist a1n d_attrlist a1f d_attrlist a1t d_attrlist a2n d_attrlist a2f d_attrlist a2t);
-*)
-        let bt' = cabsTypeAddAttributes a1t bt in
-(*
-        ignore (E.log "bt' = %a\n" d_type bt');
-*)
-        let bt'', a1fadded = 
-          match unrollType bt with 
-            TFun _ -> cabsTypeAddAttributes a1f bt', true
-          | _ -> bt', false
-        in
-        (* Now recurse *)
-        let restyp, nattr = doDeclType bt'' acc d in
-        (* Add some more type attributes *)
-        let restyp = cabsTypeAddAttributes a2t restyp in
-        (* See if we can add some more type attributes *)
-        let restyp' = 
-          match unrollType restyp with 
-            TFun _ -> 
-              if a1fadded then
-                cabsTypeAddAttributes a2f restyp
-              else
-                cabsTypeAddAttributes a2f
-                  (cabsTypeAddAttributes a1f restyp)
-          | TPtr ((TFun _ as tf), ap) when not !msvcMode ->
-              if a1fadded then
-                TPtr(cabsTypeAddAttributes a2f tf, ap)
-              else
-                TPtr(cabsTypeAddAttributes a2f
-                       (cabsTypeAddAttributes a1f tf), ap)
-          | _ -> 
-              if a1f <> [] && not a1fadded then
-                E.s (error "Invalid position for (prefix) function type attributes:%a" 
-                       d_attrlist a1f);
-              if a2f <> [] then
-                E.s (error "Invalid position for (post) function type attributes:%a"
-                       d_attrlist a2f);
-              restyp
-        in
-(*
-           ignore (E.log "restyp' = %a\n" d_type restyp');
-*)
-        (* Now add the name attributes and return *)
-        restyp', cabsAddAttributes a1n (cabsAddAttributes a2n nattr)
-
-    | A.PTR (al, d) -> 
-        let al' = doAttributes al in
-        let an, af, at = partitionAttributes AttrType al' in
-        (* Now recurse *)
-        let restyp, nattr = doDeclType (TPtr(bt, at)) acc d in
-        (* See if we can do anything with function type attributes *)
-        let restyp' = 
-          match unrollType restyp with
-            TFun _ -> cabsTypeAddAttributes af restyp
-          | TPtr((TFun _ as tf), ap) ->
-              TPtr(cabsTypeAddAttributes af tf, ap)
-          | _ -> 
-              if af <> [] then
-                E.s (error "Invalid position for function type attributes:%a"
-                       d_attrlist af);
-              restyp
-        in
-        (* Now add the name attributes and return *)
-        restyp', cabsAddAttributes an nattr
-              
-
-    | A.ARRAY (d, al, len) -> 
-        let lo = 
-          match len with 
-            A.NOTHING -> None 
-          | _ -> 
-              let len' = doPureExp len in
-              let _, len'' = castTo (typeOf len') intType len' in
-              let elsz = 
-                try (bitsSizeOf bt + 7) / 8
-                with _ -> 1 (** We get this if we cannot compute the size of 
-                             * one element. This can happen, when we define 
-                             * an extern, for example. We use 1 for now *)
-              in 
-              (match constFold true len' with 
-                Const(CInt64(i, _, _)) ->
-                  if i < 0L then 
-                    E.s (error "Length of array is negative\n");
-                  if Int64.mul i (Int64.of_int elsz) >= 0x80000000L then 
-                    E.s (error "Length of array is too large\n")
-           
-
-                | l -> 
-                    if isConstant l then 
-                      (* e.g., there may be a float constant involved. 
-                       * We'll leave it to the user to ensure the length is
-                       * non-negative, etc.*)
-                      ignore(warn "Unable to do constant-folding on array length %a.  Some CIL operations on this array may fail."
-                               d_exp l)
-                    else 
-                      E.s (error "Length of array is not a constant: %a\n"
-                             d_exp l));
-              Some len''
-        in
-	let al' = doAttributes al in
-        doDeclType (TArray(bt, lo, al')) acc d
-
-    | A.PROTO (d, args, isva) -> 
-        (* Start a scope for the parameter names *)
-        enterScope ();
-        (* Intercept the old-style use of varargs.h. On GCC this means that 
-         * we have ellipsis and a last argument "builtin_va_alist: 
-         * builtin_va_alist_t". On MSVC we do not have the ellipsis and we 
-         * have a last argument "va_alist: va_list" *)
-        let args', isva' = 
-          if args != [] && !msvcMode = not isva then begin
-            let newisva = ref isva in 
-            let rec doLast = function
-                [([A.SpecType (A.Tnamed atn)], (an, A.JUSTBASE, [], _))] 
-                  when isOldStyleVarArgTypeName atn && 
-                       isOldStyleVarArgName an -> begin
-                         (* Turn it into a vararg *)
-                         newisva := true;
-                         (* And forget about this argument *)
-                         []
-                       end
-                         
-              | a :: rest -> a :: doLast rest
-              | [] -> []
-            in
-            let args' = doLast args in
-            (args', !newisva)
-          end else (args, isva)
-        in
-        (* Make the argument as for a formal *)
-        let doOneArg (s, (n, ndt, a, cloc)) : varinfo = 
-          let s' = doSpecList n s in
-          let ndt' =  match isVariableSizedArray ndt with
-              None -> ndt
-            | Some (ndt', se, len) -> 
-                (* If this is a variable-sized array, we replace the array
-                   type with a pointer type.  This is the defined behavior
-                   for array parameters, so we do not need to add this to
-                   varSizeArrays, fix sizeofs, etc. *)
-                if isNotEmpty se then
-                  E.s (error "array parameter: length not pure");
-                ndt'
-          in              
-          let vi = makeVarInfoCabs ~isformal:true ~isglobal:false 
-                     (convLoc cloc) s' (n,ndt',a) in
-          (* Add the formal to the environment, so it can be referenced by
-             other formals  (e.g. in an array type, although that will be
-             changed to a pointer later, or though typeof).  *) 
-          addLocalToEnv vi.vname (EnvVar vi);
-          vi
-        in
-        let targs : varinfo list option = 
-          match List.map doOneArg args'  with
-          | [] -> None (* No argument list *)
-          | [t] when isVoidType t.vtype -> 
-              Some []
-          | l -> Some l
-        in
-        exitScope ();
-        (* Turn [] types into pointers in the arguments and the result type. 
-         * Turn function types into pointers to respective. This simplifies 
-         * our life a lot, and is what the standard requires. *)
-        let rec fixupArgumentTypes (argidx: int) (args: varinfo list) : unit = 
-          match args with
-            [] -> ()
-          | a :: args' -> 
-              (match unrollType a.vtype with
-                TArray(t,_,attr) -> a.vtype <- TPtr(t, attr)
-              | TFun _ -> a.vtype <- TPtr(a.vtype, [])
-              | TComp (comp, _) -> begin
-                  match isTransparentUnion a.vtype with
-                    None ->  ()
-                  | Some fstfield -> 
-                      transparentUnionArgs := 
-                         (argidx, a.vtype) :: !transparentUnionArgs;
-                      a.vtype <- fstfield.ftype;
-              end
-              | _ -> ());
-              fixupArgumentTypes (argidx + 1) args'
-        in
-        let args = 
-          match targs with 
-            None -> None
-          | Some argl -> 
-              fixupArgumentTypes 0 argl;
-              Some (List.map (fun a -> (a.vname, a.vtype, a.vattr)) argl)
-        in
-        let tres = 
-          match unrollType bt with
-            TArray(t,_,attr) -> TPtr(t, attr)
-          | _ -> bt
-        in
-        doDeclType (TFun (tres, args, isva', [])) acc d
-
-  in
-  doDeclType bt [] dt
-
-(* If this is a declarator for a variable size array then turn it into a 
-   pointer type and a length *)
-and isVariableSizedArray (dt: A.decl_type) 
-    : (A.decl_type * chunk * exp) option = 
-  let res = ref None in
-  let rec findArray = function
-    ARRAY (JUSTBASE, al, lo) when lo != A.NOTHING -> 
-      (* Try to compile the expression to a constant *)
-      let (se, e', _) = doExp true lo (AExp (Some intType)) in
-      if isNotEmpty se || not (isConstant e') then begin
-        res := Some (se, e');
-        PTR (al, JUSTBASE)
-      end else 
-        ARRAY (JUSTBASE, al, lo)
-    | ARRAY (dt, al, lo) -> ARRAY (findArray dt, al, lo)
-    | PTR (al, dt) -> PTR (al, findArray dt)
-    | JUSTBASE -> JUSTBASE
-    | PARENTYPE (prea, dt, posta) -> PARENTYPE (prea, findArray dt, posta)
-    | PROTO (dt, f, a) -> PROTO (findArray dt, f, a)
-  in
-  let dt' = findArray dt in
-  match !res with 
-    None -> None
-  | Some (se, e) -> Some (dt', se, e)
-
-and doOnlyType (specs: A.spec_elem list) (dt: A.decl_type) : typ = 
-  let bt',sto,inl,attrs = doSpecList "" specs in
-  if sto <> NoStorage || inl then
-    E.s (error "Storage or inline specifier in type only");
-  let tres, nattr = doType AttrType bt' (A.PARENTYPE(attrs, dt, [])) in
-  if nattr <> [] then
-    E.s (error "Name attributes in only_type: %a"
-           d_attrlist nattr);
-  tres
-
-
-and makeCompType (isstruct: bool)
-                 (n: string)
-                 (nglist: A.field_group list) 
-                 (a: attribute list) = 
-  (* Make a new name for the structure *)
-  let kind = if isstruct then "struct" else "union" in
-  let n', _  = newAlphaName true kind n in
-  (* Create the self cell for use in fields and forward references. Or maybe 
-   * one exists already from a forward reference  *)
-  let comp, _ = createCompInfo isstruct n' in
-  let doFieldGroup ((s: A.spec_elem list), 
-                    (nl: (A.name * A.expression option) list)) : 'a list =
-    (* Do the specifiers exactly once *)
-    let sugg = match nl with 
-      [] -> ""
-    | ((n, _, _, _), _) :: _ -> n
-    in
-    let bt, sto, inl, attrs = doSpecList sugg s in
-    (* Do the fields *)
-    let makeFieldInfo
-        (((n,ndt,a,cloc) : A.name), (widtho : A.expression option))
-      : fieldinfo = 
-      if sto <> NoStorage || inl then 
-        E.s (error "Storage or inline not allowed for fields");
-      let ftype, nattr = 
-        doType (AttrName false) bt (A.PARENTYPE(attrs, ndt, a)) in 
-      (* check for fields whose type is an undefined struct.  This rules
-         out circularity:
-             struct C1 { struct C2 c2; };          //This line is now an error.
-             struct C2 { struct C1 c1; int dummy; };
-       *)
-      (match unrollType ftype with
-         TComp (ci',_) when not ci'.cdefined ->
-           E.s (error "Type of field %s is an undefined struct.\n" n)
-       | _ -> ());
-      let width = 
-        match widtho with 
-          None -> None
-        | Some w -> begin
-            (match unrollType ftype with
-              TInt (ikind, a) -> ()
-            | TEnum _ -> ()
-            | _ -> E.s (error "Base type for bitfield is not an integer type"));
-            match isIntegerConstant w with
-                Some n -> Some n
-              | None -> E.s (error "bitfield width is not an integer constant")
-	  end
-      in
-      (* If the field is unnamed and its type is a structure of union type 
-       * then give it a distinguished name  *)
-      let n' = 
-        if n = missingFieldName then begin
-          match unrollType ftype with 
-            TComp _ -> begin
-              incr annonCompFieldNameId;
-              annonCompFieldName ^ (string_of_int !annonCompFieldNameId)
-            end 
-          | _ -> n
-        end else
-          n
-      in
-      { fcomp     =  comp;
-        fname     =  n';
-        ftype     =  ftype;
-        fbitfield =  width;
-        fattr     =  nattr;
-        floc      =  convLoc cloc
-      } 
-    in
-    List.map makeFieldInfo nl
-  in
-
-
-  let flds = List.concat (List.map doFieldGroup nglist) in
-  if comp.cfields <> [] then begin
-    (* This appears to be a multiply defined structure. This can happen from 
-    * a construct like "typedef struct foo { ... } A, B;". This is dangerous 
-    * because at the time B is processed some forward references in { ... } 
-    * appear as backward references, which coild lead to circularity in 
-    * the type structure. We do a thourough check and then we reuse the type 
-    * for A *)
-    let fieldsSig fs = List.map (fun f -> typeSig f.ftype) fs in 
-    if not (Util.equals (fieldsSig comp.cfields) (fieldsSig flds)) then
-      ignore (error "%s seems to be multiply defined" (compFullName comp))
-  end else 
-    comp.cfields <- flds;
-
-(*  ignore (E.log "makeComp: %s: %a\n" comp.cname d_attrlist a); *)
-  comp.cattr <- a;
-  let res = TComp (comp, []) in
-  (* This compinfo is defined, even if there are no fields *)
-  comp.cdefined <- true;
-  (* Create a typedef for this one *)
-  cabsPushGlobal (GCompTag (comp, !currentLoc));
-
-      (* There must be a self cell created for this already *)
-  addLocalToEnv (kindPlusName kind n) (EnvTyp res);
-  (* Now create a typedef with just this type *)
-  res
-
-and preprocessCast (specs: A.specifier) 
-                   (dt: A.decl_type) 
-                   (ie: A.init_expression) 
-  : A.specifier * A.decl_type * A.init_expression = 
-  let typ = doOnlyType specs dt in
-  (* If we are casting to a union type then we have to treat this as a 
-   * constructor expression. This is to handle the gcc extension that allows 
-   * cast from a type of a field to the type of the union  *)
-  let ie' = 
-    match unrollType typ, ie with
-      TComp (c, _), A.SINGLE_INIT _ when not c.cstruct -> 
-        A.COMPOUND_INIT [(A.INFIELD_INIT ("___matching_field", 
-                                          A.NEXT_INIT), 
-                          ie)]
-    | _, _ -> ie
-  in
-  (* Maybe specs contains an unnamed composite. Replace with the name so that 
-   * when we do again the specs we get the right name  *)
-  let specs1 = 
-    match typ with
-      TComp (ci, _) -> 
-        List.map 
-          (function 
-              A.SpecType (A.Tstruct ("", flds, [])) -> 
-                A.SpecType (A.Tstruct (ci.cname, None, []))
-            | A.SpecType (A.Tunion ("", flds, [])) ->
-                A.SpecType (A.Tunion (ci.cname, None, []))
-            | s -> s) specs
-    | _ -> specs
-  in
-  specs1, dt, ie' 
-
-and getIntConstExp (aexp) : exp =
-  let c, e, _ = doExp true aexp (AExp None) in 
-  if not (isEmpty c) then 
-    E.s (error "Constant expression %a has effects" d_exp e);
-  match e with 
-    (* first, filter for those Const exps that are integers *)
-  | Const (CInt64 _ ) -> e
-  | Const (CEnum _) -> e
-  | Const (CChr i) -> Const(charConstToInt i)
-
-        (* other Const expressions are not ok *)
-  | Const _ -> E.s (error "Expected integer constant and got %a" d_exp e)
-        
-    (* now, anything else that 'doExp true' returned is ok (provided
-       that it didn't yield side effects); this includes, in particular,
-       the various sizeof and alignof expression kinds *)
-  | _ -> e
-
-(* this is like 'isIntConstExp', but retrieves the actual integer
- * the expression denotes; I have not extended it to work with
- * sizeof/alignof since (for CCured) we can't const-eval those,
- * and it's not clear whether they can be bitfield width specifiers
- * anyway (since that's where this function is used) *)
-and isIntegerConstant (aexp) : int option =
-  match doExp true aexp (AExp None) with
-    (c, e, _) when isEmpty c -> begin
-      match isInteger e with 
-        Some i64 -> Some (Int64.to_int i64)
-      | _ -> None
-    end
-  | _ -> None
-        
-     (* Process an expression and in the process do some type checking,
-      * extract the effects as separate statements  *)
-and doExp (asconst: bool)   (* This expression is used as a constant *)
-          (e: A.expression) 
-          (what: expAction) : (chunk * exp * typ) = 
-  (* A subexpression of array type is automatically turned into StartOf(e). 
-   * Similarly an expression of function type is turned into AddrOf. So 
-   * essentially doExp should never return things of type TFun or TArray *)
-  let processArrayFun e t = 
-    match e, unrollType t with
-      (Lval(lv) | CastE(_, Lval lv)), TArray(tbase, _, a) -> 
-        mkStartOfAndMark lv, TPtr(tbase, a)
-    | (Lval(lv) | CastE(_, Lval lv)), TFun _  -> 
-        mkAddrOfAndMark lv, TPtr(t, [])
-    | _, (TArray _ | TFun _) -> 
-        E.s (error "Array or function expression is not lval: %a@!"
-               d_plainexp e)
-    | _ -> e, t
-  in
-  (* Before we return we call finishExp *)
-  let finishExp ?(newWhat=what) 
-                (se: chunk) (e: exp) (t: typ) : chunk * exp * typ = 
-    match newWhat with 
-      ADrop -> (se, e, t)
-    | AExpLeaveArrayFun -> 
-        (se, e, t) (* It is important that we do not do "processArrayFun" in 
-                    * this case. We exploit this when we process the typeOf 
-                    * construct *)
-    | AExp _ -> 
-        let (e', t') = processArrayFun e t in
-(*
-        ignore (E.log "finishExp: e'=%a, t'=%a\n" 
-           d_exp e' d_type t');
-*)
-        (se, e', t')
-
-    | ASet (lv, lvt) -> begin
-        (* See if the set was done already *)
-        match e with 
-          Lval(lv') when lv == lv' -> 
-            (se, e, t)
-        | _ -> 
-            let (e', t') = processArrayFun e t in
-            let (t'', e'') = castTo t' lvt e' in
-(*
-            ignore (E.log "finishExp: e = %a\n  e'' = %a\n" d_plainexp e d_plainexp e'');
-*)
-            (se +++ (Set(lv, e'', !currentLoc)), e'', t'')
-    end
-  in
-  let rec findField (n: string) (fidlist: fieldinfo list) : offset =
-    (* Depth first search for the field. This appears to be what GCC does. 
-     * MSVC checks that there are no ambiguous field names, so it does not 
-     * matter how we search *)
-    let rec search = function
-        [] -> NoOffset (* Did not find *)
-      | fid :: rest when fid.fname = n -> Field(fid, NoOffset)
-      | fid :: rest when prefix annonCompFieldName fid.fname -> begin
-          match unrollType fid.ftype with 
-            TComp (ci, _) -> 
-              let off = search ci.cfields in
-              if off = NoOffset then 
-                search rest  (* Continue searching *)
-              else
-                Field (fid, off)
-          | _ -> E.s (bug "unnamed field type is not a struct/union")
-      end
-      | _ :: rest -> search rest
-    in
-    let off = search fidlist in
-    if off = NoOffset then 
-      E.s (error "Cannot find field %s" n);
-    off
-  in
-  try
-    match e with
-    | A.NOTHING when what = ADrop -> finishExp empty (integer 0) intType
-    | A.NOTHING ->
-        let res = Const(CStr "exp_nothing") in
-        finishExp empty res (typeOf res)
-
-    (* Do the potential lvalues first *)
-    | A.VARIABLE n -> begin
-        (* Look up in the environment *)
-        try
-          let envdata = H.find env n in
-          match envdata with
-            EnvVar vi, _ ->
-              (* if isconst && 
-                 not (isFunctionType vi.vtype) && 
-                 not (isArrayType vi.vtype)then
-                E.s (error "variable appears in constant"); *)
-              finishExp empty (Lval(var vi)) vi.vtype
-          | EnvEnum (tag, typ), _ ->
-              if !Cil.lowerConstants then 
-                finishExp empty tag typ
-              else begin
-                let ei = 
-                  match unrollType typ with 
-                    TEnum(ei, _) -> ei
-                  | _ -> assert false
-                in
-                finishExp empty (Const (CEnum(tag, n, ei))) typ
-              end
-
-          | _ -> raise Not_found
-        with Not_found -> begin
-          if isOldStyleVarArgName n then 
-            E.s (error "Cannot resolve variable %s. This could be a CIL bug due to the handling of old-style variable argument functions.\n" n)
-          else 
-            E.s (error "Cannot resolve variable %s.\n" n)
-        end
-    end
-    | A.INDEX (e1, e2) -> begin
-        (* Recall that doExp turns arrays into StartOf pointers *)
-        let (se1, e1', t1) = doExp false e1 (AExp None) in
-        let (se2, e2', t2) = doExp false e2 (AExp None) in
-        let se = se1 @@ se2 in
-        let (e1'', t1, e2'', tresult) =
-          (* Either e1 or e2 can be the pointer *)
-          match unrollType t1, unrollType t2 with
-            TPtr(t1e,_), (TInt _|TEnum _) -> e1', t1, e2', t1e
-          | (TInt _|TEnum _), TPtr(t2e,_) -> e2', t2, e1', t2e
-          | _ -> 
-              E.s (error 
-                     "Expecting a pointer type in index:@! t1=%a@!t2=%a@!"
-                     d_plaintype t1 d_plaintype t2)
-        in
-        (* We have to distinguish the construction based on the type of e1'' *)
-        let res = 
-          match e1'' with 
-            StartOf array -> (* A real array indexing operation *)
-              addOffsetLval (Index(e2'', NoOffset)) array
-          | _ -> (* Turn into *(e1 + e2) *)
-              mkMem (BinOp(IndexPI, e1'', e2'', t1)) NoOffset
-        in
-        (* Do some optimization of StartOf *)
-        finishExp se (Lval res) tresult
-
-    end      
-    | A.UNARY (A.MEMOF, e) -> 
-        if asconst then
-          ignore (warn "MEMOF in constant");
-        let (se, e', t) = doExp false e (AExp None) in
-        let tresult = 
-          match unrollType t with
-          | TPtr(te, _) -> te
-          | _ -> E.s (error "Expecting a pointer type in *. Got %a@!"
-                        d_plaintype t)
-        in
-        finishExp se 
-                  (Lval (mkMem e' NoOffset))
-                  tresult
-
-           (* e.str = (& e + off(str)). If e = (be + beoff) then e.str = (be 
-            * + beoff + off(str))  *)
-    | A.MEMBEROF (e, str) -> 
-        (* member of is actually allowed if we only take the address *)
-        (* if isconst then
-          E.s (error "MEMBEROF in constant");  *)
-        let (se, e', t') = doExp false e (AExp None) in
-        let lv = 
-          match e' with 
-            Lval x -> x 
-          | CastE(_, Lval x) -> x
-          | _ -> E.s (error "Expected an lval in MEMBEROF (field %s)" str)
-        in
-        let field_offset = 
-          match unrollType t' with
-            TComp (comp, _) -> findField str comp.cfields
-          | _ -> E.s (error "expecting a struct with field %s" str)
-        in
-        let lv' = Lval(addOffsetLval field_offset lv) in
-	let field_type = typeOf lv' in
-        finishExp se lv' field_type
-          
-       (* e->str = * (e + off(str)) *)
-    | A.MEMBEROFPTR (e, str) -> 
-        if asconst then
-          ignore (warn "MEMBEROFPTR in constant");
-        let (se, e', t') = doExp false e (AExp None) in
-        let pointedt = 
-          match unrollType t' with
-            TPtr(t1, _) -> t1
-          | TArray(t1,_,_) -> t1
-          | _ -> E.s (error "expecting a pointer to a struct")
-        in
-        let field_offset = 
-          match unrollType pointedt with 
-            TComp (comp, _) -> findField str comp.cfields
-          | x -> 
-              E.s (error 
-                     "expecting a struct with field %s. Found %a. t1 is %a" 
-                     str d_type x d_type t')
-        in
-	let lv' = Lval (mkMem e' field_offset) in
-	let field_type = typeOf lv' in
-        finishExp se lv' field_type
-          
-    | A.CONSTANT ct -> begin
-        let hasSuffix str = 
-          let l = String.length str in
-          fun s -> 
-            let ls = String.length s in
-            l >= ls && s = String.uppercase (String.sub str (l - ls) ls)
-        in
-        match ct with 
-          A.CONST_INT str -> begin
-            let res = parseInt str in
-            finishExp empty res (typeOf res)
-          end
-
-(*
-        | A.CONST_WSTRING wstr ->
-            let len = List.length wstr in 
-            let wchar_t = !wcharType in
-            (* We will make an array big enough to contain the wide 
-             * characters and the wide-null terminator *)
-            let ws_t = TArray(wchar_t, Some (integer len), []) in
-            let ws = 
-              makeGlobalVar ("wide_string" ^ string_of_int !lastStructId)
-                ws_t
-            in
-            ws.vstorage <- Static;
-            incr lastStructId;
-            (* Make the initializer. Idx is a wide_char index.  *)
-            let rec loop (idx: int) (s: int64 list) = 
-	      match s with
-		[] -> []
-	      | wc::rest ->
-		  let wc_cilexp = Const (CInt64(wc, IInt, None)) in
-                  (Index(integer idx, NoOffset), 
-                   SingleInit (mkCast wc_cilexp wchar_t))
-                  :: loop (idx + 1) rest
-            in
-            (* Add the definition for the array *)
-            cabsPushGlobal (GVar(ws, 
-                                 {init = Some (CompoundInit(ws_t,
-                                                            loop 0 wstr))},
-                                 !currentLoc));
-            finishExp empty (StartOf(Var ws, NoOffset))
-              (TPtr(wchar_t, []))
-              *)
-
-        | A.CONST_WSTRING (ws: int64 list) -> 
-            let res = Const(CWStr ((* intlist_to_wstring *) ws)) in
-            finishExp empty res (typeOf res)
-
-        | A.CONST_STRING s -> 
-            (* Maybe we burried __FUNCTION__ in there *)
-            let s' = 
-              try
-                let start = String.index s (Char.chr 0) in
-                let l = String.length s in
-                let tofind = (String.make 1 (Char.chr 0)) ^ "__FUNCTION__" in
-                let past = start + String.length tofind in
-                if past <= l &&
-                   String.sub s start (String.length tofind) = tofind then
-                  (if start > 0 then String.sub s 0 start else "") ^
-                  !currentFunctionFDEC.svar.vname ^
-                  (if past < l then String.sub s past (l - past) else "")
-                else
-                  s
-              with Not_found -> s
-            in
-            let res = Const(CStr s') in
-            finishExp empty res (typeOf res)
-              
-        | A.CONST_CHAR char_list ->
-            let a, b = (interpret_character_constant char_list) in 
-            finishExp empty (Const a) b 
-              
-        | A.CONST_WCHAR char_list ->
-            (* matth: I can't see a reason for a list of more than one char
-             * here, since the kinteger64 below will take only the lower 16
-             * bits of value.  ('abc' makes sense, because CHAR constants have
-             * type int, and so more than one char may be needed to represent 
-             * the value.  But L'abc' has type wchar, and so is equivalent to 
-             * L'c').  But gcc allows L'abc', so I'll leave this here in case
-             * I'm missing some architecture dependent behavior. *)
-	    let value = reduce_multichar !wcharType char_list in
-	    let result = kinteger64 !wcharKind value in
-            finishExp empty result (typeOf result)
-              
-        | A.CONST_FLOAT str -> begin
-            (* Maybe it ends in U or UL. Strip those *)
-            let l = String.length str in
-            let hasSuffix = hasSuffix str in
-            let baseint, kind = 
-              if  hasSuffix "L" then
-                String.sub str 0 (l - 1), FLongDouble
-              else if hasSuffix "F" then
-                String.sub str 0 (l - 1), FFloat
-              else if hasSuffix "D" then
-                String.sub str 0 (l - 1), FDouble
-              else
-                str, FDouble
-            in
-            try
-              finishExp empty 
-                (Const(CReal(float_of_string baseint, kind,
-                             Some str)))
-                (TFloat(kind,[]))
-            with e -> begin
-              ignore (E.log "float_of_string %s (%s)\n" str 
-                        (Printexc.to_string e));
-              let res = Const(CStr "booo CONS_FLOAT") in
-              finishExp empty res (typeOf res)
-            end
-        end
-    end          
-
-    | A.TYPE_SIZEOF (bt, dt) ->
-        let typ = doOnlyType bt dt in
-        finishExp empty (SizeOf(typ)) !typeOfSizeOf
-
-      (* Intercept the sizeof("string") *)
-    | A.EXPR_SIZEOF (A.CONSTANT (A.CONST_STRING s)) -> begin
-        (* Process the string first *)
-        match doExp asconst (A.CONSTANT (A.CONST_STRING s)) (AExp None) with 
-          _, Const(CStr s), _ -> 
-            finishExp empty (SizeOfStr s) !typeOfSizeOf
-        | _ -> E.s (bug "cabs2cil: sizeOfStr")
-    end
-
-    | A.EXPR_SIZEOF e ->
-        (* Allow non-constants in sizeof *)
-        (* Do not convert arrays and functions into pointers. *)
-        let (se, e', t) = doExp false e AExpLeaveArrayFun in
-(*
-        ignore (E.log "sizeof: %a e'=%a, t=%a\n"
-                  d_loc !currentLoc d_plainexp e' d_type t);
-*)
-        (* !!!! The book says that the expression is not evaluated, so we
-           * drop the potential side-effects 
-        if isNotEmpty se then
-          ignore (warn "Warning: Dropping side-effect in EXPR_SIZEOF\n");
-*)
-        let size =
-          match e' with                 (* If we are taking the sizeof an
-                                         * array we must drop the StartOf  *)
-            StartOf(lv) -> SizeOfE (Lval(lv))
-
-                (* Maybe we are taking the sizeof for a CStr. In that case we 
-                 * mean the pointer to the start of the string *)
-          | Const(CStr _) -> SizeOf (charPtrType)
-
-                (* Maybe we are taking the sizeof a variable-sized array *)
-          | Lval (Var vi, NoOffset) -> begin
-              try 
-                IH.find varSizeArrays vi.vid 
-              with Not_found -> SizeOfE e' 
-          end
-          | _ -> SizeOfE e'
-        in
-        finishExp empty size !typeOfSizeOf
-
-    | A.TYPE_ALIGNOF (bt, dt) ->
-        let typ = doOnlyType bt dt in
-        finishExp empty (AlignOf(typ)) !typeOfSizeOf
-
-    | A.EXPR_ALIGNOF e ->
-        let (se, e', t) = doExp false e AExpLeaveArrayFun in
-        (* !!!! The book says that the expression is not evaluated, so we
-           * drop the potential side-effects 
-        if isNotEmpty se then
-          ignore (warn "Warning: Dropping side-effect in EXPR_ALIGNOF\n");
-*)
-        let e'' =
-          match e' with                 (* If we are taking the alignof an
-                                         * array we must drop the StartOf  *)
-            StartOf(lv) -> Lval(lv)
-
-          | _ -> e'
-        in
-        finishExp empty (AlignOfE(e'')) !typeOfSizeOf
-
-    | A.CAST ((specs, dt), ie) ->
-        let s', dt', ie' = preprocessCast specs dt ie in
-        (* We know now that we can do s' and dt' many times *)
-        let typ = doOnlyType s' dt' in
-        let what' =
-          match what with
-            AExp (Some _) -> AExp (Some typ)
-          | AExp None -> what
-          | ADrop | AExpLeaveArrayFun -> what
-          | ASet (lv, lvt) -> 
-              (* If the cast from typ to lvt would be dropped, then we 
-               * continue with a Set *)
-              if false && Util.equals (typeSig typ) (typeSig lvt) then 
-                what
-              else
-                AExp None (* We'll create a temporary *)
-        in
-        (* Remember here if we have done the Set *)
-        let (se, e', t'), (needcast: bool) = 
-          match ie' with
-            A.SINGLE_INIT e -> doExp asconst e what', true
-
-          | A.NO_INIT -> E.s (error "missing expression in cast")
-
-          | A.COMPOUND_INIT _ -> begin
-              (* Pretend that we are declaring and initializing a brand new 
-               * variable  *)
-              let newvar = "__constr_expr_" ^ string_of_int (!constrExprId) in
-              incr constrExprId;
-              let spec_res = doSpecList "" s' in
-              let se1 = 
-                if !scopes == [] then begin
-                  ignore (createGlobal spec_res 
-                            ((newvar, dt', [], cabslu), ie'));
-                  empty
-                end else
-                  createLocal spec_res ((newvar, dt', [], cabslu), ie') 
-              in
-              (* Now pretend that e is just a reference to the newly created 
-               * variable *)
-              let se, e', t' = doExp asconst (A.VARIABLE newvar) what' in
-              (* If typ is an array then the doExp above has already added a 
-               * StartOf. We must undo that now so that it is done once by 
-               * the finishExp at the end of this case *)
-              let e2, t2 = 
-                match unrollType typ, e' with
-                  TArray _, StartOf lv -> Lval lv, typ
-                | _, _ -> e', t'
-              in
-              (* If we are here, then the type t2 is guaranteed to match the 
-               * type of the expression e2, so we do not need a cast. We have 
-               * to worry about this because otherwise, we might need to cast 
-               * between arrays or structures. *)
-              (se1 @@ se, e2, t2), false
-          end
-        in
-        let (t'', e'') = 
-          match typ with
-            TVoid _ when what' = ADrop -> (t', e') (* strange GNU thing *)
-          |  _ -> 
-              (* Do this to check the cast, unless we are sure that we do not 
-               * need the check. *)
-              let newtyp, newexp = 
-                if needcast then 
-                  castTo ~fromsource:true t' typ e' 
-                else
-                  t', e'
-              in
-              newtyp, newexp
-        in
-        finishExp se e'' t''
-          
-    | A.UNARY(A.MINUS, e) -> 
-        let (se, e', t) = doExp asconst e (AExp None) in
-        if isIntegralType t then
-          let tres = integralPromotion t in
-          let e'' = 
-            match e' with
-            | Const(CInt64(i, ik, _)) -> kinteger64 ik (Int64.neg i)
-            | _ -> UnOp(Neg, mkCastT e' t tres, tres)
-          in
-          finishExp se e'' tres
-        else
-          if isArithmeticType t then
-            finishExp se (UnOp(Neg,e',t)) t
-          else
-            E.s (error "Unary - on a non-arithmetic type")
-        
-    | A.UNARY(A.BNOT, e) -> 
-        let (se, e', t) = doExp asconst e (AExp None) in
-        if isIntegralType t then
-          let tres = integralPromotion t in
-          let e'' = UnOp(BNot, mkCastT e' t tres, tres) in
-          finishExp se e'' tres
-        else
-          E.s (error "Unary ~ on a non-integral type")
-          
-    | A.UNARY(A.PLUS, e) -> doExp asconst e what 
-          
-          
-    | A.UNARY(A.ADDROF, e) -> begin
-        match e with 
-          A.COMMA el -> (* GCC extension *)
-            doExp false 
-              (A.COMMA (replaceLastInList el (fun e -> A.UNARY(A.ADDROF, e))))
-              what
-        | A.QUESTION (e1, e2, e3) -> (* GCC extension *)
-            doExp false 
-              (A.QUESTION (e1, A.UNARY(A.ADDROF, e2), A.UNARY(A.ADDROF, e3)))
-              what
-        | A.VARIABLE s when 
-            isOldStyleVarArgName s 
-            && (match !currentFunctionFDEC.svar.vtype with 
-                   TFun(_, _, true, _) -> true | _ -> false) ->
-            (* We are in an old-style variable argument function and we are 
-             * taking the address of the argument that was removed while 
-             * processing the function type. We compute the address based on 
-             * the address of the last real argument *)
-            if !msvcMode then begin
-              let rec getLast = function
-                  [] -> E.s (unimp "old-style variable argument function without real arguments")
-                | [a] -> a
-                | _ :: rest -> getLast rest 
-              in
-              let last = getLast !currentFunctionFDEC.sformals in
-              let res = mkAddrOfAndMark (var last) in
-              let tres = typeOf res in
-              let tres', res' = castTo tres (TInt(IULong, [])) res in
-              (* Now we must add to this address to point to the next 
-              * argument. Round up to a multiple of 4  *)
-              let sizeOfLast = 
-                (((bitsSizeOf last.vtype) + 31) / 32) * 4
-              in
-              let res'' = 
-                BinOp(PlusA, res', kinteger IULong sizeOfLast, tres')
-              in
-              finishExp empty res'' tres'
-            end else begin (* On GCC the only reliable way to do this is to 
-                          * call builtin_next_arg. If we take the address of 
-                          * a local we are going to get the address of a copy 
-                          * of the local ! *)
-                
-              doExp asconst
-                (A.CALL (A.VARIABLE "__builtin_next_arg", 
-                         [A.CONSTANT (A.CONST_INT "0")]))
-                what
-            end
-
-        | (A.VARIABLE _ | A.UNARY (A.MEMOF, _) | (* Regular lvalues *)
-           A.INDEX _ | A.MEMBEROF _ | A.MEMBEROFPTR _ | 
-           A.CAST (_, A.COMPOUND_INIT _)) -> begin
-            let (se, e', t) = doExp false e (AExp None) in
-            (* ignore (E.log "ADDROF on %a : %a\n" d_plainexp e'
-                      d_plaintype t); *)
-            match e' with 
-             ( Lval x | CastE(_, Lval x)) -> 
-               finishExp se (mkAddrOfAndMark x) (TPtr(t, []))
-
-            | StartOf (lv) ->
-                let tres = TPtr(typeOfLval lv, []) in (* pointer to array *)
-                finishExp se (mkAddrOfAndMark lv) tres
-
-              (* Function names are converted into pointers to the function. 
-               * Taking the address-of again does not change things *)
-            | AddrOf (Var v, NoOffset) when isFunctionType v.vtype ->
-                finishExp se e' t
-
-            | _ -> E.s (error "Expected lval for ADDROF. Got %a@!"
-                          d_plainexp e')
-        end
-        | _ -> E.s (error "Unexpected operand for addrof")
-    end
-    | A.UNARY((A.PREINCR|A.PREDECR) as uop, e) -> begin
-        match e with 
-          A.COMMA el -> (* GCC extension *)
-            doExp asconst 
-              (A.COMMA (replaceLastInList el 
-                          (fun e -> A.UNARY(uop, e))))
-              what
-        | A.QUESTION (e1, e2q, e3q) -> (* GCC extension *)
-            doExp asconst 
-              (A.QUESTION (e1, A.UNARY(uop, e2q), 
-                           A.UNARY(uop, e3q)))
-              what
-
-        | (A.VARIABLE _ | A.UNARY (A.MEMOF, _) | (* Regular lvalues *)
-           A.INDEX _ | A.MEMBEROF _ | A.MEMBEROFPTR _ |
-           A.CAST _ (* A GCC extension *)) -> begin
-             let uop' = if uop = A.PREINCR then PlusA else MinusA in
-             if asconst then
-               ignore (warn "PREINCR or PREDECR in constant");
-             let (se, e', t) = doExp false e (AExp None) in
-             let lv = 
-               match e' with 
-                 Lval x -> x
-               | CastE (_, Lval x) -> x (* A GCC extension. The operation is 
-                                         * done at the cast type. The result 
-                                         * is also of the cast type *)
-               | _ -> E.s (error "Expected lval for ++ or --")
-             in
-             let tresult, result = doBinOp uop' e' t one intType in
-             finishExp (se +++ (Set(lv, mkCastT result tresult t, 
-                                    !currentLoc)))
-               e'
-               tresult   (* Should this be t instead ??? *)
-           end
-        | _ -> E.s (error "Unexpected operand for prefix -- or ++")
-    end
-          
-    | A.UNARY((A.POSINCR|A.POSDECR) as uop, e) -> begin
-        match e with 
-          A.COMMA el -> (* GCC extension *)
-            doExp asconst 
-              (A.COMMA (replaceLastInList el 
-                          (fun e -> A.UNARY(uop, e))))
-              what
-        | A.QUESTION (e1, e2q, e3q) -> (* GCC extension *)
-            doExp asconst 
-              (A.QUESTION (e1, A.UNARY(uop, e2q), A.UNARY(uop, e3q)))
-              what
-
-        | (A.VARIABLE _ | A.UNARY (A.MEMOF, _) | (* Regular lvalues *)
-           A.INDEX _ | A.MEMBEROF _ | A.MEMBEROFPTR _ | 
-           A.CAST _ (* A GCC extension *) ) -> begin
-             if asconst then
-               ignore (warn "POSTINCR or POSTDECR in constant");
-             (* If we do not drop the result then we must save the value *)
-             let uop' = if uop = A.POSINCR then PlusA else MinusA in
-             let (se, e', t) = doExp false e (AExp None) in
-             let lv = 
-               match e' with 
-                 Lval x -> x
-               | CastE (_, Lval x) -> x (* GCC extension. The addition must 
-                                         * be be done at the cast type. The 
-                                         * result of this is also of the cast 
-                                         * type *)
-               | _ -> E.s (error "Expected lval for ++ or --")
-             in
-             let tresult, opresult = doBinOp uop' e' t one intType in
-             let se', result = 
-               if what <> ADrop then 
-                 let tmp = newTempVar t in
-                 se +++ (Set(var tmp, e', !currentLoc)), Lval(var tmp)
-               else
-                 se, e'
-             in
-             finishExp 
-               (se' +++ (Set(lv, mkCastT opresult tresult t, 
-                             !currentLoc)))
-               result
-               tresult   (* Should this be t instead ??? *)
-           end
-        | _ -> E.s (error "Unexpected operand for suffix ++ or --")
-    end
-          
-    | A.BINARY(A.ASSIGN, e1, e2) -> begin
-        match e1 with 
-          A.COMMA el -> (* GCC extension *)
-            doExp asconst 
-              (A.COMMA (replaceLastInList el 
-                          (fun e -> A.BINARY(A.ASSIGN, e, e2))))
-              what
-        | A.QUESTION (e1, e2q, e3q) -> (* GCC extension *)
-            doExp asconst 
-              (A.QUESTION (e1, A.BINARY(A.ASSIGN, e2q, e2), 
-                           A.BINARY(A.ASSIGN, e3q, e2)))
-              what
-        | A.CAST (t, A.SINGLE_INIT e) -> (* GCC extension *)
-            doExp asconst
-              (A.CAST (t, 
-                       A.SINGLE_INIT (A.BINARY(A.ASSIGN, e, 
-                                               A.CAST (t, A.SINGLE_INIT e2)))))
-              what
-
-        | (A.VARIABLE _ | A.UNARY (A.MEMOF, _) | (* Regular lvalues *)
-           A.INDEX _ | A.MEMBEROF _ | A.MEMBEROFPTR _ ) -> begin
-             if asconst then ignore (warn "ASSIGN in constant");
-             let (se1, e1', lvt) = doExp false e1 (AExp None) in
-             let lv = 
-               match e1' with 
-                 Lval x -> x
-               | _ -> E.s (error "Expected lval for assignment. Got %a\n"
-                             d_plainexp e1')
-             in
-             let (se2, e'', t'') = doExp false e2 (ASet(lv, lvt)) in
-             finishExp (se1 @@ se2) e1' lvt
-           end
-        | _ -> E.s (error "Invalid left operand for ASSIGN")
-    end
-          
-    | A.BINARY((A.ADD|A.SUB|A.MUL|A.DIV|A.MOD|A.BAND|A.BOR|A.XOR|
-      A.SHL|A.SHR|A.EQ|A.NE|A.LT|A.GT|A.GE|A.LE) as bop, e1, e2) -> 
-        let bop' = convBinOp bop in
-        let (se1, e1', t1) = doExp asconst e1 (AExp None) in
-        let (se2, e2', t2) = doExp asconst e2 (AExp None) in
-        let tresult, result = doBinOp bop' e1' t1 e2' t2 in
-        finishExp (se1 @@ se2) result tresult
-          
-          (* assignment operators *)
-    | A.BINARY((A.ADD_ASSIGN|A.SUB_ASSIGN|A.MUL_ASSIGN|A.DIV_ASSIGN|
-      A.MOD_ASSIGN|A.BAND_ASSIGN|A.BOR_ASSIGN|A.SHL_ASSIGN|
-      A.SHR_ASSIGN|A.XOR_ASSIGN) as bop, e1, e2) -> begin
-        match e1 with 
-          A.COMMA el -> (* GCC extension *)
-            doExp asconst 
-              (A.COMMA (replaceLastInList el 
-                          (fun e -> A.BINARY(bop, e, e2))))
-              what
-        | A.QUESTION (e1, e2q, e3q) -> (* GCC extension *)
-            doExp asconst 
-              (A.QUESTION (e1, A.BINARY(bop, e2q, e2), 
-                           A.BINARY(bop, e3q, e2)))
-              what
-
-        | (A.VARIABLE _ | A.UNARY (A.MEMOF, _) | (* Regular lvalues *)
-           A.INDEX _ | A.MEMBEROF _ | A.MEMBEROFPTR _ |
-           A.CAST _ (* GCC extension *) ) -> begin
-             if asconst then
-               ignore (warn "op_ASSIGN in constant");
-             let bop' = match bop with          
-               A.ADD_ASSIGN -> PlusA
-             | A.SUB_ASSIGN -> MinusA
-             | A.MUL_ASSIGN -> Mult
-             | A.DIV_ASSIGN -> Div
-             | A.MOD_ASSIGN -> Mod
-             | A.BAND_ASSIGN -> BAnd
-             | A.BOR_ASSIGN -> BOr
-             | A.XOR_ASSIGN -> BXor
-             | A.SHL_ASSIGN -> Shiftlt
-             | A.SHR_ASSIGN -> Shiftrt
-             | _ -> E.s (error "binary +=")
-             in
-             let (se1, e1', t1) = doExp false e1 (AExp None) in
-             let lv1 = 
-               match e1' with 
-                 Lval x -> x
-               | CastE (_, Lval x) -> x (* GCC extension. The operation and 
-                                         * the result are at the cast type  *)
-               | _ -> E.s (error "Expected lval for assignment with arith")
-             in
-             let (se2, e2', t2) = doExp false e2 (AExp None) in
-             let tresult, result = doBinOp bop' e1' t1 e2' t2 in
-             (* We must cast the result to the type of the lv1, which may be 
-              * different than t1 if lv1 was a Cast *)
-             let _, result' = castTo tresult (typeOfLval lv1) result in
-             (* The type of the result is the type of the left-hand side  *) 
-             finishExp (se1 @@ se2 +++ 
-                        (Set(lv1, result', !currentLoc)))
-               e1'
-               t1 
-           end
-        | _ -> E.s (error "Unexpected left operand for assignment with arith")
-      end
-               
-          
-    | A.BINARY((A.AND|A.OR), _, _) | A.UNARY(A.NOT, _) -> begin
-        let ce = doCondExp asconst e in
-        (* We must normalize the result to 0 or 1 *)
-        match ce with
-          CEExp (se, ((Const _) as c)) -> 
-            finishExp se (if isConstTrue c then one else zero) intType
-	| CEExp (se, (UnOp(LNot, _, _) as e)) ->
-	    (* already normalized to 0 or 1 *)
-	    finishExp se e intType
-        | CEExp (se, e) ->
-            let e' = 
-              let te = typeOf e in
-              let _, zte = castTo intType te zero in
-              BinOp(Ne, e, zte, te)
-            in
-            finishExp se e' intType
-        | _ -> 
-            let tmp = var (newTempVar intType) in
-            finishExp (compileCondExp ce
-                         (empty +++ (Set(tmp, integer 1, 
-                                         !currentLoc)))
-                         (empty +++ (Set(tmp, integer 0, 
-                                         !currentLoc))))     
-              (Lval tmp)
-              intType
-    end
-
-    | A.CALL(f, args) -> 
-        if asconst then
-          ignore (warn "CALL in constant");
-        let (sf, f', ft') = 
-          match f with                  (* Treat the VARIABLE case separate 
-                                         * becase we might be calling a 
-                                         * function that does not have a 
-                                         * prototype. In that case assume it 
-                                         * takes INTs as arguments  *)
-            A.VARIABLE n -> begin
-              try
-                let vi, _ = lookupVar n in
-                (empty, Lval(var vi), vi.vtype) (* Found. Do not use 
-                                                 * finishExp. Simulate what = 
-                                                 * AExp None  *)
-              with Not_found -> begin
-                ignore (warnOpt "Calling function %s without prototype." n);
-                let ftype = TFun(intType, None, false, 
-                                 [Attr("missingproto",[])]) in
-                (* Add a prototype to the environment *)
-                let proto, _ = 
-                  makeGlobalVarinfo false (makeGlobalVar n ftype) in
-                (* Make it EXTERN *)
-                proto.vstorage <- Extern;
-                IH.add noProtoFunctions proto.vid true;
-                (* Add it to the file as well *)
-                cabsPushGlobal (GVarDecl (proto, !currentLoc));
-                (empty, Lval(var proto), ftype)
-              end
-            end
-          | _ -> doExp false f (AExp None) 
-        in
-        (* Get the result type and the argument types *)
-        let (resType, argTypes, isvar, f'') = 
-          match unrollType ft' with
-            TFun(rt,at,isvar,a) -> (rt,at,isvar,f')
-          | TPtr (t, _) -> begin
-              match unrollType t with 
-                TFun(rt,at,isvar,a) -> (* Make the function pointer 
-                                            * explicit  *)
-                  let f'' = 
-                    match f' with
-                      AddrOf lv -> Lval(lv)
-                    | _ -> Lval(mkMem f' NoOffset)
-                  in
-                  (rt,at,isvar, f'')
-              | x -> 
-                  E.s (error "Unexpected type of the called function %a: %a" 
-                         d_exp f' d_type x)
-          end
-          | x ->  E.s (error "Unexpected type of the called function %a: %a" 
-                         d_exp f' d_type x)
-        in
-        let argTypesList = argsToList argTypes in
-        (* Drop certain qualifiers from the result type *)
-        let resType' = resType in 
-        (* Before we do the arguments we try to intercept a few builtins. For 
-         * these we have defined then with a different type, so we do not 
-         * want to give warnings. We'll just leave the arguments of these
-         * functions alone*)
-        let isSpecialBuiltin =  
-          match f'' with 
-            Lval (Var fv, NoOffset) ->
-              fv.vname = "__builtin_stdarg_start" ||
-              fv.vname = "__builtin_va_arg" ||
-              fv.vname = "__builtin_va_start" ||
-              fv.vname = "__builtin_expect" ||
-              fv.vname = "__builtin_next_arg"
-            | _ -> false
-        in
-          
-        (** If the "--forceRLArgEval" flag was used, make sure
-          we evaluate args right-to-left.
-          Added by Nathan Cooprider. **)
-        let force_right_to_left_evaluation (c, e, t) =
-	  (* If chunk is empty then it is not already evaluated *)
-	  (* constants don't need to be pulled out *)
-          if (!forceRLArgEval && (not (isConstant e)) && 
-	      (not isSpecialBuiltin)) then 
-	    (* create a temporary *)
-	    let tmp = newTempVar t in
-	    (* create an instruction to give the e to the temporary *)
-	    let i = Set(var tmp, e, !currentLoc) in 
-	    (* add the instruction to the chunk *)
-	    (* change the expression to be the temporary *)
-	    (c +++ i, (Lval(var tmp)), t) 
-          else
-	    (c, e, t)
-        in
-        (* Do the arguments. In REVERSE order !!! Both GCC and MSVC do this *)
-        let rec loopArgs 
-            : (string * typ * attributes) list * A.expression list 
-          -> (chunk * exp list) = function
-            | ([], []) -> (empty, [])
-
-            | args, [] -> 
-                if not isSpecialBuiltin then 
-                  ignore (warnOpt 
-                            "Too few arguments in call to %a."
-                            d_exp f');
-		(empty, [])
-
-            | ((_, at, _) :: atypes, a :: args) -> 
-                let (ss, args') = loopArgs (atypes, args) in
-                (* Do not cast as part of translating the argument. We let 
-                 * the castTo to do this work. This was necessary for 
-                 * test/small1/union5, in which a transparent union is passed 
-                 * as an argument *)
-                let (sa, a', att) = force_right_to_left_evaluation
-                                      (doExp false a (AExp None)) in
-                let (_, a'') = castTo att at a' in
-                (ss @@ sa, a'' :: args')
-                  
-            | ([], args) -> (* No more types *)
-                if not isvar && argTypes != None && not isSpecialBuiltin then 
-                  (* Do not give a warning for functions without a prototype*)
-                  ignore (warnOpt "Too many arguments in call to %a" d_exp f');
-                let rec loop = function
-                    [] -> (empty, [])
-                  | a :: args -> 
-                      let (ss, args') = loop args in
-                      let (sa, a', at) = force_right_to_left_evaluation 
-                          (doExp false a (AExp None)) in
-                      (ss @@ sa, a' :: args')
-                in
-                loop args
-        in
-        let (sargs, args') = loopArgs (argTypesList, args) in
-        (* Setup some pointer to the elements of the call. We may change 
-         * these below *)
-        let prechunk: chunk ref = ref (sf @@ sargs) in (* comes before *)
-
-        (* Do we actually have a call, or an expression? *)
-        let piscall: bool ref = ref true in 
-
-        let pf: exp ref = ref f'' in (* function to call *)
-        let pargs: exp list ref = ref args' in (* arguments *)
-        let pis__builtin_va_arg: bool ref = ref false in 
-        let pwhat: expAction ref = ref what in (* what to do with result *)
-
-        let pres: exp ref = ref zero in (* If we do not have a call, this is 
-                                        * the result *)
-        let prestype: typ ref = ref intType in
-
-        let rec dropCasts = function CastE (_, e) -> dropCasts e | e -> e in
-        (* Get the name of the last formal *)
-        let getNameLastFormal () : string = 
-          match !currentFunctionFDEC.svar.vtype with
-            TFun(_, Some args, true, _) -> begin
-              match List.rev args with
-                (last_par_name, _, _) :: _ -> last_par_name
-              | _ -> ""
-            end
-          | _ -> ""
-        in
-
-        (* Try to intercept some builtins *)
-        (match !pf with 
-          Lval(Var fv, NoOffset) -> begin
-            if fv.vname = "__builtin_va_arg" then begin
-              match !pargs with 
-                marker :: SizeOf resTyp :: _ -> begin
-                  (* Make a variable of the desired type *)
-                  let destlv, destlvtyp = 
-                    match !pwhat with 
-                      ASet (lv, lvt) -> lv, lvt
-                    | _ -> var (newTempVar resTyp), resTyp
-                  in
-                  pwhat := (ASet (destlv, destlvtyp));
-                  pargs := [marker; SizeOf resTyp; AddrOf destlv];
-                  pis__builtin_va_arg := true;
-                end
-              | _ -> 
-                  ignore (warn "Invalid call to %s\n" fv.vname);
-            end else if fv.vname = "__builtin_stdarg_start" then begin
-              match !pargs with 
-                marker :: last :: [] -> begin
-                  let isOk = 
-                    match dropCasts last with 
-                      Lval (Var lastv, NoOffset) -> 
-                        lastv.vname = getNameLastFormal ()
-                    | _ -> false
-                  in
-                  if not isOk then 
-                    ignore (warn "The second argument in call to %s should be the last formal argument\n" fv.vname);
-                  
-                  (* Check that "lastv" is indeed the last variable in the 
-                   * prototype and then drop it *)
-                  pargs := [ marker ]
-                end
-              | _ -> 
-                  ignore (warn "Invalid call to %s\n" fv.vname);
-                  
-                  (* We have to turn uses of __builtin_varargs_start into uses 
-                   * of __builtin_stdarg_start (because we have dropped the 
-                   * __builtin_va_alist argument from this function) *)
-                  
-            end else if fv.vname = "__builtin_varargs_start" then begin
-              (* Lookup the prototype for the replacement *)
-              let v, _  = 
-                try lookupGlobalVar "__builtin_stdarg_start" 
-                with Not_found -> E.s (bug "Cannot find __builtin_stdarg_start to replace %s\n" fv.vname)
-              in
-              pf := Lval (var v)
-            end else if fv.vname = "__builtin_next_arg" then begin
-              match !pargs with 
-                last :: [] -> begin
-                  let isOk = 
-                    match dropCasts last with 
-                      Lval (Var lastv, NoOffset) -> 
-                        lastv.vname = getNameLastFormal ()
-                    | _ -> false
-                  in
-                  if not isOk then 
-                    ignore (warn "The argument in call to %s should be the last formal argument\n" fv.vname);
-                  
-                  pargs := [ ]
-                end
-              | _ -> 
-                  ignore (warn "Invalid call to %s\n" fv.vname);
-            end else if fv.vname = "__builtin_constant_p" then begin
-              (* Drop the side-effects *)
-              prechunk := empty;
-
-              (* Constant-fold the argument and see if it is a constant *)
-              (match !pargs with 
-                [ arg ] -> begin 
-                  match constFold true arg with 
-                    Const _ -> piscall := false; 
-                               pres := integer 1; 
-                               prestype := intType
-
-                  | _ -> piscall := false; 
-                         pres := integer 0;
-                         prestype := intType
-                end
-              | _ -> 
-                  ignore (warn "Invalid call to builtin_constant_p"));
-            end
-          end
-        | _ -> ());
-
-
-        (* Now we must finish the call *)
-        if !piscall then begin 
-          let addCall (calldest: lval option) (res: exp) (t: typ) = 
-            prechunk := !prechunk +++
-                (Call(calldest, !pf, !pargs, !currentLoc));
-            pres := res;
-            prestype := t
-          in
-          match !pwhat with 
-            ADrop -> addCall None zero intType
-                
-                (* Set to a variable of corresponding type *)
-          | ASet(lv, vtype) -> 
-              (* Make an exception here for __builtin_va_arg *)
-              if !pis__builtin_va_arg then 
-                addCall None (Lval(lv)) vtype
-              else
-                addCall (Some lv) (Lval(lv)) vtype
-                  
-          | _ -> begin
-              let tmp, restyp' = 
-                match !pwhat with
-                  AExp (Some t) -> newTempVar t, t
-                | _ -> newTempVar resType', resType'
-              in
-              (* Remember that this variable has been created for this 
-               * specific call. We will use this in collapseCallCast and 
-               * above in finishCall. *)
-              IH.add callTempVars tmp.vid ();
-              addCall (Some (var tmp)) (Lval(var tmp)) restyp'
-          end
-        end;
-              
-        finishExp !prechunk !pres !prestype
-
-          
-    | A.COMMA el -> 
-        if asconst then 
-          ignore (warn "COMMA in constant");
-        let rec loop sofar = function
-            [e] -> 
-              let (se, e', t') = doExp false e what in (* Pass on the action *)
-              (sofar @@ se, e', t')
-(*
-              finishExp (sofar @@ se) e' t' (* does not hurt to do it twice. 
-                                             * GN: it seems it does *)
-*)
-          | e :: rest -> 
-              let (se, _, _) = doExp false e ADrop in
-              loop (sofar @@ se) rest
-          | [] -> E.s (error "empty COMMA expression")
-        in
-        loop empty el
-          
-    | A.QUESTION (e1,e2,e3) when what = ADrop -> 
-        if asconst then
-          ignore (warn "QUESTION with ADrop in constant");
-        let (se3,_,_) = doExp false e3 ADrop in
-        let se2 = 
-          match e2 with 
-            A.NOTHING -> skipChunk
-          | _ -> let (se2,_,_) = doExp false e2 ADrop in se2
-        in
-        finishExp (doCondition asconst e1 se2 se3) zero intType
-          
-    | A.QUESTION (e1, e2, e3) -> begin (* what is not ADrop *)
-        (* Compile the conditional expression *)
-        let ce1 = doCondExp asconst e1 in
-        (* Now we must find the type of both branches, in order to compute 
-         * the type of the result *)
-        let se2, e2'o (* is an option. None means use e1 *), t2 = 
-          match e2 with 
-            A.NOTHING -> begin (* The same as the type of e1 *)
-              match ce1 with
-                CEExp (_, e1') -> empty, None, typeOf e1' (* Do not promote 
-                                                             to bool *)
-              | _ -> empty, None, intType
-            end
-          | _ -> 
-              let se2, e2', t2 = doExp asconst e2 (AExp None) in
-              se2, Some e2', t2
-        in
-        (* Do e3 for real *)
-        let se3, e3', t3 = doExp asconst e3 (AExp None) in
-        (* Compute the type of the result *)
-        let tresult = conditionalConversion t2 t3 in
-        match ce1 with
-          CEExp (se1, e1') when isConstFalse e1' && canDrop se2 -> 
-             finishExp (se1 @@ se3) (snd (castTo t3 tresult e3')) tresult
-        | CEExp (se1, e1') when isConstTrue e1' && canDrop se3 -> 
-           begin
-             match e2'o with
-               None -> (* use e1' *)
-                 finishExp (se1 @@ se2) (snd (castTo t2 tresult e1')) tresult
-             | Some e2' -> 
-                 finishExp (se1 @@ se2) (snd (castTo t2 tresult e2')) tresult
-           end
-
-        | _ -> (* Use a conditional *) begin
-            match e2 with 
-              A.NOTHING -> 
-                let tmp = var (newTempVar tresult) in
-                let (se1, _, _) = doExp asconst e1 (ASet(tmp, tresult)) in
-                let (se3, _, _) = doExp asconst e3 (ASet(tmp, tresult)) in
-                finishExp (se1 @@ ifChunk (Lval(tmp)) lu
-                                    skipChunk se3)
-                  (Lval(tmp))
-                  tresult
-            | _ -> 
-                let lv, lvt = 
-                  match what with
-                  | ASet (lv, lvt) -> lv, lvt
-                  | _ -> 
-                      let tmp = newTempVar tresult in
-                      var tmp, tresult
-                in
-                (* Now do e2 and e3 for real *)
-                let (se2, _, _) = doExp asconst e2 (ASet(lv, lvt)) in
-                let (se3, _, _) = doExp asconst e3 (ASet(lv, lvt)) in
-                finishExp (doCondition asconst e1 se2 se3) (Lval(lv)) tresult
-        end
-
-(*
-        (* Do these only to collect the types  *)
-        let se2, e2', t2' = 
-          match e2 with 
-            A.NOTHING -> (* A GNU thing. Use e1 as e2 *) 
-              doExp isconst e1 (AExp None)
-          | _ -> doExp isconst e2 (AExp None) in 
-        (* Do e3 for real *)
-        let se3, e3', t3' = doExp isconst e3 (AExp None) in
-        (* Compute the type of the result *)
-        let tresult = conditionalConversion e2' t2' e3' t3' in
-        if     (isEmpty se2 || e2 = A.NOTHING) 
-            && isEmpty se3 && isconst then begin 
-          (* Use the Question. This allows Question in initializers without 
-          * having to do constant folding  *)
-          let se1, e1', t1 = doExp isconst e1 (AExp None) in
-          ignore (checkBool t1 e1');
-          let e2'' = 
-            if e2 = A.NOTHING then 
-              mkCastT e1' t1 tresult 
-            else mkCastT e2' t2' tresult (* We know se2 is empty *)
-          in
-          let e3'' = mkCastT e3' t3' tresult in
-          let resexp = 
-            match e1' with
-              Const(CInt64(i, _, _)) when i <> Int64.zero -> e2''
-            | Const(CInt64(z, _, _)) when z = Int64.zero -> e3''
-            | _ -> Question(e1', e2'', e3'')
-          in
-          finishExp se1 resexp tresult
-        end else begin (* Now use a conditional *)
-          match e2 with 
-            A.NOTHING -> 
-              let tmp = var (newTempVar tresult) in
-              let (se1, _, _) = doExp isconst e1 (ASet(tmp, tresult)) in
-              let (se3, _, _) = doExp isconst e3 (ASet(tmp, tresult)) in
-              finishExp (se1 @@ ifChunk (Lval(tmp)) lu
-                                  skipChunk se3)
-                (Lval(tmp))
-                tresult
-          | _ -> 
-              let lv, lvt = 
-                match what with
-                | ASet (lv, lvt) -> lv, lvt
-                | _ -> 
-                    let tmp = newTempVar tresult in
-                    var tmp, tresult
-              in
-              (* Now do e2 and e3 for real *)
-              let (se2, _, _) = doExp isconst e2 (ASet(lv, lvt)) in
-              let (se3, _, _) = doExp isconst e3 (ASet(lv, lvt)) in
-              finishExp (doCondition isconst e1 se2 se3) (Lval(lv)) tresult
-        end
-*)
-    end
-
-    | A.GNU_BODY b -> begin
-        (* Find the last A.COMPUTATION and remember it. This one is invoked 
-         * on the reversed list of statements. *)
-        let rec findLastComputation = function
-            s :: _  -> 
-              let rec findLast = function
-                  A.SEQUENCE (_, s, loc) -> findLast s
-                | CASE (_, s, _) -> findLast s
-                | CASERANGE (_, _, s, _) -> findLast s
-                | LABEL (_, s, _) -> findLast s
-                | (A.COMPUTATION _) as s -> s
-                | _ -> raise Not_found
-              in
-              findLast s
-          | [] -> raise Not_found
-        in
-        (* Save the previous data *)
-        let old_gnu = ! gnu_body_result in
-        let lastComp, isvoidbody =
-          match what with 
-            ADrop -> (* We are dropping the result *)
-              A.NOP cabslu, true
-          | _ -> 
-              try findLastComputation (List.rev b.A.bstmts), false    
-              with Not_found -> 
-                E.s (error "Cannot find COMPUTATION in GNU.body")
-                  (*                A.NOP cabslu, true *)
-        in
-        (* Prepare some data to be filled by doExp *)
-        let data : (exp * typ) option ref = ref None in
-        gnu_body_result := (lastComp, data);
-
-        let se = doBody b in
-
-        gnu_body_result := old_gnu;
-        match !data with
-          None when isvoidbody -> finishExp se zero voidType
-        | None -> E.s (bug "Cannot find COMPUTATION in GNU.body")
-        | Some (e, t) -> finishExp se e t
-    end
-
-    | A.LABELADDR l -> begin (* GCC's taking the address of a label *)
-        let l = lookupLabel l in (* To support locallly declared labels *)
-        let addrval =
-          try H.find gotoTargetHash l
-          with Not_found -> begin
-            let res = !gotoTargetNextAddr in
-            incr gotoTargetNextAddr;
-            H.add gotoTargetHash l res;
-            res
-          end
-        in
-        finishExp empty (mkCast (integer addrval) voidPtrType) voidPtrType
-    end
-
-    | A.EXPR_PATTERN _ -> E.s (E.bug "EXPR_PATTERN in cabs2cil input")
-
-  with e -> begin
-    ignore (E.log "error in doExp (%s)@!" (Printexc.to_string e));
-    E.hadErrors := true;
-    (i2c (dInstr (dprintf "booo_exp(%t)" d_thisloc) !currentLoc),
-     integer 0, intType)
-  end
-
-(* bop is always the arithmetic version. Change it to the appropriate pointer 
- * version if necessary *)
-and doBinOp (bop: binop) (e1: exp) (t1: typ) (e2: exp) (t2: typ) : typ * exp =
-  let doArithmetic () = 
-    let tres = arithmeticConversion t1 t2 in
-    (* Keep the operator since it is arithmetic *)
-    tres, 
-    optConstFoldBinOp false bop (mkCastT e1 t1 tres) (mkCastT e2 t2 tres) tres
-  in
-  let doArithmeticComp () = 
-    let tres = arithmeticConversion t1 t2 in
-    (* Keep the operator since it is arithemtic *)
-    intType, 
-    optConstFoldBinOp false bop 
-      (mkCastT e1 t1 tres) (mkCastT e2 t2 tres) intType
-  in
-  let doIntegralArithmetic () = 
-    let tres = unrollType (arithmeticConversion t1 t2) in
-    match tres with
-      TInt _ -> 
-        tres,
-        optConstFoldBinOp false bop 
-          (mkCastT e1 t1 tres) (mkCastT e2 t2 tres) tres
-    | _ -> E.s (error "%a operator on a non-integer type" d_binop bop)
-  in
-  let pointerComparison e1 t1 e2 t2 = 
-    (* XL: Do not cast both sides -- what's the point? *)
-    intType,
-    optConstFoldBinOp false bop e1 e2 intType
-  in
-
-  match bop with
-    (Mult|Div) -> doArithmetic ()
-  | (Mod|BAnd|BOr|BXor) -> doIntegralArithmetic ()
-  | (Shiftlt|Shiftrt) -> (* ISO 6.5.7. Only integral promotions. The result 
-                          * has the same type as the left hand side *)
-      if !msvcMode then
-        (* MSVC has a bug. We duplicate it here *)
-        doIntegralArithmetic ()
-      else
-        let t1' = integralPromotion t1 in
-        let t2' = integralPromotion t2 in
-        t1', 
-        optConstFoldBinOp false bop (mkCastT e1 t1 t1') (mkCastT e2 t2 t2') t1'
-
-  | (PlusA|MinusA) 
-      when isArithmeticType t1 && isArithmeticType t2 -> doArithmetic ()
-  | (Eq|Ne|Lt|Le|Ge|Gt) 
-      when isArithmeticType t1 && isArithmeticType t2 -> 
-        doArithmeticComp ()
-  | PlusA when isPointerType t1 && isIntegralType t2 -> 
-      t1, 
-      optConstFoldBinOp false PlusPI e1 
-        (mkCastT e2 t2 (integralPromotion t2)) t1
-  | PlusA when isIntegralType t1 && isPointerType t2 -> 
-      t2, 
-      optConstFoldBinOp false PlusPI e2 
-        (mkCastT e1 t1 (integralPromotion t1)) t2
-  | MinusA when isPointerType t1 && isIntegralType t2 -> 
-      t1, 
-      optConstFoldBinOp false MinusPI e1 
-        (mkCastT e2 t2 (integralPromotion t2)) t1
-  | MinusA when isPointerType t1 && isPointerType t2 ->
-      let commontype = t1 in
-      intType,
-      optConstFoldBinOp false MinusPP (mkCastT e1 t1 commontype) 
-                                      (mkCastT e2 t2 commontype) intType
-  | (Le|Lt|Ge|Gt|Eq|Ne) when isPointerType t1 && isPointerType t2 ->
-      pointerComparison e1 t1 e2 t2
-  | (Eq|Ne) when isPointerType t1 && isZero e2 -> 
-      pointerComparison e1 t1 (mkCastT zero !upointType t1) t1
-  | (Eq|Ne) when isPointerType t2 && isZero e1 -> 
-      pointerComparison (mkCastT zero !upointType t2) t2 e2 t2
-
-
-  | (Eq|Ne|Le|Lt|Ge|Gt) when isPointerType t1 && isArithmeticType t2 ->
-      ignore (warnOpt "Comparison of pointer and non-pointer");
-      (* Cast both values to void * *)
-      doBinOp bop (mkCastT e1 t1 voidPtrType) voidPtrType 
-                  (mkCastT e2 t2 voidPtrType) voidPtrType
-  | (Eq|Ne|Le|Lt|Ge|Gt) when isArithmeticType t1 && isPointerType t2 ->
-      ignore (warnOpt "Comparison of pointer and non-pointer");
-      (* Cast both values to void * *)
-      doBinOp bop (mkCastT e1 t1 voidPtrType) voidPtrType 
-                  (mkCastT e2 t2 voidPtrType) voidPtrType
-
-  | _ -> E.s (error "doBinOp: %a\n" d_plainexp (BinOp(bop,e1,e2,intType)))
-
-(* Constant fold a conditional. This is because we want to avoid having 
- * conditionals in the initializers. So, we try very hard to avoid creating 
- * new statements. *)
-and doCondExp (asconst: bool) (** Try to evaluate the conditional expression 
-                                * to TRUE or FALSE, because it occurs in a 
-                                * constant *)
-              (e: A.expression) : condExpRes = 
-  let rec addChunkBeforeCE (c0: chunk) = function
-      CEExp (c, e) -> CEExp (c0 @@ c, e)
-    | CEAnd (ce1, ce2) -> CEAnd (addChunkBeforeCE c0 ce1, ce2)
-    | CEOr (ce1, ce2) -> CEOr (addChunkBeforeCE c0 ce1, ce2)
-    | CENot ce1 -> CENot (addChunkBeforeCE c0 ce1)
-  in
-  let rec canDropCE = function
-      CEExp (c, e) -> canDrop c
-    | CEAnd (ce1, ce2) | CEOr (ce1, ce2) -> canDropCE ce1 && canDropCE ce2
-    | CENot (ce1) -> canDropCE ce1
-  in
-  match e with 
-    A.BINARY (A.AND, e1, e2) -> begin
-      let ce1 = doCondExp asconst e1 in
-      let ce2 = doCondExp asconst e2 in
-      match ce1, ce2 with
-        CEExp (se1, ((Const _) as ci1)), _ -> 
-          if isConstTrue ci1 then 
-            addChunkBeforeCE se1 ce2
-          else 
-            (* se2 might contain labels so we cannot always drop it *)
-            if canDropCE ce2 then 
-              ce1 
-            else 
-              CEAnd (ce1, ce2)
-      | CEExp(se1, e1'), CEExp (se2, e2') when 
-              !useLogicalOperators && isEmpty se1 && isEmpty se2 -> 
-          CEExp (empty, BinOp(LAnd, 
-                              mkCast e1' intType, 
-                              mkCast e2' intType, intType))
-      | _ -> CEAnd (ce1, ce2)
-    end
-
-  | A.BINARY (A.OR, e1, e2) -> begin
-      let ce1 = doCondExp asconst e1 in
-      let ce2 = doCondExp asconst e2 in
-      match ce1, ce2 with
-        CEExp (se1, (Const(CInt64 _) as ci1)), _ -> 
-          if isConstFalse ci1 then 
-            addChunkBeforeCE se1 ce2
-          else 
-            (* se2 might contain labels so we cannot drop it *)
-            if canDropCE ce2 then 
-              ce1 
-            else 
-              CEOr (ce1, ce2)
-
-      | CEExp (se1, e1'), CEExp (se2, e2') when 
-              !useLogicalOperators && isEmpty se1 && isEmpty se2 ->
-          CEExp (empty, BinOp(LOr, mkCast e1' intType, 
-                              mkCast e2' intType, intType))
-      | _ -> CEOr (ce1, ce2)
-    end
-
-  | A.UNARY(A.NOT, e1) -> begin
-      match doCondExp asconst e1 with 
-        CEExp (se1, (Const _ as ci1)) -> 
-          if isConstFalse ci1 then 
-            CEExp (se1, one) 
-          else
-            CEExp (se1, zero)
-      | CEExp (se1, e) when isEmpty se1 -> 
-          let t = typeOf e in
-          if not ((isPointerType t) || (isArithmeticType t))then
-            E.s (error "Bad operand to !");
-          CEExp (empty, UnOp(LNot, e, intType))
-
-      | ce1 -> CENot ce1
-  end
-
-  | _ -> 
-      let (se, e, t) = doExp asconst e (AExp None) in
-      ignore (checkBool t e);
-      CEExp (se, if !lowerConstants then constFold asconst e else e)
-
-and compileCondExp (ce: condExpRes) (st: chunk) (sf: chunk) : chunk = 
-  match ce with 
-  | CEAnd (ce1, ce2) ->
-      let (sf1, sf2) = 
-        (* If sf is small then will copy it *)
-        try (sf, duplicateChunk sf) 
-        with Failure _ -> 
-          let lab = newLabelName "_L" in
-          (gotoChunk lab lu, consLabel lab sf !currentLoc false)
-      in
-      let st' = compileCondExp ce2 st sf1 in
-      let sf' = sf2 in
-      compileCondExp ce1 st' sf'
-        
-  | CEOr (ce1, ce2) -> 
-      let (st1, st2) = 
-        (* If st is small then will copy it *)
-        try (st, duplicateChunk st) 
-        with Failure _ -> 
-          let lab = newLabelName "_L" in
-          (gotoChunk lab lu, consLabel lab st !currentLoc false)
-      in
-      let st' = st1 in
-      let sf' = compileCondExp ce2 st2 sf in
-      compileCondExp ce1 st' sf'
-        
-  | CENot ce1 -> compileCondExp ce1 sf st
-        
-  | CEExp (se, e) -> begin
-      match e with 
-        Const(CInt64(i,_,_)) when i <> Int64.zero && canDrop sf -> se @@ st
-      | Const(CInt64(z,_,_)) when z = Int64.zero && canDrop st -> se @@ sf
-      | _ -> se @@ ifChunk e !currentLoc st sf
-  end
- 
-
-(* A special case for conditionals *)
-and doCondition (isconst: bool) (* If we are in constants, we do our best to 
-                                 * eliminate the conditional *)
-                (e: A.expression) 
-                (st: chunk)
-                (sf: chunk) : chunk = 
-  compileCondExp (doCondExp isconst e) st sf
-
-
-and doPureExp (e : A.expression) : exp = 
-  let (se, e', _) = doExp true e (AExp None) in
-  if isNotEmpty se then
-   E.s (error "doPureExp: not pure");
-  e'
-
-and doInitializer
-    (vi: varinfo)
-    (inite: A.init_expression) 
-   (* Return the accumulated chunk, the initializer and the new type (might be 
-    * different for arrays) *)
-  : chunk * init * typ = 
-
-  (* Setup the pre-initializer *)
-  let topPreInit = ref NoInitPre in
-  if debugInit then 
-    ignore (E.log "\nStarting a new initializer for %s : %a\n" 
-              vi.vname d_type vi.vtype);
-  let topSetupInit (o: offset) (e: exp) = 
-    if debugInit then 
-      ignore (E.log " set %a := %a\n"  d_lval (Var vi, o) d_exp e);
-    let newinit = setOneInit !topPreInit o e in
-    if newinit != !topPreInit then topPreInit := newinit
-  in
-  let acc, restl = 
-    let so = makeSubobj vi vi.vtype NoOffset in
-    doInit vi.vglob topSetupInit so empty [ (A.NEXT_INIT, inite) ] 
-  in
-  if restl <> [] then 
-    ignore (warn "Ignoring some initializers");
-  (* sm: we used to do array-size fixups here, but they only worked
-   * for toplevel array types; now, collectInitializer does the job,
-   * including for nested array types *)
-  let typ' = unrollType vi.vtype in
-  if debugInit then 
-    ignore (E.log "Collecting the initializer for %s\n" vi.vname);
-  let (init, typ'') = collectInitializer !topPreInit typ' in
-  if debugInit then
-    ignore (E.log "Finished the initializer for %s\n  init=%a\n  typ=%a\n  acc=%a\n" 
-           vi.vname d_init init d_type typ' d_chunk acc);
-  acc, init, typ''
-
-
-  
-(* Consume some initializers. Watch out here. Make sure we use only 
- * tail-recursion because these things can be big.  *)
-and doInit
-    (isconst: bool)  
-    (setone: offset -> exp -> unit) (* Use to announce an intializer *)
-    (so: subobj)
-    (acc: chunk)
-    (initl: (A.initwhat * A.init_expression) list)
-
-    (* Return the resulting chunk along with some unused initializers *)
-  : chunk * (A.initwhat * A.init_expression) list = 
-
-  let whoami () = d_lval () (Var so.host, so.soOff) in
-  
-  let initl1 = 
-    match initl with
-    | (A.NEXT_INIT, 
-       A.SINGLE_INIT (A.CAST ((s, dt), ie))) :: rest -> 
-         let s', dt', ie' = preprocessCast s dt ie in
-         (A.NEXT_INIT, A.SINGLE_INIT (A.CAST ((s', dt'), ie'))) :: rest
-    | _ -> initl
-  in
-      (* Sometimes we have a cast in front of a compound (in GCC). This 
-       * appears as a single initializer. Ignore the cast  *)
-  let initl2 = 
-    match initl1 with
-      (what, 
-       A.SINGLE_INIT (A.CAST (_, A.COMPOUND_INIT ci))) :: rest -> 
-         (what, A.COMPOUND_INIT ci) :: rest
-    | _ -> initl1
-  in
-  let allinitl = initl2 in
-
-  if debugInit then begin
-    ignore (E.log "doInit for %t %s (current %a). Looking at: " whoami
-              (if so.eof then "(eof)" else "")
-              d_lval (Var so.host, so.curOff));
-    (match allinitl with 
-      [] -> ignore (E.log "[]")
-    | (what, ie) :: _ -> 
-        withCprint 
-          Cprint.print_init_expression (A.COMPOUND_INIT [(what, ie)]));
-    ignore (E.log "\n");
-  end;
-  match unrollType so.soTyp, allinitl with 
-    _, [] -> acc, [] (* No more initializers return *)
-
-        (* No more subobjects *)
-  | _, (A.NEXT_INIT, _) :: _ when so.eof -> acc, allinitl
-    
-
-        (* If we are at an array of characters and the initializer is a 
-         * string literal (optionally enclosed in braces) then explode the 
-         * string into characters *)
-  | TArray(bt, leno, _), 
-      (A.NEXT_INIT, 
-       (A.SINGLE_INIT(A.CONSTANT (A.CONST_STRING s))|
-       A.COMPOUND_INIT 
-         [(A.NEXT_INIT, 
-           A.SINGLE_INIT(A.CONSTANT 
-                           (A.CONST_STRING s)))])) :: restil
-    when (match unrollType bt with
-            TInt((IChar|IUChar|ISChar), _) -> true
-          | TInt _ ->
-              (*Base type is a scalar other than char. Maybe a wchar_t?*)
-	      E.s (error "Using a string literal to initialize something other than a character array.\n")
-          | _ ->  false (* OK, this is probably an array of strings. Handle *)
-         )              (* it with the other arrays below.*)
-    ->
-      let charinits =
-	let init c = A.NEXT_INIT, A.SINGLE_INIT(A.CONSTANT (A.CONST_CHAR [c]))
-	in
-	let collector =
-	  (* ISO 6.7.8 para 14: final NUL added only if no size specified, or
-	   * if there is room for it; btw, we can't rely on zero-init of
-	   * globals, since this array might be a local variable *)
-          if ((isNone leno) or ((String.length s) < (integerArrayLength leno)))
-            then ref [init Int64.zero]
-            else ref []  
-        in
-	for pos = String.length s - 1 downto 0 do
-	  collector := init (Int64.of_int (Char.code (s.[pos]))) :: !collector
-	done;
-	!collector
-      in
-      (* Create a separate object for the array *)
-      let so' = makeSubobj so.host so.soTyp so.soOff in 
-      (* Go inside the array *)
-      let leno = integerArrayLength leno in
-      so'.stack <- [InArray(so'.curOff, bt, leno, ref 0)];
-      normalSubobj so';
-      let acc', initl' = doInit isconst setone so' acc charinits in
-      if initl' <> [] then 
-        ignore (warn "Too many initializers for character array %t" whoami);
-      (* Advance past the array *)
-      advanceSubobj so;
-      (* Continue *)
-      let res = doInit isconst setone so acc' restil in
-      res
-
-        (* If we are at an array of WIDE characters and the initializer is a 
-         * WIDE string literal (optionally enclosed in braces) then explore
-         * the WIDE string into characters *)
-  (* [weimer] Wed Jan 30 15:38:05 PST 2002
-   * Despite what the compiler says, this match case is used and it is
-   * important. *)
-  | TArray(bt, leno, _), 
-      (A.NEXT_INIT, 
-       (A.SINGLE_INIT(A.CONSTANT (A.CONST_WSTRING s)) |
-       A.COMPOUND_INIT 
-         [(A.NEXT_INIT, 
-           A.SINGLE_INIT(A.CONSTANT 
-                           (A.CONST_WSTRING s)))])) :: restil
-    when(let bt' = unrollType bt in
-         match bt' with 
-           (* compare bt to wchar_t, ignoring signed vs. unsigned *)
-	   TInt _ when (bitsSizeOf bt') = (bitsSizeOf !wcharType) -> true
-	 | TInt _ ->
-              (*Base type is a scalar other than wchar_t.  Maybe a char?*)
-	      E.s (error "Using a wide string literal to initialize something other than a wchar_t array.\n")
-	 | _ -> false (* OK, this is probably an array of strings. Handle *)
-        )             (* it with the other arrays below.*)
-    -> 
-      let maxWChar =  (*  (2**(bitsSizeOf !wcharType)) - 1  *)
-        Int64.sub (Int64.shift_left Int64.one (bitsSizeOf !wcharType)) 
-          Int64.one in
-      let charinits = 
-	let init c = 
-	  if (compare c maxWChar > 0) then (* if c > maxWChar *)
-	    E.s (error "cab2cil:doInit:character 0x%Lx too big." c);
-          A.NEXT_INIT, 
-          A.SINGLE_INIT(A.CONSTANT (A.CONST_INT (Int64.to_string c)))
-	in
-        (List.map init s) @
-        (
-	  (* ISO 6.7.8 para 14: final NUL added only if no size specified, or
-	   * if there is room for it; btw, we can't rely on zero-init of
-	   * globals, since this array might be a local variable *)
-          if ((isNone leno) or ((List.length s) < (integerArrayLength leno)))
-            then [init Int64.zero]
-            else [])
-(*
-        List.map 
-          (fun c -> 
-	    if (compare c maxWChar > 0) then (* if c > maxWChar *)
-	      E.s (error "cab2cil:doInit:character 0x%Lx too big." c)
-	    else
-              (A.NEXT_INIT, 
-               A.SINGLE_INIT(A.CONSTANT (A.CONST_INT (Int64.to_string c)))))
-      s
-*)
-      in
-      (* Create a separate object for the array *)
-      let so' = makeSubobj so.host so.soTyp so.soOff in 
-      (* Go inside the array *)
-      let leno = integerArrayLength leno in
-      so'.stack <- [InArray(so'.curOff, bt, leno, ref 0)];
-      normalSubobj so';
-      let acc', initl' = doInit isconst setone so' acc charinits in
-      if initl' <> [] then 
-        (* sm: see above regarding ISO 6.7.8 para 14, which is not implemented
-         * for wchar_t because, as far as I can tell, we don't even put in
-         * the automatic NUL (!) *)
-        ignore (warn "Too many initializers for wchar_t array %t" whoami);
-      (* Advance past the array *)
-      advanceSubobj so;
-      (* Continue *)
-      doInit isconst setone so acc' restil
-                    
-      (* If we are at an array and we see a single initializer then it must 
-       * be one for the first element *)
-  | TArray(bt, leno, al), (A.NEXT_INIT, A.SINGLE_INIT oneinit) :: restil  -> 
-      (* Grab the length if there is one *)
-      let leno = integerArrayLength leno in
-      so.stack <- InArray(so.soOff, bt, leno, ref 0) :: so.stack; 
-      normalSubobj so;
-      (* Start over with the fields *)
-      doInit isconst setone so acc allinitl
-
-    (* If we are at a composite and we see a single initializer of the same 
-     * type as the composite then grab it all. If the type is not the same 
-     * then we must go on and try to initialize the fields *)
-  | TComp (comp, _), (A.NEXT_INIT, A.SINGLE_INIT oneinit) :: restil -> 
-      let se, oneinit', t' = doExp isconst oneinit (AExp None) in
-      if (match unrollType t' with 
-             TComp (comp', _) when comp'.ckey = comp.ckey -> true 
-            | _ -> false) 
-      then begin
-        (* Initialize the whole struct *)
-        setone so.soOff oneinit';
-        (* Advance to the next subobject *)
-        advanceSubobj so;
-        doInit isconst setone so (acc @@ se) restil
-      end else begin (* Try to initialize fields *)
-        let toinit = fieldsToInit comp None in
-        so.stack <- InComp(so.soOff, comp, toinit) :: so.stack;
-        normalSubobj so;
-        doInit isconst setone so acc allinitl
-      end
-
-     (* A scalar with a single initializer *)
-  | _, (A.NEXT_INIT, A.SINGLE_INIT oneinit) :: restil ->  
-      let se, oneinit', t' = doExp isconst oneinit (AExp(Some so.soTyp)) in
-(*
-      ignore (E.log "oneinit'=%a, t'=%a, so.soTyp=%a\n" 
-           d_exp oneinit' d_type t' d_type so.soTyp);
-*)
-      setone so.soOff (mkCastT oneinit' t' so.soTyp);
-      (* Move on *)
-      advanceSubobj so; 
-      doInit isconst setone so (acc @@ se) restil
-
-
-     (* An array with a compound initializer. The initializer is for the 
-      * array elements *)
-  | TArray (bt, leno, _), (A.NEXT_INIT, A.COMPOUND_INIT initl) :: restil -> 
-      (* Create a separate object for the array *)
-      let so' = makeSubobj so.host so.soTyp so.soOff in 
-      (* Go inside the array *)
-      let leno = integerArrayLength leno in
-      so'.stack <- [InArray(so'.curOff, bt, leno, ref 0)];
-      normalSubobj so';
-      let acc', initl' = doInit isconst setone so' acc initl in
-      if initl' <> [] then 
-        ignore (warn "Too many initializers for array %t" whoami);
-      (* Advance past the array *)
-      advanceSubobj so;
-      (* Continue *)
-      let res = doInit isconst setone so acc' restil in
-      res
-
-   (* We have a designator that tells us to select the matching union field. 
-    * This is to support a GCC extension *)
-  | TComp(ci, _), [(A.NEXT_INIT,
-                    A.COMPOUND_INIT [(A.INFIELD_INIT ("___matching_field", 
-                                                     A.NEXT_INIT), 
-                                      A.SINGLE_INIT oneinit)])] 
-                      when not ci.cstruct -> 
-      (* Do the expression to find its type *)
-      let _, _, t' = doExp isconst oneinit (AExp None) in
-      let tsig = typeSigWithAttrs (fun _ -> []) t' in
-      let rec findField = function
-          [] -> E.s (error "Cannot find matching union field in cast")
-        | fi :: rest 
-           when Util.equals (typeSigWithAttrs (fun _ -> []) fi.ftype) tsig 
-           -> fi
-        | _ :: rest -> findField rest
-      in
-      let fi = findField ci.cfields in
-      (* Change the designator and redo *)
-      doInit isconst setone so acc [(A.INFIELD_INIT (fi.fname, A.NEXT_INIT),
-                                     A.SINGLE_INIT oneinit)]
-        
-
-        (* A structure with a composite initializer. We initialize the fields*)
-  | TComp (comp, _), (A.NEXT_INIT, A.COMPOUND_INIT initl) :: restil ->
-      (* Create a separate subobject iterator *)
-      let so' = makeSubobj so.host so.soTyp so.soOff in
-      (* Go inside the comp *)
-      so'.stack <- [InComp(so'.curOff, comp, fieldsToInit comp None)];
-      normalSubobj so';
-      let acc', initl' = doInit isconst setone so' acc initl in
-      if initl' <> [] then 
-        ignore (warn "Too many initializers for structure");
-      (* Advance past the structure *)
-      advanceSubobj so;
-      (* Continue *)
-      doInit isconst setone so acc' restil
-
-        (* A scalar with a initializer surrounded by braces *)
-  | _, (A.NEXT_INIT, A.COMPOUND_INIT [(A.NEXT_INIT, 
-                                       A.SINGLE_INIT oneinit)]) :: restil ->
-      let se, oneinit', t' = doExp isconst oneinit (AExp(Some so.soTyp)) in
-      setone so.soOff (mkCastT oneinit' t' so.soTyp);
-      (* Move on *)
-      advanceSubobj so; 
-      doInit isconst setone so (acc @@ se) restil
-
-  | t, (A.NEXT_INIT, _) :: _ -> 
-      E.s (unimp "doInit: unexpected NEXT_INIT for %a\n" d_type t);
-
-   (* We have a designator *)        
-  | _, (what, ie) :: restil when what != A.NEXT_INIT -> 
-      (* Process a designator and position to the designated subobject *)
-      let rec addressSubobj 
-          (so: subobj) 
-          (what: A.initwhat) 
-          (acc: chunk) : chunk = 
-        (* Always start from the current element *)
-        so.stack <- []; so.eof <- false; 
-        normalSubobj so;
-        let rec address (what: A.initwhat) (acc: chunk)  : chunk = 
-          match what with 
-            A.NEXT_INIT -> acc
-          | A.INFIELD_INIT (fn, whatnext) -> begin
-              match unrollType so.soTyp with 
-                TComp (comp, _) -> 
-                  let toinit = fieldsToInit comp (Some fn) in
-                  so.stack <- InComp(so.soOff, comp, toinit) :: so.stack;
-                  normalSubobj so;
-                  address whatnext acc
-                    
-              | _ -> E.s (error "Field designator %s not in a struct " fn)
-          end
-                
-          | A.ATINDEX_INIT(idx, whatnext) -> begin
-              match unrollType so.soTyp with 
-                TArray (bt, leno, _) -> 
-                  let ilen = integerArrayLength leno in
-                  let nextidx', doidx = 
-                    let (doidx, idxe', _) = 
-                      doExp true idx (AExp(Some intType)) in
-                    match constFold true idxe', isNotEmpty doidx with
-                      Const(CInt64(x, _, _)), false -> Int64.to_int x, doidx
-                    | _ -> E.s (error 
-                      "INDEX initialization designator is not a constant")
-                  in
-                  if nextidx' < 0 || nextidx' >= ilen then
-                    E.s (error "INDEX designator is outside bounds");
-                  so.stack <- 
-                     InArray(so.soOff, bt, ilen, ref nextidx') :: so.stack;
-                  normalSubobj so;
-                  address whatnext (acc @@ doidx)
-                    
-              | _ -> E.s (error "INDEX designator for a non-array")
-          end 
-                
-          | A.ATINDEXRANGE_INIT _ -> 
-              E.s (bug "addressSubobj: INDEXRANGE")
-        in
-        address what acc
-      in
-      (* First expand the INDEXRANGE by making copies *)
-      let rec expandRange (top: A.initwhat -> A.initwhat) = function
-        | A.INFIELD_INIT (fn, whatnext) -> 
-            expandRange (fun what -> top (A.INFIELD_INIT(fn, what))) whatnext
-        | A.ATINDEX_INIT (idx, whatnext) ->
-            expandRange (fun what -> top (A.ATINDEX_INIT(idx, what))) whatnext
-
-        | A.ATINDEXRANGE_INIT (idxs, idxe) -> 
-            let (doidxs, idxs', _) = 
-              doExp true idxs (AExp(Some intType)) in
-            let (doidxe, idxe', _) = 
-              doExp true idxe (AExp(Some intType)) in
-            if isNotEmpty doidxs || isNotEmpty doidxe then 
-              E.s (error "Range designators are not constants\n");
-            let first, last = 
-              match constFold true idxs', constFold true idxe' with
-                Const(CInt64(s, _, _)), 
-                Const(CInt64(e, _, _)) -> 
-                  Int64.to_int s, Int64.to_int e
-              | _ -> E.s (error 
-                 "INDEX_RANGE initialization designator is not a constant")
-            in
-            if first < 0 || first > last then 
-              E.s (error 
-                     "start index larger than end index in range initializer");
-            let rec loop (i: int) = 
-              if i > last then restil
-              else 
-                (top (A.ATINDEX_INIT(A.CONSTANT(A.CONST_INT(string_of_int i)),
-                                     A.NEXT_INIT)), ie) 
-                :: loop (i + 1) 
-            in
-            doInit isconst setone so acc (loop first)
-
-        | A.NEXT_INIT -> (* We have not found any RANGE *) 
-            let acc' = addressSubobj so what acc in
-            doInit isconst setone so (acc @@ acc') 
-              ((A.NEXT_INIT, ie) :: restil)
-      in
-      expandRange (fun x -> x) what
-  
-  | t, (what, ie) :: _ -> 
-      E.s (bug "doInit: cases for t=%a" d_type t) 
-
-
-(* Create and add to the file (if not already added) a global. Return the 
- * varinfo *)
-and createGlobal (specs : (typ * storage * bool * A.attribute list)) 
-                 (((n,ndt,a,cloc), inite) : A.init_name) : varinfo = 
-  try
-    if debugGlobal then 
-      ignore (E.log "createGlobal: %s\n" n);
-            (* Make a first version of the varinfo *)
-    let vi = makeVarInfoCabs ~isformal:false 
-                             ~isglobal:true (convLoc cloc) specs (n,ndt,a) in
-    (* Add the variable to the environment before doing the initializer 
-     * because it might refer to the variable itself *)
-    if isFunctionType vi.vtype then begin
-      if inite != A.NO_INIT  then
-        E.s (error "Function declaration with initializer (%s)\n"
-               vi.vname);
-      (* sm: if it's a function prototype, and the storage class *)
-      (* isn't specified, make it 'extern'; this fixes a problem *)
-      (* with no-storage prototype and static definition *)
-      if vi.vstorage = NoStorage then 
-        (*(trace "sm" (dprintf "adding extern to prototype of %s\n" n));*)
-        vi.vstorage <- Extern;
-    end;
-    let vi, alreadyInEnv = makeGlobalVarinfo (inite != A.NO_INIT) vi in
-(*
-    ignore (E.log "createGlobal %a: %s type=%a\n" 
-       d_loc (convLoc cloc) vi.vname d_plaintype vi.vtype);
-*)
-            (* Do the initializer and complete the array type if necessary *)
-    let init : init option = 
-      if inite = A.NO_INIT then 
-        None
-      else 
-        let se, ie', et = doInitializer vi inite in
-        (* Maybe we now have a better type *)
-        vi.vtype <- et;
-        if isNotEmpty se then 
-          E.s (error "global initializer");
-        Some ie'
-    in
-
-    try
-      let oldloc = H.find alreadyDefined vi.vname in
-      if init != None then begin
-        E.s (error "Global %s was already defined at %a\n" 
-               vi.vname d_loc oldloc);
-      end;
-      if debugGlobal then 
-        ignore (E.log " global %s was already defined\n" vi.vname);
-      (* Do not declare it again *)
-      vi
-    with Not_found -> begin
-      (* Not already defined *)
-      if debugGlobal then 
-        ignore (E.log " first definition for %s\n" vi.vname);
-      if init != None then begin
-        (* weimer: Sat Dec  8 17:43:34  2001
-         * MSVC NT Kernel headers include this lovely line:
-         * extern const GUID __declspec(selectany) \
-         *  MOUNTDEV_MOUNTED_DEVICE_GUID = { 0x53f5630d, 0xb6bf, 0x11d0, { \
-         *  0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b } };
-         * So we allow "extern" + "initializer" if "const" is
-         * around. *)
-        (* sm: As I read the ISO spec, in particular 6.9.2 and 6.7.8,
-         * "extern int foo = 3" is exactly equivalent to "int foo = 3";
-         * that is, if you put an initializer, then it is a definition,
-         * and "extern" is redundantly giving the name external linkage.
-         * gcc emits a warning, I guess because it is contrary to
-         * usual practice, but I think CIL warnings should be about
-         * semantic rather than stylistic issues, so I see no reason to
-         * even emit a warning. *)
-        if vi.vstorage = Extern then
-          vi.vstorage <- NoStorage;     (* equivalent and canonical *)
-
-        H.add alreadyDefined vi.vname !currentLoc;
-        IH.remove mustTurnIntoDef vi.vid;
-        cabsPushGlobal (GVar(vi, {init = init}, !currentLoc));
-        vi
-      end else begin
-        if not (isFunctionType vi.vtype) 
-           && not (IH.mem mustTurnIntoDef vi.vid) then 
-          begin
-            IH.add mustTurnIntoDef vi.vid true
-          end;
-        if not alreadyInEnv then begin (* Only one declaration *)
-          (* If it has function type it is a prototype *)
-          cabsPushGlobal (GVarDecl (vi, !currentLoc));
-          vi
-        end else begin
-          if debugGlobal then 
-            ignore (E.log " already in env %s\n" vi.vname);
-          vi
-        end
-      end
-    end
-  with e -> begin
-    ignore (E.log "error in createGlobal(%s: %a): %s\n" n
-              d_loc !currentLoc
-              (Printexc.to_string e));
-    cabsPushGlobal (dGlobal (dprintf "booo - error in global %s (%t)" 
-                           n d_thisloc) !currentLoc);
-    dummyFunDec.svar
-  end
-(*
-          ignore (E.log "Env after processing global %s is:@!%t@!" 
-                    n docEnv);
-          ignore (E.log "Alpha after processing global %s is:@!%t@!" 
-                    n docAlphaTable)
-*)
-
-(* Must catch the Static local variables. Make them global *)
-and createLocal ((_, sto, _, _) as specs)
-                ((((n, ndt, a, cloc) : A.name), 
-                  (inite: A.init_expression)) as init_name) 
-  : chunk =
-  let loc = convLoc cloc in
-  (* Check if we are declaring a function *)
-  let rec isProto (dt: decl_type) : bool = 
-    match dt with
-    | PROTO (JUSTBASE, _, _) -> true
-    | PROTO (x, _, _) -> isProto x
-    | PARENTYPE (_, x, _) -> isProto x
-    | ARRAY (x, _, _) -> isProto x
-    | PTR (_, x) -> isProto x
-    | _ -> false
-  in
-  match ndt with 
-    (* Maybe we have a function prototype in local scope. Make it global. We 
-     * do this even if the storage is Static *)
-  | _ when isProto ndt -> 
-      let vi = createGlobal specs init_name in 
-      (* Add it to the environment to shadow previous decls *)
-      addLocalToEnv n (EnvVar vi);
-      empty
-    
-  | _ when sto = Static -> 
-      if debugGlobal then 
-        ignore (E.log "createGlobal (local static): %s\n" n);
-
-
-      (* Now alpha convert it to make sure that it does not conflict with 
-       * existing globals or locals from this function. *)
-      let newname, _  = newAlphaName true "" n in
-      (* Make it global  *)
-      let vi = makeVarInfoCabs ~isformal:false
-                               ~isglobal:true 
-                               loc specs (newname, ndt, a) in
-      (* However, we have a problem if a real global appears later with the 
-       * name that we have happened to choose for this one. Remember these names 
-       * for later. *)
-      H.add staticLocals vi.vname vi;
-      (* Add it to the environment as a local so that the name goes out of 
-       * scope properly *)
-      addLocalToEnv n (EnvVar vi);
-
-      (* Maybe this is an array whose length depends on something with local 
-         scope, e.g. "static char device[ sizeof(local) ]".
-         Const-fold the type to fix this. *)
-      vi.vtype <- constFoldType vi.vtype;
-
-      let init : init option = 
-        if inite = A.NO_INIT then 
-          None
-        else begin 
-          let se, ie', et = doInitializer vi inite in
-          (* Maybe we now have a better type *)
-          vi.vtype <- et;
-          if isNotEmpty se then 
-            E.s (error "global static initializer");
-          (* Maybe the initializer refers to the function itself. 
-             Push a prototype for the function, just in case. Hopefully,
-             if does not refer to the locals *)
-          cabsPushGlobal (GVarDecl (!currentFunctionFDEC.svar, !currentLoc));
-          Some ie'
-        end
-      in
-      cabsPushGlobal (GVar(vi, {init = init}, !currentLoc));
-      empty
-
-  (* Maybe we have an extern declaration. Make it a global *)
-  | _ when sto = Extern ->
-      let vi = createGlobal specs init_name in
-      (* Add it to the local environment to ensure that it shadows previous 
-       * local variables *)
-      addLocalToEnv n (EnvVar vi);
-      empty
-
-  | _ -> 
-      (* Make a variable of potentially variable size. If se0 <> empty then 
-       * it is a variable size variable *)
-      let vi,se0,len,isvarsize = 
-        makeVarSizeVarInfo loc specs (n, ndt, a) in
-
-      let vi = alphaConvertVarAndAddToEnv true vi in        (* Replace vi *)
-      let se1 = 
-        if isvarsize then begin (* Variable-sized array *) 
-          ignore (warn "Variable-sized local variable %s" vi.vname);
-          (* Make a local variable to keep the length *)
-          let savelen = 
-            makeVarInfoCabs 
-                        ~isformal:false
-                        ~isglobal:false 
-	                loc
-                        (TInt(IUInt, []), NoStorage, false, [])
-                        ("__lengthof" ^ vi.vname,JUSTBASE, []) 
-          in
-          (* Register it *)
-          let savelen = alphaConvertVarAndAddToEnv true savelen in
-          (* Compute the sizeof *)
-          let sizeof = 
-            BinOp(Mult, 
-                  SizeOfE (Lval(Mem(Lval(var vi)), NoOffset)),
-                  Lval (var savelen), !typeOfSizeOf) in
-          (* Register the length *)
-          IH.add varSizeArrays vi.vid sizeof;
-          (* There can be no initializer for this *)
-          if inite != A.NO_INIT then 
-            E.s (error "Variable-sized array cannot have initializer");
-          se0 +++ (Set(var savelen, len, !currentLoc)) 
-            (* Initialize the variable *)
-            +++ (Call(Some(var vi), Lval(var (allocaFun ())), 
-                      [ sizeof  ], !currentLoc))
-        end else empty
-      in
-      if inite = A.NO_INIT then
-        se1 (* skipChunk *)
-      else begin
-        let se4, ie', et = doInitializer vi inite in
-        (* Fix the length *)
-        (match vi.vtype, ie', et with 
-            (* We have a length now *)
-          TArray(_,None, _), _, TArray(_, Some _, _) -> vi.vtype <- et
-            (* Initializing a local array *)
-        | TArray(TInt((IChar|IUChar|ISChar), _) as bt, None, a),
-             SingleInit(Const(CStr s)), _ -> 
-               vi.vtype <- TArray(bt, 
-                                  Some (integer (String.length s + 1)),
-                                  a)
-        | _, _, _ -> ());
-
-        (* Now create assignments instead of the initialization *)
-        se1 @@ se4 @@ (assignInit (Var vi, NoOffset) ie' et empty)
-      end
-          
-and doAliasFun vtype (thisname:string) (othername:string) 
-  (sname:single_name) (loc: cabsloc) : unit =
-  (* This prototype declares that name is an alias for 
-     othername, which must be defined in this file *)
-(*   E.log "%s is alias for %s at %a\n" thisname othername  *)
-(*     d_loc !currentLoc; *)
-  let rt, formals, isva, _ = splitFunctionType vtype in
-  if isva then E.s (error "%a: alias unsupported with varargs."
-                      d_loc !currentLoc);
-  let args = List.map 
-               (fun (n,_,_) -> A.VARIABLE n)
-               (argsToList formals) in
-  let call = A.CALL (A.VARIABLE othername, args) in
-  let stmt = if isVoidType rt then A.COMPUTATION(call, loc)
-                              else A.RETURN(call, loc)
-  in
-  let body = { A.blabels = []; A.battrs = []; A.bstmts = [stmt] } in
-  let fdef = A.FUNDEF (sname, body, loc, loc) in
-  ignore (doDecl true fdef);
-  (* get the new function *)
-  let v,_ = try lookupGlobalVar thisname
-            with Not_found -> E.s (bug "error in doDecl") in
-  v.vattr <- dropAttribute "alias" v.vattr
-
-          
-(* Do one declaration *)
-and doDecl (isglobal: bool) : A.definition -> chunk = function
-  | A.DECDEF ((s, nl), loc) ->
-      currentLoc := convLoc(loc);
-      (* Do the specifiers exactly once *)
-      let sugg = 
-        match nl with 
-          [] -> ""
-        | ((n, _, _, _), _) :: _ -> n
-      in
-      let spec_res = doSpecList sugg s in
-      (* Do all the variables and concatenate the resulting statements *)
-      let doOneDeclarator (acc: chunk) (name: init_name) = 
-        let (n,ndt,a,l),_ = name in
-        if isglobal then begin
-          let bt,_,_,attrs = spec_res in
-          let vtype, nattr = 
-            doType (AttrName false) bt (A.PARENTYPE(attrs, ndt, a)) in
-          (match filterAttributes "alias" nattr with
-             [] -> (* ordinary prototype. *)
-               ignore (createGlobal spec_res name)
-              (*  E.log "%s is not aliased\n" name *)
-           | [Attr("alias", [AStr othername])] ->
-               if not (isFunctionType vtype) then begin
-                 ignore (warn 
-                   "%a: CIL only supports attribute((alias)) for functions.\n"
-                   d_loc !currentLoc);
-                 ignore (createGlobal spec_res name)
-               end else
-                 doAliasFun vtype n othername (s, (n,ndt,a,l)) loc
-           | _ -> E.s (error "Bad alias attribute at %a" d_loc !currentLoc));
-          acc
-        end else 
-          acc @@ createLocal spec_res name
-      in
-      let res = List.fold_left doOneDeclarator empty nl in
-(*
-      ignore (E.log "after doDecl %a: res=%a\n" 
-           d_loc !currentLoc d_chunk res);
-*)
-      res
-
-
-
-  | A.TYPEDEF (ng, loc) -> 
-     currentLoc := convLoc(loc);
-     doTypedef ng; empty
-
-  | A.ONLYTYPEDEF (s, loc) -> 
-      currentLoc := convLoc(loc);
-      doOnlyTypedef s; empty
-
-  | A.GLOBASM (s,loc) when isglobal ->
-      currentLoc := convLoc(loc);
-      cabsPushGlobal (GAsm (s, !currentLoc));
-      empty
-        
-  | A.PRAGMA (a, loc) when isglobal -> begin
-      currentLoc := convLoc(loc);
-      match doAttr ("dummy", [a]) with
-        [Attr("dummy", [a'])] ->
-          let a'' =
-            match a' with
-            | ACons (s, args) -> Attr (s, args)
-            | _ -> E.s (error "Unexpected attribute in #pragma")
-          in
-          cabsPushGlobal (GPragma (a'', !currentLoc));
-          empty
-
-      | _ -> E.s (error "Too many attributes in pragma")
-  end
-  | A.TRANSFORMER (_, _, _) -> E.s (E.bug "TRANSFORMER in cabs2cil input")
-  | A.EXPRTRANSFORMER (_, _, _) -> 
-      E.s (E.bug "EXPRTRANSFORMER in cabs2cil input")
-        
-  (* If there are multiple definitions of extern inline, turn all but the 
-   * first into a prototype *)
-  | A.FUNDEF (((specs,(n,dt,a,loc')) : A.single_name),
-              (body : A.block), loc, _) 
-      when isglobal && isExtern specs && isInline specs 
-           && (H.mem genv (n ^ "__extinline")) -> 
-       currentLoc := convLoc(loc);
-       let othervi, _ = lookupVar (n ^ "__extinline") in
-       if othervi.vname = n then 
-         (* The previous entry in the env is also an extern inline version
-            of n. *)
-         ignore (warn "Duplicate extern inline definition for %s ignored" n)
-       else begin
-         (* Otherwise, the previous entry is an ordinary function that
-            happens to be named __extinline.  Renaming n to n__extinline
-            would confict with other, so report an error. *)
-         E.s (unimp("Trying to rename %s to\n %s__extinline, but %s__extinline"
-                     ^^ " already exists in the env.\n  \"__extinline\" is"
-                     ^^ " reserved for CIL.\n") n n n)
-       end;
-       (* Treat it as a prototype *)
-       doDecl isglobal (A.DECDEF ((specs, [((n,dt,a,loc'), A.NO_INIT)]), loc))
-
-  | A.FUNDEF (((specs,(n,dt,a, _)) : A.single_name),
-              (body : A.block), loc1, loc2) when isglobal ->
-    begin
-      let funloc = convLoc loc1 in
-      let endloc = convLoc loc2 in
-(*      ignore (E.log "Definition of %s at %a\n" n d_loc funloc); *)
-      currentLoc := funloc;
-      E.withContext
-        (fun _ -> dprintf "2cil: %s" n)
-        (fun _ ->
-          try
-            IH.clear callTempVars;
-
-            (* Make the fundec right away, and we'll populate it later. We 
-             * need this throughout the code to create temporaries. *)
-            currentFunctionFDEC := 
-               { svar     = makeGlobalVar "@tempname@" voidType;
-                 slocals  = []; (* For now we'll put here both the locals and 
-                                 * the formals. Then "endFunction" will 
-                                 * separate them *)
-                 sformals = []; (* Not final yet *)
-                 smaxid   = 0;
-                 sbody    = dummyFunDec.sbody; (* Not final yet *)
-		 smaxstmtid = None;
-                 sallstmts = [];
-               };
-	    !currentFunctionFDEC.svar.vdecl <- funloc;
-
-            constrExprId := 0;
-            (* Setup the environment. Add the formals to the locals. Maybe
-            * they need alpha-conv  *)
-            enterScope ();  (* Start the scope *)
-            
-            IH.clear varSizeArrays;
-            
-            (* Do not process transparent unions in function definitions.
-            * We'll do it later *)
-            transparentUnionArgs := [];
-
-            (* Fix the NAME and the STORAGE *)
-            let _ = 
-              let bt,sto,inl,attrs = doSpecList n specs in
-              !currentFunctionFDEC.svar.vinline <- inl;
-              
-              let ftyp, funattr = 
-                doType (AttrName false) bt (A.PARENTYPE(attrs, dt, a)) in
-              !currentFunctionFDEC.svar.vtype <- ftyp;
-              !currentFunctionFDEC.svar.vattr <- funattr;
-
-              (* If this is the definition of an extern inline then we change 
-               * its name, by adding the suffix __extinline. We also make it 
-               * static *)
-              let n', sto' =
-                let n' = n ^ "__extinline" in
-                if inl && sto = Extern then 
-                  n', Static
-                else begin 
-                  (* Maybe this is the body of a previous extern inline. Then 
-                  * we must take that one out of the environment because it 
-                  * is not used from here on. This will also ensure that 
-                  * then we make this functions' varinfo we will not think 
-                  * it is a duplicate definition *)
-                  (try
-                    ignore (lookupVar n'); (* if this succeeds, n' is defined*)
-                    let oldvi, _ = lookupVar n in
-                    if oldvi.vname = n' then begin 
-                      (* oldvi is an extern inline function that has been
-                         renamed to n ^ "__extinline".  Remove it from the
-                         environment. *)
-                      H.remove env n; H.remove genv n;
-                      H.remove env n'; H.remove genv n'
-                    end 
-                    else
-                      (* oldvi is not a renamed extern inline function, and
-                         we should do nothing.  The reason the lookup
-                         of n' succeeded is probably because there's
-                         an ordinary function that happens to be named,
-                         n ^ "__extinline", probably as a result of a previous
-                         pass through CIL.   See small2/extinline.c*)
-                      ()
-                   with Not_found -> ());
-                  n, sto 
-                end
-              in
-              (* Now we have the name and the storage *)
-              !currentFunctionFDEC.svar.vname <- n';
-              !currentFunctionFDEC.svar.vstorage <- sto'
-            in
-              
-            (* Add the function itself to the environment. Add it before 
-            * you do the body because the function might be recursive. Add 
-            * it also before you add the formals to the environment 
-            * because there might be a formal with the same name as the 
-            * function and we want it to take precedence. *)
-            (* Make a variable out of it and put it in the environment *)
-            !currentFunctionFDEC.svar <- 
-               fst (makeGlobalVarinfo true !currentFunctionFDEC.svar);
-
-            (* If it is extern inline then we add it to the global 
-             * environment for the original name as well. This will ensure 
-             * that all uses of this function will refer to the renamed 
-             * function *)
-            addGlobalToEnv n (EnvVar !currentFunctionFDEC.svar);
-
-            if H.mem alreadyDefined !currentFunctionFDEC.svar.vname then
-              E.s (error "There is a definition already for %s" n);
-
-(*
-            ignore (E.log "makefunvar:%s@! type=%a@! vattr=%a@!"
-                        n d_type thisFunctionVI.vtype 
-                        d_attrlist thisFunctionVI.vattr);
-*)
-
-            (* makeGlobalVarinfo might have changed the type of the function 
-             * (when combining it with the type of the prototype). So get the 
-             * type only now. *)
-
-            (**** Process the TYPE and the FORMALS ***)
-            let _ = 
-              let (returnType, formals_t, isvararg, funta) =
-                splitFunctionTypeVI !currentFunctionFDEC.svar 
-              in
-              (* Record the returnType for doStatement *)
-              currentReturnType   := returnType;
-              
-              
-              (* Create the formals and add them to the environment. *)
-	      (* sfg: extract locations for the formals from dt *)
-	      let doFormal (loc : location) (fn, ft, fa) =
-		let f = makeVarinfo false fn ft in
-		  (f.vdecl <- loc;
-		   f.vattr <- fa;
-		   alphaConvertVarAndAddToEnv true f)
-	      in
-	      let rec doFormals fl' ll' = 
-		begin
-		  match (fl', ll') with
-		    | [], _ -> [] 
-			
-		    | fl, [] -> (* no more locs available *)
-			  List.map (doFormal !currentLoc) fl 
-			
-		    | f::fl, (_,(_,_,_,l))::ll ->  
-			(* sfg: these lets seem to be necessary to
-			 *  force the right order of evaluation *)
-			let f' = doFormal (convLoc l) f in
-			let fl' = doFormals fl ll in
-			  f' :: fl'
-		end
-	      in
-	      let fmlocs = (match dt with PROTO(_, fml, _) -> fml | _ -> []) in
-	      let formals = doFormals (argsToList formals_t) fmlocs in
-
-              (* Recreate the type based on the formals. *)
-              let ftype = TFun(returnType, 
-                               Some (List.map (fun f -> (f.vname,
-                                                         f.vtype, 
-                                                         f.vattr)) formals), 
-                               isvararg, funta) in
-              (*
-              ignore (E.log "Funtype of %s: %a\n" n' d_type ftype);
-              *)
-              (* Now fix the names of the formals in the type of the function 
-              * as well *)
-              !currentFunctionFDEC.svar.vtype <- ftype;
-              !currentFunctionFDEC.sformals <- formals;
-            in
-            (* Now change the type of transparent union args back to what it 
-             * was so that the body type checks. We must do it this late 
-             * because makeGlobalVarinfo from above might choke if we give 
-             * the function a type containing transparent unions  *)
-            let _ =
-              let rec fixbackFormals (idx: int) (args: varinfo list) : unit=
-                match args with
-                  [] -> ()
-                | a :: args' ->
-                    (* Fix the type back to a transparent union type *)
-                    (try
-                      let origtype = List.assq idx !transparentUnionArgs in
-                      a.vtype <- origtype;
-                    with Not_found -> ());
-                    fixbackFormals (idx + 1) args'
-              in
-              fixbackFormals 0 !currentFunctionFDEC.sformals;
-              transparentUnionArgs := [];
-            in
-
-            (********** Now do the BODY *************)
-            let _ = 
-              let stmts = doBody body in
-              (* Finish everything *)
-              exitScope ();
-
-              (* Now fill in the computed goto statement with cases. Do this 
-               * before mkFunctionbody which resolves the gotos *)
-              (match !gotoTargetData with
-                Some (switchv, switch) ->
-                  let switche, l =
-                    match switch.skind with
-                      Switch (switche, _, _, l) -> switche, l
-                    | _ -> E.s(bug "the computed goto statement not a switch")
-                  in
-                  (* Build a default chunk that segfaults *)
-                  let default =
-                    defaultChunk
-                      l
-                      (i2c (Set ((Mem (mkCast (integer 0) intPtrType),
-                                  NoOffset),
-                                 integer 0, l)))
-                  in
-                  let bodychunk = ref default in
-                  H.iter (fun lname laddr ->
-                    bodychunk :=
-                       caseRangeChunk
-                         [integer laddr] l
-                         (gotoChunk lname l @@ !bodychunk))
-                    gotoTargetHash;
-                  (* Now recreate the switch *)
-                  let newswitch = switchChunk switche !bodychunk l in
-                  (* We must still share the old switch statement since we
-                  * have already inserted the goto's *)
-                  let newswitchkind =
-                    match newswitch.stmts with
-                      [ s]
-                        when newswitch.postins == [] && newswitch.cases == []->
-                          s.skind
-                    | _ -> E.s (bug "Unexpected result from switchChunk")
-                  in
-                  switch.skind <- newswitchkind
-                     
-              | None -> ());
-              (* Now finish the body and store it *)
-              !currentFunctionFDEC.sbody <- mkFunctionBody stmts;
-              (* Reset the global parameters *)
-              gotoTargetData := None;
-              H.clear gotoTargetHash;
-              gotoTargetNextAddr := 0;
-            in
-            
-
-	     
-(*
-              ignore (E.log "endFunction %s at %t:@! sformals=%a@!  slocals=%a@!"
-              !currentFunctionFDEC.svar.vname d_thisloc
-              (docList ~sep:(chr ',') (fun v -> text v.vname)) 
-              !currentFunctionFDEC.sformals
-              (docList ~sep:(chr ',') (fun v -> text v.vname)) 
-              !currentFunctionFDEC.slocals);
-*)
-
-            let rec dropFormals formals locals = 
-              match formals, locals with
-                [], l -> l
-              | f :: formals, l :: locals -> 
-                  if f != l then 
-                    E.s (bug "formal %s is not in locals (found instead %s)" 
-                           f.vname l.vname);
-                  dropFormals formals locals
-              | _ -> E.s (bug "Too few locals")
-            in
-            !currentFunctionFDEC.slocals 
-              <- dropFormals !currentFunctionFDEC.sformals 
-                   (List.rev !currentFunctionFDEC.slocals);
-            setMaxId !currentFunctionFDEC;
- 
-            (* Now go over the types of the formals and pull out the formals 
-             * with transparent union type. Replace them with some shadow 
-             * parameters and then add assignments  *)
-            let _ = 
-              let newformals, newbody =
-                List.fold_right (* So that the formals come out in order *)
-                  (fun f (accform, accbody) ->
-                    match isTransparentUnion f.vtype with
-                      None -> (f :: accform, accbody)
-                    | Some fstfield ->
-                        (* A new shadow to be placed in the formals. Use 
-                         * makeTempVar to update smaxid and all others. *)
-                        let shadow = 
-                          makeTempVar !currentFunctionFDEC fstfield.ftype in
-                        (* Now take it out of the locals and replace it with 
-                        * the current formal. It is not worth optimizing this 
-                        * one.  *)
-                        !currentFunctionFDEC.slocals <-
-                           f ::
-                           (List.filter (fun x -> x.vid <> shadow.vid)
-                              !currentFunctionFDEC.slocals);
-                        (shadow :: accform,
-                         mkStmt (Instr [Set ((Var f, Field(fstfield,
-                                                           NoOffset)),
-                                             Lval (var shadow),
-                                             !currentLoc)]) :: accbody))
-                  !currentFunctionFDEC.sformals
-                  ([], !currentFunctionFDEC.sbody.bstmts)
-              in
-              !currentFunctionFDEC.sbody.bstmts <- newbody;
-              (* To make sure sharing with the type is proper *)
-              setFormals !currentFunctionFDEC newformals; 
-            in
-
-            (* Now see whether we can fall through to the end of the function 
-             * *)
-            (* weimer: Sat Dec 8 17:30:47 2001 MSVC NT kernel headers include 
-             * functions like long convert(x) { __asm { mov eax, x \n cdq } } 
-             * That set a return value via an ASM statement. As a result, I 
-             * am changing this so a final ASM statement does not count as 
-             * "fall through" for the purposes of this warning.  *)
-            (* matth: But it's better to assume assembly will fall through,
-             * since  most such blocks do.  It's probably better to print an
-             * unnecessary warning than to break CIL's invariant that
-             * return statements are inserted properly.  *)
-            let instrFallsThrough (i : instr) = match i with
-              Set _ -> true
-            | Call (None, Lval (Var e, NoOffset), _, _) -> 
-                (* See if this is exit, or if it has the noreturn attribute *)
-                if e.vname = "exit" then false 
-                else if hasAttribute "noreturn" e.vattr then false
-                else true
-            | Call _ -> true
-            | Asm _ -> true
-            in 
-            let rec stmtFallsThrough (s: stmt) : bool = 
-              match s.skind with
-                Instr(il) -> 
-                  List.fold_left (fun acc elt -> 
-                                      acc && instrFallsThrough elt) true il
-              | Return _ | Break _ | Continue _ -> false
-              | Goto _ -> false
-              | If (_, b1, b2, _) -> 
-                  blockFallsThrough b1 || blockFallsThrough b2
-              | Switch (e, b, targets, _) -> 
-                   (* See if there is a "default" case *)
-                   if not 
-                      (List.exists (fun s -> 
-                         List.exists (function Default _ -> true | _ -> false)
-                                      s.labels)
-                                   targets) then begin
-(*
-                      ignore (E.log "Switch falls through because no default");
-
-*)                      true (* We fall through because there is no default *)
-                   end else begin
-                      (* We must examine all cases. If any falls through, 
-                       * then the switch falls through. *)
-                      blockFallsThrough b || blockCanBreak b
-                   end
-(*
-              | Loop (b, _, _, _) -> 
-                  (* A loop falls through if it can break. *)
-                  blockCanBreak b
-*)
-	      | While (_, b, _) -> blockCanBreak b
-	      | DoWhile (_, b, _) -> blockCanBreak b
-	      | For (_, _, _, b, _) -> blockCanBreak b
-              | Block b -> blockFallsThrough b
-              | TryFinally (b, h, _) -> blockFallsThrough h
-              | TryExcept (b, _, h, _) -> true (* Conservative *)
-            and blockFallsThrough b = 
-              let rec fall = function
-                  [] -> true
-                | s :: rest -> 
-                    if stmtFallsThrough s then begin
-(*
-                        ignore (E.log "Stmt %a falls through\n" d_stmt s);
-*)
-                        fall rest
-                    end else begin
-(*
-                        ignore (E.log "Stmt %a DOES NOT fall through\n"
-                                      d_stmt s);
-*)
-                      (* If we are not falling thorough then maybe there 
-                      * are labels who are *)
-                        labels rest
-                    end
-              and labels = function
-                  [] -> false
-                    (* We have a label, perhaps we can jump here *)
-                  | s :: rest when s.labels <> [] -> 
-(*
-                     ignore (E.log "invoking fall %a: %a\n" 
-                                      d_loc !currentLoc d_stmt s);
-*)
-                     fall (s :: rest)
-                  | _ :: rest -> labels rest
-              in
-              let res = fall b.bstmts in
-(*
-              ignore (E.log "blockFallsThrough=%b %a\n" res d_block b);
-*)
-              res
-            (* will we leave this statement or block with a break command? *)
-            and stmtCanBreak (s: stmt) : bool = 
-              match s.skind with
-                Instr _ | Return _ | Continue _ | Goto _ -> false
-              | Break _ -> true
-              | If (_, b1, b2, _) -> 
-                  blockCanBreak b1 || blockCanBreak b2
-              | Switch _ | (*Loop _*) While _ | DoWhile _ | For _ -> 
-                  (* switches and loops catch any breaks in their bodies *)
-                  false
-              | Block b -> blockCanBreak b
-              | TryFinally (b, h, _) -> blockCanBreak b || blockCanBreak h
-              | TryExcept (b, _, h, _) -> blockCanBreak b || blockCanBreak h
-            and blockCanBreak b = 
-              List.exists stmtCanBreak b.bstmts
-            in
-            if blockFallsThrough !currentFunctionFDEC.sbody then begin
-(*
-              let retval = 
-                match unrollType !currentReturnType with
-                  TVoid _ -> None
-                | (TInt _ | TEnum _ | TFloat _ | TPtr _) as rt -> 
-                    ignore (warn "Body of function %s falls-through. Adding a return statement\n"  !currentFunctionFDEC.svar.vname);
-                    Some (mkCastT zero intType rt)
-                | _ ->
-                    ignore (warn "Body of function %s falls-through and cannot find an appropriate return value\n" !currentFunctionFDEC.svar.vname);
-                    None
-              in
-              if not (hasAttribute "noreturn" 
-                        !currentFunctionFDEC.svar.vattr) then 
-                !currentFunctionFDEC.sbody.bstmts <- 
-                  !currentFunctionFDEC.sbody.bstmts 
-                  @ [mkStmt (Return(retval, endloc))]
-*)
-            end;
-            
-            (* ignore (E.log "The env after finishing the body of %s:\n%t\n"
-                        n docEnv); *)
-            cabsPushGlobal (GFun (!currentFunctionFDEC, funloc));
-            empty
-          with E.Error as e -> raise e
-             | e -> begin
-            ignore (E.log "error in collectFunction %s: %s\n"
-                      n (Printexc.to_string e));
-            cabsPushGlobal (GAsm("error in function " ^ n, !currentLoc));
-            empty
-          end)
-        () (* argument of E.withContext *)
-    end (* FUNDEF *)
-
-  | LINKAGE (n, loc, dl) -> 
-      currentLoc := convLoc loc;
-      if n <> "C" then 
-        ignore (warn "Encountered linkage specification \"%s\"" n);
-      if not isglobal then 
-        E.s (error "Encountered linkage specification in local scope");
-      (* For now drop the linkage on the floor !!! *)
-      List.iter 
-        (fun d -> 
-          let s = doDecl isglobal d in
-          if isNotEmpty s then 
-            E.s (bug "doDecl returns non-empty statement for global"))
-        dl;
-      empty
-
-  | _ -> E.s (error "unexpected form of declaration")
-
-and doTypedef ((specs, nl): A.name_group) = 
-  try
-    (* Do the specifiers exactly once *)
-    let bt, sto, inl, attrs = doSpecList (suggestAnonName nl) specs in
-    if sto <> NoStorage || inl then
-      E.s (error "Storage or inline specifier not allowed in typedef");
-    let createTypedef ((n,ndt,a,loc) : A.name) =
-      (*    E.s (error "doTypeDef") *)
-      try
-        let newTyp, tattr =
-          doType AttrType bt (A.PARENTYPE(attrs, ndt, a))  in
-        let newTyp' = cabsTypeAddAttributes tattr newTyp in
-        (* Create a new name for the type. Use the same name space as that of 
-        * variables to avoid confusion between variable names and types. This 
-        * is actually necessary in some cases.  *)
-        let n', _  = newAlphaName true "" n in
-        let ti = { tname = n'; ttype = newTyp'; treferenced = false } in
-        (* Since we use the same name space, we might later hit a global with 
-         * the same name and we would want to change the name of the global. 
-         * It is better to change the name of the type instead. So, remember 
-         * all types whose names have changed *)              
-        H.add typedefs n' ti;              
-        let namedTyp = TNamed(ti, []) in
-        (* Register the type. register it as local because we might be in a
-        * local context  *)
-        addLocalToEnv (kindPlusName "type" n) (EnvTyp namedTyp);
-        cabsPushGlobal (GType (ti, !currentLoc))
-      with E.Error as e -> raise e
-         | e -> begin
-        ignore (E.log "Error on A.TYPEDEF (%s)\n"
-                  (Printexc.to_string e));
-        cabsPushGlobal (GAsm ("booo_typedef:" ^ n, !currentLoc))
-      end
-    in
-    List.iter createTypedef nl
-  with E.Error as e -> raise e
-     | e -> begin    
-    ignore (E.log "Error on A.TYPEDEF (%s)\n"
-              (Printexc.to_string e));
-    let fstname = 
-      match nl with
-        [] -> "<missing name>"
-      | (n, _, _, _) :: _ -> n
-    in
-    cabsPushGlobal (GAsm ("booo_typedef: " ^ fstname, !currentLoc))
-  end
-
-and doOnlyTypedef (specs: A.spec_elem list) : unit = 
-  try
-    let bt, sto, inl, attrs = doSpecList "" specs in
-    if sto <> NoStorage || inl then 
-      E.s (error "Storage or inline specifier not allowed in typedef");
-    let restyp, nattr = doType AttrType bt (A.PARENTYPE(attrs, 
-                                                        A.JUSTBASE, [])) in
-    if nattr <> [] then
-      ignore (warn "Ignoring identifier attribute");
-           (* doSpec will register the type. *)
-    (* See if we are defining a composite or enumeration type, and in that 
-     * case move the attributes from the defined type into the composite type 
-     * *)
-    let isadef = 
-      List.exists 
-        (function 
-            A.SpecType(A.Tstruct(_, Some _, _)) -> true
-          | A.SpecType(A.Tunion(_, Some _, _)) -> true
-          | A.SpecType(A.Tenum(_, Some _, _)) -> true
-          | _ -> false) specs
-    in
-    match restyp with 
-      TComp(ci, al) -> 
-        if isadef then begin
-          ci.cattr <- cabsAddAttributes ci.cattr al; 
-          (* The GCompTag was already added *)
-        end else (* Add a GCompTagDecl *)
-          cabsPushGlobal (GCompTagDecl(ci, !currentLoc))
-    | TEnum(ei, al) -> 
-        if isadef then begin
-          ei.eattr <- cabsAddAttributes ei.eattr al;
-        end else
-          cabsPushGlobal (GEnumTagDecl(ei, !currentLoc))
-    | _ -> 
-        ignore (warn "Ignoring un-named typedef that does not introduce a struct or enumeration type\n")
-            
-  with E.Error as e -> raise e
-     | e -> begin
-    ignore (E.log "Error on A.ONLYTYPEDEF (%s)\n"
-              (Printexc.to_string e));
-    cabsPushGlobal (GAsm ("booo_typedef", !currentLoc))
-  end
-
-and assignInit (lv: lval) 
-               (ie: init) 
-               (iet: typ) 
-               (acc: chunk) : chunk = 
-  match ie with
-    SingleInit e -> 
-      let (_, e'') = castTo iet (typeOfLval lv) e in 
-      acc +++ (Set(lv, e'', !currentLoc))
-  | CompoundInit (t, initl) -> 
-      foldLeftCompound
-        ~doinit:(fun off i it acc -> 
-          assignInit (addOffsetLval off lv) i it acc)
-        ~ct:t
-        ~initl:initl
-        ~acc:acc
-(*
-  | ArrayInit (bt, len, initl) -> 
-      let idx = ref ( -1 ) in
-      List.fold_left
-        (fun acc i -> 
-          assignInit (addOffsetLval (Index(integer !idx, NoOffset)) lv) i bt acc)
-        acc
-        initl
-*)
-  (* Now define the processors for body and statement *)
-and doBody (blk: A.block) : chunk = 
-  enterScope ();
-  (* Rename the labels and add them to the environment *)
-  List.iter (fun l -> ignore (genNewLocalLabel l)) blk.blabels;
-  (* See if we have some attributes *)
-  let battrs = doAttributes blk.A.battrs in
-
-  let bodychunk = 
-    afterConversion
-      (List.fold_left   (* !!! @ evaluates its arguments backwards *)
-         (fun prev s -> let res = doStatement s in 
-                        prev @@ res)
-         empty
-         blk.A.bstmts)
-  in
-  exitScope ();
-
-
-  if battrs == [] then
-    bodychunk
-  else begin
-    let b = c2block bodychunk in
-    b.battrs <- battrs;
-    s2c (mkStmt (Block b))
-  end
-      
-and doStatement (s : A.statement) : chunk = 
-  try
-    match s with
-      A.NOP _ -> skipChunk
-    | A.COMPUTATION (e, loc) ->
-        currentLoc := convLoc loc;
-        let (lasts, data) = !gnu_body_result in
-        if lasts == s then begin      (* This is the last in a GNU_BODY *)
-          let (s', e', t') = doExp false e (AExp None) in
-          data := Some (e', t');      (* Record the result *)
-          s'
-        end else
-          let (s', _, _) = doExp false e ADrop in
-            (* drop the side-effect free expression *)
-            (* And now do some peep-hole optimizations *)
-          s'
-
-    | A.BLOCK (b, loc) -> 
-        currentLoc := convLoc loc;
-        doBody b
-
-    | A.SEQUENCE (s1, s2, loc) ->
-        (doStatement s1) @@ (doStatement s2)
-
-    | A.IF(e,st,sf,loc) ->
-        let st' = doStatement st in
-        let sf' = doStatement sf in
-        currentLoc := convLoc loc;
-        doCondition false e st' sf'
-
-    | A.WHILE(e,s,loc) ->
-(*
-        startLoop true;
-        let s' = doStatement s in
-        exitLoop ();
-        let loc' = convLoc loc in
-        currentLoc := loc';
-        loopChunk ((doCondition false e skipChunk
-                      (breakChunk loc'))
-                   @@ s')
-*)
-	(** We need to convert A.WHILE(e,s) where e may have side effects
-	     into Cil.While(e',s') where e' is side-effect free. *)
-	
-	(* Let e == (sCond , eCond) with sCond a sequence of statements
-	   and eCond a side-effect free expression. *)
-	let (sCond, eCond, _) = doExp false e (AExp None) in
-	  
-	  (* Then doStatement(A.WHILE((sCond , eCond), s))
-             = sCond ; Cil.While(eCond, (doStatement(s) ; sCond))
-	     where doStatement(A.CONTINUE) = (sCond ; Cil.Continue). *)
-	  
-          startLoop (DuplicateBeforeContinue sCond);
-          let s' = doStatement s in
-            exitLoop ();
-            let loc' = convLoc loc in
-              currentLoc := loc';
-              sCond @@ (whileChunk eCond (s' @@ sCond))
-          
-    | A.DOWHILE(e,s,loc) -> 
-(*
-        startLoop false;
-        let s' = doStatement s in
-        let loc' = convLoc loc in
-        currentLoc := loc';
-        let s'' = 
-          consLabContinue (doCondition false e skipChunk (breakChunk loc'))
-        in
-        exitLoop ();
-        loopChunk (s' @@ s'')
-*)
-	(** We need to convert A.DOWHILE(e,s) where e may have side effects
-	     into Cil.DoWhile(e',s') where e' is side-effect free. *)
-	
-	(* Let e == (sCond , eCond) with sCond a sequence of statements
-	   and eCond a side-effect free expression. *)
-	let (sCond, eCond, _) = doExp false e (AExp None) in
-	  
-	  (* Then doStatement(A.DOWHILE((sCond , eCond), s))
-             = Cil.DoWhile(eCond, (doStatement(s) ; sCond))
-	     where doStatement(A.CONTINUE) = (sCond ; Cil.Continue). *)
-	  
-          startLoop (DuplicateBeforeContinue sCond);
-          let s' = doStatement s in
-            exitLoop ();
-            let loc' = convLoc loc in
-              currentLoc := loc';
-              doWhileChunk eCond (s' @@ sCond)
-          
-    | A.FOR(fc1,e2,e3,s,loc) ->
-(*begin
-        let loc' = convLoc loc in
-        currentLoc := loc';
-        enterScope (); (* Just in case we have a declaration *)
-        let (se1, _, _) = 
-          match fc1 with 
-            FC_EXP e1 -> doExp false e1 ADrop 
-          | FC_DECL d1 -> (doDecl false d1, zero, voidType)
-        in
-        let (se3, _, _) = doExp false e3 ADrop in
-        startLoop false;
-        let s' = doStatement s in
-        currentLoc := loc';
-        let s'' = consLabContinue se3 in
-        exitLoop ();
-        let res = 
-          match e2 with
-            A.NOTHING -> (* This means true *)
-              se1 @@ loopChunk (s' @@ s'')
-          | _ -> 
-              se1 @@ loopChunk ((doCondition false e2 skipChunk (breakChunk loc'))
-                                @@ s' @@ s'')
-        in
-        exitScope ();
-        res
-    end
-*)
-	(** We need to convert A.FOR(e1,e2,e3,s) where e1, e2 and e3 may
-	     have side effects into Cil.For(bInit,e2',bIter,s') where e2'
-	     is side-effect free. **)
-	
-	(* Let e1 == bInit be a block of statements
-	   Let e2 == (bCond , eCond) with bCond a block of statements
-	   and eCond a side-effect free expression
-	   Let e3 == bIter be a sequence of statements. *)
-	let (bInit, _, _) = match fc1 with 
-          | FC_EXP e1 -> doExp false e1 ADrop 
-          | FC_DECL d1 -> (doDecl false d1, zero, voidType) in
-	let (bCond, eCond, _) = doExp false e2 (AExp None) in
-	let eCond' = match eCond with
-	  | Const(CStr "exp_nothing") -> Cil.one
-	  | _                         -> eCond in
-	let (bIter, _, _) = doExp false e3 ADrop in
-	  
-	(* Then doStatement(A.FOR(bInit, (bCond , eCond), bIter, s))
-           = Cil.For({bInit; bCond}, eCond', {bIter; bCond}, {doStatement(s)})
-	   where doStatement(A.CONTINUE) = Cil.Continue. *)
-	  
-	  startLoop ContinueUnchanged;
-          let s' = doStatement s in
-            exitLoop ();
-            let loc' = convLoc loc in
-              currentLoc := loc';
-              (forChunk (bInit @@ bCond) eCond' (bIter @@ bCond) s')
-
-    | A.BREAK loc -> 
-        let loc' = convLoc loc in
-        currentLoc := loc';
-        breakChunk loc'
-
-    | A.CONTINUE loc -> 
-        let loc' = convLoc loc in
-        currentLoc := loc';
-(*
-        continueOrLabelChunk loc'
-*)
-	continueDuplicateChunk loc'
-
-    | A.RETURN (A.NOTHING, loc) -> 
-        let loc' = convLoc loc in
-        currentLoc := loc';
-        if not (isVoidType !currentReturnType) then
-          ignore (warn "Return statement without a value in function returning %a\n" d_type !currentReturnType);
-        returnChunk None loc'
-
-    | A.RETURN (e, loc) ->
-        let loc' = convLoc loc in
-        currentLoc := loc';
-        (* Sometimes we return the result of a void function call *)
-        if isVoidType !currentReturnType then begin
-          ignore (warn "Return statement with a value in function returning void");
-          let (se, _, _) = doExp false e ADrop in
-          se @@ returnChunk None loc'
-        end else begin
-          let (se, e', et) = 
-            doExp false e (AExp (Some !currentReturnType)) in
-          let (et'', e'') = castTo et (!currentReturnType) e' in
-          se @@ (returnChunk (Some e'') loc')
-        end
-               
-    | A.SWITCH (e, s, loc) -> 
-        let loc' = convLoc loc in
-        currentLoc := loc';
-        let (se, e', et) = doExp false e (AExp (Some intType)) in
-        let (et'', e'') = castTo et intType e' in
-        let s' = doStatement s in
-        se @@ (switchChunk e'' s' loc')
-               
-    | A.CASE (e, s, loc) -> 
-        let loc' = convLoc loc in
-        currentLoc := loc';
-        let (se, e', et) = doExp true e (AExp None) in
-        if isNotEmpty se then
-          E.s (error "Case statement with a non-constant");
-        caseRangeChunk [if !lowerConstants then constFold false e' else e'] 
-          loc' (doStatement s)
-            
-    | A.CASERANGE (el, eh, s, loc) -> 
-        let loc' = convLoc loc in
-        currentLoc := loc';
-        let (sel, el', etl) = doExp false el (AExp None) in
-        let (seh, eh', etl) = doExp false eh (AExp None) in
-        if isNotEmpty sel || isNotEmpty seh then
-          E.s (error "Case statement with a non-constant");
-        let il, ih = 
-          match constFold true el', constFold true eh' with
-            Const(CInt64(il, _, _)), Const(CInt64(ih, _, _)) -> 
-              Int64.to_int il, Int64.to_int ih
-          | _ -> E.s (unimp "Cannot understand the constants in case range")
-        in
-        if il > ih then 
-          E.s (error "Empty case range");
-        let rec mkAll (i: int) = 
-          if i > ih then [] else integer i :: mkAll (i + 1)
-        in
-        caseRangeChunk (mkAll il) loc' (doStatement s)
-        
-
-    | A.DEFAULT (s, loc) -> 
-        let loc' = convLoc loc in
-        currentLoc := loc';
-        defaultChunk loc' (doStatement s)
-                     
-    | A.LABEL (l, s, loc) -> 
-        let loc' = convLoc loc in
-        currentLoc := loc';
-        (* Lookup the label because it might have been locally defined *)
-        consLabel (lookupLabel l) (doStatement s) loc' true
-                     
-    | A.GOTO (l, loc) -> 
-        let loc' = convLoc loc in
-        currentLoc := loc';
-        (* Maybe we need to rename this label *)
-        gotoChunk (lookupLabel l) loc'
-
-    | A.COMPGOTO (e, loc) -> begin
-        let loc' = convLoc loc in
-        currentLoc := loc';
-        (* Do the expression *)
-        let se, e', t' = doExp false e (AExp (Some voidPtrType)) in
-        match !gotoTargetData with
-          Some (switchv, switch) -> (* We have already generated this one  *)
-            se 
-            @@ i2c(Set (var switchv, mkCast e' uintType, loc'))
-            @@ s2c(mkStmt(Goto (ref switch, loc')))
-
-        | None -> begin
-            (* Make a temporary variable *)
-            let vchunk = createLocal 
-                (TInt(IUInt, []), NoStorage, false, [])
-                (("__compgoto", A.JUSTBASE, [], loc), A.NO_INIT) 
-            in
-            if not (isEmpty vchunk) then 
-              E.s (unimp "Non-empty chunk in creating temporary for goto *");
-            let switchv, _ = 
-              try lookupVar "__compgoto" 
-              with Not_found -> E.s (bug "Cannot find temporary for goto *");
-            in
-            (* Make a switch statement. We'll fill in the statements at the 
-            * end of the function *)
-            let switch = mkStmt (Switch (Lval(var switchv), 
-                                         mkBlock [], [], loc')) in
-            (* And make a label for it since we'll goto it *)
-            switch.labels <- [Label ("__docompgoto", loc', false)];
-            gotoTargetData := Some (switchv, switch);
-            se @@ i2c (Set(var switchv, mkCast e' uintType, loc')) @@
-            s2c switch
-        end
-      end
-
-    | A.DEFINITION d ->
-        let s = doDecl false d  in 
-(*
-        ignore (E.log "Def at %a: %a\n" d_loc !currentLoc d_chunk s);
-*)
-        s
-
-
-
-    | A.ASM (asmattr, tmpls, details, loc) -> 
-        (* Make sure all the outs are variables *)
-        let loc' = convLoc loc in
-        let attr' = doAttributes asmattr in
-        currentLoc := loc';
-        let stmts : chunk ref = ref empty in
-	let (tmpls', outs', ins', clobs') =
-	  match details with
-	  | None ->
-	      let tmpls' =
-		if !msvcMode then
-		  tmpls
-		else
-		  let pattern = Str.regexp "%" in
-		  let escape = Str.global_replace pattern "%%" in
-		  List.map escape tmpls
-	      in
-	      (tmpls', [], [], [])
-	  | Some { aoutputs = outs; ainputs = ins; aclobbers = clobs } ->
-              let outs' =
-		List.map
-		  (fun (c, e) ->
-		    let (se, e', t) = doExp false e (AExp None) in
-		    let lv =
-                      match e' with
-		      | Lval lval
-		      | StartOf lval -> lval
-                      | _ -> E.s (error "Expected lval for ASM outputs")
-		    in
-		    stmts := !stmts @@ se;
-		    (c, lv)) outs
-              in
-	      (* Get the side-effects out of expressions *)
-              let ins' =
-		List.map
-		  (fun (c, e) ->
-		    let (se, e', et) = doExp false e (AExp None) in
-		    stmts := !stmts @@ se;
-		    (c, e'))
-		  ins
-              in
-	      (tmpls, outs', ins', clobs)
-	in
-        !stmts @@
-        (i2c (Asm(attr', tmpls', outs', ins', clobs', loc')))
-
-    | TRY_FINALLY (b, h, loc) -> 
-        let loc' = convLoc loc in
-        currentLoc := loc';
-        let b': chunk = doBody b in
-        let h': chunk = doBody h in
-        if b'.cases <> [] || h'.cases <> [] then 
-          E.s (error "Try statements cannot contain switch cases");
-        
-        s2c (mkStmt (TryFinally (c2block b', c2block h', loc')))
-        
-    | TRY_EXCEPT (b, e, h, loc) -> 
-        let loc' = convLoc loc in
-        currentLoc := loc';
-        let b': chunk = doBody b in
-        (* Now do e *)
-        let ((se: chunk), e', t') = doExp false e (AExp None) in
-        let h': chunk = doBody h in
-        if b'.cases <> [] || h'.cases <> [] || se.cases <> [] then 
-          E.s (error "Try statements cannot contain switch cases");
-        (* Now take se and try to convert it to a list of instructions. This 
-         * might not be always possible *)
-        let il' = 
-          match compactStmts se.stmts with 
-            [] -> se.postins
-          | [ s ] -> begin
-              match s.skind with 
-                Instr il -> il @ se.postins
-              | _ -> E.s (error "Except expression contains unexpected statement")
-            end
-          | _ -> E.s (error "Except expression contains too many statements")
-        in
-        s2c (mkStmt (TryExcept (c2block b', (il', e'), c2block h', loc')))
-
-  with e -> begin
-    (ignore (E.log "Error in doStatement (%s)\n" (Printexc.to_string e)));
-    consLabel "booo_statement" empty (convLoc (A.get_statementloc s)) false
-  end
-
-
-(* Translate a file *)
-let convFile ((fname : string), (dl : Cabs.definition list)) : Cil.file =
-  Cil.initCIL (); (* make sure we have initialized CIL *)
-  (* Clean up the global types *)
-  E.hadErrors := false;
-  initGlobals();
-  startFile ();
-  IH.clear noProtoFunctions;
-  H.clear compInfoNameEnv;
-  H.clear enumInfoNameEnv;
-  IH.clear mustTurnIntoDef;
-  H.clear alreadyDefined;
-  H.clear staticLocals;
-  H.clear typedefs;                      
-  H.clear isomorphicStructs;
-  annonCompFieldNameId := 0;
-  if !E.verboseFlag || !Cilutil.printStages then 
-    ignore (E.log "Converting CABS->CIL\n");
-  (* Setup the built-ins, but do not add their prototypes to the file *)
-  let setupBuiltin name (resTyp, argTypes, isva) = 
-    let v = 
-      makeGlobalVar name (TFun(resTyp, 
-                               Some (List.map (fun at -> ("", at, [])) 
-                                       argTypes),
-                               isva, [])) in
-    ignore (alphaConvertVarAndAddToEnv true v)
-  in
-  H.iter setupBuiltin (if !msvcMode then msvcBuiltins else gccBuiltins);
-
-  let globalidx = ref 0 in
-  let doOneGlobal (d: A.definition) = 
-    let s = doDecl true d in
-    if isNotEmpty s then 
-      E.s (bug "doDecl returns non-empty statement for global");
-    (* See if this is one of the globals which we can leave alone. Increment 
-     * globalidx and see if we must leave this alone. *)
-    if 
-      (match d with 
-        A.DECDEF _ -> true
-      | A.FUNDEF _ -> true
-      | _ -> false) && (incr globalidx; !globalidx = !nocil) then begin
-          (* Create a file where we put the CABS output *)
-          let temp_cabs_name = "__temp_cabs" in
-          let temp_cabs = open_out temp_cabs_name in
-          (* Now print the CABS in there *)
-          Cprint.commit (); Cprint.flush ();
-          let old = !Cprint.out in (* Save the old output channel *)
-          Cprint.out := temp_cabs;
-          Cprint.print_def d;
-          Cprint.commit (); Cprint.flush ();
-          flush !Cprint.out;
-          Cprint.out := old;
-          close_out temp_cabs;
-          (* Now read everythign in *and create a GText from it *)
-          let temp_cabs = open_in temp_cabs_name in
-          let buff = Buffer.create 1024 in
-          Buffer.add_string buff "// Start of CABS form\n";
-          Buffer.add_channel buff temp_cabs (in_channel_length temp_cabs);
-          Buffer.add_string buff "// End of CABS form\n";
-          close_in temp_cabs;
-          (* Try to pop the last thing in the file *)
-          (match !theFile with 
-            _ :: rest -> theFile := rest
-          | _ -> ());
-          (* Insert in the file a GText *)
-          cabsPushGlobal (GText(Buffer.contents buff))
-    end 
-  in
-  List.iter doOneGlobal dl;
-  let globals = ref (popGlobals ()) in
-
-  IH.clear noProtoFunctions;
-  IH.clear mustTurnIntoDef;  
-  H.clear alreadyDefined;
-  H.clear compInfoNameEnv;
-  H.clear enumInfoNameEnv;
-  H.clear isomorphicStructs;
-  H.clear staticLocals;
-  H.clear typedefs;
-  H.clear env;
-  H.clear genv;
-  IH.clear callTempVars;
-
-  if false then ignore (E.log "Cabs2cil converted %d globals\n" !globalidx);
-  (* We are done *)
-  { fileName = fname;
-    globals  = !globals;
-    globinit = None;
-    globinitcalled = false;
-  } 
-
-
-    
-                      
diff --git a/cil/src/frontc/cabs2cil.mli b/cil/src/frontc/cabs2cil.mli
deleted file mode 100644
index 986f5a287..000000000
--- a/cil/src/frontc/cabs2cil.mli
+++ /dev/null
@@ -1,49 +0,0 @@
-(*
- *
- * Copyright (c) 2001-2002, 
- *  George C. Necula    <necula@cs.berkeley.edu>
- *  Scott McPeak        <smcpeak@cs.berkeley.edu>
- *  Wes Weimer          <weimer@cs.berkeley.edu>
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. The names of the contributors may not be used to endorse or promote
- * products derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
- * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
- * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- *)
-
-val convFile: Cabs.file -> Cil.file
-
-(** NDC added command line parameter **)
-(* Turn on tranformation that forces correct parameter evaluation order *)
-val forceRLArgEval: bool ref
-
-(* Set this integer to the index of the global to be left in CABS form. Use 
- * -1 to disable *)
-val nocil: int ref
-
-(* Indicates whether we're allowed to duplicate small chunks of code. *)
-val allowDuplication: bool ref
diff --git a/cil/src/frontc/cabsvisit.ml b/cil/src/frontc/cabsvisit.ml
deleted file mode 100644
index b2f9784a9..000000000
--- a/cil/src/frontc/cabsvisit.ml
+++ /dev/null
@@ -1,577 +0,0 @@
-(*
- *
- * Copyright (c) 2001-2002, 
- *  George C. Necula    <necula@cs.berkeley.edu>
- *  Scott McPeak        <smcpeak@cs.berkeley.edu>
- *  Wes Weimer          <weimer@cs.berkeley.edu>
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. The names of the contributors may not be used to endorse or promote
- * products derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
- * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
- * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- *)
-
-(* cabsvisit.ml *)
-(* tree visitor and rewriter for cabs *)
-
-open Cabs
-open Trace
-open Pretty
-module E = Errormsg
-
-(* basic interface for a visitor object *)
-
-(* Different visiting actions. 'a will be instantiated with exp, instr, etc. *)
-type 'a visitAction = 
-    SkipChildren                        (* Do not visit the children. Return 
-                                         * the node as it is *)
-  | ChangeTo of 'a                      (* Replace the expression with the 
-                                         * given one *)
-  | DoChildren                          (* Continue with the children of this 
-                                         * node. Rebuild the node on return 
-                                         * if any of the children changes 
-                                         * (use == test) *)
-  | ChangeDoChildrenPost of 'a * ('a -> 'a) (* First consider that the entire 
-                                          * exp is replaced by the first 
-                                          * paramenter. Then continue with 
-                                          * the children. On return rebuild 
-                                          * the node if any of the children 
-                                          * has changed and then apply the 
-                                          * function on the node *)
-
-type nameKind = 
-    NVar                                (* Variable or function prototype 
-                                           name *)
-  | NFun                                (* A function definition name *)
-  | NField                              (* The name of a field *)
-  | NType                               (* The name of a type *)
-
-(* All visit methods are called in preorder! (but you can use 
- * ChangeDoChildrenPost to change the order) *)
-class type cabsVisitor = object
-  method vexpr: expression -> expression visitAction   (* expressions *)
-  method vinitexpr: init_expression -> init_expression visitAction   
-  method vstmt: statement -> statement list visitAction
-  method vblock: block -> block visitAction
-  method vvar: string -> string                  (* use of a variable 
-                                                        * names *)
-  method vdef: definition -> definition list visitAction
-  method vtypespec: typeSpecifier -> typeSpecifier visitAction
-  method vdecltype: decl_type -> decl_type visitAction
-
-      (* For each declaration we call vname *)
-  method vname: nameKind -> specifier -> name -> name visitAction
-  method vspec: specifier -> specifier visitAction     (* specifier *)
-  method vattr: attribute -> attribute list visitAction
-
-  method vEnterScope: unit -> unit
-  method vExitScope: unit -> unit
-end
-    
-let visitorLocation = ref { filename = ""; 
-			    lineno = -1; 
-			    byteno = -1;}
-    
-        (* a default visitor which does nothing to the tree *)
-class nopCabsVisitor : cabsVisitor = object
-  method vexpr (e:expression) = DoChildren
-  method vinitexpr (e:init_expression) = DoChildren
-  method vstmt (s: statement) = 
-    visitorLocation := get_statementloc s;
-    DoChildren
-  method vblock (b: block) = DoChildren
-  method vvar (s: string) = s
-  method vdef (d: definition) = 
-    visitorLocation := get_definitionloc d;
-    DoChildren
-  method vtypespec (ts: typeSpecifier) = DoChildren
-  method vdecltype (dt: decl_type) = DoChildren
-  method vname k (s:specifier) (n: name) = DoChildren
-  method vspec (s:specifier) = DoChildren
-  method vattr (a: attribute) = DoChildren
-      
-  method vEnterScope () = ()
-  method vExitScope () = ()
-end
-        
-        (* Map but try not to copy the list unless necessary *)
-let rec mapNoCopy (f: 'a -> 'a) = function
-    [] -> []
-  | (i :: resti) as li -> 
-      let i' = f i in
-      let resti' = mapNoCopy f resti in
-      if i' != i || resti' != resti then i' :: resti' else li 
-        
-let rec mapNoCopyList (f: 'a -> 'a list) = function
-    [] -> []
-  | (i :: resti) as li -> 
-      let il' = f i in
-      let resti' = mapNoCopyList f resti in
-      match il' with
-        [i'] when i' == i && resti' == resti -> li
-      | _ -> il' @ resti'
-                     
-let doVisit (vis: cabsVisitor)
-    (startvisit: 'a -> 'a visitAction) 
-    (children: cabsVisitor -> 'a -> 'a) 
-    (node: 'a) : 'a = 
-  let action = startvisit node in
-  match action with
-    SkipChildren -> node
-  | ChangeTo node' -> node'
-  | _ ->  
-      let nodepre = match action with
-        ChangeDoChildrenPost (node', _) -> node'
-      | _ -> node
-      in
-      let nodepost = children vis nodepre in
-      match action with
-        ChangeDoChildrenPost (_, f) -> f nodepost
-      | _ -> nodepost
-            
-(* A visitor for lists *)
-let doVisitList (vis: cabsVisitor)
-                (startvisit: 'a -> 'a list visitAction)
-                (children: cabsVisitor -> 'a -> 'a)
-                (node: 'a) : 'a list = 
-  let action = startvisit node in
-  match action with
-    SkipChildren -> [node]
-  | ChangeTo nodes' -> nodes'
-  | _ -> 
-      let nodespre = match action with
-        ChangeDoChildrenPost (nodespre, _) -> nodespre
-      | _ -> [node]
-      in
-      let nodespost = mapNoCopy (children vis) nodespre in
-      match action with
-        ChangeDoChildrenPost (_, f) -> f nodespost
-      | _ -> nodespost
-
-            
-let rec visitCabsTypeSpecifier (vis: cabsVisitor) (ts: typeSpecifier) = 
-  doVisit vis vis#vtypespec childrenTypeSpecifier ts
-    
-and childrenTypeSpecifier vis ts = 
-  let childrenFieldGroup ((s, nel) as input) = 
-    let s' = visitCabsSpecifier vis s in
-    let doOneField ((n, eo) as input) = 
-      let n' = visitCabsName vis NField s' n in
-      let eo' = 
-        match eo with
-          None -> None
-        | Some e -> let e' = visitCabsExpression vis e in
-          if e' != e then Some e' else eo
-      in
-      if n' != n || eo' != eo then (n', eo') else input
-    in
-    let nel' = mapNoCopy doOneField nel in
-    if s' != s || nel' != nel then (s', nel') else input
-  in
-  match ts with
-    Tstruct (n, Some fg, extraAttrs) ->
-      (*(trace "sm" (dprintf "visiting struct %s\n" n));*)
-      let fg' = mapNoCopy childrenFieldGroup fg in
-      if fg' != fg then Tstruct( n, Some fg', extraAttrs) else ts
-  | Tunion (n, Some fg, extraAttrs) ->
-      let fg' = mapNoCopy childrenFieldGroup fg in
-      if fg' != fg then Tunion( n, Some fg', extraAttrs) else ts
-  | Tenum (n, Some ei, extraAttrs) ->
-      let doOneEnumItem ((s, e, loc) as ei) =
-        let e' = visitCabsExpression vis e in
-        if e' != e then (s, e', loc) else ei
-      in
-      vis#vEnterScope ();
-      let ei' = mapNoCopy doOneEnumItem ei in
-      vis#vExitScope();
-      if ei' != ei then Tenum( n, Some ei', extraAttrs) else ts
-  | TtypeofE e ->
-      let e' = visitCabsExpression vis e in   
-      if e' != e then TtypeofE e' else ts
-  | TtypeofT (s, dt) -> 
-      let s' = visitCabsSpecifier vis s in
-      let dt' = visitCabsDeclType vis false dt in
-      if s != s' || dt != dt' then TtypeofT (s', dt') else ts
-  | ts -> ts
-        
-and childrenSpecElem (vis: cabsVisitor) (se: spec_elem) : spec_elem = 
-  match se with
-    SpecTypedef | SpecInline | SpecStorage _ | SpecPattern _ -> se
-  | SpecCV _ -> se    (* cop out *)
-  | SpecAttr a -> begin
-      let al' = visitCabsAttribute vis a in
-      match al' with
-        [a''] when a'' == a -> se
-      | [a''] -> SpecAttr a''
-      | _ -> E.s (E.unimp "childrenSpecElem: visitCabsAttribute returned a list")
-  end
-  | SpecType ts -> 
-      let ts' = visitCabsTypeSpecifier vis ts in
-      if ts' != ts then SpecType ts' else se
-        
-and visitCabsSpecifier (vis: cabsVisitor) (s: specifier) : specifier = 
-  doVisit vis vis#vspec childrenSpec s
-and childrenSpec vis s = mapNoCopy (childrenSpecElem vis) s 
-    
-
-and visitCabsDeclType vis (isfundef: bool) (dt: decl_type) : decl_type = 
-  doVisit vis vis#vdecltype (childrenDeclType isfundef) dt
-and childrenDeclType isfundef vis dt = 
-  match dt with
-    JUSTBASE -> dt
-  | PARENTYPE (prea, dt1, posta) -> 
-      let prea' = mapNoCopyList (visitCabsAttribute vis)  prea in
-      let dt1' = visitCabsDeclType vis isfundef dt1 in
-      let posta'= mapNoCopyList (visitCabsAttribute vis)  posta in
-      if prea' != prea || dt1' != dt1 || posta' != posta then 
-        PARENTYPE (prea', dt1', posta') else dt
-  | ARRAY (dt1, al, e) -> 
-      let dt1' = visitCabsDeclType vis isfundef dt1 in
-      let al' = mapNoCopy (childrenAttribute vis) al in
-      let e'= visitCabsExpression vis e in
-      if dt1' != dt1 || al' != al || e' != e then ARRAY(dt1', al', e') else dt
-  | PTR (al, dt1) -> 
-      let al' = mapNoCopy (childrenAttribute vis) al in
-      let dt1' = visitCabsDeclType vis isfundef dt1 in
-      if al' != al || dt1' != dt1 then PTR(al', dt1') else dt
-  | PROTO (dt1, snl, b) ->
-      (* Do not propagate isfundef further *)
-      let dt1' = visitCabsDeclType vis false dt1 in
-      let _ = vis#vEnterScope () in
-      let snl' = mapNoCopy (childrenSingleName vis NVar) snl in
-      (* Exit the scope only if not in a function definition *)
-      let _ = if not isfundef then vis#vExitScope () in
-      if dt1' != dt1 || snl' != snl then PROTO(dt1', snl', b) else dt
-         
-
-and childrenNameGroup vis (kind: nameKind) ((s, nl) as input) = 
-  let s' = visitCabsSpecifier vis s in
-  let nl' = mapNoCopy (visitCabsName vis kind s') nl in
-  if s' != s || nl' != nl then (s', nl') else input
-
-    
-and childrenInitNameGroup vis ((s, inl) as input) = 
-  let s' = visitCabsSpecifier vis s in
-  let inl' = mapNoCopy (childrenInitName vis s') inl in
-  if s' != s || inl' != inl then (s', inl') else input
-    
-and visitCabsName vis (k: nameKind) (s: specifier) 
-                      (n: name) : name = 
-  doVisit vis (vis#vname k s) (childrenName s k) n
-and childrenName (s: specifier) (k: nameKind) vis (n: name) : name = 
-  let (sn, dt, al, loc) = n in
-  let dt' = visitCabsDeclType vis (k = NFun) dt in
-  let al' = mapNoCopy (childrenAttribute vis) al in
-  if dt' != dt || al' != al then (sn, dt', al', loc) else n
-    
-and childrenInitName vis (s: specifier) (inn: init_name) : init_name = 
-  let (n, ie) = inn in
-  let n' = visitCabsName vis NVar s n in
-  let ie' = visitCabsInitExpression vis ie in
-  if n' != n || ie' != ie then (n', ie') else inn
-    
-and childrenSingleName vis (k: nameKind) (sn: single_name) : single_name =
-  let s, n = sn in
-  let s' = visitCabsSpecifier vis s in
-  let n' = visitCabsName vis k s' n in
-  if s' != s || n' != n then (s', n') else sn
-    
-and visitCabsDefinition vis (d: definition) : definition list = 
-  doVisitList vis vis#vdef childrenDefinition d
-and childrenDefinition vis d = 
-  match d with 
-    FUNDEF (sn, b, l, lend) -> 
-      let sn' = childrenSingleName vis NFun sn in
-      let b' = visitCabsBlock vis b in
-      (* End the scope that was started by childrenFunctionName *)
-      vis#vExitScope ();
-      if sn' != sn || b' != b then FUNDEF (sn', b', l, lend) else d
-        
-  | DECDEF ((s, inl), l) -> 
-      let s' = visitCabsSpecifier vis s in
-      let inl' = mapNoCopy (childrenInitName vis s') inl in
-      if s' != s || inl' != inl then DECDEF ((s', inl'), l) else d
-  | TYPEDEF (ng, l) -> 
-      let ng' = childrenNameGroup vis NType ng in
-      if ng' != ng then TYPEDEF (ng', l) else d
-  | ONLYTYPEDEF (s, l) -> 
-      let s' = visitCabsSpecifier vis s in
-      if s' != s then ONLYTYPEDEF (s', l) else d
-  | GLOBASM _ -> d
-  | PRAGMA (e, l) -> 
-      let e' = visitCabsExpression vis e in
-      if e' != e then PRAGMA (e', l) else d
-  | LINKAGE (n, l, dl) -> 
-      let dl' = mapNoCopyList (visitCabsDefinition vis) dl in
-      if dl' != dl then LINKAGE (n, l, dl') else d
-      
-  | TRANSFORMER _ -> d
-  | EXPRTRANSFORMER _ -> d
-        
-and visitCabsBlock vis (b: block) : block = 
-  doVisit vis vis#vblock childrenBlock b
-
-and childrenBlock vis (b: block) : block = 
-  let _ = vis#vEnterScope () in
-  let battrs' = mapNoCopyList (visitCabsAttribute vis) b.battrs in
-  let bstmts' = mapNoCopyList (visitCabsStatement vis) b.bstmts in
-  let _ = vis#vExitScope () in
-  if battrs' != b.battrs || bstmts' != b.bstmts then 
-    { blabels = b.blabels; battrs = battrs'; bstmts = bstmts' }
-  else
-    b
-    
-and visitCabsStatement vis (s: statement) : statement list = 
-  doVisitList vis vis#vstmt childrenStatement s
-and childrenStatement vis s = 
-  let ve e = visitCabsExpression vis e in
-  let vs l s = 
-    match visitCabsStatement vis s with
-      [s'] -> s'
-    | sl -> BLOCK ({blabels = []; battrs = []; bstmts = sl }, l)
-  in
-  match s with
-    NOP _ -> s
-  | COMPUTATION (e, l) ->
-      let e' = ve e in
-      if e' != e then COMPUTATION (e', l) else s
-  | BLOCK (b, l) -> 
-      let b' = visitCabsBlock vis b in
-      if b' != b then BLOCK (b', l) else s
-  | SEQUENCE (s1, s2, l) -> 
-      let s1' = vs l s1 in
-      let s2' = vs l s2 in
-      if s1' != s1 || s2' != s2 then SEQUENCE (s1', s2', l) else s
-  | IF (e, s1, s2, l) -> 
-      let e' = ve e in
-      let s1' = vs l s1 in
-      let s2' = vs l s2 in
-      if e' != e || s1' != s1 || s2' != s2 then IF (e', s1', s2', l) else s
-  | WHILE (e, s1, l) -> 
-      let e' = ve e in
-      let s1' = vs l s1 in
-      if e' != e || s1' != s1 then WHILE (e', s1', l) else s
-  | DOWHILE (e, s1, l) -> 
-      let e' = ve e in
-      let s1' = vs l s1 in
-      if e' != e || s1' != s1 then DOWHILE (e', s1', l) else s
-  | FOR (fc1, e2, e3, s4, l) -> 
-      let _ = vis#vEnterScope () in
-      let fc1' = 
-        match fc1 with
-          FC_EXP e1 -> 
-            let e1' = ve e1 in
-            if e1' != e1 then FC_EXP e1' else fc1
-        | FC_DECL d1 -> 
-            let d1' = 
-              match visitCabsDefinition vis d1 with
-                [d1'] -> d1'
-              | _ -> E.s (E.unimp "visitCabs: for can have only one definition")
-            in
-            if d1' != d1 then FC_DECL d1' else fc1
-      in
-      let e2' = ve e2 in
-      let e3' = ve e3 in
-      let s4' = vs l s4 in
-      let _ = vis#vExitScope () in
-      if fc1' != fc1 || e2' != e2 || e3' != e3 || s4' != s4 
-      then FOR (fc1', e2', e3', s4', l) else s
-  | BREAK _ | CONTINUE _ | GOTO _ -> s
-  | RETURN (e, l) ->
-      let e' = ve e in
-      if e' != e then RETURN (e', l) else s
-  | SWITCH (e, s1, l) -> 
-      let e' = ve e in
-      let s1' = vs l s1 in
-      if e' != e || s1' != s1 then SWITCH (e', s1', l) else s
-  | CASE (e, s1, l) -> 
-      let e' = ve e in
-      let s1' = vs l s1 in
-      if e' != e || s1' != s1 then CASE (e', s1', l) else s
-  | CASERANGE (e1, e2, s3, l) -> 
-      let e1' = ve e1 in
-      let e2' = ve e2 in
-      let s3' = vs l s3 in
-      if e1' != e1 || e2' != e2 || s3' != s3 then 
-        CASERANGE (e1', e2', s3', l) else s
-  | DEFAULT (s1, l) ->
-      let s1' = vs l s1 in
-      if s1' != s1 then DEFAULT (s1', l) else s
-  | LABEL (n, s1, l) ->
-      let s1' = vs l s1 in
-      if s1' != s1 then LABEL (n, s1', l) else s
-  | COMPGOTO (e, l) -> 
-      let e' = ve e in
-      if e' != e then COMPGOTO (e', l) else s
-  | DEFINITION d -> begin
-      match visitCabsDefinition vis d with
-          [d'] when d' == d -> s
-        | [d'] -> DEFINITION d'
-        | dl -> let l = get_definitionloc d in
-          let dl' = List.map (fun d' -> DEFINITION d') dl in
-          BLOCK ({blabels = []; battrs = []; bstmts = dl' }, l)
-    end
-  | ASM (sl, b, details, l) -> 
-      let childrenStringExp ((s, e) as input) = 
-        let e' = ve e in
-        if e' != e then (s, e') else input
-      in
-      let details' = match details with
-      | None -> details
-      | Some { aoutputs = outl; ainputs = inl; aclobbers = clobs } ->
-	  let outl' = mapNoCopy childrenStringExp outl in
-	  let inl' = mapNoCopy childrenStringExp inl in
-	  if outl' == outl && inl' == inl then
-	    details
-	  else
-	    Some { aoutputs = outl'; ainputs = inl'; aclobbers = clobs }
-      in
-      if details' != details then 
-        ASM (sl, b, details', l) else s
-  | TRY_FINALLY (b1, b2, l) -> 
-      let b1' = visitCabsBlock vis b1 in
-      let b2' = visitCabsBlock vis b2 in
-      if b1' != b1 || b2' != b2 then TRY_FINALLY(b1', b2', l) else s
-  | TRY_EXCEPT (b1, e, b2, l) -> 
-      let b1' = visitCabsBlock vis b1 in
-      let e' = visitCabsExpression vis e in
-      let b2' = visitCabsBlock vis b2 in
-      if b1' != b1 || e' != e || b2' != b2 then TRY_EXCEPT(b1', e', b2', l) else s
-      
-          
-and visitCabsExpression vis (e: expression) : expression = 
-  doVisit vis vis#vexpr childrenExpression e
-and childrenExpression vis e = 
-  let ve e = visitCabsExpression vis e in
-  match e with 
-    NOTHING | LABELADDR _ -> e
-  | UNARY (uo, e1) -> 
-      let e1' = ve e1 in
-      if e1' != e1 then UNARY (uo, e1') else e
-  | BINARY (bo, e1, e2) -> 
-      let e1' = ve e1 in
-      let e2' = ve e2 in
-      if e1' != e1 || e2' != e2 then BINARY (bo, e1', e2') else e
-  | QUESTION (e1, e2, e3) -> 
-      let e1' = ve e1 in
-      let e2' = ve e2 in
-      let e3' = ve e3 in
-      if e1' != e1 || e2' != e2 || e3' != e3 then 
-        QUESTION (e1', e2', e3') else e
-  | CAST ((s, dt), ie) -> 
-      let s' = visitCabsSpecifier vis s in
-      let dt' = visitCabsDeclType vis false dt in
-      let ie' = visitCabsInitExpression vis ie in
-      if s' != s || dt' != dt || ie' != ie then CAST ((s', dt'), ie') else e
-  | CALL (f, el) -> 
-      let f' = ve f in
-      let el' = mapNoCopy ve el in
-      if f' != f || el' != el then CALL (f', el') else e
-  | COMMA el -> 
-      let el' = mapNoCopy ve el in
-      if el' != el then COMMA (el') else e
-  | CONSTANT _ -> e
-  | VARIABLE s -> 
-      let s' = vis#vvar s in
-      if s' != s then VARIABLE s' else e
-  | EXPR_SIZEOF (e1) -> 
-      let e1' = ve e1 in
-      if e1' != e1 then EXPR_SIZEOF (e1') else e
-  | TYPE_SIZEOF (s, dt) -> 
-      let s' = visitCabsSpecifier vis s in
-      let dt' = visitCabsDeclType vis false dt in
-      if s' != s || dt' != dt then TYPE_SIZEOF (s' ,dt') else e
-  | EXPR_ALIGNOF (e1) -> 
-      let e1' = ve e1 in
-      if e1' != e1 then EXPR_ALIGNOF (e1') else e
-  | TYPE_ALIGNOF (s, dt) -> 
-      let s' = visitCabsSpecifier vis s in
-      let dt' = visitCabsDeclType vis false dt in
-      if s' != s || dt' != dt then TYPE_ALIGNOF (s' ,dt') else e
-  | INDEX (e1, e2) -> 
-      let e1' = ve e1 in
-      let e2' = ve e2 in
-      if e1' != e1 || e2' != e2 then INDEX (e1', e2') else e
-  | MEMBEROF (e1, n) -> 
-      let e1' = ve e1 in
-      if e1' != e1 then MEMBEROF (e1', n) else e
-  | MEMBEROFPTR (e1, n) -> 
-      let e1' = ve e1 in
-      if e1' != e1 then MEMBEROFPTR (e1', n) else e
-  | GNU_BODY b -> 
-      let b' = visitCabsBlock vis b in
-      if b' != b then GNU_BODY b' else e
-  | EXPR_PATTERN _ -> e
-        
-and visitCabsInitExpression vis (ie: init_expression) : init_expression = 
-  doVisit vis vis#vinitexpr childrenInitExpression ie
-and childrenInitExpression vis ie = 
-  let rec childrenInitWhat iw = 
-    match iw with
-      NEXT_INIT -> iw
-    | INFIELD_INIT (n, iw1) -> 
-        let iw1' = childrenInitWhat iw1 in
-        if iw1' != iw1 then INFIELD_INIT (n, iw1') else iw
-    | ATINDEX_INIT (e, iw1) -> 
-        let e' = visitCabsExpression vis e in
-        let iw1' = childrenInitWhat iw1 in
-        if e' != e || iw1' != iw1 then ATINDEX_INIT (e', iw1') else iw
-    | ATINDEXRANGE_INIT (e1, e2) -> 
-        let e1' = visitCabsExpression vis e1 in
-        let e2' = visitCabsExpression vis e2 in
-        if e1' != e1 || e2' != e2 then ATINDEXRANGE_INIT (e1, e2) else iw
-  in
-  match ie with 
-    NO_INIT -> ie
-  | SINGLE_INIT e -> 
-      let e' = visitCabsExpression vis e in
-      if e' != e then SINGLE_INIT e' else ie
-  | COMPOUND_INIT il -> 
-      let childrenOne ((iw, ie) as input) = 
-        let iw' = childrenInitWhat iw in
-        let ie' = visitCabsInitExpression vis ie in
-        if iw' != iw || ie' != ie then (iw', ie') else input
-      in
-      let il' = mapNoCopy childrenOne il in
-      if il' != il then COMPOUND_INIT il' else ie
-        
-
-and visitCabsAttribute vis (a: attribute) : attribute list = 
-  doVisitList vis vis#vattr childrenAttribute a
-
-and childrenAttribute vis ((n, el) as input) = 
-  let el' = mapNoCopy (visitCabsExpression vis) el in
-  if el' != el then (n, el') else input
-    
-and visitCabsAttributes vis (al: attribute list) : attribute list = 
-  mapNoCopyList (visitCabsAttribute vis) al
-
-let visitCabsFile (vis: cabsVisitor) ((fname, f): file) : file =  
-  (fname, mapNoCopyList (visitCabsDefinition vis) f)
-
-    (* end of file *)
-    
diff --git a/cil/src/frontc/cabsvisit.mli b/cil/src/frontc/cabsvisit.mli
deleted file mode 100644
index d2387892b..000000000
--- a/cil/src/frontc/cabsvisit.mli
+++ /dev/null
@@ -1,115 +0,0 @@
-(*
- *
- * Copyright (c) 2001-2002, 
- *  George C. Necula    <necula@cs.berkeley.edu>
- *  Scott McPeak        <smcpeak@cs.berkeley.edu>
- *  Wes Weimer          <weimer@cs.berkeley.edu>
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. The names of the contributors may not be used to endorse or promote
- * products derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
- * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
- * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- *)
-
-(* cabsvisit.mli *)
-(* interface for cabsvisit.ml *)
-
-(* Different visiting actions. 'a will be instantiated with exp, instr, etc. *)
-type 'a visitAction = 
-    SkipChildren                        (* Do not visit the children. Return 
-                                         * the node as it is *)
-  | ChangeTo of 'a                      (* Replace the expression with the 
-                                         * given one *)
-  | DoChildren                          (* Continue with the children of this 
-                                         * node. Rebuild the node on return 
-                                         * if any of the children changes 
-                                         * (use == test) *)
-  | ChangeDoChildrenPost of 'a * ('a -> 'a) (* First consider that the entire 
-                                          * exp is replaced by the first 
-                                          * paramenter. Then continue with 
-                                          * the children. On return rebuild 
-                                          * the node if any of the children 
-                                          * has changed and then apply the 
-                                          * function on the node *)
-
-type nameKind = 
-    NVar                                (** Variable or function prototype 
-                                           name *)
-  | NFun                                (** Function definition name *)
-  | NField                              (** The name of a field *)
-  | NType                               (** The name of a type *)
-
-
-(* All visit methods are called in preorder! (but you can use 
- * ChangeDoChildrenPost to change the order) *)
-class type cabsVisitor = object
-  method vexpr: Cabs.expression -> Cabs.expression visitAction   (* expressions *)
-  method vinitexpr: Cabs.init_expression -> Cabs.init_expression visitAction   
-  method vstmt: Cabs.statement -> Cabs.statement list visitAction
-  method vblock: Cabs.block -> Cabs.block visitAction
-  method vvar: string -> string                  (* use of a variable 
-                                                        * names *)
-  method vdef: Cabs.definition -> Cabs.definition list visitAction
-  method vtypespec: Cabs.typeSpecifier -> Cabs.typeSpecifier visitAction
-  method vdecltype: Cabs.decl_type -> Cabs.decl_type visitAction
-
-      (* For each declaration we call vname *)
-  method vname: nameKind -> Cabs.specifier -> Cabs.name -> Cabs.name visitAction
-  method vspec: Cabs.specifier -> Cabs.specifier visitAction     (* specifier *)
-  method vattr: Cabs.attribute -> Cabs.attribute list visitAction
-
-
-  method vEnterScope: unit -> unit
-  method vExitScope: unit -> unit
-end
-
-
-class nopCabsVisitor: cabsVisitor
-
-
-val visitCabsTypeSpecifier: cabsVisitor -> 
-                            Cabs.typeSpecifier -> Cabs.typeSpecifier
-val visitCabsSpecifier: cabsVisitor -> Cabs.specifier -> Cabs.specifier
-
-(** Visits a decl_type. The bool argument is saying whether we are ina 
-  * function definition and thus the scope in a PROTO should extend until the 
-  * end of the function *)
-val visitCabsDeclType: cabsVisitor -> bool -> Cabs.decl_type -> Cabs.decl_type
-val visitCabsDefinition: cabsVisitor -> Cabs.definition -> Cabs.definition list
-val visitCabsBlock: cabsVisitor -> Cabs.block -> Cabs.block
-val visitCabsStatement: cabsVisitor -> Cabs.statement -> Cabs.statement list
-val visitCabsExpression: cabsVisitor -> Cabs.expression -> Cabs.expression
-val visitCabsAttributes: cabsVisitor -> Cabs.attribute list 
-                                     -> Cabs.attribute list
-val visitCabsName: cabsVisitor -> nameKind 
-                   -> Cabs.specifier -> Cabs.name -> Cabs.name
-val visitCabsFile: cabsVisitor -> Cabs.file -> Cabs.file
-
-
-
-(** Set by the visitor to the current location *)
-val visitorLocation: Cabs.cabsloc ref
diff --git a/cil/src/frontc/clexer.mli b/cil/src/frontc/clexer.mli
deleted file mode 100644
index 01acfd048..000000000
--- a/cil/src/frontc/clexer.mli
+++ /dev/null
@@ -1,55 +0,0 @@
-(*
- *
- * Copyright (c) 2001-2002, 
- *  George C. Necula    <necula@cs.berkeley.edu>
- *  Scott McPeak        <smcpeak@cs.berkeley.edu>
- *  Wes Weimer          <weimer@cs.berkeley.edu>
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. The names of the contributors may not be used to endorse or promote
- * products derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
- * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
- * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- *)
-
-
-(* This interface is generated manually. The corresponding .ml file is 
- * generated automatically and is placed in ../obj/clexer.ml. The reason we 
- * want this interface is to avoid confusing make with freshly generated 
- * interface files *)
-
-
-val init: filename:string -> Lexing.lexbuf
-val finish: unit -> unit
-
-(* This is the main parser function *)
-val initial: Lexing.lexbuf -> Cparser.token
-
-
-val push_context: unit -> unit (* Start a context  *)
-val add_type: string -> unit (* Add a new string as a type name  *)
-val add_identifier: string -> unit (* Add a new string as a variable name  *)
-val pop_context: unit -> unit (* Remove all names added in this context  *)
diff --git a/cil/src/frontc/clexer.mll b/cil/src/frontc/clexer.mll
deleted file mode 100644
index 41c869224..000000000
--- a/cil/src/frontc/clexer.mll
+++ /dev/null
@@ -1,666 +0,0 @@
-(*
- *
- * Copyright (c) 2001-2003,
- *  George C. Necula    <necula@cs.berkeley.edu>
- *  Scott McPeak        <smcpeak@cs.berkeley.edu>
- *  Wes Weimer          <weimer@cs.berkeley.edu>
- *  Ben Liblit          <liblit@cs.berkeley.edu>
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. The names of the contributors may not be used to endorse or promote
- * products derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
- * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
- * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- *)
-(* FrontC -- lexical analyzer
-**
-** 1.0	3.22.99	Hugues Cassé	First version.
-** 2.0  George Necula 12/12/00: Many extensions
-*)
-{
-open Cparser
-open Pretty
-exception Eof
-exception InternalError of string
-module E = Errormsg
-module H = Hashtbl
-
-let matchingParsOpen = ref 0
-
-let currentLoc () = 
-  let l, f, c = E.getPosition () in
-  { Cabs.lineno   = l;
-    Cabs.filename = f;
-    Cabs.byteno   = c;}
-
-(* string -> unit *)
-let addComment c =
-  let l = currentLoc() in
-  let i = GrowArray.max_init_index Cabs.commentsGA in
-  GrowArray.setg Cabs.commentsGA (i+1) (l,c,false)
-
-let int64_to_char value =
-  if (compare value (Int64.of_int 255) > 0) || (compare value Int64.zero < 0) then
-    begin
-      let msg = Printf.sprintf "clexer:intlist_to_string: character 0x%Lx too big" value in
-      E.parse_error msg;
-    end
-  else
-    Char.chr (Int64.to_int value)
-
-(* takes a not-nul-terminated list, and converts it to a string. *)
-let rec intlist_to_string (str: int64 list):string =
-  match str with
-    [] -> ""  (* add nul-termination *)
-  | value::rest ->
-      let this_char = int64_to_char value in
-      (String.make 1 this_char) ^ (intlist_to_string rest)
-
-(* Some debugging support for line numbers *)
-let dbgToken (t: token) = 
-  if false then begin
-    ignore (E.log "%a" insert
-              (match t with 
-                IDENT (n, l) -> dprintf "IDENT(%s,%d)\n" n l.Cabs.lineno
-              | LBRACE l -> dprintf "LBRACE(%d)\n" l.Cabs.lineno
-              | RBRACE l -> dprintf "RBRACE(%d)\n" l.Cabs.lineno
-              | IF l -> dprintf "IF(%d)\n" l.Cabs.lineno
-              | SWITCH l -> dprintf "SWITCH(%d)\n" l.Cabs.lineno
-              | RETURN l -> dprintf "RETURN(%d)\n" l.Cabs.lineno
-              | _ -> nil));
-    t
-  end else
-    t
-
-
-(*
-** Keyword hashtable
-*)
-let lexicon = H.create 211
-let init_lexicon _ =
-  H.clear lexicon;
-  List.iter 
-    (fun (key, builder) -> H.add lexicon key builder)
-    [ ("auto", fun loc -> AUTO loc);
-      ("const", fun loc -> CONST loc);
-      ("__const", fun loc -> CONST loc);
-      ("__const__", fun loc -> CONST loc);
-      ("static", fun loc -> STATIC loc);
-      ("extern", fun loc -> EXTERN loc);
-      ("long", fun loc -> LONG loc);
-      ("short", fun loc -> SHORT loc);
-      ("register", fun loc -> REGISTER loc);
-      ("signed", fun loc -> SIGNED loc);
-      ("__signed", fun loc -> SIGNED loc);
-      ("unsigned", fun loc -> UNSIGNED loc);
-      ("volatile", fun loc -> VOLATILE loc);
-      ("__volatile", fun loc -> VOLATILE loc);
-      (* WW: see /usr/include/sys/cdefs.h for why __signed and __volatile
-       * are accepted GCC-isms *)
-      ("char", fun loc -> CHAR loc);
-      ("int", fun loc -> INT loc);
-      ("float", fun loc -> FLOAT loc);
-      ("double", fun loc -> DOUBLE loc);
-      ("void", fun loc -> VOID loc);
-      ("enum", fun loc -> ENUM loc);
-      ("struct", fun loc -> STRUCT loc);
-      ("typedef", fun loc -> TYPEDEF loc);
-      ("union", fun loc -> UNION loc);
-      ("break", fun loc -> BREAK loc);
-      ("continue", fun loc -> CONTINUE loc);
-      ("goto", fun loc -> GOTO loc); 
-      ("return", fun loc -> dbgToken (RETURN loc));
-      ("switch", fun loc -> dbgToken (SWITCH loc));
-      ("case", fun loc -> CASE loc); 
-      ("default", fun loc -> DEFAULT loc);
-      ("while", fun loc -> WHILE loc);  
-      ("do", fun loc -> DO loc);  
-      ("for", fun loc -> FOR loc);
-      ("if", fun loc -> dbgToken (IF loc));
-      ("else", fun _ -> ELSE);
-      (*** Implementation specific keywords ***)
-      ("__signed__", fun loc -> SIGNED loc);
-      ("__inline__", fun loc -> INLINE loc);
-      ("inline", fun loc -> INLINE loc); 
-      ("__inline", fun loc -> INLINE loc);
-      ("_inline", fun loc -> INLINE loc);
-      ("__attribute__", fun loc -> ATTRIBUTE loc);
-      ("__attribute", fun loc -> ATTRIBUTE loc);
-(*
-      ("__attribute_used__", fun loc -> ATTRIBUTE_USED loc);
-*)
-      ("__blockattribute__", fun _ -> BLOCKATTRIBUTE);
-      ("__blockattribute", fun _ -> BLOCKATTRIBUTE);
-      ("__asm__", fun loc -> ASM loc);
-      ("asm", fun loc -> ASM loc);
-      ("__typeof__", fun loc -> TYPEOF loc);
-      ("__typeof", fun loc -> TYPEOF loc);
-      ("typeof", fun loc -> TYPEOF loc); 
-      ("__alignof", fun loc -> ALIGNOF loc);
-      ("__alignof__", fun loc -> ALIGNOF loc);
-      ("__volatile__", fun loc -> VOLATILE loc);
-      ("__volatile", fun loc -> VOLATILE loc);
-
-      ("__FUNCTION__", fun loc -> FUNCTION__ loc);
-      ("__func__", fun loc -> FUNCTION__ loc); (* ISO 6.4.2.2 *)
-      ("__PRETTY_FUNCTION__", fun loc -> PRETTY_FUNCTION__ loc);
-      ("__label__", fun _ -> LABEL__);
-      (*** weimer: GCC arcana ***)
-      ("__restrict", fun loc -> RESTRICT loc);
-      ("restrict", fun loc -> RESTRICT loc);
-(*      ("__extension__", EXTENSION); *)
-      (**** MS VC ***)
-      ("__int64", fun _ -> INT64 (currentLoc ()));
-      ("__int32", fun loc -> INT loc);
-      ("_cdecl",  fun _ -> MSATTR ("_cdecl", currentLoc ())); 
-      ("__cdecl", fun _ -> MSATTR ("__cdecl", currentLoc ()));
-      ("_stdcall", fun _ -> MSATTR ("_stdcall", currentLoc ())); 
-      ("__stdcall", fun _ -> MSATTR ("__stdcall", currentLoc ()));
-      ("_fastcall", fun _ -> MSATTR ("_fastcall", currentLoc ())); 
-      ("__fastcall", fun _ -> MSATTR ("__fastcall", currentLoc ()));
-      ("__w64", fun _ -> MSATTR("__w64", currentLoc ()));
-      ("__declspec", fun loc -> DECLSPEC loc);
-      ("__forceinline", fun loc -> INLINE loc); (* !! we turn forceinline 
-                                                 * into inline *)
-      ("__try", fun loc -> TRY loc);
-      ("__except", fun loc -> EXCEPT loc);
-      ("__finally", fun loc -> FINALLY loc);
-      (* weimer: some files produced by 'GCC -E' expect this type to be
-       * defined *)
-      ("__builtin_va_list", 
-       fun _ -> NAMED_TYPE ("__builtin_va_list", currentLoc ()));
-      ("__builtin_va_arg", fun loc -> BUILTIN_VA_ARG loc);
-      ("__builtin_types_compatible_p", fun loc -> BUILTIN_TYPES_COMPAT loc);
-      ("__builtin_offsetof", fun loc -> BUILTIN_OFFSETOF loc);
-      (* On some versions of GCC __thread is a regular identifier *)
-      ("__thread", fun loc -> 
-                      if Machdep.__thread_is_keyword then 
-                         THREAD loc
-                       else 
-                         IDENT ("__thread", loc));
-    ]
-
-(* Mark an identifier as a type name. The old mapping is preserved and will 
- * be reinstated when we exit this context *)
-let add_type name =
-   (* ignore (print_string ("adding type name " ^ name ^ "\n"));  *)
-   H.add lexicon name (fun loc -> NAMED_TYPE (name, loc))
-
-let context : string list list ref = ref []
-
-let push_context _ = context := []::!context
-
-let pop_context _ = 
-  match !context with
-    [] -> raise (InternalError "Empty context stack")
-  | con::sub ->
-		(context := sub;
-		List.iter (fun name -> 
-                           (* ignore (print_string ("removing lexicon for " ^ name ^ "\n")); *)
-                            H.remove lexicon name) con)
-
-(* Mark an identifier as a variable name. The old mapping is preserved and 
- * will be reinstated when we exit this context  *)
-let add_identifier name =
-  match !context with
-    [] -> () (* Just ignore raise (InternalError "Empty context stack") *)
-  | con::sub ->
-      (context := (name::con)::sub;
-       (*                print_string ("adding IDENT for " ^ name ^ "\n"); *)
-       H.add lexicon name (fun loc -> 
-         dbgToken (IDENT (name, loc))))
-
-
-(*
-** Useful primitives
-*)
-let scan_ident id =
-  let here = currentLoc () in
-  try (H.find lexicon id) here
-  (* default to variable name, as opposed to type *)
-  with Not_found -> dbgToken (IDENT (id, here))
-
-
-(*
-** Buffer processor
-*)
- 
-
-let init ~(filename: string) : Lexing.lexbuf =
-  init_lexicon ();
-  (* Inititialize the pointer in Errormsg *)
-  Lexerhack.add_type := add_type;
-  Lexerhack.push_context := push_context;
-  Lexerhack.pop_context := pop_context;
-  Lexerhack.add_identifier := add_identifier;
-  E.startParsing filename
-
-
-let finish () = 
-  E.finishParsing ()
-
-(*** Error handling ***)
-let error msg =
-  E.parse_error msg
-
-
-(*** escape character management ***)
-let scan_escape (char: char) : int64 =
-  let result = match char with
-    'n' -> '\n'
-  | 'r' -> '\r'
-  | 't' -> '\t'
-  | 'b' -> '\b'
-  | 'f' -> '\012'  (* ASCII code 12 *)
-  | 'v' -> '\011'  (* ASCII code 11 *)
-  | 'a' -> '\007'  (* ASCII code 7 *)
-  | 'e' | 'E' -> '\027'  (* ASCII code 27. This is a GCC extension *)
-  | '\'' -> '\''    
-  | '"'-> '"'     (* '"' *)
-  | '?' -> '?'
-  | '(' when not !Cprint.msvcMode -> '('
-  | '{' when not !Cprint.msvcMode -> '{'
-  | '[' when not !Cprint.msvcMode -> '['
-  | '%' when not !Cprint.msvcMode -> '%'
-  | '\\' -> '\\' 
-  | other -> error ("Unrecognized escape sequence: \\" ^ (String.make 1 other))
-  in
-  Int64.of_int (Char.code result)
-
-let scan_hex_escape str =
-  let radix = Int64.of_int 16 in
-  let the_value = ref Int64.zero in
-  (* start at character 2 to skip the \x *)
-  for i = 2 to (String.length str) - 1 do
-    let thisDigit = Cabs.valueOfDigit (String.get str i) in
-    (* the_value := !the_value * 16 + thisDigit *)
-    the_value := Int64.add (Int64.mul !the_value radix) thisDigit
-  done;
-  !the_value
-
-let scan_oct_escape str =
-  let radix = Int64.of_int 8 in
-  let the_value = ref Int64.zero in
-  (* start at character 1 to skip the \x *)
-  for i = 1 to (String.length str) - 1 do
-    let thisDigit = Cabs.valueOfDigit (String.get str i) in
-    (* the_value := !the_value * 8 + thisDigit *)
-    the_value := Int64.add (Int64.mul !the_value radix) thisDigit
-  done;
-  !the_value
-
-let lex_hex_escape remainder lexbuf =
-  let prefix = scan_hex_escape (Lexing.lexeme lexbuf) in
-  prefix :: remainder lexbuf
-
-let lex_oct_escape remainder lexbuf =
-  let prefix = scan_oct_escape (Lexing.lexeme lexbuf) in
-  prefix :: remainder lexbuf
-
-let lex_simple_escape remainder lexbuf =
-  let lexchar = Lexing.lexeme_char lexbuf 1 in
-  let prefix = scan_escape lexchar in
-  prefix :: remainder lexbuf
-
-let lex_unescaped remainder lexbuf =
-  let prefix = Int64.of_int (Char.code (Lexing.lexeme_char lexbuf 0)) in
-  prefix :: remainder lexbuf
-
-let lex_comment remainder lexbuf =
-  let ch = Lexing.lexeme_char lexbuf 0 in
-  let prefix = Int64.of_int (Char.code ch) in
-  if ch = '\n' then E.newline();
-  prefix :: remainder lexbuf
-
-let make_char (i:int64):char =
-  let min_val = Int64.zero in
-  let max_val = Int64.of_int 255 in
-  (* if i < 0 || i > 255 then error*)
-  if compare i min_val < 0 || compare i max_val > 0 then begin
-    let msg = Printf.sprintf "clexer:make_char: character 0x%Lx too big" i in
-    error msg
-  end;
-  Char.chr (Int64.to_int i)
-
-
-(* ISO standard locale-specific function to convert a wide character
- * into a sequence of normal characters. Here we work on strings. 
- * We convert L"Hi" to "H\000i\000" 
-  matth: this seems unused.
-let wbtowc wstr =
-  let len = String.length wstr in 
-  let dest = String.make (len * 2) '\000' in 
-  for i = 0 to len-1 do 
-    dest.[i*2] <- wstr.[i] ;
-  done ;
-  dest
-*)
-
-(* This function converst the "Hi" in L"Hi" to { L'H', L'i', L'\0' }
-  matth: this seems unused.
-let wstr_to_warray wstr =
-  let len = String.length wstr in
-  let res = ref "{ " in
-  for i = 0 to len-1 do
-    res := !res ^ (Printf.sprintf "L'%c', " wstr.[i])
-  done ;
-  res := !res ^ "}" ;
-  !res
-*)
-
-(* Pragmas get explicit end-of-line tokens.
- * Elsewhere they are silently discarded as whitespace. *)
-let pragmaLine = ref false
-
-}
-
-let decdigit = ['0'-'9']
-let octdigit = ['0'-'7']
-let hexdigit = ['0'-'9' 'a'-'f' 'A'-'F']
-let letter = ['a'- 'z' 'A'-'Z']
-
-
-let usuffix = ['u' 'U']
-let lsuffix = "l"|"L"|"ll"|"LL"
-let intsuffix = lsuffix | usuffix | usuffix lsuffix | lsuffix usuffix 
-              | usuffix ? "i64"
-                
-
-let hexprefix = '0' ['x' 'X']
-
-let intnum = decdigit+ intsuffix?
-let octnum = '0' octdigit+ intsuffix?
-let hexnum = hexprefix hexdigit+ intsuffix?
-
-let exponent = ['e' 'E']['+' '-']? decdigit+
-let fraction  = '.' decdigit+
-let decfloat = (intnum? fraction)
-	      |(intnum exponent)
-	      |(intnum? fraction exponent)
-	      | (intnum '.') 
-              | (intnum '.' exponent) 
-
-let hexfraction = hexdigit* '.' hexdigit+ | hexdigit+
-let binexponent = ['p' 'P'] ['+' '-']? decdigit+
-let hexfloat = hexprefix hexfraction binexponent
-             | hexprefix hexdigit+   binexponent
-
-let floatsuffix = ['f' 'F' 'l' 'L']
-let floatnum = (decfloat | hexfloat) floatsuffix?
-
-let ident = (letter|'_')(letter|decdigit|'_'|'$')* 
-let blank = [' ' '\t' '\012' '\r']+
-let escape = '\\' _
-let hex_escape = '\\' ['x' 'X'] hexdigit+
-let oct_escape = '\\' octdigit octdigit? octdigit? 
-
-(* Pragmas that are not parsed by CIL.  We lex them as PRAGMA_LINE tokens *)
-
-let no_parse_pragma =
-               "warning" | "GCC"
-             (* Solaris-style pragmas:  *)
-             | "ident" | "section" | "option" | "asm" | "use_section" | "weak"
-             | "redefine_extname"
-             | "TCS_align"
-             (* Added by XL *)
-             | "global_register"
-
-rule initial =
-	parse 	"/*"			{ let il = comment lexbuf in
-	                                  let sl = intlist_to_string il in
-					  addComment sl;
-                                          initial lexbuf}
-|               "//"                    { let il = onelinecomment lexbuf in
-                                          let sl = intlist_to_string il in
-                                          addComment sl;
-                                          E.newline();
-                                          initial lexbuf
-                                           }
-|		blank			{initial lexbuf}
-|               '\n'                    { E.newline ();
-                                          if !pragmaLine then
-                                            begin
-                                              pragmaLine := false;
-                                              PRAGMA_EOL
-                                            end
-                                          else
-                                            initial lexbuf }
-|               '\\' '\r' * '\n'        {
-                                          E.newline ();
-                                          initial lexbuf
-                                        }
-|		'#'			{ hash lexbuf}
-|               "_Pragma" 	        { PRAGMA (currentLoc ()) }
-|		'\''			{ CST_CHAR (chr lexbuf, currentLoc ())}
-|		"L'"			{ CST_WCHAR (chr lexbuf, currentLoc ()) }
-|		'"'			{ (* '"' *)
-(* matth: BUG:  this could be either a regular string or a wide string.
- *  e.g. if it's the "world" in 
- *     L"Hello, " "world"
- *  then it should be treated as wide even though there's no L immediately
- *  preceding it.  See test/small1/wchar5.c for a failure case. *)
-                                          try CST_STRING (str lexbuf, currentLoc ())
-                                          with e -> 
-                                             raise (InternalError 
-                                                     ("str: " ^ 
-                                                      Printexc.to_string e))}
-|		"L\""			{ (* weimer: wchar_t string literal *)
-                                          try CST_WSTRING(str lexbuf, currentLoc ())
-                                          with e -> 
-                                             raise (InternalError 
-                                                     ("wide string: " ^ 
-                                                      Printexc.to_string e))}
-|		floatnum		{CST_FLOAT (Lexing.lexeme lexbuf, currentLoc ())}
-|		hexnum			{CST_INT (Lexing.lexeme lexbuf, currentLoc ())}
-|		octnum			{CST_INT (Lexing.lexeme lexbuf, currentLoc ())}
-|		intnum			{CST_INT (Lexing.lexeme lexbuf, currentLoc ())}
-|		"!quit!"		{EOF}
-|		"..."			{ELLIPSIS}
-|		"+="			{PLUS_EQ}
-|		"-="			{MINUS_EQ}
-|		"*="			{STAR_EQ}
-|		"/="			{SLASH_EQ}
-|		"%="			{PERCENT_EQ}
-|		"|="			{PIPE_EQ}
-|		"&="			{AND_EQ}
-|		"^="			{CIRC_EQ}
-|		"<<="			{INF_INF_EQ}
-|		">>="			{SUP_SUP_EQ}
-|		"<<"			{INF_INF}
-|		">>"			{SUP_SUP}
-| 		"=="			{EQ_EQ}
-| 		"!="			{EXCLAM_EQ}
-|		"<="			{INF_EQ}
-|		">="			{SUP_EQ}
-|		"="				{EQ}
-|		"<"				{INF}
-|		">"				{SUP}
-|		"++"			{PLUS_PLUS (currentLoc ())}
-|		"--"			{MINUS_MINUS (currentLoc ())}
-|		"->"			{ARROW}
-|		'+'				{PLUS (currentLoc ())}
-|		'-'				{MINUS (currentLoc ())}
-|		'*'				{STAR (currentLoc ())}
-|		'/'				{SLASH}
-|		'%'				{PERCENT}
-|		'!'			{EXCLAM (currentLoc ())}
-|		"&&"			{AND_AND (currentLoc ())}
-|		"||"			{PIPE_PIPE}
-|		'&'				{AND (currentLoc ())}
-|		'|'				{PIPE}
-|		'^'				{CIRC}
-|		'?'				{QUEST}
-|		':'				{COLON}
-|		'~'		       {TILDE (currentLoc ())}
-	
-|		'{'		       {dbgToken (LBRACE (currentLoc ()))}
-|		'}'		       {dbgToken (RBRACE (currentLoc ()))}
-|		'['				{LBRACKET}
-|		']'				{RBRACKET}
-|		'('		       {dbgToken (LPAREN (currentLoc ())) }
-|		')'				{RPAREN}
-|		';'		       {dbgToken (SEMICOLON (currentLoc ())) }
-|		','				{COMMA}
-|		'.'				{DOT}
-|		"sizeof"		{SIZEOF (currentLoc ())}
-|               "__asm"                 { if !Cprint.msvcMode then 
-                                             MSASM (msasm lexbuf, currentLoc ()) 
-                                          else (ASM (currentLoc ())) }
-
-(* If we see __pragma we eat it and the matching parentheses as well *)
-|               "__pragma"              { matchingParsOpen := 0;
-                                          let _ = matchingpars lexbuf in 
-                                          initial lexbuf 
-                                        }
-
-(* sm: tree transformation keywords *)
-|               "@transform"            {AT_TRANSFORM (currentLoc ())}
-|               "@transformExpr"        {AT_TRANSFORMEXPR (currentLoc ())}
-|               "@specifier"            {AT_SPECIFIER (currentLoc ())}
-|               "@expr"                 {AT_EXPR (currentLoc ())}
-|               "@name"                 {AT_NAME}
-
-(* __extension__ is a black. The parser runs into some conflicts if we let it
- * pass *)
-|               "__extension__"         {initial lexbuf }
-|		ident			{scan_ident (Lexing.lexeme lexbuf)}
-|		eof			{EOF}
-|		_			{E.parse_error "Invalid symbol"}
-and comment =
-    parse 	
-      "*/"			        { [] }
-(*|     '\n'                              { E.newline (); lex_unescaped comment lexbuf }*)
-| 		_ 			{ lex_comment comment lexbuf }
-
-
-and onelinecomment = parse
-    '\n'        {[]}
-|   _           { lex_comment onelinecomment lexbuf }
-
-and matchingpars = parse
-  '\n'          { E.newline (); matchingpars lexbuf }
-| blank         { matchingpars lexbuf }
-| '('           { incr matchingParsOpen; matchingpars lexbuf }
-| ')'           { decr matchingParsOpen;
-                  if !matchingParsOpen = 0 then 
-                     ()
-                  else 
-                     matchingpars lexbuf
-                }
-|  "/*"		{ let il = comment lexbuf in
-                  let sl = intlist_to_string il in
-		  addComment sl;
-                  matchingpars lexbuf}
-|  '"'		{ (* '"' *)
-                  let _ = str lexbuf in 
-                  matchingpars lexbuf
-                 }
-| _              { matchingpars lexbuf }
-
-(* # <line number> <file name> ... *)
-and hash = parse
-  '\n'		{ E.newline (); initial lexbuf}
-| blank		{ hash lexbuf}
-| intnum	{ (* We are seeing a line number. This is the number for the 
-                   * next line *)
-                  let s = Lexing.lexeme lexbuf in
-                  begin try
-                    E.setCurrentLine (int_of_string s - 1)
-                  with Failure _ ->
-                    E.warn "Bad line number in preprocessed file: %s" s
-                  end;
-                  (* A file name must follow *)
-		  file lexbuf }
-| "line"        { hash lexbuf } (* MSVC line number info *)
-                (* For pragmas with irregular syntax, like #pragma warning, 
-                 * we parse them as a whole line. *)
-| "pragma" blank (no_parse_pragma as pragmaName)
-                { let here = currentLoc () in
-                  PRAGMA_LINE (pragmaName ^ pragma lexbuf, here)
-                }
-| "pragma"      { pragmaLine := true; PRAGMA (currentLoc ()) }
-| _	        { endline lexbuf}
-
-and file =  parse 
-        '\n'		        {E.newline (); initial lexbuf}
-|	blank			{file lexbuf}
-|	'"' [^ '\012' '\t' '"']* '"' 	{ (* '"' *)
-                                   let n = Lexing.lexeme lexbuf in
-                                   let n1 = String.sub n 1 
-                                       ((String.length n) - 2) in
-                                   E.setCurrentFile n1;
-				 endline lexbuf}
-
-|	_			{endline lexbuf}
-
-and endline = parse 
-        '\n' 			{ E.newline (); initial lexbuf}
-|   eof                         { EOF }
-|	_			{ endline lexbuf}
-
-and pragma = parse
-   '\n'                 { E.newline (); "" }
-|   _                   { let cur = Lexing.lexeme lexbuf in 
-                          cur ^ (pragma lexbuf) }  
-
-and str = parse
-        '"'             {[]} (* no nul terminiation in CST_STRING '"' *)
-|	hex_escape	{lex_hex_escape str lexbuf}
-|	oct_escape	{lex_oct_escape str lexbuf}
-|	escape		{lex_simple_escape str lexbuf}
-|	_		{lex_unescaped str lexbuf}
-
-and chr =  parse
-	'\''	        {[]}
-|	hex_escape	{lex_hex_escape chr lexbuf}
-|	oct_escape	{lex_oct_escape chr lexbuf}
-|	escape		{lex_simple_escape chr lexbuf}
-|	_		{lex_unescaped chr lexbuf}
-	
-and msasm = parse
-    blank               { msasm lexbuf }
-|   '{'                 { msasminbrace lexbuf }
-|   _                   { let cur = Lexing.lexeme lexbuf in 
-                          cur ^ (msasmnobrace lexbuf) }
-
-and msasminbrace = parse
-    '}'                 { "" }
-|   _                   { let cur = Lexing.lexeme lexbuf in 
-                          cur ^ (msasminbrace lexbuf) }  
-and msasmnobrace = parse
-   ['}' ';' '\n']       { lexbuf.Lexing.lex_curr_pos <- 
-                               lexbuf.Lexing.lex_curr_pos - 1;
-                          "" }
-|  "__asm"              { lexbuf.Lexing.lex_curr_pos <- 
-                               lexbuf.Lexing.lex_curr_pos - 5;
-                          "" }
-|  _                    { let cur = Lexing.lexeme lexbuf in 
-
-                          cur ^ (msasmnobrace lexbuf) }
-
-{
-
-}
diff --git a/cil/src/frontc/cparser.mly b/cil/src/frontc/cparser.mly
deleted file mode 100644
index f1e1ef94b..000000000
--- a/cil/src/frontc/cparser.mly
+++ /dev/null
@@ -1,1521 +0,0 @@
-/*(*
- *
- * Copyright (c) 2001-2003,
- *  George C. Necula    <necula@cs.berkeley.edu>
- *  Scott McPeak        <smcpeak@cs.berkeley.edu>
- *  Wes Weimer          <weimer@cs.berkeley.edu>
- *  Ben Liblit          <liblit@cs.berkeley.edu>
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. The names of the contributors may not be used to endorse or promote
- * products derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
- * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
- * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- **)
-(**
-** 1.0	3.22.99	Hugues Cassé	First version.
-** 2.0  George Necula 12/12/00: Practically complete rewrite.
-*)
-*/
-%{
-open Cabs
-module E = Errormsg
-
-let parse_error msg : unit =       (* sm: c++-mode highlight hack: -> ' <- *)
-  E.parse_error msg
-
-let print = print_string
-
-(* unit -> string option *)
-(*
-let getComments () =
-  match !comments with
-    [] -> None
-  | _ -> 
-      let r = Some(String.concat "\n" (List.rev !comments)) in
-      comments := [];
-      r
-*)
-
-let currentLoc () = 
-  let l, f, c = E.getPosition () in
-  { lineno   = l; 
-    filename = f; 
-    byteno   = c;}
-
-let cabslu = {lineno = -10; 
-	      filename = "cabs loc unknown"; 
-	      byteno = -10;}
-
-(* cabsloc -> cabsloc *)
-(*
-let handleLoc l =
-  l.clcomment <- getComments();
-  l
-*)
-
-(*
-** Expression building
-*)
-let smooth_expression lst =
-  match lst with
-    [] -> NOTHING
-  | [expr] -> expr
-  | _ -> COMMA (lst)
-
-
-let currentFunctionName = ref "<outside any function>"
-    
-let announceFunctionName ((n, decl, _, _):name) =
-  !Lexerhack.add_identifier n;
-  (* Start a context that includes the parameter names and the whole body. 
-   * Will pop when we finish parsing the function body *)
-  !Lexerhack.push_context ();
-  (* Go through all the parameter names and mark them as identifiers *)
-  let rec findProto = function
-      PROTO (d, args, _) when isJUSTBASE d -> 
-        List.iter (fun (_, (an, _, _, _)) -> !Lexerhack.add_identifier an) args
-
-    | PROTO (d, _, _) -> findProto d
-    | PARENTYPE (_, d, _) -> findProto d
-    | PTR (_, d) -> findProto d
-    | ARRAY (d, _, _) -> findProto d
-    | _ -> parse_error "Cannot find the prototype in a function definition";
-           raise Parsing.Parse_error 
-
-  and isJUSTBASE = function
-      JUSTBASE -> true
-    | PARENTYPE (_, d, _) -> isJUSTBASE d
-    | _ -> false
-  in
-  findProto decl;
-  currentFunctionName := n
-
-
-
-let applyPointer (ptspecs: attribute list list) (dt: decl_type)  
-       : decl_type = 
-  (* Outer specification first *)
-  let rec loop = function
-      [] -> dt
-    | attrs :: rest -> PTR(attrs, loop rest)
-  in
-  loop ptspecs
-
-let doDeclaration (loc: cabsloc) (specs: spec_elem list) (nl: init_name list) : definition = 
-  if isTypedef specs then begin
-    (* Tell the lexer about the new type names *)
-    List.iter (fun ((n, _, _, _), _) -> !Lexerhack.add_type n) nl;
-    TYPEDEF ((specs, List.map (fun (n, _) -> n) nl), loc)
-  end else
-    if nl = [] then
-      ONLYTYPEDEF (specs, loc)
-    else begin
-      (* Tell the lexer about the new variable names *)
-      List.iter (fun ((n, _, _, _), _) -> !Lexerhack.add_identifier n) nl;
-      DECDEF ((specs, nl), loc)  
-    end
-
-
-let doFunctionDef (loc: cabsloc)
-                  (lend: cabsloc)
-                  (specs: spec_elem list) 
-                  (n: name) 
-                  (b: block) : definition = 
-  let fname = (specs, n) in
-  FUNDEF (fname, b, loc, lend)
-
-
-let doOldParDecl (names: string list)
-                 ((pardefs: name_group list), (isva: bool)) 
-    : single_name list * bool =
-  let findOneName n =
-    (* Search in pardefs for the definition for this parameter *)
-    let rec loopGroups = function
-        [] -> ([SpecType Tint], (n, JUSTBASE, [], cabslu))
-      | (specs, names) :: restgroups ->
-          let rec loopNames = function
-              [] -> loopGroups restgroups
-            | ((n',_, _, _) as sn) :: _ when n' = n -> (specs, sn)
-            | _ :: restnames -> loopNames restnames
-          in
-          loopNames names
-    in
-    loopGroups pardefs
-  in
-  let args = List.map findOneName names in
-  (args, isva)
-
-let checkConnective (s : string) : unit =
-begin
-  (* checking this means I could possibly have more connectives, with *)
-  (* different meaning *)
-  if (s <> "to") then (
-    parse_error "transformer connective must be 'to'";
-    raise Parsing.Parse_error
-  )
-  else ()
-end
-
-let int64_to_char value =
-  if (compare value (Int64.of_int 255) > 0) || (compare value Int64.zero < 0) then
-    begin
-      let msg = Printf.sprintf "cparser:intlist_to_string: character 0x%Lx too big" value in
-      parse_error msg;
-      raise Parsing.Parse_error
-    end
-  else
-    Char.chr (Int64.to_int value)
-
-(* takes a not-nul-terminated list, and converts it to a string. *)
-let rec intlist_to_string (str: int64 list):string =
-  match str with
-    [] -> ""  (* add nul-termination *)
-  | value::rest ->
-      let this_char = int64_to_char value in
-      (String.make 1 this_char) ^ (intlist_to_string rest)
-
-let fst3 (result, _, _) = result
-let snd3 (_, result, _) = result
-let trd3 (_, _, result) = result
-
-
-(*
-   transform:  __builtin_offsetof(type, member)
-   into     :  (size_t) (&(type * ) 0)->member
- *)
-
-let transformOffsetOf (speclist, dtype) member =
-  let rec addPointer = function
-    | JUSTBASE ->
-	PTR([], JUSTBASE)
-    | PARENTYPE (attrs1, dtype, attrs2) ->
-	PARENTYPE (attrs1, addPointer dtype, attrs2)
-    | ARRAY (dtype, attrs, expr) ->
-	ARRAY (addPointer dtype, attrs, expr)
-    | PTR (attrs, dtype) ->
-	PTR (attrs, addPointer dtype)
-    | PROTO (dtype, names, variadic) ->
-	PROTO (addPointer dtype, names, variadic)
-  in
-  let nullType = (speclist, addPointer dtype) in
-  let nullExpr = CONSTANT (CONST_INT "0") in
-  let castExpr = CAST (nullType, SINGLE_INIT nullExpr) in
-
-  let rec replaceBase = function
-    | VARIABLE field ->
-	MEMBEROFPTR (castExpr, field)
-    | MEMBEROF (base, field) ->
-	MEMBEROF (replaceBase base, field)
-    | INDEX (base, index) ->
-	INDEX (replaceBase base, index)
-    | _ ->
-	parse_error "malformed offset expression in __builtin_offsetof";
-        raise Parsing.Parse_error 
-  in
-  let memberExpr = replaceBase member in
-  let addrExpr = UNARY (ADDROF, memberExpr) in
-  (* slight cheat: hard-coded assumption that size_t == unsigned int *)
-  let sizeofType = [SpecType Tunsigned], JUSTBASE in
-  let resultExpr = CAST (sizeofType, SINGLE_INIT addrExpr) in
-  resultExpr
-
-%}
-
-%token <string * Cabs.cabsloc> IDENT
-%token <int64 list * Cabs.cabsloc> CST_CHAR
-%token <int64 list * Cabs.cabsloc> CST_WCHAR
-%token <string * Cabs.cabsloc> CST_INT
-%token <string * Cabs.cabsloc> CST_FLOAT
-%token <string * Cabs.cabsloc> NAMED_TYPE
-
-/* Each character is its own list element, and the terminating nul is not
-   included in this list. */
-%token <int64 list * Cabs.cabsloc> CST_STRING   
-%token <int64 list * Cabs.cabsloc> CST_WSTRING
-
-%token EOF
-%token<Cabs.cabsloc> CHAR INT DOUBLE FLOAT VOID INT64 INT32
-%token<Cabs.cabsloc> ENUM STRUCT TYPEDEF UNION
-%token<Cabs.cabsloc> SIGNED UNSIGNED LONG SHORT
-%token<Cabs.cabsloc> VOLATILE EXTERN STATIC CONST RESTRICT AUTO REGISTER
-%token<Cabs.cabsloc> THREAD
-
-%token<Cabs.cabsloc> SIZEOF ALIGNOF
-
-%token EQ PLUS_EQ MINUS_EQ STAR_EQ SLASH_EQ PERCENT_EQ
-%token AND_EQ PIPE_EQ CIRC_EQ INF_INF_EQ SUP_SUP_EQ
-%token ARROW DOT
-
-%token EQ_EQ EXCLAM_EQ INF SUP INF_EQ SUP_EQ
-%token<Cabs.cabsloc> PLUS MINUS STAR
-%token SLASH PERCENT
-%token<Cabs.cabsloc> TILDE AND
-%token PIPE CIRC
-%token<Cabs.cabsloc> EXCLAM AND_AND
-%token PIPE_PIPE
-%token INF_INF SUP_SUP
-%token<Cabs.cabsloc> PLUS_PLUS MINUS_MINUS
-
-%token RPAREN 
-%token<Cabs.cabsloc> LPAREN RBRACE
-%token<Cabs.cabsloc> LBRACE
-%token LBRACKET RBRACKET
-%token COLON
-%token<Cabs.cabsloc> SEMICOLON
-%token COMMA ELLIPSIS QUEST
-
-%token<Cabs.cabsloc> BREAK CONTINUE GOTO RETURN
-%token<Cabs.cabsloc> SWITCH CASE DEFAULT
-%token<Cabs.cabsloc> WHILE DO FOR
-%token<Cabs.cabsloc> IF TRY EXCEPT FINALLY
-%token ELSE 
-
-%token<Cabs.cabsloc> ATTRIBUTE INLINE ASM TYPEOF FUNCTION__ PRETTY_FUNCTION__
-%token LABEL__
-%token<Cabs.cabsloc> BUILTIN_VA_ARG ATTRIBUTE_USED
-%token BUILTIN_VA_LIST
-%token BLOCKATTRIBUTE 
-%token<Cabs.cabsloc> BUILTIN_TYPES_COMPAT BUILTIN_OFFSETOF
-%token<Cabs.cabsloc> DECLSPEC
-%token<string * Cabs.cabsloc> MSASM MSATTR
-%token<string * Cabs.cabsloc> PRAGMA_LINE
-%token<Cabs.cabsloc> PRAGMA
-%token PRAGMA_EOL
-
-/* sm: cabs tree transformation specification keywords */
-%token<Cabs.cabsloc> AT_TRANSFORM AT_TRANSFORMEXPR AT_SPECIFIER AT_EXPR
-%token AT_NAME
-
-/* operator precedence */
-%nonassoc 	IF
-%nonassoc 	ELSE
-
-
-%left	COMMA
-%right	EQ PLUS_EQ MINUS_EQ STAR_EQ SLASH_EQ PERCENT_EQ
-                AND_EQ PIPE_EQ CIRC_EQ INF_INF_EQ SUP_SUP_EQ
-%right	QUEST COLON
-%left	PIPE_PIPE
-%left	AND_AND
-%left	PIPE
-%left 	CIRC
-%left	AND
-%left	EQ_EQ EXCLAM_EQ
-%left	INF SUP INF_EQ SUP_EQ
-%left	INF_INF SUP_SUP
-%left	PLUS MINUS
-%left	STAR SLASH PERCENT CONST RESTRICT VOLATILE
-%right	EXCLAM TILDE PLUS_PLUS MINUS_MINUS CAST RPAREN ADDROF SIZEOF ALIGNOF
-%left 	LBRACKET
-%left	DOT ARROW LPAREN LBRACE
-%right  NAMED_TYPE     /* We'll use this to handle redefinitions of
-                        * NAMED_TYPE as variables */
-%left   IDENT
-
-/* Non-terminals informations */
-%start interpret file
-%type <Cabs.definition list> file interpret globals
-
-%type <Cabs.definition> global
-
-
-%type <Cabs.attribute list> attributes attributes_with_asm asmattr
-%type <Cabs.statement> statement
-%type <Cabs.constant * cabsloc> constant
-%type <string * cabsloc> string_constant
-%type <Cabs.expression * cabsloc> expression
-%type <Cabs.expression> opt_expression
-%type <Cabs.init_expression> init_expression
-%type <Cabs.expression list * cabsloc> comma_expression
-%type <Cabs.expression list * cabsloc> paren_comma_expression
-%type <Cabs.expression list> arguments
-%type <Cabs.expression list> bracket_comma_expression
-%type <int64 list Queue.t * cabsloc> string_list 
-%type <int64 list * cabsloc> wstring_list
-
-%type <Cabs.initwhat * Cabs.init_expression> initializer
-%type <(Cabs.initwhat * Cabs.init_expression) list> initializer_list
-%type <Cabs.initwhat> init_designators init_designators_opt
-
-%type <spec_elem list * cabsloc> decl_spec_list
-%type <typeSpecifier * cabsloc> type_spec
-%type <Cabs.field_group list> struct_decl_list
-
-
-%type <Cabs.name> old_proto_decl
-%type <Cabs.single_name> parameter_decl
-%type <Cabs.enum_item> enumerator
-%type <Cabs.enum_item list> enum_list
-%type <Cabs.definition> declaration function_def
-%type <cabsloc * spec_elem list * name> function_def_start
-%type <Cabs.spec_elem list * Cabs.decl_type> type_name
-%type <Cabs.block * cabsloc * cabsloc> block
-%type <Cabs.statement list> block_element_list
-%type <string list> local_labels local_label_names
-%type <string list> old_parameter_list_ne
-
-%type <Cabs.init_name> init_declarator
-%type <Cabs.init_name list> init_declarator_list
-%type <Cabs.name> declarator
-%type <Cabs.name * expression option> field_decl
-%type <(Cabs.name * expression option) list> field_decl_list
-%type <string * Cabs.decl_type> direct_decl
-%type <Cabs.decl_type> abs_direct_decl abs_direct_decl_opt
-%type <Cabs.decl_type * Cabs.attribute list> abstract_decl
-
- /* (* Each element is a "* <type_quals_opt>". *) */
-%type <attribute list list * cabsloc> pointer pointer_opt
-%type <Cabs.cabsloc> location
-%type <Cabs.spec_elem * cabsloc> cvspec
-%%
-
-interpret:
-  file EOF				{$1}
-;
-file: globals				{$1}
-;
-globals:
-  /* empty */                           { [] }
-| global globals                        { $1 :: $2 }
-| SEMICOLON globals                     { $2 }
-;
-
-location:
-   /* empty */                	{ currentLoc () }  %prec IDENT
-
-
-/*** Global Definition ***/
-global:
-| declaration                           { $1 }
-| function_def                          { $1 } 
-/*(* Some C header files ar shared with the C++ compiler and have linkage 
-   * specification *)*/
-| EXTERN string_constant declaration    { LINKAGE (fst $2, (*handleLoc*) (snd $2), [ $3 ]) }
-| EXTERN string_constant LBRACE globals RBRACE 
-                                        { LINKAGE (fst $2, (*handleLoc*) (snd $2), $4)  }
-| ASM LPAREN string_constant RPAREN SEMICOLON
-                                        { GLOBASM (fst $3, (*handleLoc*) $1) }
-| pragma                                { $1 }
-/* (* Old-style function prototype. This should be somewhere else, like in
-    * "declaration". For now we keep it at global scope only because in local
-    * scope it looks too much like a function call  *) */
-| IDENT LPAREN old_parameter_list_ne RPAREN old_pardef_list SEMICOLON
-                           { (* Convert pardecl to new style *)
-                             let pardecl, isva = doOldParDecl $3 $5 in 
-                             (* Make the function declarator *)
-                             doDeclaration ((*handleLoc*) (snd $1)) []
-                               [((fst $1, PROTO(JUSTBASE, pardecl,isva), [], cabslu),
-                                 NO_INIT)]
-                            }
-/* (* Old style function prototype, but without any arguments *) */
-| IDENT LPAREN RPAREN  SEMICOLON
-                           { (* Make the function declarator *)
-                             doDeclaration ((*handleLoc*)(snd $1)) []
-                               [((fst $1, PROTO(JUSTBASE,[],false), [], cabslu),
-                                 NO_INIT)]
-                            }
-/* transformer for a toplevel construct */
-| AT_TRANSFORM LBRACE global RBRACE  IDENT/*to*/  LBRACE globals RBRACE {
-    checkConnective(fst $5);
-    TRANSFORMER($3, $7, $1)
-  }
-/* transformer for an expression */
-| AT_TRANSFORMEXPR LBRACE expression RBRACE  IDENT/*to*/  LBRACE expression RBRACE {
-    checkConnective(fst $5);
-    EXPRTRANSFORMER(fst $3, fst $7, $1)
-  }
-| location error SEMICOLON { PRAGMA (VARIABLE "parse_error", $1) }
-;
-
-id_or_typename:
-    IDENT				{fst $1}
-|   NAMED_TYPE				{fst $1}
-|   AT_NAME LPAREN IDENT RPAREN         { "@name(" ^ fst $3 ^ ")" }     /* pattern variable name */
-;
-
-maybecomma:
-   /* empty */                          { () }
-|  COMMA                                { () }
-;
-
-/* *** Expressions *** */
-
-primary_expression:                     /*(* 6.5.1. *)*/
-|		IDENT
-		        {VARIABLE (fst $1), snd $1}
-|        	constant
-		        {CONSTANT (fst $1), snd $1}
-|		paren_comma_expression  
-		        {smooth_expression (fst $1), snd $1}
-|		LPAREN block RPAREN
-		        { GNU_BODY (fst3 $2), $1 }
-
-     /*(* Next is Scott's transformer *)*/
-|               AT_EXPR LPAREN IDENT RPAREN         /* expression pattern variable */
-                         { EXPR_PATTERN(fst $3), $1 }
-;
-
-postfix_expression:                     /*(* 6.5.2 *)*/
-|               primary_expression     
-                        { $1 }
-|		postfix_expression bracket_comma_expression
-			{INDEX (fst $1, smooth_expression $2), snd $1}
-|		postfix_expression LPAREN arguments RPAREN
-			{CALL (fst $1, $3), snd $1}
-|               BUILTIN_VA_ARG LPAREN expression COMMA type_name RPAREN
-                        { let b, d = $5 in
-                          CALL (VARIABLE "__builtin_va_arg", 
-                                [fst $3; TYPE_SIZEOF (b, d)]), $1 }
-|               BUILTIN_TYPES_COMPAT LPAREN type_name COMMA type_name RPAREN
-                        { let b1,d1 = $3 in
-                          let b2,d2 = $5 in
-                          CALL (VARIABLE "__builtin_types_compatible_p", 
-                                [TYPE_SIZEOF(b1,d1); TYPE_SIZEOF(b2,d2)]), $1 }
-|               BUILTIN_OFFSETOF LPAREN type_name COMMA offsetof_member_designator RPAREN
-                        { transformOffsetOf $3 (fst $5), $1 }
-|		postfix_expression DOT id_or_typename
-		        {MEMBEROF (fst $1, $3), snd $1}
-|		postfix_expression ARROW id_or_typename   
-		        {MEMBEROFPTR (fst $1, $3), snd $1}
-|		postfix_expression PLUS_PLUS
-		        {UNARY (POSINCR, fst $1), snd $1}
-|		postfix_expression MINUS_MINUS
-		        {UNARY (POSDECR, fst $1), snd $1}
-/* (* We handle GCC constructor expressions *) */
-|		LPAREN type_name RPAREN LBRACE initializer_list_opt RBRACE
-		        { CAST($2, COMPOUND_INIT $5), $1 }
-;
-
-offsetof_member_designator:	/* GCC extension for __builtin_offsetof */
-|		IDENT
-		        { VARIABLE (fst $1), snd $1 }
-|		offsetof_member_designator DOT IDENT
-			{ MEMBEROF (fst $1, fst $3), snd $1 }
-|		offsetof_member_designator bracket_comma_expression
-			{ INDEX (fst $1, smooth_expression $2), snd $1 }
-;
-
-unary_expression:   /*(* 6.5.3 *)*/
-|               postfix_expression
-                        { $1 }
-|		PLUS_PLUS unary_expression
-		        {UNARY (PREINCR, fst $2), $1}
-|		MINUS_MINUS unary_expression
-		        {UNARY (PREDECR, fst $2), $1}
-|		SIZEOF unary_expression
-		        {EXPR_SIZEOF (fst $2), $1}
-|	 	SIZEOF LPAREN type_name RPAREN
-		        {let b, d = $3 in TYPE_SIZEOF (b, d), $1}
-|		ALIGNOF unary_expression
-		        {EXPR_ALIGNOF (fst $2), $1}
-|	 	ALIGNOF LPAREN type_name RPAREN
-		        {let b, d = $3 in TYPE_ALIGNOF (b, d), $1}
-|		PLUS cast_expression
-		        {UNARY (PLUS, fst $2), $1}
-|		MINUS cast_expression
-		        {UNARY (MINUS, fst $2), $1}
-|		STAR cast_expression
-		        {UNARY (MEMOF, fst $2), $1}
-|		AND cast_expression				
-		        {UNARY (ADDROF, fst $2), $1}
-|		EXCLAM cast_expression
-		        {UNARY (NOT, fst $2), $1}
-|		TILDE cast_expression
-		        {UNARY (BNOT, fst $2), $1}
-|               AND_AND IDENT  { LABELADDR (fst $2), $1 }
-;
-
-cast_expression:   /*(* 6.5.4 *)*/
-|              unary_expression 
-                         { $1 }
-|		LPAREN type_name RPAREN cast_expression
-		         { CAST($2, SINGLE_INIT (fst $4)), $1 }
-;
-
-multiplicative_expression:  /*(* 6.5.5 *)*/
-|               cast_expression
-                         { $1 }
-|		multiplicative_expression STAR cast_expression
-			{BINARY(MUL, fst $1, fst $3), snd $1}
-|		multiplicative_expression SLASH cast_expression
-			{BINARY(DIV, fst $1, fst $3), snd $1}
-|		multiplicative_expression PERCENT cast_expression
-			{BINARY(MOD, fst $1, fst $3), snd $1}
-;
-
-additive_expression:  /*(* 6.5.6 *)*/
-|               multiplicative_expression
-                        { $1 }
-|		additive_expression PLUS multiplicative_expression
-			{BINARY(ADD, fst $1, fst $3), snd $1}
-|		additive_expression MINUS multiplicative_expression
-			{BINARY(SUB, fst $1, fst $3), snd $1}
-;
-
-shift_expression:      /*(* 6.5.7 *)*/
-|               additive_expression
-                         { $1 }
-|		shift_expression  INF_INF additive_expression
-			{BINARY(SHL, fst $1, fst $3), snd $1}
-|		shift_expression  SUP_SUP additive_expression
-			{BINARY(SHR, fst $1, fst $3), snd $1}
-;
-
-
-relational_expression:   /*(* 6.5.8 *)*/
-|               shift_expression
-                        { $1 }
-|		relational_expression INF shift_expression
-			{BINARY(LT, fst $1, fst $3), snd $1}
-|		relational_expression SUP shift_expression
-			{BINARY(GT, fst $1, fst $3), snd $1}
-|		relational_expression INF_EQ shift_expression
-			{BINARY(LE, fst $1, fst $3), snd $1}
-|		relational_expression SUP_EQ shift_expression
-			{BINARY(GE, fst $1, fst $3), snd $1}
-;
-
-equality_expression:   /*(* 6.5.9 *)*/
-|              relational_expression
-                        { $1 }
-|		equality_expression EQ_EQ relational_expression
-			{BINARY(EQ, fst $1, fst $3), snd $1}
-|		equality_expression EXCLAM_EQ relational_expression
-			{BINARY(NE, fst $1, fst $3), snd $1}
-;
-
-
-bitwise_and_expression:   /*(* 6.5.10 *)*/
-|               equality_expression
-                       { $1 }
-|		bitwise_and_expression AND equality_expression
-			{BINARY(BAND, fst $1, fst $3), snd $1}
-;
-
-bitwise_xor_expression:   /*(* 6.5.11 *)*/
-|               bitwise_and_expression
-                       { $1 }
-|		bitwise_xor_expression CIRC bitwise_and_expression
-			{BINARY(XOR, fst $1, fst $3), snd $1}
-;
-
-bitwise_or_expression:   /*(* 6.5.12 *)*/
-|               bitwise_xor_expression
-                        { $1 } 
-|		bitwise_or_expression PIPE bitwise_xor_expression
-			{BINARY(BOR, fst $1, fst $3), snd $1}
-;
-
-logical_and_expression:   /*(* 6.5.13 *)*/
-|               bitwise_or_expression
-                        { $1 }
-|		logical_and_expression AND_AND bitwise_or_expression
-			{BINARY(AND, fst $1, fst $3), snd $1}
-;
-
-logical_or_expression:   /*(* 6.5.14 *)*/
-|               logical_and_expression
-                        { $1 }
-|		logical_or_expression PIPE_PIPE logical_and_expression
-			{BINARY(OR, fst $1, fst $3), snd $1}
-;
-
-conditional_expression:    /*(* 6.5.15 *)*/
-|               logical_or_expression
-                         { $1 }
-|		logical_or_expression QUEST opt_expression COLON conditional_expression
-			{QUESTION (fst $1, $3, fst $5), snd $1}
-;
-
-/*(* The C spec says that left-hand sides of assignment expressions are unary 
- * expressions. GCC allows cast expressions in there ! *)*/
-
-assignment_expression:     /*(* 6.5.16 *)*/
-|               conditional_expression
-                         { $1 }
-|		cast_expression EQ assignment_expression
-			{BINARY(ASSIGN, fst $1, fst $3), snd $1}
-|		cast_expression PLUS_EQ assignment_expression
-			{BINARY(ADD_ASSIGN, fst $1, fst $3), snd $1}
-|		cast_expression MINUS_EQ assignment_expression
-			{BINARY(SUB_ASSIGN, fst $1, fst $3), snd $1}
-|		cast_expression STAR_EQ assignment_expression
-			{BINARY(MUL_ASSIGN, fst $1, fst $3), snd $1}
-|		cast_expression SLASH_EQ assignment_expression
-			{BINARY(DIV_ASSIGN, fst $1, fst $3), snd $1}
-|		cast_expression PERCENT_EQ assignment_expression
-			{BINARY(MOD_ASSIGN, fst $1, fst $3), snd $1}
-|		cast_expression AND_EQ assignment_expression
-			{BINARY(BAND_ASSIGN, fst $1, fst $3), snd $1}
-|		cast_expression PIPE_EQ assignment_expression
-			{BINARY(BOR_ASSIGN, fst $1, fst $3), snd $1}
-|		cast_expression CIRC_EQ assignment_expression
-			{BINARY(XOR_ASSIGN, fst $1, fst $3), snd $1}
-|		cast_expression INF_INF_EQ assignment_expression	
-			{BINARY(SHL_ASSIGN, fst $1, fst $3), snd $1}
-|		cast_expression SUP_SUP_EQ assignment_expression
-			{BINARY(SHR_ASSIGN, fst $1, fst $3), snd $1}
-;
-
-expression:           /*(* 6.5.17 *)*/
-                assignment_expression
-                        { $1 }
-;
-                            
-
-constant:
-    CST_INT				{CONST_INT (fst $1), snd $1}
-|   CST_FLOAT				{CONST_FLOAT (fst $1), snd $1}
-|   CST_CHAR				{CONST_CHAR (fst $1), snd $1}
-|   CST_WCHAR				{CONST_WCHAR (fst $1), snd $1}
-|   string_constant		        {CONST_STRING (fst $1), snd $1}
-|   wstring_list			{CONST_WSTRING (fst $1), snd $1}
-;
-
-string_constant:
-/* Now that we know this constant isn't part of a wstring, convert it
-   back to a string for easy viewing. */
-    string_list                         {
-     let queue, location = $1 in
-     let buffer = Buffer.create (Queue.length queue) in
-     Queue.iter
-       (List.iter
-	  (fun value ->
-	    let char = int64_to_char value in
-	    Buffer.add_char buffer char))
-       queue;
-     Buffer.contents buffer, location
-   }
-;
-one_string_constant:
-/* Don't concat multiple strings.  For asm templates. */
-    CST_STRING                          {intlist_to_string (fst $1) }
-;
-string_list:
-    one_string                          {
-      let queue = Queue.create () in
-      Queue.add (fst $1) queue;
-      queue, snd $1
-    }
-|   string_list one_string              {
-      Queue.add (fst $2) (fst $1);
-      $1
-    }
-;
-
-wstring_list:
-    CST_WSTRING                         { $1 }
-|   wstring_list one_string             { (fst $1) @ (fst $2), snd $1 }
-|   wstring_list CST_WSTRING            { (fst $1) @ (fst $2), snd $1 }
-/* Only the first string in the list needs an L, so L"a" "b" is the same
- * as L"ab" or L"a" L"b". */
-
-one_string: 
-    CST_STRING				{$1}
-|   FUNCTION__                          {(Cabs.explodeStringToInts 
-					    !currentFunctionName), $1}
-|   PRETTY_FUNCTION__                   {(Cabs.explodeStringToInts 
-					    !currentFunctionName), $1}
-;    
-
-init_expression:
-     expression         { SINGLE_INIT (fst $1) }
-|    LBRACE initializer_list_opt RBRACE
-			{ COMPOUND_INIT $2}
-
-initializer_list:    /* ISO 6.7.8. Allow a trailing COMMA */
-    initializer                             { [$1] }
-|   initializer COMMA initializer_list_opt  { $1 :: $3 }
-;
-initializer_list_opt:
-    /* empty */                             { [] }
-|   initializer_list                        { $1 }
-;
-initializer: 
-    init_designators eq_opt init_expression { ($1, $3) }
-|   gcc_init_designators init_expression { ($1, $2) }
-|                       init_expression { (NEXT_INIT, $1) }
-;
-eq_opt: 
-   EQ                        { () }
-   /*(* GCC allows missing = *)*/
-|  /*(* empty *)*/               { () }
-;
-init_designators: 
-    DOT id_or_typename init_designators_opt      { INFIELD_INIT($2, $3) }
-|   LBRACKET  expression RBRACKET init_designators_opt
-                                        { ATINDEX_INIT(fst $2, $4) }
-|   LBRACKET  expression ELLIPSIS expression RBRACKET
-                                        { ATINDEXRANGE_INIT(fst $2, fst $4) }
-;         
-init_designators_opt:
-   /* empty */                          { NEXT_INIT }
-|  init_designators                     { $1 }
-;
-
-gcc_init_designators:  /*(* GCC supports these strange things *)*/
-   id_or_typename COLON                 { INFIELD_INIT($1, NEXT_INIT) }
-;
-
-arguments: 
-                /* empty */         { [] }
-|               comma_expression    { fst $1 }
-;
-
-opt_expression:
-	        /* empty */
-	        	{NOTHING}
-|	        comma_expression
-	        	{smooth_expression (fst $1)}
-;
-
-comma_expression:
-	        expression                        {[fst $1], snd $1}
-|               expression COMMA comma_expression { fst $1 :: fst $3, snd $1 }
-|               error COMMA comma_expression      { $3 }
-;
-
-comma_expression_opt:
-                /* empty */         { NOTHING }
-|               comma_expression    { smooth_expression (fst $1) }
-;
-
-paren_comma_expression:
-  LPAREN comma_expression RPAREN                   { $2 }
-| LPAREN error RPAREN                              { [], $1 }
-;
-
-bracket_comma_expression:
-  LBRACKET comma_expression RBRACKET                   { fst $2 }
-| LBRACKET error RBRACKET                              { [] }
-;
-
-
-/*** statements ***/
-block: /* ISO 6.8.2 */
-    block_begin local_labels block_attrs block_element_list RBRACE
-                                         {!Lexerhack.pop_context();
-                                          { blabels = $2;
-                                            battrs = $3;
-                                            bstmts = $4 },
-					    $1, $5
-                                         } 
-|   error location RBRACE                { { blabels = [];
-                                             battrs  = [];
-                                             bstmts  = [] },
-					     $2, $3
-                                         }
-;
-block_begin:
-    LBRACE      		         {!Lexerhack.push_context (); $1}
-;
-
-block_attrs:
-   /* empty */                                              { [] }
-|  BLOCKATTRIBUTE paren_attr_list_ne
-                                        { [("__blockattribute__", $2)] }
-;
-
-/* statements and declarations in a block, in any order (for C99 support) */
-block_element_list:
-    /* empty */                          { [] }
-|   declaration block_element_list       { DEFINITION($1) :: $2 }
-|   statement block_element_list         { $1 :: $2 }
-/*(* GCC accepts a label at the end of a block *)*/
-|   IDENT COLON	                         { [ LABEL (fst $1, NOP (snd $1), 
-                                                    snd $1)] }
-|   pragma block_element_list            { $2 }
-;
-
-local_labels:
-   /* empty */                                       { [] }
-|  LABEL__ local_label_names SEMICOLON local_labels  { $2 @ $4 }
-;
-local_label_names: 
-   IDENT                                 { [ fst $1 ] }
-|  IDENT COMMA local_label_names         { fst $1 :: $3 }
-;
-
-
-
-statement:
-    SEMICOLON		{NOP ((*handleLoc*) $1) }
-|   comma_expression SEMICOLON
-	        	{COMPUTATION (smooth_expression (fst $1), (*handleLoc*)(snd $1))}
-|   block               {BLOCK (fst3 $1, (*handleLoc*)(snd3 $1))}
-|   IF paren_comma_expression statement                    %prec IF
-                	{IF (smooth_expression (fst $2), $3, NOP $1, $1)}
-|   IF paren_comma_expression statement ELSE statement
-	                {IF (smooth_expression (fst $2), $3, $5, (*handleLoc*) $1)}
-|   SWITCH paren_comma_expression statement
-                        {SWITCH (smooth_expression (fst $2), $3, (*handleLoc*) $1)}
-|   WHILE paren_comma_expression statement
-	        	{WHILE (smooth_expression (fst $2), $3, (*handleLoc*) $1)}
-|   DO statement WHILE paren_comma_expression SEMICOLON
-	        	         {DOWHILE (smooth_expression (fst $4), $2, (*handleLoc*) $1)}
-|   FOR LPAREN for_clause opt_expression
-	        SEMICOLON opt_expression RPAREN statement
-	                         {FOR ($3, $4, $6, $8, (*handleLoc*) $1)}
-|   IDENT COLON statement
-		                 {LABEL (fst $1, $3, (*handleLoc*) (snd $1))}
-|   CASE expression COLON statement
-	                         {CASE (fst $2, $4, (*handleLoc*) $1)}
-|   CASE expression ELLIPSIS expression COLON statement
-	                         {CASERANGE (fst $2, fst $4, $6, (*handleLoc*) $1)}
-|   DEFAULT COLON
-	                         {DEFAULT (NOP $1, (*handleLoc*) $1)}
-|   RETURN SEMICOLON		 {RETURN (NOTHING, (*handleLoc*) $1)}
-|   RETURN comma_expression SEMICOLON
-	                         {RETURN (smooth_expression (fst $2), (*handleLoc*) $1)}
-|   BREAK SEMICOLON     {BREAK ((*handleLoc*) $1)}
-|   CONTINUE SEMICOLON	 {CONTINUE ((*handleLoc*) $1)}
-|   GOTO IDENT SEMICOLON
-		                 {GOTO (fst $2, (*handleLoc*) $1)}
-|   GOTO STAR comma_expression SEMICOLON 
-                                 { COMPGOTO (smooth_expression (fst $3), (*handleLoc*) $1) }
-|   ASM asmattr LPAREN asmtemplate asmoutputs RPAREN SEMICOLON
-                        { ASM ($2, $4, $5, (*handleLoc*) $1) }
-|   MSASM               { ASM ([], [fst $1], None, (*handleLoc*)(snd $1))}
-|   TRY block EXCEPT paren_comma_expression block
-                        { let b, _, _ = $2 in
-                          let h, _, _ = $5 in
-                          if not !Cprint.msvcMode then 
-                            parse_error "try/except in GCC code";
-                          TRY_EXCEPT (b, COMMA (fst $4), h, (*handleLoc*) $1) }
-|   TRY block FINALLY block 
-                        { let b, _, _ = $2 in
-                          let h, _, _ = $4 in
-                          if not !Cprint.msvcMode then 
-                            parse_error "try/finally in GCC code";
-                          TRY_FINALLY (b, h, (*handleLoc*) $1) }
-
-|   error location   SEMICOLON   { (NOP $2)}
-;
-
-
-for_clause: 
-    opt_expression SEMICOLON     { FC_EXP $1 }
-|   declaration                  { FC_DECL $1 }
-;
-
-declaration:                                /* ISO 6.7.*/
-    decl_spec_list init_declarator_list SEMICOLON
-                                       { doDeclaration ((*handleLoc*)(snd $1)) (fst $1) $2 }
-|   decl_spec_list SEMICOLON	       
-                                       { doDeclaration ((*handleLoc*)(snd $1)) (fst $1) [] }
-;
-init_declarator_list:                       /* ISO 6.7 */
-    init_declarator                              { [$1] }
-|   init_declarator COMMA init_declarator_list   { $1 :: $3 }
-
-;
-init_declarator:                             /* ISO 6.7 */
-    declarator                          { ($1, NO_INIT) }
-|   declarator EQ init_expression 
-                                        { ($1, $3) }
-;
-
-decl_spec_list:                         /* ISO 6.7 */
-                                        /* ISO 6.7.1 */
-|   TYPEDEF decl_spec_list_opt          { SpecTypedef :: $2, $1  }    
-|   EXTERN decl_spec_list_opt           { SpecStorage EXTERN :: $2, $1 }
-|   STATIC  decl_spec_list_opt          { SpecStorage STATIC :: $2, $1 }
-|   AUTO   decl_spec_list_opt           { SpecStorage AUTO :: $2, $1 }
-|   REGISTER decl_spec_list_opt         { SpecStorage REGISTER :: $2, $1}
-                                        /* ISO 6.7.2 */
-|   type_spec decl_spec_list_opt_no_named { SpecType (fst $1) :: $2, snd $1 }
-                                        /* ISO 6.7.4 */
-|   INLINE decl_spec_list_opt           { SpecInline :: $2, $1 }
-|   cvspec decl_spec_list_opt           { (fst $1) :: $2, snd $1 }
-|   attribute_nocv decl_spec_list_opt   { SpecAttr (fst $1) :: $2, snd $1 }
-/* specifier pattern variable (must be last in spec list) */
-|   AT_SPECIFIER LPAREN IDENT RPAREN    { [ SpecPattern(fst $3) ], $1 }
-;
-/* (* In most cases if we see a NAMED_TYPE we must shift it. Thus we declare 
-    * NAMED_TYPE to have right associativity  *) */
-decl_spec_list_opt: 
-    /* empty */                         { [] } %prec NAMED_TYPE
-|   decl_spec_list                      { fst $1 }
-;
-/* (* We add this separate rule to handle the special case when an appearance 
-    * of NAMED_TYPE should not be considered as part of the specifiers but as 
-    * part of the declarator. IDENT has higher precedence than NAMED_TYPE  *)
- */
-decl_spec_list_opt_no_named: 
-    /* empty */                         { [] } %prec IDENT
-|   decl_spec_list                      { fst $1 }
-;
-type_spec:   /* ISO 6.7.2 */
-    VOID            { Tvoid, $1}
-|   CHAR            { Tchar, $1 }
-|   SHORT           { Tshort, $1 }
-|   INT             { Tint, $1 }
-|   LONG            { Tlong, $1 }
-|   INT64           { Tint64, $1 }
-|   FLOAT           { Tfloat, $1 }
-|   DOUBLE          { Tdouble, $1 }
-|   SIGNED          { Tsigned, $1 }
-|   UNSIGNED        { Tunsigned, $1 }
-|   STRUCT                 id_or_typename
-                                                   { Tstruct ($2, None,    []), $1 }
-|   STRUCT just_attributes id_or_typename
-                                                   { Tstruct ($3, None,    $2), $1 }
-|   STRUCT                 id_or_typename LBRACE struct_decl_list RBRACE
-                                                   { Tstruct ($2, Some $4, []), $1 }
-|   STRUCT                                LBRACE struct_decl_list RBRACE
-                                                   { Tstruct ("", Some $3, []), $1 }
-|   STRUCT just_attributes id_or_typename LBRACE struct_decl_list RBRACE
-                                                   { Tstruct ($3, Some $5, $2), $1 }
-|   STRUCT just_attributes                LBRACE struct_decl_list RBRACE
-                                                   { Tstruct ("", Some $4, $2), $1 }
-|   UNION                  id_or_typename
-                                                   { Tunion  ($2, None,    []), $1 }
-|   UNION                  id_or_typename LBRACE struct_decl_list RBRACE
-                                                   { Tunion  ($2, Some $4, []), $1 }
-|   UNION                                 LBRACE struct_decl_list RBRACE
-                                                   { Tunion  ("", Some $3, []), $1 }
-|   UNION  just_attributes id_or_typename LBRACE struct_decl_list RBRACE
-                                                   { Tunion  ($3, Some $5, $2), $1 }
-|   UNION  just_attributes                LBRACE struct_decl_list RBRACE
-                                                   { Tunion  ("", Some $4, $2), $1 }
-|   ENUM                   id_or_typename
-                                                   { Tenum   ($2, None,    []), $1 }
-|   ENUM                   id_or_typename LBRACE enum_list maybecomma RBRACE
-                                                   { Tenum   ($2, Some $4, []), $1 }
-|   ENUM                                  LBRACE enum_list maybecomma RBRACE
-                                                   { Tenum   ("", Some $3, []), $1 }
-|   ENUM   just_attributes id_or_typename LBRACE enum_list maybecomma RBRACE
-                                                   { Tenum   ($3, Some $5, $2), $1 }
-|   ENUM   just_attributes                LBRACE enum_list maybecomma RBRACE
-                                                   { Tenum   ("", Some $4, $2), $1 }
-|   NAMED_TYPE      { Tnamed (fst $1), snd $1 }
-|   TYPEOF LPAREN expression RPAREN     { TtypeofE (fst $3), $1 }
-|   TYPEOF LPAREN type_name RPAREN      { let s, d = $3 in
-                                          TtypeofT (s, d), $1 }
-;
-struct_decl_list: /* (* ISO 6.7.2. Except that we allow empty structs. We 
-                      * also allow missing field names. *)
-                   */
-   /* empty */                           { [] }
-|  decl_spec_list                 SEMICOLON struct_decl_list
-                                         { (fst $1, 
-                                            [(missingFieldDecl, None)]) :: $3 }
-/*(* GCC allows extra semicolons *)*/
-|                                 SEMICOLON struct_decl_list
-                                         { $2 }
-|  decl_spec_list field_decl_list SEMICOLON struct_decl_list
-                                          { (fst $1, $2) 
-                                            :: $4 }
-/*(* MSVC allows pragmas in strange places *)*/
-|  pragma struct_decl_list                { $2 }
-
-|  error                          SEMICOLON struct_decl_list
-                                          { $3 } 
-;
-field_decl_list: /* (* ISO 6.7.2 *) */
-    field_decl                           { [$1] }
-|   field_decl COMMA field_decl_list     { $1 :: $3 }
-;
-field_decl: /* (* ISO 6.7.2. Except that we allow unnamed fields. *) */
-|   declarator                      { ($1, None) }
-|   declarator COLON expression     { ($1, Some (fst $3)) }    
-|              COLON expression     { (missingFieldDecl, Some (fst $2)) }
-;
-
-enum_list: /* (* ISO 6.7.2.2 *) */
-    enumerator				{[$1]}
-|   enum_list COMMA enumerator	        {$1 @ [$3]}
-|   enum_list COMMA error               { $1 } 
-;
-enumerator:	
-    IDENT			{(fst $1, NOTHING, snd $1)}
-|   IDENT EQ expression		{(fst $1, fst $3, snd $1)}
-;
-
-
-declarator:  /* (* ISO 6.7.5. Plus Microsoft declarators.*) */
-   pointer_opt direct_decl attributes_with_asm
-                                         { let (n, decl) = $2 in
-                                           (n, applyPointer (fst $1) decl, $3, (*(*handleLoc*)*)(snd $1)) }
-;
-
-
-direct_decl: /* (* ISO 6.7.5 *) */
-                                   /* (* We want to be able to redefine named
-                                    * types as variable names *) */
-|   id_or_typename                 { ($1, JUSTBASE) }
-
-|   LPAREN attributes declarator RPAREN
-                                   { let (n,decl,al,loc) = $3 in
-                                     (n, PARENTYPE($2,decl,al)) }
-
-|   direct_decl LBRACKET attributes comma_expression_opt RBRACKET
-                                   { let (n, decl) = $1 in
-                                     (n, ARRAY(decl, $3, $4)) }
-|   direct_decl LBRACKET attributes error RBRACKET
-                                   { let (n, decl) = $1 in
-                                     (n, ARRAY(decl, $3, NOTHING)) }
-|   direct_decl parameter_list_startscope rest_par_list RPAREN
-                                   { let (n, decl) = $1 in
-                                     let (params, isva) = $3 in
-                                     !Lexerhack.pop_context ();
-                                     (n, PROTO(decl, params, isva))
-                                   }
-;
-parameter_list_startscope: 
-    LPAREN                         { !Lexerhack.push_context () }
-;
-rest_par_list:
-|   /* empty */                    { ([], false) }
-|   parameter_decl rest_par_list1  { let (params, isva) = $2 in 
-                                     ($1 :: params, isva) 
-                                   }
-;
-rest_par_list1: 
-    /* empty */                         { ([], false) }
-|   COMMA ELLIPSIS                      { ([], true) }
-|   COMMA parameter_decl rest_par_list1 { let (params, isva) = $3 in 
-                                          ($2 :: params, isva)
-                                        }  
-;    
-
-
-parameter_decl: /* (* ISO 6.7.5 *) */
-   decl_spec_list declarator              { (fst $1, $2) }
-|  decl_spec_list abstract_decl           { let d, a = $2 in
-                                            (fst $1, ("", d, a, cabslu)) }
-|  decl_spec_list                         { (fst $1, ("", JUSTBASE, [], cabslu)) }
-|  LPAREN parameter_decl RPAREN           { $2 } 
-;
-
-/* (* Old style prototypes. Like a declarator *) */
-old_proto_decl:
-  pointer_opt direct_old_proto_decl   { let (n, decl, a) = $2 in
-					  (n, applyPointer (fst $1) decl, 
-                                           a, snd $1) 
-                                      }
-
-;
-
-direct_old_proto_decl:
-  direct_decl LPAREN old_parameter_list_ne RPAREN old_pardef_list
-                                   { let par_decl, isva = doOldParDecl $3 $5 in
-                                     let n, decl = $1 in
-                                     (n, PROTO(decl, par_decl, isva), [])
-                                   }
-| direct_decl LPAREN                       RPAREN
-                                   { let n, decl = $1 in
-                                     (n, PROTO(decl, [], false), [])
-                                   }
-
-/* (* appears sometimesm but generates a shift-reduce conflict. *)
-| LPAREN STAR direct_decl LPAREN old_parameter_list_ne RPAREN RPAREN LPAREN RPAREN old_pardef_list
-                                   { let par_decl, isva 
-                                             = doOldParDecl $5 $10 in
-                                     let n, decl = $3 in
-                                     (n, PROTO(decl, par_decl, isva), [])
-                                   }
-*/
-;
-
-old_parameter_list_ne:
-|  IDENT                                       { [fst $1] }
-|  IDENT COMMA old_parameter_list_ne           { let rest = $3 in
-                                                 (fst $1 :: rest) }
-;
-
-old_pardef_list: 
-   /* empty */                            { ([], false) }
-|  decl_spec_list old_pardef SEMICOLON ELLIPSIS
-                                          { ([(fst $1, $2)], true) }  
-|  decl_spec_list old_pardef SEMICOLON old_pardef_list  
-                                          { let rest, isva = $4 in
-                                            ((fst $1, $2) :: rest, isva) 
-                                          }
-;
-
-old_pardef: 
-   declarator                             { [$1] }
-|  declarator COMMA old_pardef            { $1 :: $3 }
-|  error                                  { [] }
-;
-
-
-pointer: /* (* ISO 6.7.5 *) */ 
-   STAR attributes pointer_opt  { $2 :: fst $3, $1 }
-;
-pointer_opt:
-   /**/                          { let l = currentLoc () in
-                                   ([], l) }
-|  pointer                       { $1 }
-;
-
-type_name: /* (* ISO 6.7.6 *) */
-  decl_spec_list abstract_decl { let d, a = $2 in
-                                 if a <> [] then begin
-                                   parse_error "attributes in type name";
-                                   raise Parsing.Parse_error
-                                 end;
-                                 (fst $1, d) 
-                               }
-| decl_spec_list               { (fst $1, JUSTBASE) }
-;
-abstract_decl: /* (* ISO 6.7.6. *) */
-  pointer_opt abs_direct_decl attributes  { applyPointer (fst $1) $2, $3 }
-| pointer                                 { applyPointer (fst $1) JUSTBASE, [] }
-;
-
-abs_direct_decl: /* (* ISO 6.7.6. We do not support optional declarator for 
-                     * functions. Plus Microsoft attributes. See the 
-                     * discussion for declarator. *) */
-|   LPAREN attributes abstract_decl RPAREN
-                                   { let d, a = $3 in
-                                     PARENTYPE ($2, d, a)
-                                   }
-            
-|   LPAREN error RPAREN
-                                   { JUSTBASE } 
-            
-|   abs_direct_decl_opt LBRACKET comma_expression_opt RBRACKET
-                                   { ARRAY($1, [], $3) }
-/*(* The next should be abs_direct_decl_opt but we get conflicts *)*/
-|   abs_direct_decl  parameter_list_startscope rest_par_list RPAREN
-                                   { let (params, isva) = $3 in
-                                     !Lexerhack.pop_context ();
-                                     PROTO ($1, params, isva)
-                                   } 
-;
-abs_direct_decl_opt:
-    abs_direct_decl                 { $1 }
-|   /* empty */                     { JUSTBASE }
-;
-function_def:  /* (* ISO 6.9.1 *) */
-  function_def_start block   
-          { let (loc, specs, decl) = $1 in
-            currentFunctionName := "<__FUNCTION__ used outside any functions>";
-            !Lexerhack.pop_context (); (* The context pushed by 
-                                    * announceFunctionName *)
-            doFunctionDef ((*handleLoc*) loc) (trd3 $2) specs decl (fst3 $2)
-          } 
-
-
-function_def_start:  /* (* ISO 6.9.1 *) */
-  decl_spec_list declarator   
-                            { announceFunctionName $2;
-                              (snd $1, fst $1, $2)
-                            } 
-
-/* (* Old-style function prototype *) */
-| decl_spec_list old_proto_decl 
-                            { announceFunctionName $2;
-                              (snd $1, fst $1, $2)
-                            } 
-/* (* New-style function that does not have a return type *) */
-| IDENT parameter_list_startscope rest_par_list RPAREN 
-                           { let (params, isva) = $3 in
-                             let fdec = 
-                               (fst $1, PROTO(JUSTBASE, params, isva), [], snd $1) in
-                             announceFunctionName fdec;
-                             (* Default is int type *)
-                             let defSpec = [SpecType Tint] in
-                             (snd $1, defSpec, fdec)
-                           }
-
-/* (* No return type and old-style parameter list *) */
-| IDENT LPAREN old_parameter_list_ne RPAREN old_pardef_list
-                           { (* Convert pardecl to new style *)
-                             let pardecl, isva = doOldParDecl $3 $5 in
-                             (* Make the function declarator *)
-                             let fdec = (fst $1,
-                                         PROTO(JUSTBASE, pardecl,isva), 
-                                         [], snd $1) in
-                             announceFunctionName fdec;
-                             (* Default is int type *)
-                             let defSpec = [SpecType Tint] in
-                             (snd $1, defSpec, fdec) 
-                            }
-/* (* No return type and no parameters *) */
-| IDENT LPAREN                      RPAREN
-                           { (* Make the function declarator *)
-                             let fdec = (fst $1,
-                                         PROTO(JUSTBASE, [], false), 
-                                         [], snd $1) in
-                             announceFunctionName fdec;
-                             (* Default is int type *)
-                             let defSpec = [SpecType Tint] in
-                             (snd $1, defSpec, fdec)
-                            }
-;
-
-/* const/volatile as type specifier elements */
-cvspec:
-    CONST                               { SpecCV(CV_CONST), $1 }
-|   VOLATILE                            { SpecCV(CV_VOLATILE), $1 }
-|   RESTRICT                            { SpecCV(CV_RESTRICT), $1 }
-;
-
-/*** GCC attributes ***/
-attributes:
-    /* empty */				{ []}
-|   attribute attributes	        { fst $1 :: $2 }
-;
-
-/* (* In some contexts we can have an inline assembly to specify the name to 
-    * be used for a global. We treat this as a name attribute *) */
-attributes_with_asm:
-    /* empty */                         { [] }
-|   attribute attributes_with_asm       { fst $1 :: $2 }
-|   ASM LPAREN string_constant RPAREN attributes        
-                                        { ("__asm__", 
-					   [CONSTANT(CONST_STRING (fst $3))]) :: $5 }
-;
-
-/* things like __attribute__, but no const/volatile */
-attribute_nocv:
-    ATTRIBUTE LPAREN paren_attr_list_ne RPAREN	
-                                        { ("__attribute__", $3), $1 }
-/*(*
-|   ATTRIBUTE_USED                      { ("__attribute__", 
-                                             [ VARIABLE "used" ]), $1 }
-*)*/
-|   DECLSPEC paren_attr_list_ne         { ("__declspec", $2), $1 }
-|   MSATTR                              { (fst $1, []), snd $1 }
-                                        /* ISO 6.7.3 */
-|   THREAD                              { ("__thread",[]), $1 }
-;
-
-/* __attribute__ plus const/volatile */
-attribute:
-    attribute_nocv                      { $1 }
-|   CONST                               { ("const", []), $1 }
-|   RESTRICT                            { ("restrict",[]), $1 }
-|   VOLATILE                            { ("volatile",[]), $1 }
-;
-
-/* (* sm: I need something that just includes __attribute__ and nothing more,
- *  to support them appearing between the 'struct' keyword and the type name. 
- * Actually, a declspec can appear there as well (on MSVC) *)  */
-just_attribute:
-    ATTRIBUTE LPAREN paren_attr_list_ne RPAREN
-                                        { ("__attribute__", $3) }
-|   DECLSPEC paren_attr_list_ne         { ("__declspec", $2) }
-;
-
-/* this can't be empty, b/c I folded that possibility into the calling
- * productions to avoid some S/R conflicts */
-just_attributes:
-    just_attribute                      { [$1] }
-|   just_attribute just_attributes      { $1 :: $2 }
-;
-
-/** (* PRAGMAS and ATTRIBUTES *) ***/
-pragma: 
-| PRAGMA attr PRAGMA_EOL		{ PRAGMA ($2, $1) }
-| PRAGMA attr SEMICOLON PRAGMA_EOL	{ PRAGMA ($2, $1) }
-| PRAGMA_LINE                           { PRAGMA (VARIABLE (fst $1), 
-                                                  snd $1) }
-;
-
-/* (* We want to allow certain strange things that occur in pragmas, so we 
-    * cannot use directly the language of expressions *) */ 
-primary_attr: 
-    IDENT				{ VARIABLE (fst $1) }
-    /*(* The NAMED_TYPE here creates conflicts with IDENT *)*/
-|   NAMED_TYPE				{ VARIABLE (fst $1) } 
-|   LPAREN attr RPAREN                  { $2 } 
-|   IDENT IDENT                          { CALL(VARIABLE (fst $1), [VARIABLE (fst $2)]) }
-|   CST_INT                              { CONSTANT(CONST_INT (fst $1)) }
-|   string_constant                      { CONSTANT(CONST_STRING (fst $1)) }
-                                           /*(* Const when it appears in 
-                                            * attribute lists, is translated 
-                                            * to aconst *)*/
-|   CONST                                { VARIABLE "aconst" }
-|   IDENT COLON CST_INT                  { VARIABLE (fst $1 ^ ":" ^ fst $3) }
-
-|   CST_INT COLON CST_INT                { VARIABLE (fst $1 ^ ":" ^ fst $3) } 
-|   DEFAULT COLON CST_INT                { VARIABLE ("default:" ^ fst $3) }
-                          
-                                            /*(** GCC allows this as an 
-                                             * attribute for functions, 
-                                             * synonim for noreturn **)*/
-|   VOLATILE                             { VARIABLE ("__noreturn__") }
-;
-
-postfix_attr:
-    primary_attr                         { $1 }
-                                         /* (* use a VARIABLE "" so that the 
-                                             * parentheses are printed *) */
-|   IDENT LPAREN  RPAREN                 { CALL(VARIABLE (fst $1), [VARIABLE ""]) }
-|   IDENT paren_attr_list_ne             { CALL(VARIABLE (fst $1), $2) }
-
-|   postfix_attr ARROW id_or_typename    {MEMBEROFPTR ($1, $3)} 
-|   postfix_attr DOT id_or_typename      {MEMBEROF ($1, $3)}  
-;
-
-/*(* Since in attributes we use both IDENT and NAMED_TYPE as indentifiers, 
- * that leads to conflicts for SIZEOF and ALIGNOF. In those cases we require 
- * that their arguments be expressions, not attributes *)*/
-unary_attr:
-    postfix_attr                         { $1 }
-|   SIZEOF unary_expression              {EXPR_SIZEOF (fst $2) }
-|   SIZEOF LPAREN type_name RPAREN
-		                         {let b, d = $3 in TYPE_SIZEOF (b, d)}
-
-|   ALIGNOF unary_expression             {EXPR_ALIGNOF (fst $2) }
-|   ALIGNOF LPAREN type_name RPAREN      {let b, d = $3 in TYPE_ALIGNOF (b, d)}
-|   PLUS cast_attr                      {UNARY (PLUS, $2)}
-|   MINUS cast_attr                     {UNARY (MINUS, $2)}
-|   STAR cast_attr		        {UNARY (MEMOF, $2)}
-|   AND cast_attr
-	                                {UNARY (ADDROF, $2)}
-|   EXCLAM cast_attr    	        {UNARY (NOT, $2)}
-|   TILDE cast_attr                     {UNARY (BNOT, $2)}
-;
-
-cast_attr:
-    unary_attr                           { $1 }
-;   
-
-multiplicative_attr:
-    cast_attr                           { $1 }
-|   multiplicative_attr STAR cast_attr  {BINARY(MUL ,$1 , $3)}
-|   multiplicative_attr SLASH cast_attr	  {BINARY(DIV ,$1 , $3)}
-|   multiplicative_attr PERCENT cast_attr {BINARY(MOD ,$1 , $3)}
-;
-
-
-additive_attr:
-    multiplicative_attr                 { $1 }
-|   additive_attr PLUS multiplicative_attr  {BINARY(ADD ,$1 , $3)} 
-|   additive_attr MINUS multiplicative_attr {BINARY(SUB ,$1 , $3)}
-;
-
-shift_attr:
-    additive_attr                       { $1 }
-|   shift_attr INF_INF additive_attr	{BINARY(SHL ,$1 , $3)}
-|   shift_attr SUP_SUP additive_attr	{BINARY(SHR ,$1 , $3)}
-;
-
-relational_attr:
-    shift_attr                          { $1 }
-|   relational_attr INF shift_attr	{BINARY(LT ,$1 , $3)}
-|   relational_attr SUP shift_attr	{BINARY(GT ,$1 , $3)}
-|   relational_attr INF_EQ shift_attr	{BINARY(LE ,$1 , $3)}
-|   relational_attr SUP_EQ shift_attr	{BINARY(GE ,$1 , $3)}
-;
-
-equality_attr:
-    relational_attr                     { $1 }
-|   equality_attr EQ_EQ relational_attr	    {BINARY(EQ ,$1 , $3)}
-|   equality_attr EXCLAM_EQ relational_attr {BINARY(NE ,$1 , $3)}
-;
-
-
-bitwise_and_attr:
-    equality_attr                       { $1 }
-|   bitwise_and_attr AND equality_attr	{BINARY(BAND ,$1 , $3)}
-;
-
-bitwise_xor_attr:
-    bitwise_and_attr                       { $1 }
-|   bitwise_xor_attr CIRC bitwise_and_attr {BINARY(XOR ,$1 , $3)}
-;
-
-bitwise_or_attr: 
-    bitwise_xor_attr                      { $1 }
-|   bitwise_or_attr PIPE bitwise_xor_attr {BINARY(BOR ,$1 , $3)}
-;
-
-logical_and_attr:
-    bitwise_or_attr                             { $1 }
-|   logical_and_attr AND_AND bitwise_or_attr	{BINARY(AND ,$1 , $3)}
-;
-
-logical_or_attr:
-    logical_and_attr                           { $1 }
-|   logical_or_attr PIPE_PIPE logical_and_attr {BINARY(OR ,$1 , $3)}
-;
-
-
-attr: logical_or_attr                    { $1 }
-;
-
-attr_list_ne:
-|  attr                                  { [$1] }
-|  attr COMMA attr_list_ne               { $1 :: $3 }
-|  error COMMA attr_list_ne              { $3 }
-;
-paren_attr_list_ne: 
-   LPAREN attr_list_ne RPAREN            { $2 }
-|  LPAREN error RPAREN                   { [] }
-;
-/*** GCC ASM instructions ***/
-asmattr:
-     /* empty */                        { [] }
-|    VOLATILE  asmattr                  { ("volatile", []) :: $2 }
-|    CONST asmattr                      { ("const", []) :: $2 } 
-;
-asmtemplate: 
-    one_string_constant                          { [$1] }
-|   one_string_constant asmtemplate              { $1 :: $2 }
-;
-asmoutputs: 
-  /* empty */           { None }
-| COLON asmoperands asminputs
-                        { let (ins, clobs) = $3 in
-                          Some {aoutputs = $2; ainputs = ins; aclobbers = clobs} }
-;
-asmoperands:
-     /* empty */                        { [] }
-|    asmoperandsne                      { List.rev $1 }
-;
-asmoperandsne:
-     asmoperand                         { [$1] }
-|    asmoperandsne COMMA asmoperand     { $3 :: $1 }
-;
-asmoperand:
-     string_constant LPAREN expression RPAREN    { (fst $1, fst $3) }
-|    string_constant LPAREN error RPAREN         { (fst $1, NOTHING ) } 
-; 
-asminputs: 
-  /* empty */                { ([], []) }
-| COLON asmoperands asmclobber
-                        { ($2, $3) }
-;
-asmclobber:
-    /* empty */                         { [] }
-| COLON asmcloberlst_ne                 { $2 }
-;
-asmcloberlst_ne:
-   one_string_constant                           { [$1] }
-|  one_string_constant COMMA asmcloberlst_ne     { $1 :: $3 }
-;
-  
-%%
-
-
-
diff --git a/cil/src/frontc/cprint.ml b/cil/src/frontc/cprint.ml
deleted file mode 100644
index 570945c09..000000000
--- a/cil/src/frontc/cprint.ml
+++ /dev/null
@@ -1,1014 +0,0 @@
-(* 
- *
- * Copyright (c) 2001-2003,
- *  George C. Necula    <necula@cs.berkeley.edu>
- *  Scott McPeak        <smcpeak@cs.berkeley.edu>
- *  Wes Weimer          <weimer@cs.berkeley.edu>
- *  Ben Liblit          <liblit@cs.berkeley.edu>
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. The names of the contributors may not be used to endorse or promote
- * products derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
- * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
- * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- *)
-(* cprint -- pretty printer of C program from abstract syntax
-**
-** Project:	FrontC
-** File:	cprint.ml
-** Version:	2.1e
-** Date:	9.1.99
-** Author:	Hugues Cassé
-**
-**	1.0		2.22.99	Hugues Cassé	First version.
-**	2.0		3.18.99	Hugues Cassé	Compatible with Frontc 2.1, use of CAML
-**									pretty printer.
-**	2.1		3.22.99	Hugues Cassé	More efficient custom pretty printer used.
-**	2.1a	4.12.99	Hugues Cassé	Correctly handle:
-**									char *m, *m, *p; m + (n - p)
-**	2.1b	4.15.99	Hugues Cassé	x + (y + z) stays x + (y + z) for
-**									keeping computation order.
-**	2.1c	7.23.99	Hugues Cassé	Improvement of case and default display.
-**	2.1d	8.25.99	Hugues Cassé	Rebuild escape sequences in string and
-**									characters.
-**	2.1e	9.1.99	Hugues Cassé	Fix, recognize and correctly display '\0'.
-*)
-
-(* George Necula: I changed this pretty dramatically since CABS changed *)
-open Cabs
-open Escape
-let version = "Cprint 2.1e 9.1.99 Hugues Cassé"
-
-type loc = { line : int; file : string }
-
-let lu = {line = -1; file = "loc unknown";}
-let cabslu = {lineno = -10; 
-	      filename = "cabs loc unknown"; 
-	      byteno = -10;}
-
-let curLoc = ref cabslu
-
-let msvcMode = ref false
-
-let printLn = ref true
-let printLnComment = ref false
-
-let printCounters = ref false
-let printComments = ref false
-
-(*
-** FrontC Pretty printer
-*)
-let out = ref stdout
-let width = ref 80
-let tab = ref 2
-let max_indent = ref 60
-
-let line = ref ""
-let line_len = ref 0
-let current = ref ""
-let current_len = ref 0
-let spaces = ref 0
-let follow = ref 0
-let roll = ref 0
-
-let print_tab size =
-	for i = 1 to size / 8 do
-		output_char !out '\t'
-	done;
-	for i  = 1 to size mod 8 do
-		output_char !out ' '
-	done
-
-let flush _ =
-	if !line <> "" then begin
-		print_tab (!spaces + !follow);
-		output_string !out !line;
-		line := "";
-		line_len := 0
-	end
-
-let commit _ =
-  if !current <> "" then begin
-    if !line = "" then begin
-      line := !current;
-      line_len := !current_len
-    end else begin
-      line := (!line ^ " " ^ !current);
-      line_len := !line_len + 1 + !current_len
-    end;
-    current := "";
-    current_len := 0
-  end
-
-
-let addline () =
-  curLoc := {lineno = !curLoc.lineno+1;
-             filename = !curLoc.filename;
-             byteno = -1;} (*sfg: can we do better than this?*)
-       
-       
-let new_line _ =
-  commit ();
-  if !line <> "" then begin
-    flush ();
-    addline();
-    output_char !out '\n'
-  end;
-  follow := 0
-       
-let force_new_line _ =
-  commit ();
-  flush ();
-  addline();
-  output_char !out '\n';
-  follow := 0
-       
-let indent _ =
-  new_line ();
-  spaces := !spaces + !tab;
-  if !spaces >= !max_indent then begin
-    spaces := !tab;
-    roll := !roll + 1
-  end
-      
-let indentline _ =
-  new_line ();
-  if !spaces >= !max_indent then begin
-    spaces := !tab;
-    roll := !roll + 1
-  end
-      
-let unindent _ =
-  new_line ();
-  spaces := !spaces - !tab;
-  if (!spaces <= 0) && (!roll > 0) then begin
-    spaces := ((!max_indent - 1) / !tab) * !tab;
-    roll := !roll - 1
-  end
-      
-let space _ = commit ()
-
-let print str =
-  current := !current ^ str;
-  current_len := !current_len + (String.length str);
-  if (!spaces + !follow + !line_len + 1 + !current_len) > !width
-  then begin
-    if !line_len = 0 then commit ();
-    flush ();
-    addline();
-    output_char !out '\n';
-    if !follow = 0 then follow := !tab
-  end
-
-(* sm: for some reason I couldn't just call print from frontc.... ? *)
-let print_unescaped_string str = print str
-
-let setLoc (l : cabsloc) =
-  if !printLn then  
-    if (l.lineno <> !curLoc.lineno) || l.filename <> !curLoc.filename then 
-      begin
-        let oldspaces = !spaces in
-        (* sm: below, we had '//#' instead of '#', which means printLnComment was disregarded *)
-        if !printLnComment then print "//" else print "#";
-        if !msvcMode then print "line";
-        print " ";
-        print (string_of_int l.lineno);
-        if (l.filename <> !curLoc.filename) then begin
-          print (" \"" ^ l.filename ^ "\"")
-        end;
-        spaces := oldspaces;
-        new_line();
-        curLoc := l
-      end
-
-
-
-(*
-** Useful primitives
-*)
-let print_list print_sep print_elt lst = 
-  let _ = List.fold_left
-      (fun com elt ->
-	if com then print_sep ();
-	print_elt elt;
-	true)
-      false
-      lst in
-  ()
-
-let print_commas nl fct lst =
-  print_list (fun () -> print ","; if nl then new_line() else space()) fct lst
-	
-let print_string (s:string) =
-  print ("\"" ^ escape_string s ^ "\"")
-
-let print_wstring (s: int64 list ) =
-  print ("L\"" ^ escape_wstring s ^ "\"")
-
-(*
-** Base Type Printing
-*)
-
-let rec print_specifiers (specs: spec_elem list) =
-  comprint "specifier(";
-  let print_spec_elem = function
-      SpecTypedef -> print "typedef "
-    | SpecInline -> print "__inline "
-    | SpecStorage sto ->
-        print (match sto with
-          NO_STORAGE -> (comstring "/*no storage*/")
-        | AUTO -> "auto "
-        | STATIC -> "static "
-        | EXTERN -> "extern "
-        | REGISTER -> "register ")
-    | SpecCV cv -> 
-        print (match cv with
-        | CV_CONST -> "const "
-        | CV_VOLATILE -> "volatile "
-        | CV_RESTRICT -> "restrict ")
-    | SpecAttr al -> print_attribute al; space ()
-    | SpecType bt -> print_type_spec bt
-    | SpecPattern name -> print ("@specifier(" ^ name ^ ") ")
-  in
-  List.iter print_spec_elem specs
-  ;comprint ")"
-
-
-and print_type_spec = function
-    Tvoid -> print "void "
-  | Tchar -> print "char "
-  | Tshort -> print "short "
-  | Tint -> print "int "
-  | Tlong -> print "long "
-  | Tint64 -> print "__int64 "
-  | Tfloat -> print "float "
-  | Tdouble -> print "double "
-  | Tsigned -> print "signed "
-  | Tunsigned -> print "unsigned "
-  | Tnamed s -> comprint "tnamed"; print s; space ();
-  | Tstruct (n, None, _) -> print ("struct " ^ n ^ " ")
-  | Tstruct (n, Some flds, extraAttrs) ->
-      (print_struct_name_attr "struct" n extraAttrs);
-      (print_fields flds)
-  | Tunion (n, None, _) -> print ("union " ^ n ^ " ")
-  | Tunion (n, Some flds, extraAttrs) ->
-      (print_struct_name_attr "union" n extraAttrs);
-      (print_fields flds)
-  | Tenum (n, None, _) -> print ("enum " ^ n ^ " ")
-  | Tenum (n, Some enum_items, extraAttrs) ->
-      (print_struct_name_attr "enum" n extraAttrs);
-      (print_enum_items enum_items)
-  | TtypeofE e -> print "__typeof__("; print_expression e; print ") "
-  | TtypeofT (s,d) -> print "__typeof__("; print_onlytype (s, d); print ") "
-
-
-(* print "struct foo", but with specified keyword and a list of
- * attributes to put between keyword and name *)
-and print_struct_name_attr (keyword: string) (name: string) (extraAttrs: attribute list) =
-begin
-  if extraAttrs = [] then
-    print (keyword ^ " " ^ name)
-  else begin
-    (print (keyword ^ " "));
-    (print_attributes extraAttrs);    (* prints a final space *)
-    (print name);
-  end
-end
-
-
-(* This is the main printer for declarations. It is easy bacause the 
- * declarations are laid out as they need to be printed. *)
-and print_decl (n: string) = function
-    JUSTBASE -> if n <> "___missing_field_name" then 
-                  print n
-                else
-                  comprint "missing field name"
-  | PARENTYPE (al1, d, al2) ->
-      print "(";
-      print_attributes al1; space ();
-      print_decl n d; space ();
-      print_attributes al2; print ")"
-  | PTR (al, d) ->
-      print "* ";
-      print_attributes al; space ();
-      print_decl n d
-  | ARRAY (d, al, e) ->
-      print_decl n d;
-      print "[";
-      print_attributes al;
-      if e <> NOTHING then print_expression e;
-      print "]"
-  | PROTO(d, args, isva) ->
-      comprint "proto(";
-      print_decl n d;
-      print "(";
-      print_params args isva;
-      print ")";
-      comprint ")"
-
-
-and print_fields (flds : field_group list) =
-  if flds = [] then print " { } "
-  else begin
-    print " {";
-    indent ();
-    List.iter
-      (fun fld -> print_field_group fld; print ";"; new_line ())
-      flds;
-    unindent ();
-    print "} "
-  end
-
-and print_enum_items items =
-  if items = [] then print " { } "
-  else begin
-    print " {";
-    indent ();
-    print_commas
-      true
-      (fun (id, exp, loc) -> print id;
-	if exp = NOTHING then ()
-	else begin
-	  space ();
-	  print "= ";
-	  print_expression exp
-	end)
-      items;
-    unindent ();
-    print "} ";
-  end
-
-  
-and print_onlytype (specs, dt) =
-  print_specifiers specs;
-  print_decl "" dt
-    
-and print_name ((n, decl, attrs, _) : name) =
-  print_decl n decl;
-  space ();
-  print_attributes attrs
-
-and print_init_name ((n, i) : init_name) =
-  print_name n;
-  if i <> NO_INIT then begin
-    space ();
-    print "= ";
-    print_init_expression i
-  end
-            
-and print_name_group (specs, names) =
-  print_specifiers specs;
-  print_commas false print_name names
-    
-and print_field_group (specs, fields) =
-  print_specifiers specs;
-  print_commas false print_field fields
-    
-
-and print_field (name, widtho) = 
-  print_name name;
-  (match widtho with 
-    None -> ()
-  | Some w -> print " : ";  print_expression w)
-
-and print_init_name_group (specs, names) =
-  print_specifiers specs;
-  print_commas false print_init_name names
-    
-and print_single_name (specs, name) =
-  print_specifiers specs;
-  print_name name
-
-and print_params (pars : single_name list) (ell : bool) =
-  print_commas false print_single_name pars;
-  if ell then print (if pars = [] then "..." else ", ...") else ()
-    
-and print_old_params pars ell =
-  print_commas false (fun id -> print id) pars;
-  if ell then print (if pars = [] then "..." else ", ...") else ()
-    
-
-(*
-** Expression printing
-**		Priorities
-**		16	variables
-**		15	. -> [] call()
-**		14  ++, -- (post)
-**		13	++ -- (pre) ~ ! - + & *(cast)
-**		12	* / %
-**		11	+ -
-**		10	<< >>
-**		9	< <= > >=
-**		8	== !=
-**		7	&
-**		6	^
-**		5	|
-**		4	&&
-**		3	||
-**		2	? :
-**		1	= ?=
-**		0	,				
-*)
-and get_operator exp =
-  match exp with
-    NOTHING -> ("", 16)
-  | UNARY (op, _) ->
-      (match op with
-	MINUS -> ("-", 13)
-      | PLUS -> ("+", 13)
-      | NOT -> ("!", 13)
-      | BNOT -> ("~", 13)
-      | MEMOF -> ("*", 13)
-      | ADDROF -> ("&", 13)
-      | PREINCR -> ("++", 13)
-      | PREDECR -> ("--", 13)
-      | POSINCR -> ("++", 14)
-      | POSDECR -> ("--", 14))
-  | LABELADDR s -> ("", 16)  (* Like a constant *)
-  | BINARY (op, _, _) ->
-      (match op with
-	MUL -> ("*", 12)
-      | DIV -> ("/", 12)
-      | MOD -> ("%", 12)
-      | ADD -> ("+", 11)
-      | SUB -> ("-", 11)
-      | SHL -> ("<<", 10)
-      | SHR -> (">>", 10)
-      | LT -> ("<", 9)
-      | LE -> ("<=", 9)
-      | GT -> (">", 9)
-      | GE -> (">=", 9)
-      | EQ -> ("==", 8)
-      | NE -> ("!=", 8)
-      | BAND -> ("&", 7)
-      | XOR -> ("^", 6)
-      | BOR -> ("|", 5)
-      | AND -> ("&&", 4)
-      | OR -> ("||", 3)
-      | ASSIGN -> ("=", 1)
-      | ADD_ASSIGN -> ("+=", 1)
-      | SUB_ASSIGN -> ("-=", 1)
-      | MUL_ASSIGN -> ("*=", 1)
-      | DIV_ASSIGN -> ("/=", 1)
-      | MOD_ASSIGN -> ("%=", 1)
-      | BAND_ASSIGN -> ("&=", 1)
-      | BOR_ASSIGN -> ("|=", 1)
-      | XOR_ASSIGN -> ("^=", 1)
-      | SHL_ASSIGN -> ("<<=", 1)
-      | SHR_ASSIGN -> (">>=", 1))
-  | QUESTION _ -> ("", 2)
-  | CAST _ -> ("", 13)
-  | CALL _ -> ("", 15)
-  | COMMA _ -> ("", 0)
-  | CONSTANT _ -> ("", 16)
-  | VARIABLE name -> ("", 16)
-  | EXPR_SIZEOF exp -> ("", 16)
-  | TYPE_SIZEOF _ -> ("", 16)
-  | EXPR_ALIGNOF exp -> ("", 16)
-  | TYPE_ALIGNOF _ -> ("", 16)
-  | INDEX (exp, idx) -> ("", 15)
-  | MEMBEROF (exp, fld) -> ("", 15)
-  | MEMBEROFPTR (exp, fld) -> ("", 15)
-  | GNU_BODY _ -> ("", 17)
-  | EXPR_PATTERN _ -> ("", 16)     (* sm: not sure about this *)
-
-and print_comma_exps exps =
-  print_commas false print_expression exps
-    
-and print_init_expression (iexp: init_expression) : unit = 
-  match iexp with 
-    NO_INIT -> ()
-  | SINGLE_INIT e -> print_expression e
-  | COMPOUND_INIT  initexps ->
-      let doinitexp = function
-          NEXT_INIT, e -> print_init_expression e
-        | i, e -> 
-            let rec doinit = function
-                NEXT_INIT -> ()
-              | INFIELD_INIT (fn, i) -> print ("." ^ fn); doinit i
-              | ATINDEX_INIT (e, i) -> 
-                  print "[";
-                  print_expression e;
-                  print "]";
-                  doinit i
-              | ATINDEXRANGE_INIT (s, e) -> 
-                  print "["; 
-                  print_expression s;
-                  print " ... ";
-                  print_expression e;
-                  print "]"
-                in
-            doinit i; print " = "; 
-            print_init_expression e
-      in
-      print "{";
-      print_commas false doinitexp initexps;
-      print "}"
-
-and print_expression (exp: expression) = print_expression_level 1 exp
-
-and print_expression_level (lvl: int) (exp : expression) =
-  let (txt, lvl') = get_operator exp in
-  let _ = if lvl > lvl' then print "(" else () in
-  let _ = match exp with
-    NOTHING -> ()
-  | UNARY (op, exp') ->
-      (match op with
-	POSINCR | POSDECR ->
-	  print_expression_level lvl' exp';
-	  print txt
-      | _ ->
-	  print txt; space (); (* Print the space to avoid --5 *)
-	  print_expression_level lvl' exp')
-  | LABELADDR l -> print ("&& " ^ l)
-  | BINARY (op, exp1, exp2) ->
-			(*if (op = SUB) && (lvl <= lvl') then print "(";*)
-      print_expression_level lvl' exp1;
-      space ();
-      print txt;
-      space ();
-			(*print_expression exp2 (if op = SUB then (lvl' + 1) else lvl');*)
-      print_expression_level (lvl' + 1) exp2 
-			(*if (op = SUB) && (lvl <= lvl') then print ")"*)
-  | QUESTION (exp1, exp2, exp3) ->
-      print_expression_level 2 exp1;
-      space ();
-      print "? ";
-      print_expression_level 2 exp2;
-      space ();
-      print ": ";
-      print_expression_level 2 exp3;
-  | CAST (typ, iexp) ->
-      print "(";
-      print_onlytype typ;
-      print ")"; 
-     (* Always print parentheses. In a small number of cases when we print 
-      * constants we don't need them  *)
-      (match iexp with
-        SINGLE_INIT e -> print_expression_level 15 e
-      | COMPOUND_INIT _ -> (* print "("; *) 
-          print_init_expression iexp 
-          (* ; print ")" *)
-      | NO_INIT -> print "<NO_INIT in cast. Should never arise>")
-
-  | CALL (VARIABLE "__builtin_va_arg", [arg; TYPE_SIZEOF (bt, dt)]) -> 
-      comprint "variable";
-      print "__builtin_va_arg";
-      print "(";
-      print_expression_level 1 arg;
-      print ",";
-      print_onlytype (bt, dt);
-      print ")"
-  | CALL (exp, args) ->
-      print_expression_level 16 exp;
-      print "(";
-      print_comma_exps args;
-      print ")"
-  | COMMA exps ->
-      print_comma_exps exps
-  | CONSTANT cst ->
-      (match cst with
-	CONST_INT i -> print i
-      | CONST_FLOAT r -> print r
-      | CONST_CHAR c -> print ("'" ^ escape_wstring c ^ "'")
-      | CONST_WCHAR c -> print ("L'" ^ escape_wstring c ^ "'")
-      | CONST_STRING s -> print_string s
-      | CONST_WSTRING ws -> print_wstring ws)
-  | VARIABLE name ->
-      comprint "variable";
-      print name
-  | EXPR_SIZEOF exp ->
-      print "sizeof(";
-      print_expression_level 0 exp;
-      print ")"
-  | TYPE_SIZEOF (bt,dt) ->
-      print "sizeof(";
-      print_onlytype (bt, dt);
-      print ")"
-  | EXPR_ALIGNOF exp ->
-      print "__alignof__(";
-      print_expression_level 0 exp;
-      print ")"
-  | TYPE_ALIGNOF (bt,dt) ->
-      print "__alignof__(";
-      print_onlytype (bt, dt);
-      print ")"
-  | INDEX (exp, idx) ->
-      print_expression_level 16 exp;
-      print "[";
-      print_expression_level 0 idx;
-      print "]"
-  | MEMBEROF (exp, fld) ->
-      print_expression_level 16 exp;
-      print ("." ^ fld)
-  | MEMBEROFPTR (exp, fld) ->
-      print_expression_level 16 exp;
-      print ("->" ^ fld)
-  | GNU_BODY (blk) ->
-      print "(";
-      print_block blk;
-      print ")"
-  | EXPR_PATTERN (name) ->
-      print ("@expr(" ^ name ^ ") ")
-  in
-  if lvl > lvl' then print ")" else ()
-    
-
-(*
-** Statement printing
-*)
-and print_statement stat =
-  match stat with
-    NOP (loc) ->
-      setLoc(loc);
-      print ";";
-      new_line ()
-  | COMPUTATION (exp, loc) ->
-      setLoc(loc);
-      print_expression exp;
-      print ";";
-      new_line ()
-  | BLOCK (blk, loc) -> print_block blk
-
-  | SEQUENCE (s1, s2, loc) ->
-      setLoc(loc);
-      print_statement s1;
-      print_statement s2;
-  | IF (exp, s1, s2, loc) ->
-      setLoc(loc);
-      print "if(";
-      print_expression_level 0 exp;
-      print ")";
-      print_substatement s1;
-      (match s2 with
-      | NOP(_) -> ()
-      | _ -> begin
-          print "else";
-          print_substatement s2;
-        end)
-  | WHILE (exp, stat, loc) ->
-      setLoc(loc);
-      print "while(";
-      print_expression_level 0 exp;
-      print ")";
-      print_substatement stat
-  | DOWHILE (exp, stat, loc) ->
-      setLoc(loc);
-      print "do";
-      print_substatement stat;
-      print "while(";
-      print_expression_level 0 exp;
-      print ");";
-      new_line ();
-  | FOR (fc1, exp2, exp3, stat, loc) ->
-      setLoc(loc);
-      print "for(";
-      (match fc1 with
-        FC_EXP exp1 -> print_expression_level 0 exp1; print ";"
-      | FC_DECL dec1 -> print_def dec1);
-      space ();
-      print_expression_level 0 exp2;
-      print ";";
-      space ();
-      print_expression_level 0 exp3;
-      print ")";
-      print_substatement stat
-  | BREAK (loc)->
-      setLoc(loc);
-      print "break;"; new_line ()
-  | CONTINUE (loc) ->
-      setLoc(loc);
-      print "continue;"; new_line ()
-  | RETURN (exp, loc) ->
-      setLoc(loc);
-      print "return";
-      if exp = NOTHING
-      then ()
-      else begin
-	print " ";
-	print_expression_level 1 exp
-      end;
-      print ";";
-      new_line ()
-  | SWITCH (exp, stat, loc) ->
-      setLoc(loc);
-      print "switch(";
-      print_expression_level 0 exp;
-      print ")";
-      print_substatement stat
-  | CASE (exp, stat, loc) ->
-      setLoc(loc);
-      unindent ();
-      print "case ";
-      print_expression_level 1 exp;
-      print ":";
-      indent ();
-      print_substatement stat
-  | CASERANGE (expl, exph, stat, loc) ->
-      setLoc(loc);
-      unindent ();
-      print "case ";
-      print_expression expl;
-      print " ... ";
-      print_expression exph;
-      print ":";
-      indent ();
-      print_substatement stat
-  | DEFAULT (stat, loc) ->
-      setLoc(loc);
-      unindent ();
-      print "default :";
-      indent ();
-      print_substatement stat
-  | LABEL (name, stat, loc) ->
-      setLoc(loc);
-      print (name ^ ":");
-      space ();
-      print_substatement stat
-  | GOTO (name, loc) ->
-      setLoc(loc);
-      print ("goto " ^ name ^ ";");
-      new_line ()
-  | COMPGOTO (exp, loc) -> 
-      setLoc(loc);
-      print ("goto *"); print_expression exp; print ";"; new_line ()
-  | DEFINITION d ->
-      print_def d
-  | ASM (attrs, tlist, details, loc) ->
-      setLoc(loc);
-      let print_asm_operand (cnstr, e) =
-        print_string cnstr; space (); print_expression_level 100 e
-      in
-      if !msvcMode then begin
-        print "__asm {";
-        print_list (fun () -> new_line()) print tlist; (* templates *)
-        print "};"
-      end else begin
-        print "__asm__ "; 
-        print_attributes attrs;
-        print "(";
-        print_list (fun () -> new_line()) print_string tlist; (* templates *)
-	begin
-	  match details with
-	  | None -> ()
-	  | Some { aoutputs = outs; ainputs = ins; aclobbers = clobs } ->
-              print ":"; space ();
-              print_commas false print_asm_operand outs;
-              if ins <> [] || clobs <> [] then begin
-		print ":"; space ();
-		print_commas false print_asm_operand ins;
-		if clobs <> [] then begin
-		  print ":"; space ();
-		  print_commas false print_string clobs
-		end;
-              end
-	end;
-        print ");"
-      end;
-      new_line ()
-  | TRY_FINALLY (b, h, loc) -> 
-      setLoc loc;
-      print "__try ";
-      print_block b;
-      print "__finally ";
-      print_block h
-
-  | TRY_EXCEPT (b, e, h, loc) -> 
-      setLoc loc;
-      print "__try ";
-      print_block b;
-      print "__except("; print_expression e; print ")";
-      print_block h
-      
-and print_block blk = 
-  new_line();
-  print "{";
-  indent ();
-  if blk.blabels <> [] then begin
-    print "__label__ ";
-    print_commas false print blk.blabels;
-    print ";";
-    new_line ();
-  end;
-  if blk.battrs <> [] then begin
-    List.iter print_attribute blk.battrs;
-    new_line ();
-  end;
-  List.iter print_statement blk.bstmts;
-  unindent ();
-  print "}";
-  new_line ()
-  
-and print_substatement stat =
-  match stat with
-    IF _
-  | SEQUENCE _
-  | DOWHILE _ ->
-      new_line ();
-      print "{";
-      indent ();
-      print_statement stat;
-      unindent ();
-      print "}";
-      new_line ();
-  | BLOCK _ ->
-      print_statement stat
-  | _ ->
-      indent ();
-      print_statement stat;
-      unindent ()
-
-
-(*
-** GCC Attributes
-*)
-and print_attribute (name,args) = 
-  if args = [] then print (
-    match name with 
-      "restrict" -> "__restrict" 
-      (* weimer: Fri Dec  7 17:12:35  2001
-       * must not print 'restrict' and the code below does allows some
-       * plain 'restrict's to slip though! *)
-    | x -> x)
-  else begin
-    print name;
-    print "("; if name = "__attribute__" then print "(";
-    (match args with
-      [VARIABLE "aconst"] -> print "const"
-    | [VARIABLE "restrict"] -> print "__restrict"
-    | _ -> print_commas false (fun e -> print_expression e) args);
-    print ")"; if name = "__attribute__" then print ")"
-  end
-
-(* Print attributes. *)
-and print_attributes attrs =
-  List.iter (fun a -> print_attribute a; space ()) attrs
-
-(*
-** Declaration printing
-*)
-and print_defs defs =
-  let prev = ref false in
-  List.iter
-    (fun def ->
-      (match def with
-	DECDEF _ -> prev := false
-      | _ ->
-	  if not !prev then force_new_line ();
-	  prev := true);
-      print_def def)
-    defs
-
-and print_def def =
-  match def with
-    FUNDEF (proto, body, loc, _) ->
-      comprint "fundef";
-      if !printCounters then begin
-        try
-          let fname =
-            match proto with
-              (_, (n, _, _, _)) -> n
-          in
-          print_def (DECDEF (([SpecType Tint],
-                              [(fname ^ "__counter", JUSTBASE, [], cabslu),
-                                NO_INIT]), loc));
-        with Not_found -> print "/* can't print the counter */"
-      end;
-      setLoc(loc);
-      print_single_name proto;
-      print_block body;
-      force_new_line ();
-
-  | DECDEF (names, loc) ->
-      comprint "decdef";
-      setLoc(loc);
-      print_init_name_group names;
-      print ";";
-      new_line ()
-
-  | TYPEDEF (names, loc) ->
-      comprint "typedef";
-      setLoc(loc);
-      print_name_group names;
-      print ";";
-      new_line ();
-      force_new_line ()
-
-  | ONLYTYPEDEF (specs, loc) ->
-      comprint "onlytypedef";
-      setLoc(loc);
-      print_specifiers specs;
-      print ";";
-      new_line ();
-      force_new_line ()
-
-  | GLOBASM (asm, loc) ->
-      setLoc(loc);
-      print "__asm__ (";  print_string asm; print ");";
-      new_line ();
-      force_new_line ()
-
-  | PRAGMA (a,loc) ->
-      setLoc(loc);
-      force_new_line ();
-      print "#pragma ";
-      let oldwidth = !width in
-      width := 1000000;  (* Do not wrap pragmas *)
-      print_expression a;
-      width := oldwidth;
-      force_new_line ()
-
-  | LINKAGE (n, loc, dl) -> 
-      setLoc (loc);
-      force_new_line ();
-      print "extern "; print_string n; print_string "  {";
-      List.iter print_def dl;
-      print_string "}";
-      force_new_line ()
-
-  | TRANSFORMER(srcdef, destdeflist, loc) ->
-      setLoc(loc);
-      print "@transform {";
-      force_new_line();
-      print "{";
-        force_new_line();
-        indent ();
-        print_def srcdef;
-        unindent();
-      print "}";
-      force_new_line();
-      print "to {";
-        force_new_line();
-        indent();
-        List.iter print_def destdeflist;
-        unindent();
-      print "}";
-      force_new_line()
-
-  | EXPRTRANSFORMER(srcexpr, destexpr, loc) ->
-      setLoc(loc);
-      print "@transformExpr { ";
-      print_expression srcexpr;
-      print " } to { ";
-      print_expression destexpr;
-      print " }";
-      force_new_line()
-
-
-(* sm: print a comment if the printComments flag is set *)
-and comprint (str : string) : unit =
-begin
-  if (!printComments) then (
-    print "/*";
-    print str;
-    print "*/ "
-  )
-  else
-    ()
-end
-
-(* sm: yield either the given string, or "", depending on printComments *)
-and comstring (str : string) : string =
-begin
-  if (!printComments) then
-    str
-  else
-    ""
-end
-
-
-(*  print abstrac_syntax -> ()
-**		Pretty printing the given abstract syntax program.
-*)
-let printFile (result : out_channel) ((fname, defs) : file) =
-  out := result;
-  print_defs defs;
-  flush ()     (* sm: should do this here *)
-
-let set_tab t = tab := t
-let set_width w = width := w
-
diff --git a/cil/src/frontc/frontc.ml b/cil/src/frontc/frontc.ml
deleted file mode 100644
index 459ae2c34..000000000
--- a/cil/src/frontc/frontc.ml
+++ /dev/null
@@ -1,256 +0,0 @@
-(*
- *
- * Copyright (c) 2001-2002, 
- *  George C. Necula    <necula@cs.berkeley.edu>
- *  Scott McPeak        <smcpeak@cs.berkeley.edu>
- *  Wes Weimer          <weimer@cs.berkeley.edu>
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. The names of the contributors may not be used to endorse or promote
- * products derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
- * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
- * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- *)
-
-
-module E = Errormsg
-open Trace
-open Pretty
-
-(* Output management *)
-let out : out_channel option ref = ref None
-let close_me = ref false
-
-let close_output _ =
-  match !out with
-    None -> ()
-  | Some o -> begin
-      flush o;
-      if !close_me then close_out o else ();
-      close_me := false
-  end
-
-let set_output filename =
-  close_output ();
-  (try out := Some (open_out filename)
-  with (Sys_error msg) ->
-    output_string stderr ("Error while opening output: " ^ msg); exit 1);
-  close_me := true
-
-   (* Signal that we are in MS VC mode *)
-let setMSVCMode () =
-  Cprint.msvcMode := true
-
-(* filename for patching *)
-let patchFileName : string ref = ref ""      (* by default do no patching *)
-
-(* patching file contents *)
-let patchFile : Cabs.file option ref = ref None
-
-(* whether to print the patched CABS files *)
-let printPatchedFiles : bool ref = ref false
-
-(* whether to print a file of prototypes after parsing *)
-let doPrintProtos : bool ref = ref false
-
-(* this seems like something that should be built-in.. *)
-let isNone (o : 'a option) : bool =
-begin
-  match o with
-  | Some _ -> false
-  | None -> true
-end
-
-(*
-** Argument definition
-*)
-let args : (string * Arg.spec * string) list =
-[
-  "--cabsonly", Arg.String set_output, "<fname>: CABS output file name";
-  "--printComments", Arg.Unit (fun _ -> Cprint.printComments := true),
-             ": print cabs tree structure in comments in cabs output";
-  "--patchFile", Arg.String (fun pf -> patchFileName := pf),
-             "<fname>: name the file containing patching transformations";
-  "--printPatched", Arg.Unit (fun _ -> printPatchedFiles := true),
-             ": print patched CABS files after patching, to *.patched";
-  "--printProtos", Arg.Unit (fun _ -> doPrintProtos := true),
-             ": print prototypes to safec.proto.h after parsing";
-]
-
-exception ParseError of string
-exception CabsOnly
-
-(* parse, and apply patching *)
-let rec parse_to_cabs fname =
-begin
-  (* parse the patch file if it isn't parsed already *)
-  if ((!patchFileName <> "") && (isNone !patchFile)) then (
-    (* parse the patch file *)
-    patchFile := Some(parse_to_cabs_inner !patchFileName);
-    if !E.hadErrors then
-      (failwith "There were parsing errors in the patch file")
-  );
-
-  (* now parse the file we came here to parse *)
-  let cabs = parse_to_cabs_inner fname in
-  if !E.hadErrors then 
-    E.s (E.error "There were parsing errors in %s\n" fname);
-
-  (* and apply the patch file, return transformed file *)
-  let patched = match !patchFile with
-
-    | Some(pf) -> (
-        (* save old value of out so I can use it for debugging during patching *)
-        let oldOut = !out in
-
-        (* reset out so we don't try to print the patch file to it *)
-        out := None;
-
-        (trace "patch" (dprintf "newpatching %s\n" fname));
-        let result = (Stats.time "newpatch" (Patch.applyPatch pf) cabs) in
-
-        if (!printPatchedFiles) then begin                              
-          let outFname:string = fname ^ ".patched" in
-          (trace "patch" (dprintf "printing patched version of %s to %s\n"
-                                  fname outFname));
-          let o = (open_out outFname) in
-          (Cprint.printFile o result);
-          (close_out o)
-        end;
-
-        (* restore out *)
-        Cprint.flush ();
-        out := oldOut;
-
-        result
-      )
-    | None -> cabs
-  in
-
-  (* print it ... *)
-  (match !out with
-    Some o -> begin
-      (trace "sm" (dprintf "writing the cabs output\n"));
-      output_string o ("/* Generated by Frontc */\n");
-      Stats.time "printCABS" (Cprint.printFile o) patched;
-      close_output ();
-      raise CabsOnly
-    end
-  | None -> ());
-  if !E.hadErrors then
-    raise Parsing.Parse_error;
-
-  (* and return the patched source *)
-  patched
-end
-
-
-(* just parse *)
-and parse_to_cabs_inner (fname : string) =
-  try
-    if !E.verboseFlag then ignore (E.log "Frontc is parsing %s\n" fname);
-    flush !E.logChannel;
-    E.hadErrors := false;
-    let lexbuf = Clexer.init fname in
-    let cabs = Stats.time "parse" (Cparser.file Clexer.initial) lexbuf in
-    Clexer.finish ();
-    (fname, cabs)
-  with (Sys_error msg) -> begin
-    ignore (E.log "Cannot open %s : %s\n" fname msg);
-    Clexer.finish ();
-    close_output ();
-    raise (ParseError("Cannot open " ^ fname ^ ": " ^ msg ^ "\n"))
-  end
-  | Parsing.Parse_error -> begin
-      ignore (E.log "Parsing error\n");
-      Clexer.finish ();
-      close_output ();
-      raise (ParseError("Parse error"))
-  end
-  | e -> begin
-      ignore (E.log "Caught %s while parsing\n" (Printexc.to_string e));
-      Clexer.finish ();
-      raise e
-  end
-
-  
-(* print to safec.proto.h the prototypes of all functions that are defined *)
-let printPrototypes ((fname, file) : Cabs.file) : unit =
-begin
-  (*ignore (E.log "file has %d defns\n" (List.length file));*)
-
-  let chan = open_out "safec.proto.h" in
-  ignore (fprintf chan "/* generated prototypes file, %d defs */\n" (List.length file));
-  Cprint.out := chan;
-
-  let counter : int ref = ref 0 in
-
-  let rec loop (d : Cabs.definition) = begin
-    match d with
-    | Cabs.FUNDEF(name, _, loc, _) -> (
-        match name with
-        | (_, (funcname, Cabs.PROTO(_,_,_), _, _)) -> (
-            incr counter;          
-            ignore (fprintf chan "\n/* %s from %s:%d */\n"
-                                 funcname loc.Cabs.filename loc.Cabs.lineno);
-            flush chan;
-            Cprint.print_single_name name;
-            Cprint.print_unescaped_string ";";
-            Cprint.force_new_line ();
-            Cprint.flush ()
-          )
-        | _ -> ()
-      )
-
-    | _ -> ()
-  end in
-  (List.iter loop file);
-
-  ignore (fprintf chan "\n/* wrote %d prototypes */\n" !counter);
-  close_out chan;
-  ignore (E.log "printed %d prototypes from %d defns to safec.proto.h\n"
-                !counter (List.length file))
-end
-
-
-
-let parse fname =
-  (trace "sm" (dprintf "parsing %s to Cabs\n" fname));
-  let cabs = parse_to_cabs fname in
-  (* Now (return a function that will) convert to CIL *)
-  fun _ ->
-    (trace "sm" (dprintf "converting %s from Cabs to CIL\n" fname));
-    let cil = Stats.time "conv" Cabs2cil.convFile cabs in
-    if !doPrintProtos then (printPrototypes cabs);
-    cil
-
-
-
-
-
-
-
-
diff --git a/cil/src/frontc/frontc.mli b/cil/src/frontc/frontc.mli
deleted file mode 100644
index 50ad799c4..000000000
--- a/cil/src/frontc/frontc.mli
+++ /dev/null
@@ -1,55 +0,0 @@
-(*
- *
- * Copyright (c) 2001-2002, 
- *  George C. Necula    <necula@cs.berkeley.edu>
- *  Scott McPeak        <smcpeak@cs.berkeley.edu>
- *  Wes Weimer          <weimer@cs.berkeley.edu>
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. The names of the contributors may not be used to endorse or promote
- * products derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
- * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
- * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- *)
-
-
-   (* Signal that we are in MS VC mode *)
-val setMSVCMode: unit -> unit
-
-
-   (* Parse a file in *)
-exception ParseError of string
-
-   (* Raised when the front-end is requested to print the CABS and return *)
-exception CabsOnly
-
-    (* additional command line arguments *)
-val args: (string * Arg.spec * string) list
-
-    (* the main command to parse a file. Return a thunk that can be used to 
-     * convert the AST to CIL. *)
-val parse: string -> (unit -> Cil.file)
-
diff --git a/cil/src/frontc/lexerhack.ml b/cil/src/frontc/lexerhack.ml
deleted file mode 100755
index ecae28ef0..000000000
--- a/cil/src/frontc/lexerhack.ml
+++ /dev/null
@@ -1,22 +0,0 @@
-
-module E = Errormsg
-
-(* We provide here a pointer to a function. It will be set by the lexer and 
- * used by the parser. In Ocaml lexers depend on parsers, so we we have put 
- * such functions in a separate module. *)
-let add_identifier: (string -> unit) ref = 
-  ref (fun _ -> E.s (E.bug "You called an uninitialized add_identifier")) 
-
-let add_type: (string -> unit) ref = 
-  ref (fun _ -> E.s (E.bug "You called an uninitialized add_type")) 
-
-let push_context: (unit -> unit) ref = 
-  ref (fun _ -> E.s (E.bug "You called an uninitialized push_context")) 
-
-let pop_context: (unit -> unit) ref = 
-  ref (fun _ -> E.s (E.bug "You called an uninitialized pop_context")) 
-
-
-(* Keep here the current pattern for formatparse *)
-let currentPattern = ref ""
-
diff --git a/cil/src/frontc/patch.ml b/cil/src/frontc/patch.ml
deleted file mode 100644
index fcb4ba623..000000000
--- a/cil/src/frontc/patch.ml
+++ /dev/null
@@ -1,837 +0,0 @@
-(*
- *
- * Copyright (c) 2001-2002, 
- *  George C. Necula    <necula@cs.berkeley.edu>
- *  Scott McPeak        <smcpeak@cs.berkeley.edu>
- *  Wes Weimer          <weimer@cs.berkeley.edu>
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. The names of the contributors may not be used to endorse or promote
- * products derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
- * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
- * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- *)
-
-
-(* patch.ml *)
-(* CABS file patching *)
-
-open Cabs
-open Trace
-open Pretty
-open Cabsvisit
-
-(* binding of a unification variable to a syntactic construct *)
-type binding =
-  | BSpecifier of string * spec_elem list
-  | BName of string * string
-  | BExpr of string * expression
-
-(* thrown when unification fails *)
-exception NoMatch
-
-(* thrown when an attempt to find the associated binding fails *)
-exception BadBind of string
-
-(* trying to isolate performance problems; will hide all the *)
-(* potentially expensive debugging output behind "if verbose .." *)
-let verbose : bool = true
-
-
-(* raise NoMatch if x and y are not equal *)
-let mustEq (x : 'a) (y : 'a) : unit =
-begin
-  if (x <> y) then (
-    if verbose then
-      (trace "patchDebug" (dprintf "mismatch by structural disequality\n"));
-    raise NoMatch
-  )
-end
-
-(* why isn't this in the core Ocaml library? *)
-let identity x = x
-
-
-let isPatternVar (s : string) : bool =
-begin
-  ((String.length s) >= 1) && ((String.get s 0) = '@')
-end
-
-(* 's' is actually "@name(blah)"; extract the 'blah' *)
-let extractPatternVar (s : string) : string =
-  (*(trace "patch" (dprintf "extractPatternVar %s\n" s));*)
-  (String.sub s 6 ((String.length s) - 7))
-
-
-(* a few debugging printers.. *)
-let printExpr (e : expression) =
-begin
-  if (verbose && traceActive "patchDebug") then (
-    Cprint.print_expression e; Cprint.force_new_line ();
-    Cprint.flush ()
-  )
-end
-
-let printSpec (spec: spec_elem list) =
-begin
-  if (verbose && traceActive "patchDebug") then (
-    Cprint.print_specifiers spec;  Cprint.force_new_line ();
-    Cprint.flush ()
-  )
-end
-
-let printSpecs (pat : spec_elem list) (tgt : spec_elem list) =
-begin
-  (printSpec pat);
-  (printSpec tgt)
-end
-
-let printDecl (pat : name) (tgt : name) =
-begin
-  if (verbose && traceActive "patchDebug") then (
-    Cprint.print_name pat;  Cprint.force_new_line ();
-    Cprint.print_name tgt;  Cprint.force_new_line ();
-    Cprint.flush ()
-  )
-end
-
-let printDeclType (pat : decl_type) (tgt : decl_type) =
-begin
-  if (verbose && traceActive "patchDebug") then (
-    Cprint.print_decl "__missing_field_name" pat;  Cprint.force_new_line ();
-    Cprint.print_decl "__missing_field_name" tgt;  Cprint.force_new_line ();
-    Cprint.flush ()
-  )
-end
-
-let printDefn (d : definition) =
-begin
-  if (verbose && traceActive "patchDebug") then (
-    Cprint.print_def d;
-    Cprint.flush ()
-  )
-end
-
-
-(* class to describe how to modify the tree for subtitution *)
-class substitutor (bindings : binding list) = object(self)
-  inherit nopCabsVisitor as super
-
-  (* look in the binding list for a given name *)
-  method findBinding (name : string) : binding =
-  begin
-    try
-      (List.find
-        (fun b ->
-          match b with
-          | BSpecifier(n, _) -> n=name
-          | BName(n, _) -> n=name
-          | BExpr(n, _) -> n=name)
-        bindings)
-    with
-      Not_found -> raise (BadBind ("name not found: " ^ name))
-  end
-
-  method vexpr (e:expression) : expression visitAction =
-  begin
-    match e with
-    | EXPR_PATTERN(name) -> (
-        match (self#findBinding name) with
-        | BExpr(_, expr) -> ChangeTo(expr)    (* substitute bound expression *)
-        | _ -> raise (BadBind ("wrong type: " ^ name))
-      )
-    | _ -> DoChildren
-  end
-  
-  (* use of a name *)
-  method vvar (s:string) : string =
-  begin
-    if (isPatternVar s) then (
-      let nameString = (extractPatternVar s) in
-      match (self#findBinding nameString) with
-      | BName(_, str) -> str        (* substitute *)
-      | _ -> raise (BadBind ("wrong type: " ^ nameString))
-    )
-    else
-      s
-  end
-
-  (* binding introduction of a name *)
-  method vname (k: nameKind) (spec: specifier) (n: name) : name visitAction =
-  begin
-    match n with (s (*variable name*), dtype, attrs, loc) -> (
-      let replacement = (self#vvar s) in    (* use replacer from above *)
-      if (s <> replacement) then
-        ChangeTo(replacement, dtype, attrs, loc)
-      else
-        DoChildren                          (* no replacement *)
-    )
-  end
-
-  method vspec (specList: specifier) : specifier visitAction =
-  begin
-    if verbose then (trace "patchDebug" (dprintf "substitutor: vspec\n"));
-    (printSpec specList);
-
-    (* are any of the specifiers SpecPatterns?  we have to check the entire *)
-    (* list, not just the head, because e.g. "typedef @specifier(foo)" has *)
-    (* "typedef" as the head of the specifier list *)
-    if (List.exists (fun elt -> match elt with
-                                | SpecPattern(_) -> true
-                                | _ -> false)
-                    specList) then begin
-      (* yes, replace the existing list with one got by *)
-      (* replacing all occurrences of SpecPatterns *)
-      (trace "patchDebug" (dprintf "at least one spec pattern\n"));
-      ChangeTo
-        (List.flatten
-          (List.map
-            (* for each specifier element, yield the specifier list *)
-            (* to which it maps; then we'll flatten the final result *)
-            (fun elt ->
-              match elt with
-              | SpecPattern(name) -> (
-                  match (self#findBinding name) with
-                  | BSpecifier(_, replacement) -> (
-                      (trace "patchDebug" (dprintf "replacing pattern %s\n" name));
-                      replacement                                                  
-                    )
-                  | _ -> raise (BadBind ("wrong type: " ^ name))
-                )
-              | _ -> [elt]    (* leave this one alone *)
-            )
-            specList
-          )
-        )
-    end
-    else
-      (* none of the specifiers in specList are patterns *)
-      DoChildren
-  end
-
-  method vtypespec (tspec: typeSpecifier) : typeSpecifier visitAction =
-  begin
-    match tspec with
-    | Tnamed(str) when (isPatternVar str) ->
-        ChangeTo(Tnamed(self#vvar str))
-    | Tstruct(str, fields, extraAttrs) when (isPatternVar str) -> (
-        (trace "patchDebug" (dprintf "substituting %s\n" str));
-        ChangeDoChildrenPost(Tstruct((self#vvar str), fields, extraAttrs), identity)
-      )
-    | Tunion(str, fields, extraAttrs) when (isPatternVar str) ->
-        (trace "patchDebug" (dprintf "substituting %s\n" str));
-        ChangeDoChildrenPost(Tunion((self#vvar str), fields, extraAttrs), identity)
-    | _ -> DoChildren
-  end
-
-end
-
-
-(* why can't I have forward declarations in the language?!! *)
-let unifyExprFwd : (expression -> expression -> binding list) ref
-  = ref (fun e e -> [])
-
-
-(* substitution for expressions *)
-let substExpr (bindings : binding list) (expr : expression) : expression =
-begin            
-  if verbose then
-    (trace "patchDebug" (dprintf "substExpr with %d bindings\n" (List.length bindings)));
-  (printExpr expr);
-
-  (* apply the transformation *)
-  let result = (visitCabsExpression (new substitutor bindings :> cabsVisitor) expr) in
-  (printExpr result);
-
-  result
-end
-
-let d_loc (_:unit) (loc: cabsloc) : doc =
-  text loc.filename ++ chr ':' ++ num loc.lineno
-
-
-(* class to describe how to modify the tree when looking for places *)
-(* to apply expression transformers *)
-class exprTransformer (srcpattern : expression) (destpattern : expression)
-                      (patchline : int) (srcloc : cabsloc) = object(self)
-  inherit nopCabsVisitor as super
-
-  method vexpr (e:expression) : expression visitAction =
-  begin
-    (* see if the source pattern matches this subexpression *)
-    try (
-      let bindings = (!unifyExprFwd srcpattern e) in
-
-      (* match! *)
-      (trace "patch" (dprintf "expr match: patch line %d, src %a\n"
-                              patchline d_loc srcloc));
-      ChangeTo(substExpr bindings destpattern)
-    )
-
-    with NoMatch -> (
-      (* doesn't apply *)
-      DoChildren
-    )
-  end
-
-  (* other constructs left unchanged *)
-end
-
-
-let unifyList (pat : 'a list) (tgt : 'a list)
-              (unifyElement : 'a -> 'a -> binding list) : binding list =
-begin
-  if verbose then
-    (trace "patchDebug" (dprintf "unifyList (pat len %d, tgt len %d)\n"
-                                 (List.length pat) (List.length tgt)));
-
-  (* walk down the lists *)
-  let rec loop pat tgt : binding list =
-    match pat, tgt with
-    | [], [] -> []
-    | (pelt :: prest), (telt :: trest) ->
-         (unifyElement pelt telt) @
-         (loop prest trest)
-    | _,_ -> (
-        (* no match *)
-        if verbose then (
-          (trace "patchDebug" (dprintf "mismatching list length\n"));
-        );
-        raise NoMatch
-     )
-  in
-  (loop pat tgt)
-end
-
-
-let gettime () : float =
-  (Unix.times ()).Unix.tms_utime
-
-let rec applyPatch (patchFile : file) (srcFile : file) : file =
-begin
-  let patch : definition list = (snd patchFile) in
-  let srcFname : string = (fst srcFile) in
-  let src : definition list = (snd srcFile) in
-
-  (trace "patchTime" (dprintf "applyPatch start: %f\n" (gettime ())));
-  if (traceActive "patchDebug") then
-    Cprint.out := stdout      (* hack *)
-  else ();
-
-  (* more hackery *)
-  unifyExprFwd := unifyExpr;
-
-  (* patch a single source definition, yield transformed *)
-  let rec patchDefn (patch : definition list) (d : definition) : definition list =
-  begin
-    match patch with
-    | TRANSFORMER(srcpattern, destpattern, loc) :: rest -> (
-        if verbose then
-          (trace "patchDebug"
-            (dprintf "considering applying defn pattern at line %d to src at %a\n"
-                     loc.lineno d_loc (get_definitionloc d)));
-
-        (* see if the source pattern matches the definition 'd' we have *)
-        try (
-          let bindings = (unifyDefn srcpattern d) in
-
-          (* we have a match!  apply the substitutions *)
-          (trace "patch" (dprintf "defn match: patch line %d, src %a\n"
-                                  loc.lineno d_loc (get_definitionloc d)));
-
-          (List.map (fun destElt -> (substDefn bindings destElt)) destpattern)
-        )
-
-        with NoMatch -> (
-          (* no match, continue down list *)
-          (*(trace "patch" (dprintf "no match\n"));*)
-          (patchDefn rest d)
-        )
-      )
-
-    | EXPRTRANSFORMER(srcpattern, destpattern, loc) :: rest -> (
-        if verbose then
-          (trace "patchDebug"
-            (dprintf "considering applying expr pattern at line %d to src at %a\n"
-                     loc.lineno d_loc (get_definitionloc d)));
-
-        (* walk around in 'd' looking for expressions to modify *)
-        let dList = (visitCabsDefinition
-                      ((new exprTransformer srcpattern destpattern
-                                            loc.lineno (get_definitionloc d))
-                       :> cabsVisitor)
-                      d
-                    ) in
-
-        (* recursively invoke myself to try additional patches *)
-        (* since visitCabsDefinition might return a list, I'll try my *)
-        (* addtional patches on every yielded definition, then collapse *)
-        (* all of them into a single list *)
-        (List.flatten (List.map (fun d -> (patchDefn rest d)) dList))
-      )
-
-    | _ :: rest -> (
-        (* not a transformer; just keep going *)
-        (patchDefn rest d)
-      )
-    | [] -> (
-        (* reached the end of the patch file with no match *)
-        [d]     (* have to wrap it in a list ... *)
-      )
-  end in
-
-  (* transform all the definitions *)
-  let result : definition list =
-    (List.flatten (List.map (fun d -> (patchDefn patch d)) src)) in
-
-  (*Cprint.print_defs result;*)
-
-  if (traceActive "patchDebug") then (
-    (* avoid flush bug? yes *)
-    Cprint.force_new_line ();
-    Cprint.flush ()
-  );
-
-  (trace "patchTime" (dprintf "applyPatch finish: %f\n" (gettime ())));
-  (srcFname, result)
-end
-
-
-(* given a definition pattern 'pat', and a target concrete defintion 'tgt', *)
-(* determine if they can be unified; if so, return the list of bindings of *)
-(* unification variables in pat; otherwise raise NoMatch *)
-and unifyDefn (pat : definition) (tgt : definition) : binding list =
-begin
-  match pat, tgt with
-  | DECDEF((pspecifiers, pdeclarators), _),
-    DECDEF((tspecifiers, tdeclarators), _) -> (
-      if verbose then
-        (trace "patchDebug" (dprintf "unifyDefn of DECDEFs\n"));
-      (unifySpecifiers pspecifiers tspecifiers) @
-      (unifyInitDeclarators pdeclarators tdeclarators)
-    )
-
-  | TYPEDEF((pspec, pdecl), _),
-    TYPEDEF((tspec, tdecl), _) -> (
-      if verbose then
-        (trace "patchDebug" (dprintf "unifyDefn of TYPEDEFs\n"));
-      (unifySpecifiers pspec tspec) @
-      (unifyDeclarators pdecl tdecl)
-    )
-
-  | ONLYTYPEDEF(pspec, _),
-    ONLYTYPEDEF(tspec, _) -> (
-      if verbose then
-        (trace "patchDebug" (dprintf "unifyDefn of ONLYTYPEDEFs\n"));
-      (unifySpecifiers pspec tspec)
-    )
-
-  | _, _ -> (
-      if verbose then
-        (trace "patchDebug" (dprintf "mismatching definitions\n"));
-      raise NoMatch
-    )
-end
-
-and unifySpecifier (pat : spec_elem) (tgt : spec_elem) : binding list =
-begin
-  if verbose then
-    (trace "patchDebug" (dprintf "unifySpecifier\n"));
-  (printSpecs [pat] [tgt]);
-
-  if (pat = tgt) then [] else
-
-  match pat, tgt with
-  | SpecType(tspec1), SpecType(tspec2) ->
-      (unifyTypeSpecifier tspec1 tspec2)
-  | SpecPattern(name), _ ->
-      (* record that future occurrances of @specifier(name) will yield this specifier *)
-      if verbose then
-        (trace "patchDebug" (dprintf "found specifier match for %s\n" name));
-      [BSpecifier(name, [tgt])]
-  | _,_ -> (
-      (* no match *)
-      if verbose then (
-        (trace "patchDebug" (dprintf "mismatching specifiers\n"));
-      );
-      raise NoMatch
-   )
-end
-
-and unifySpecifiers (pat : spec_elem list) (tgt : spec_elem list) : binding list =
-begin
-  if verbose then
-    (trace "patchDebug" (dprintf "unifySpecifiers\n"));
-  (printSpecs pat tgt);
-
-  (* canonicalize the specifiers by sorting them *)
-  let pat' = (List.stable_sort compare pat) in
-  let tgt' = (List.stable_sort compare tgt) in
-
-  (* if they are equal, they match with no further checking *)
-  if (pat' = tgt') then [] else
-
-  (* walk down the lists; don't walk the sorted lists because the *)
-  (* pattern must always be last, if it occurs *)
-  let rec loop pat tgt : binding list =
-    match pat, tgt with
-    | [], [] -> []
-    | [SpecPattern(name)], _ ->
-        (* final SpecPattern matches anything which comes after *)
-        (* record that future occurrences of @specifier(name) will yield this specifier *)
-        if verbose then
-          (trace "patchDebug" (dprintf "found specifier match for %s\n" name));
-        [BSpecifier(name, tgt)]
-    | (pspec :: prest), (tspec :: trest) ->
-         (unifySpecifier pspec tspec) @
-         (loop prest trest)
-    | _,_ -> (
-        (* no match *)
-        if verbose then (
-          (trace "patchDebug" (dprintf "mismatching specifier list length\n"));
-        );
-        raise NoMatch
-     )
-  in
-  (loop pat tgt)
-end
-
-and unifyTypeSpecifier (pat: typeSpecifier) (tgt: typeSpecifier) : binding list =
-begin
-  if verbose then
-    (trace "patchDebug" (dprintf "unifyTypeSpecifier\n"));
-
-  if (pat = tgt) then [] else
-
-  match pat, tgt with
-  | Tnamed(s1), Tnamed(s2) -> (unifyString s1 s2)
-  | Tstruct(name1, None, _), Tstruct(name2, None, _) ->
-      (unifyString name1 name2)
-  | Tstruct(name1, Some(fields1), _), Tstruct(name2, Some(fields2), _) ->
-      (* ignoring extraAttrs b/c we're just trying to come up with a list
-       * of substitutions, and there's no unify_attributes function, and
-       * I don't care at this time about checking that they are equal .. *)
-      (unifyString name1 name2) @
-      (unifyList fields1 fields2 unifyField)
-  | Tunion(name1, None, _), Tstruct(name2, None, _) ->
-      (unifyString name1 name2)
-  | Tunion(name1, Some(fields1), _), Tunion(name2, Some(fields2), _) ->
-      (unifyString name1 name2) @
-      (unifyList fields1 fields2 unifyField)
-  | Tenum(name1, None, _), Tenum(name2, None, _) ->
-      (unifyString name1 name2)
-  | Tenum(name1, Some(items1), _), Tenum(name2, Some(items2), _) ->
-      (mustEq items1 items2);    (* enum items *)
-      (unifyString name1 name2)
-  | TtypeofE(exp1), TtypeofE(exp2) ->
-      (unifyExpr exp1 exp2)
-  | TtypeofT(spec1, dtype1), TtypeofT(spec2, dtype2) ->
-      (unifySpecifiers spec1 spec2) @
-      (unifyDeclType dtype1 dtype2)
-  | _ -> (
-      if verbose then (trace "patchDebug" (dprintf "mismatching typeSpecifiers\n"));
-      raise NoMatch
-    )
-end
-
-and unifyField (pat : field_group) (tgt : field_group) : binding list =
-begin
-  match pat,tgt with (spec1, list1), (spec2, list2) -> (
-    (unifySpecifiers spec1 spec2) @
-    (unifyList list1 list2 unifyNameExprOpt)
-  )
-end
-
-and unifyNameExprOpt (pat : name * expression option)
-                     (tgt : name * expression option) : binding list =
-begin
-  match pat,tgt with
-  | (name1, None), (name2, None) -> (unifyName name1 name2)
-  | (name1, Some(exp1)), (name2, Some(exp2)) ->
-      (unifyName name1 name2) @
-      (unifyExpr exp1 exp2)
-  | _,_ -> []
-end
-
-and unifyName (pat : name) (tgt : name) : binding list =
-begin
-  match pat,tgt with (pstr, pdtype, pattrs, ploc), (tstr, tdtype, tattrs, tloc) ->
-    (mustEq pattrs tattrs);
-    (unifyString pstr tstr) @
-    (unifyDeclType pdtype tdtype)
-end
-
-and unifyInitDeclarators (pat : init_name list) (tgt : init_name list) : binding list =
-begin
-  (*
-    if verbose then
-      (trace "patchDebug" (dprintf "unifyInitDeclarators, pat %d, tgt %d\n"
-                                   (List.length pat) (List.length tgt)));
-  *)
-
-  match pat, tgt with
-  | ((pdecl, piexpr) :: prest),
-    ((tdecl, tiexpr) :: trest) ->
-      (unifyDeclarator pdecl tdecl) @
-      (unifyInitExpr piexpr tiexpr) @
-      (unifyInitDeclarators prest trest)
-  | [], [] -> []
-  | _, _ -> (
-      if verbose then
-        (trace "patchDebug" (dprintf "mismatching init declarators\n"));
-      raise NoMatch
-    )
-end
-
-and unifyDeclarators (pat : name list) (tgt : name list) : binding list =
-  (unifyList pat tgt unifyDeclarator)
-
-and unifyDeclarator (pat : name) (tgt : name) : binding list =
-begin
-  if verbose then
-    (trace "patchDebug" (dprintf "unifyDeclarator\n"));
-  (printDecl pat tgt);
-
-  match pat, tgt with
-  | (pname, pdtype, pattr, ploc),
-    (tname, tdtype, tattr, tloc) ->
-      (mustEq pattr tattr);
-      (unifyDeclType pdtype tdtype) @
-      (unifyString pname tname)
-end
-
-and unifyDeclType (pat : decl_type) (tgt : decl_type) : binding list =
-begin
-  if verbose then
-    (trace "patchDebug" (dprintf "unifyDeclType\n"));
-  (printDeclType pat tgt);
-
-  match pat, tgt with
-  | JUSTBASE, JUSTBASE -> []
-  | PARENTYPE(pattr1, ptype, pattr2),
-    PARENTYPE(tattr1, ttype, tattr2) ->
-      (mustEq pattr1 tattr1);
-      (mustEq pattr2 tattr2);
-      (unifyDeclType ptype ttype)
-  | ARRAY(ptype, pattr, psz),
-    ARRAY(ttype, tattr, tsz) ->
-      (mustEq pattr tattr);
-      (unifyDeclType ptype ttype) @
-      (unifyExpr psz tsz)
-  | PTR(pattr, ptype),
-    PTR(tattr, ttype) ->
-      (mustEq pattr tattr);
-      (unifyDeclType ptype ttype)
-  | PROTO(ptype, pformals, pva),
-    PROTO(ttype, tformals, tva) ->
-      (mustEq pva tva);
-      (unifyDeclType ptype ttype) @
-      (unifySingleNames pformals tformals)
-  | _ -> (
-      if verbose then
-        (trace "patchDebug" (dprintf "mismatching decl_types\n"));
-      raise NoMatch
-    )
-end
-
-and unifySingleNames (pat : single_name list) (tgt : single_name list) : binding list =
-begin
-  if verbose then
-    (trace "patchDebug" (dprintf "unifySingleNames, pat %d, tgt %d\n"
-                                 (List.length pat) (List.length tgt)));
-
-  match pat, tgt with
-  | [], [] -> []
-  | (pspec, pdecl) :: prest,
-    (tspec, tdecl) :: trest ->
-      (unifySpecifiers pspec tspec) @
-      (unifyDeclarator pdecl tdecl) @
-      (unifySingleNames prest trest)
-  | _, _ -> (
-      if verbose then
-        (trace "patchDebug" (dprintf "mismatching single_name lists\n"));
-      raise NoMatch
-    )
-end
-
-and unifyString (pat : string) (tgt : string) : binding list =
-begin
-  (* equal? match with no further ado *)
-  if (pat = tgt) then [] else
-
-  (* is the pattern a variable? *)
-  if (isPatternVar pat) then
-    (* pat is actually "@name(blah)"; extract the 'blah' *)
-    let varname = (extractPatternVar pat) in
-
-    (* when substituted, this name becomes 'tgt' *)
-    if verbose then
-      (trace "patchDebug" (dprintf "found name match for %s\n" varname));
-    [BName(varname, tgt)]
-
-  else (
-    if verbose then
-      (trace "patchDebug" (dprintf "mismatching names: %s and %s\n" pat tgt));
-    raise NoMatch
-  )
-end
-
-and unifyExpr (pat : expression) (tgt : expression) : binding list =
-begin
-  (* if they're equal, that's good enough *)
-  if (pat = tgt) then [] else
-
-  (* shorter name *)
-  let ue = unifyExpr in
-
-  (* because of the equality check above, I can omit some cases *)
-  match pat, tgt with
-  | UNARY(pop, pexpr),
-    UNARY(top, texpr) ->
-      (mustEq pop top);
-      (ue pexpr texpr)
-  | BINARY(pop, pexp1, pexp2),
-    BINARY(top, texp1, texp2) ->
-      (mustEq pop top);
-      (ue pexp1 texp1) @
-      (ue pexp2 texp2)
-  | QUESTION(p1, p2, p3),
-    QUESTION(t1, t2, t3) ->
-      (ue p1 t1) @
-      (ue p2 t2) @
-      (ue p3 t3)
-  | CAST((pspec, ptype), piexpr),
-    CAST((tspec, ttype), tiexpr) ->
-      (mustEq ptype ttype);
-      (unifySpecifiers pspec tspec) @
-      (unifyInitExpr piexpr tiexpr)
-  | CALL(pfunc, pargs),
-    CALL(tfunc, targs) ->
-      (ue pfunc tfunc) @
-      (unifyExprs pargs targs)
-  | COMMA(pexprs),
-    COMMA(texprs) ->
-      (unifyExprs pexprs texprs)
-  | EXPR_SIZEOF(pexpr),
-    EXPR_SIZEOF(texpr) ->
-      (ue pexpr texpr)
-  | TYPE_SIZEOF(pspec, ptype),
-    TYPE_SIZEOF(tspec, ttype) ->
-      (mustEq ptype ttype);
-      (unifySpecifiers pspec tspec)
-  | EXPR_ALIGNOF(pexpr),
-    EXPR_ALIGNOF(texpr) ->
-      (ue pexpr texpr)
-  | TYPE_ALIGNOF(pspec, ptype),
-    TYPE_ALIGNOF(tspec, ttype) ->
-      (mustEq ptype ttype);
-      (unifySpecifiers pspec tspec)
-  | INDEX(parr, pindex),
-    INDEX(tarr, tindex) ->
-      (ue parr tarr) @
-      (ue pindex tindex)
-  | MEMBEROF(pexpr, pfield),
-    MEMBEROF(texpr, tfield) ->
-      (mustEq pfield tfield);
-      (ue pexpr texpr)
-  | MEMBEROFPTR(pexpr, pfield),
-    MEMBEROFPTR(texpr, tfield) ->
-      (mustEq pfield tfield);
-      (ue pexpr texpr)
-  | GNU_BODY(pblock),
-    GNU_BODY(tblock) ->
-      (mustEq pblock tblock);
-      []
-  | EXPR_PATTERN(name), _ ->
-      (* match, and contribute binding *)
-      if verbose then
-        (trace "patchDebug" (dprintf "found expr match for %s\n" name));
-      [BExpr(name, tgt)]
-  | a, b ->
-      if (verbose && traceActive "patchDebug") then (
-        (trace "patchDebug" (dprintf "mismatching expression\n"));
-        (printExpr a);
-        (printExpr b)
-      );
-      raise NoMatch
-end
-
-and unifyInitExpr (pat : init_expression) (tgt : init_expression) : binding list =
-begin
-  (*
-    Cprint.print_init_expression pat;  Cprint.force_new_line ();
-    Cprint.print_init_expression tgt;  Cprint.force_new_line ();
-    Cprint.flush ();
-  *)
-
-  match pat, tgt with
-  | NO_INIT, NO_INIT -> []
-  | SINGLE_INIT(pe), SINGLE_INIT(te) ->
-      (unifyExpr pe te)
-  | COMPOUND_INIT(plist),
-    COMPOUND_INIT(tlist) -> (
-      let rec loop plist tlist =
-        match plist, tlist with
-        | ((pwhat, piexpr) :: prest),
-          ((twhat, tiexpr) :: trest) ->
-            (mustEq pwhat twhat);
-            (unifyInitExpr piexpr tiexpr) @
-            (loop prest trest)
-        | [], [] -> []
-        | _, _ -> (
-            if verbose then
-              (trace "patchDebug" (dprintf "mismatching compound init exprs\n"));
-            raise NoMatch
-          )
-      in
-      (loop plist tlist)
-    )
-  | _,_ -> (
-      if verbose then
-        (trace "patchDebug" (dprintf "mismatching init exprs\n"));
-      raise NoMatch
-    )
-end
-
-and unifyExprs (pat : expression list) (tgt : expression list) : binding list =
-  (unifyList pat tgt unifyExpr)
-
-
-(* given the list of bindings 'b', substitute them into 'd' to yield a new definition *)
-and substDefn (bindings : binding list) (defn : definition) : definition =
-begin
-  if verbose then
-    (trace "patchDebug" (dprintf "substDefn with %d bindings\n" (List.length bindings)));
-  (printDefn defn);
-
-  (* apply the transformation *)
-  match (visitCabsDefinition (new substitutor bindings :> cabsVisitor) defn) with
-  | [d] -> d    (* expect a singleton list *)
-  | _ -> (failwith "didn't get a singleton list where I expected one")
-end
-
-
-(* end of file *)
diff --git a/cil/src/frontc/patch.mli b/cil/src/frontc/patch.mli
deleted file mode 100644
index 4f32870e7..000000000
--- a/cil/src/frontc/patch.mli
+++ /dev/null
@@ -1,42 +0,0 @@
-(*
- *
- * Copyright (c) 2001-2002, 
- *  George C. Necula    <necula@cs.berkeley.edu>
- *  Scott McPeak        <smcpeak@cs.berkeley.edu>
- *  Wes Weimer          <weimer@cs.berkeley.edu>
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. The names of the contributors may not be used to endorse or promote
- * products derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
- * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
- * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- *)
-
-
-(* patch.mli *)
-(* interface for patch.ml *)
-
-val applyPatch : Cabs.file -> Cabs.file -> Cabs.file
diff --git a/cil/src/libmaincil.ml b/cil/src/libmaincil.ml
deleted file mode 100644
index 952c01325..000000000
--- a/cil/src/libmaincil.ml
+++ /dev/null
@@ -1,108 +0,0 @@
-(*
- *
- * Copyright (c) 2001-2002, 
- *  George C. Necula    <necula@cs.berkeley.edu>
- *  Scott McPeak        <smcpeak@cs.berkeley.edu>
- *  Wes Weimer          <weimer@cs.berkeley.edu>
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. The names of the contributors may not be used to endorse or promote
- * products derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
- * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
- * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- *)
-
-(* libmaincil *)
-(* this is a replacement for maincil.ml, for the case when we're
- * creating a C-callable library (libcil.a); all it does is register
- * a couple of functions and initialize CIL *)
-
-
-module E = Errormsg
-
-open Cil
-
-
-(* print a Cil 'file' to stdout *)
-let unparseToStdout (cil : file) : unit =
-begin
-  dumpFile defaultCilPrinter stdout cil
-end;;
-
-(* a visitor to unroll all types - may need to do some magic to keep attributes *)
-class unrollVisitorClass = object (self)
-  inherit nopCilVisitor
-
-  (* variable declaration *)
-  method vvdec (vi : varinfo) : varinfo visitAction = 
-    begin
-      vi.vtype <- unrollTypeDeep vi.vtype;
-      (*ignore (E.log "varinfo for %s in file '%s' line %d byte %d\n" vi.vname vi.vdecl.file vi.vdecl.line vi.vdecl.byte);*)
-      SkipChildren
-    end
-    
-  (* global: need to unroll fields of compinfo *)
-  method vglob (g : global) : global list visitAction =
-    begin
-      match g with
-          GCompTag(ci, loc) as g ->
-            let doFieldinfo (fi : fieldinfo) : unit = 
-              fi.ftype <- unrollTypeDeep fi.ftype 
-            in begin                
-                ignore(List.map doFieldinfo ci.cfields);
-                (*ChangeTo [g]*)
-                SkipChildren
-              end              
-        | _ -> DoChildren
-    end
-end;;
-
-
-let unrollVisitor = new unrollVisitorClass;;
-
-(* open and parse a C file into a Cil 'file', unroll all typedefs *)
-let parseOneFile (fname: string) : file =
-  let ast : file = Frontc.parse fname () in
-    begin
-      visitCilFile unrollVisitor ast;
-      ast
-    end
-;;
-
-let getDummyTypes () : typ * typ =
-  ( TPtr(TVoid [], []), TInt(IInt, []) )
-;;
-
-(* register some functions - these may be called from C code *)
-Callback.register "cil_parse" parseOneFile;
-Callback.register "cil_unparse" unparseToStdout;
-(* Callback.register "unroll_type_deep" unrollTypeDeep; *)
-Callback.register "get_dummy_types" getDummyTypes;
-
-(* initalize CIL *)
-initCIL ();
-
-
diff --git a/cil/src/machdep.c b/cil/src/machdep.c
deleted file mode 100644
index 113486538..000000000
--- a/cil/src/machdep.c
+++ /dev/null
@@ -1,220 +0,0 @@
-/*
- *
- * Copyright (c) 2001-2002, 
- *  George C. Necula    <necula@cs.berkeley.edu>
- *  Scott McPeak        <smcpeak@cs.berkeley.edu>
- *  Wes Weimer          <weimer@cs.berkeley.edu>
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. The names of the contributors may not be used to endorse or promote
- * products derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
- * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
- * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- */
-
-#include "../config.h"
-
-#include <stdio.h>
-
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-
-#ifdef HAVE_WCHAR_H
-#include <wchar.h>
-#endif
-
-#ifdef _GNUCC
-#define LONGLONG long long
-#define CONST_STRING_LITERALS "true"
-#define VERSION __VERSION__
-#define VERSION_MAJOR __GNUC__
-#define VERSION_MINOR __GNUC_MINOR__
-#endif
-
-#ifdef _MSVC
-#define LONGLONG __int64
-#define CONST_STRING_LITERALS "false"
-#define VERSION "0"
-#define VERSION_MAJOR 0
-#define VERSION_MINOR 0
-#endif
-
-/* The type for the machine dependency structure is generated from the
-   Makefile */
-int main() {
-  fprintf(stderr, "Generating machine dependency information for CIL\n");
-
-  printf("(* Generated by code in %s *)\n", __FILE__);
-  printf("\t version_major    = %d;\n", VERSION_MAJOR);
-  printf("\t version_minor    = %d;\n", VERSION_MINOR);
-  printf("\t version          = \"%s\";\n", VERSION);
-  // Size of certain types
-  printf("\t sizeof_short     = %d;\n", sizeof(short));
-  printf("\t sizeof_int       = %d;\n", sizeof(int));
-  printf("\t sizeof_long      = %d;\n", sizeof(long));
-  printf("\t sizeof_longlong  = %d;\n", sizeof(LONGLONG));
-  printf("\t sizeof_ptr       = %d;\n", sizeof(int *));
-  printf("\t sizeof_enum      = %d;\n", sizeof(enum e { ONE, TWO }));
-  printf("\t sizeof_float     = %d;\n", sizeof(float));
-  printf("\t sizeof_double    = %d;\n", sizeof(double));
-  printf("\t sizeof_longdouble  = %d;\n", sizeof(long double));
-  printf("\t sizeof_sizeof    = %d;\n", sizeof(sizeof(int)));
-  printf("\t sizeof_wchar     = %d;\n", sizeof(wchar_t));
-  printf("\t sizeof_void      = %d;\n", sizeof(void));
-  printf("\t sizeof_fun       = %d;\n",
-#ifdef __GNUC__
-         sizeof(main)
-#else
-         0
-#endif
-           );
-
-  // The alignment of a short
-  {
-    struct shortstruct {
-      char c;
-      short s;
-    };
-    printf("\t alignof_short = %d;\n",
-           (int)(&((struct shortstruct*)0)->s));
-  }
-
-  // The alignment of an int
-  {
-    struct intstruct {
-      char c;
-      int i;
-    };
-    printf("\t alignof_int = %d;\n",
-           (int)(&((struct intstruct*)0)->i));
-  }
-  
-  // The alignment of a long
-  {
-    struct longstruct {
-      char c;
-      long l;
-    };
-    printf("\t alignof_long = %d;\n",
-           (int)(&((struct longstruct*)0)->l));
-  }
-
-  // The alignment of long long
-  {
-    struct longlong {
-      char c;
-      LONGLONG ll;
-    };
-    printf("\t alignof_longlong = %d;\n",
-           (int)(&((struct longlong*)0)->ll));
-  }
-
-  // The alignment of a ptr
-  {
-    struct ptrstruct {
-      char c; 
-      int * p;
-    };
-    printf("\t alignof_ptr = %d;\n",
-           (int)(&((struct ptrstruct*)0)->p));
-  }
-
-  // The alignment of an enum
-  {
-    struct enumstruct {
-      char c; 
-      enum e2 { THREE, FOUR, FIVE } e;
-    };
-    printf("\t alignof_enum = %d;\n",
-           (int)(&((struct enumstruct*)0)->e));
-  }
-
-  // The alignment of a float
-  {
-    struct floatstruct {
-      char c;
-      float f;
-    };
-    printf("\t alignof_float = %d;\n",
-           (int)(&((struct floatstruct*)0)->f));
-  }
-  
-  // The alignment of double
-  {
-    struct s1 {
-      char c;
-      double d;
-    };
-    printf("\t alignof_double = %d;\n",
-           (int)(&((struct s1*)0)->d));
-  }    
-
-  // The alignment of long  double
-  {
-    struct s1 {
-      char c;
-      long double ld;
-    };
-    printf("\t alignof_longdouble = %d;\n",
-           (int)(&((struct s1*)0)->ld));
-  }    
-
-  printf("\t alignof_str = %d;\n",
-#ifdef __GNUC__
-         __alignof("a string")
-#else
-         0
-#endif
-         );
-
-  printf("\t alignof_fun = %d;\n",
-#ifdef __GNUC__
-         __alignof(main)
-#else
-         0
-#endif
-         );
-
-  // Whether char is unsigned
-  printf("\t char_is_unsigned = %s;\n", 
-         ((char)0xff) > 0 ? "true" : "false");
-
-
-  // Whether string literals contain constant characters
-  puts("\t const_string_literals = " CONST_STRING_LITERALS ";");
-
-
-  // endianity
-  {
-    int e = 0x11223344;
-    printf("\t little_endian = %s;\n",
-           (0x44 == *(char*)&e) ? "true" :
-           ((0x11 == *(char*)&e) ? "false" : (exit(1), "false")));
-  }
-
-  exit(0);
-} 
diff --git a/cil/src/main.ml b/cil/src/main.ml
deleted file mode 100644
index bbdb7309c..000000000
--- a/cil/src/main.ml
+++ /dev/null
@@ -1,288 +0,0 @@
-(*
- *
- * Copyright (c) 2001-2002, 
- *  George C. Necula    <necula@cs.berkeley.edu>
- *  Scott McPeak        <smcpeak@cs.berkeley.edu>
- *  Wes Weimer          <weimer@cs.berkeley.edu>
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. The names of the contributors may not be used to endorse or promote
- * products derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
- * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
- * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- *)
-
-(* maincil *)
-(* this module is the program entry point for the 'cilly' program, *)
-(* which reads a C program file, parses it, translates it to the CIL *)
-(* intermediate language, and then renders that back into C *)
-
-
-module F = Frontc
-module C = Cil
-module CK = Check
-module E = Errormsg
-open Pretty
-open Trace
-
-type outfile = 
-    { fname: string;
-      fchan: out_channel } 
-let outChannel : outfile option ref = ref None
-let mergedChannel : outfile option ref = ref None
-
-
-let parseOneFile (fname: string) : C.file =
-  (* PARSE and convert to CIL *)
-  if !Cilutil.printStages then ignore (E.log "Parsing %s\n" fname);
-  let cil = F.parse fname () in
-  
-  if (not !Epicenter.doEpicenter) then (
-    (* sm: remove unused temps to cut down on gcc warnings  *)
-    (* (Stats.time "usedVar" Rmtmps.removeUnusedTemps cil);  *)
-    (trace "sm" (dprintf "removing unused temporaries\n"));
-    (Rmtmps.removeUnusedTemps cil)
-  );
-  cil
-
-(** These are the statically-configured features. To these we append the 
-  * features defined in Feature_config.ml (from Makefile) *)
-  
-let makeCFGFeature : C.featureDescr = 
-  { C.fd_name = "makeCFG";
-    C.fd_enabled = Cilutil.makeCFG;
-    C.fd_description = "make the program look more like a CFG" ;
-    C.fd_extraopt = [];
-    C.fd_doit = (fun f -> 
-      ignore (Partial.calls_end_basic_blocks f) ; 
-      ignore (Partial.globally_unique_vids f) ; 
-      Cil.iterGlobals f (fun glob -> match glob with
-        Cil.GFun(fd,_) -> Cil.prepareCFG fd ;
-                      (* jc: blockinggraph depends on this "true" arg *)
-                      ignore (Cil.computeCFGInfo fd true)
-      | _ -> ()) 
-    );
-    C.fd_post_check = true;
-  } 
-
-let features : C.featureDescr list = 
-  [ Epicenter.feature;
-    Simplify.feature;
-    Canonicalize.feature;
-    Callgraph.feature;
-    Logwrites.feature;
-    Heapify.feature1;
-    Heapify.feature2;
-    Oneret.feature;
-    makeCFGFeature; (* ww: make CFG *must* come before Partial *) 
-    Partial.feature;
-    Simplemem.feature;
-    Sfi.feature;
-    Dataslicing.feature;
-    Logcalls.feature;
-    Ptranal.feature;
-    Liveness.feature;
-  ] 
-  @ Feature_config.features 
-
-let rec processOneFile (cil: C.file) =
-  begin
-
-    if !Cilutil.doCheck then begin
-      ignore (E.log "First CIL check\n");
-      ignore (CK.checkFile [] cil);
-    end;
-
-    (* Scan all the features configured from the Makefile and, if they are 
-     * enabled then run them on the current file *)
-    List.iter 
-      (fun fdesc -> 
-        if ! (fdesc.C.fd_enabled) then begin
-          if !E.verboseFlag then 
-            ignore (E.log "Running CIL feature %s (%s)\n" 
-                      fdesc.C.fd_name fdesc.C.fd_description);
-          (* Run the feature, and see how long it takes. *)
-          Stats.time fdesc.C.fd_name
-            fdesc.C.fd_doit cil;
-          (* See if we need to do some checking *)
-          if !Cilutil.doCheck && fdesc.C.fd_post_check then begin
-            ignore (E.log "CIL check after %s\n" fdesc.C.fd_name);
-            ignore (CK.checkFile [] cil);
-          end
-        end)
-      features;
-
-
-    (match !outChannel with
-      None -> ()
-    | Some c -> Stats.time "printCIL" 
-	(C.dumpFile (!C.printerForMaincil) c.fchan c.fname) cil);
-
-    if !E.hadErrors then
-      E.s (E.error "Error while processing file; see above for details.");
-
-  end
-        
-(***** MAIN *****)  
-let rec theMain () =
-  let usageMsg = "Usage: cilly [options] source-files" in
-  (* Processign of output file arguments *)
-  let openFile (what: string) (takeit: outfile -> unit) (fl: string) = 
-    if !E.verboseFlag then
-      ignore (Printf.printf "Setting %s to %s\n" what fl);
-    (try takeit { fname = fl;
-                  fchan = open_out fl }
-    with _ ->
-      raise (Arg.Bad ("Cannot open " ^ what ^ " file " ^ fl)))
-  in
-  let outName = ref "" in
-  (* sm: enabling this by default, since I think usually we
-   * want 'cilly' transformations to preserve annotations; I
-   * can easily add a command-line flag if someone sometimes
-   * wants these suppressed *)
-  C.print_CIL_Input := true;
-
-  (*********** COMMAND LINE ARGUMENTS *****************)
-  (* Construct the arguments for the features configured from the Makefile *)
-  let blankLine = ("", Arg.Unit (fun _ -> ()), "") in
-  let featureArgs = 
-    List.fold_right
-      (fun fdesc acc ->
-	if !(fdesc.C.fd_enabled) then
-          (* The feature is enabled by default *)
-          blankLine ::
-          ("--dont" ^ fdesc.C.fd_name, Arg.Clear(fdesc.C.fd_enabled), 
-           " Disable " ^ fdesc.C.fd_description) ::
-          fdesc.C.fd_extraopt @ acc
-	else
-          (* Disabled by default *)
-          blankLine ::
-          ("--do" ^ fdesc.C.fd_name, Arg.Set(fdesc.C.fd_enabled), 
-           " Enable " ^ fdesc.C.fd_description) ::
-          fdesc.C.fd_extraopt @ acc
-      )
-      features
-      [blankLine]
-  in
-  let featureArgs = 
-    ("", Arg.Unit (fun () -> ()), "\n\t\tCIL Features") :: featureArgs 
-  in
-    
-  let argDescr = Ciloptions.options @ 
-        [ 
-          "--out", Arg.String (openFile "output" 
-                                 (fun oc -> outChannel := Some oc)),
-              "the name of the output CIL file.  The cilly script sets this for you.";
-          "--mergedout", Arg.String (openFile "merged output"
-                                       (fun oc -> mergedChannel := Some oc)),
-              "specify the name of the merged file";
-        ]
-        @ F.args @ featureArgs in
-  begin
-    (* this point in the code is the program entry point *)
-
-    Stats.reset (Stats.has_performance_counters ());
-
-    (* parse the command-line arguments *)
-    Arg.parse argDescr Ciloptions.recordFile usageMsg;
-    Cil.initCIL ();
-
-    Ciloptions.fileNames := List.rev !Ciloptions.fileNames;
-
-    if !Cilutil.testcil <> "" then begin
-      Testcil.doit !Cilutil.testcil
-    end else
-      (* parse each of the files named on the command line, to CIL *)
-      let files = List.map parseOneFile !Ciloptions.fileNames in
-
-      (* if there's more than one source file, merge them together; *)
-      (* now we have just one CIL "file" to deal with *)
-      let one =
-        match files with
-          [one] -> one
-        | [] -> E.s (E.error "No arguments for CIL\n")
-        | _ ->
-            let merged =
-              Stats.time "merge" (Mergecil.merge files)
-                (if !outName = "" then "stdout" else !outName) in
-            if !E.hadErrors then
-              E.s (E.error "There were errors during merging\n");
-            (* See if we must save the merged file *)
-            (match !mergedChannel with
-              None -> ()
-            | Some mc -> begin
-                let oldpci = !C.print_CIL_Input in
-                C.print_CIL_Input := true;
-                Stats.time "printMerged"
-                  (C.dumpFile !C.printerForMaincil mc.fchan mc.fname) merged;
-                C.print_CIL_Input := oldpci
-            end);
-            merged
-      in
-
-      if !E.hadErrors then
-        E.s (E.error "Cabs2cil had some errors");
-
-      (* process the CIL file (merged if necessary) *)
-      processOneFile one
-  end
-;;
-                                        (* Define a wrapper for main to 
-                                         * intercept the exit *)
-let failed = ref false 
-
-let cleanup () = 
-  if !E.verboseFlag || !Cilutil.printStats then
-    Stats.print stderr "Timings:\n";
-  if !E.logChannel != stderr then 
-    close_out (! E.logChannel);  
-  (match ! outChannel with Some c -> close_out c.fchan | _ -> ())
-
-
-(* Without this handler, cilly.asm.exe will quit silently with return code 0
-   when a segfault happens. *)
-let handleSEGV code =
-  if !Cil.currentLoc == Cil.locUnknown then
-    E.log  "**** Segmentation fault (possibly a stack overflow)\n"
-  else begin
-    E.log ("**** Segmentation fault (possibly a stack overflow) "^^
-           "while processing %a\n")
-      Cil.d_loc !Cil.currentLoc
-  end;
-  exit code
-
-let _ = Sys.set_signal Sys.sigsegv (Sys.Signal_handle handleSEGV);
-
-;;
-
-begin 
-  try 
-    theMain (); 
-  with F.CabsOnly -> (* this is OK *) ()
-end;
-cleanup ();
-exit (if !failed then 1 else 0)
-
diff --git a/cil/src/mergecil.ml b/cil/src/mergecil.ml
deleted file mode 100644
index dee519edc..000000000
--- a/cil/src/mergecil.ml
+++ /dev/null
@@ -1,1770 +0,0 @@
-(* MODIF: Loop constructor replaced by 3 constructors: While, DoWhile, For. *)
-
-(*
- *
- * Copyright (c) 2001-2002, 
- *  George C. Necula    <necula@cs.berkeley.edu>
- *  Scott McPeak        <smcpeak@cs.berkeley.edu>
- *  Wes Weimer          <weimer@cs.berkeley.edu>
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. The names of the contributors may not be used to endorse or promote
- * products derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
- * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
- * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- *)
- 
-(* mergecil.ml *)
-(* This module is responsible for merging multiple CIL source trees into
- * a single, coherent CIL tree which contains the union of all the
- * definitions in the source files.  It effectively acts like a linker,
- * but at the source code level instead of the object code level. *)
-
-
-module P = Pretty
-open Cil
-module E = Errormsg
-module H = Hashtbl
-module A = Alpha
-open Trace
-
-let debugMerge = false
-let debugInlines = false
-
-let ignore_merge_conflicts = ref false
-
-(* Try to merge structure with the same name. However, do not complain if 
- * they are not the same *)
-let mergeSynonyms = true
-
-
-(** Whether to use path compression *)
-let usePathCompression = false
-
-(* Try to merge definitions of inline functions. They can appear in multiple 
- * files and we would like them all to be the same. This can slow down the 
- * merger an order of magnitude !!! *)
-let mergeInlines = true
-
-let mergeInlinesRepeat = mergeInlines && true
-
-let mergeInlinesWithAlphaConvert = mergeInlines && true
-
-(* when true, merge duplicate definitions of externally-visible functions;
- * this uses a mechanism which is faster than the one for inline functions,
- * but only probabilistically accurate *)
-let mergeGlobals = true
-
-
-(* Return true if 's' starts with the prefix 'p' *)
-let prefix p s = 
-  let lp = String.length p in
-  let ls = String.length s in
-  lp <= ls && String.sub s 0 lp = p
-
-
-
-(* A name is identified by the index of the file in which it occurs (starting 
- * at 0 with the first file) and by the actual name. We'll keep name spaces 
- * separate *)
-
-(* We define a data structure for the equivalence classes *)
-type 'a node = 
-    { nname: string;   (* The actual name *)
-      nfidx: int;      (* The file index *)
-      ndata: 'a;       (* Data associated with the node *)
-      mutable nloc: (location * int) option;  
-      (* location where defined and index within the file of the definition. 
-       * If None then it means that this node actually DOES NOT appear in the 
-       * given file. In rare occasions we need to talk in a given file about 
-       * types that are not defined in that file. This happens with undefined 
-       * structures but also due to cross-contamination of types in a few of 
-       * the cases of combineType (see the definition of combineTypes). We 
-       * try never to choose as representatives nodes without a definition. 
-       * We also choose as representative the one that appears earliest *)
-      mutable nrep: 'a node;  (* A pointer to another node in its class (one 
-                               * closer to the representative). The nrep node 
-                               * is always in an earlier file, except for the 
-                               * case where a name is undefined in one file 
-                               * and defined in a later file. If this pointer 
-                               * points to the node itself then this is the 
-                               * representative.  *)
-      mutable nmergedSyns: bool (* Whether we have merged the synonyms for 
-                                 * the node of this name *)
-    } 
-
-let d_nloc () (lo: (location * int) option) : P.doc = 
-  match lo with 
-    None -> P.text "None"
-  | Some (l, idx) -> P.dprintf "Some(%d at %a)" idx d_loc l
-
-(* Make a node with a self loop. This is quite tricky. *)
-let mkSelfNode (eq: (int * string, 'a node) H.t) (* The equivalence table *)
-               (syn: (string, 'a node) H.t) (* The synonyms table *)
-               (fidx: int) (name: string) (data: 'a) 
-               (l: (location * int) option) = 
-  let res = { nname = name; nfidx = fidx; ndata = data; nloc = l;
-              nrep  = Obj.magic 1; nmergedSyns = false; } in
-  res.nrep <- res; (* Make the self cycle *)
-  H.add eq (fidx, name) res; (* Add it to the proper table *)
-  if mergeSynonyms && not (prefix "__anon" name) then 
-    H.add syn name res; 
-  res
-
-let debugFind = false
-
-(* Find the representative with or without path compression *)
-let rec find (pathcomp: bool) (nd: 'a node) = 
-  if debugFind then
-    ignore (E.log "  find %s(%d)\n" nd.nname nd.nfidx);
-  if nd.nrep == nd then begin
-    if debugFind then
-      ignore (E.log "  = %s(%d)\n" nd.nname nd.nfidx);
-    nd
-  end else begin
-    let res = find pathcomp nd.nrep in
-    if usePathCompression && pathcomp && nd.nrep != res then 
-      nd.nrep <- res; (* Compress the paths *)
-    res
-  end
-
-
-(* Union two nodes and return the new representative. We prefer as the 
- * representative a node defined earlier. We try not to use as 
- * representatives nodes that are not defined in their files. We return a 
- * function for undoing the union. Make sure that between the union and the 
- * undo you do not do path compression *)
-let union (nd1: 'a node) (nd2: 'a node) : 'a node * (unit -> unit) = 
-  (* Move to the representatives *)
-  let nd1 = find true nd1 in
-  let nd2 = find true nd2 in 
-  if nd1 == nd2 then begin
-    (* It can happen that we are trying to union two nodes that are already 
-     * equivalent. This is because between the time we check that two nodes 
-     * are not already equivalent and the time we invoke the union operation 
-     * we check type isomorphism which might change the equivalence classes *)
-(*
-    ignore (warn "unioning already equivalent nodes for %s(%d)" 
-              nd1.nname nd1.nfidx);
-*)
-    nd1, fun x -> x
-  end else begin
-    let rep, norep = (* Choose the representative *)
-      if (nd1.nloc != None) =  (nd2.nloc != None) then 
-        (* They have the same defined status. Choose the earliest *)
-        if nd1.nfidx < nd2.nfidx then nd1, nd2 
-        else if nd1.nfidx > nd2.nfidx then nd2, nd1
-        else (* In the same file. Choose the one with the earliest index *) begin
-          match nd1.nloc, nd2.nloc with 
-            Some (_, didx1), Some (_, didx2) -> 
-              if didx1 < didx2 then nd1, nd2 else
-              if didx1 > didx2 then nd2, nd1 
-              else begin
-              ignore (warn 
-                        "Merging two elements (%s and %s) in the same file (%d) with the same idx (%d) within the file" 
-                        nd1.nname nd2.nname nd1.nfidx didx1);
-                nd1, nd2
-              end
-          | _, _ -> (* both none. Does not matter which one we choose. Should 
-              * not happen though. *)
-              (* sm: it does happen quite a bit when, e.g. merging STLport with
-               * some client source; I'm disabling the warning since it supposedly
-               * is harmless anyway, so is useless noise *)
-              (* sm: re-enabling on claim it now will probably not happen *)
-              ignore (warn "Merging two undefined elements in the same file: %s and %s\n" nd1.nname nd2.nname);
-              nd1, nd2
-        end
-      else (* One is defined, the other is not. Choose the defined one *)
-        if nd1.nloc != None then nd1, nd2 else nd2, nd1
-    in
-    let oldrep = norep.nrep in
-    norep.nrep <- rep; 
-    rep, (fun () -> norep.nrep <- oldrep)
-  end
-(*      
-let union (nd1: 'a node) (nd2: 'a node) : 'a node * (unit -> unit) = 
-  if nd1 == nd2 && nd1.nname = "!!!intEnumInfo!!!" then begin
-    ignore (warn "unioning two identical nodes for %s(%d)" 
-              nd1.nname nd1.nfidx);
-    nd1, fun x -> x
-  end else
-    union nd1 nd2
-*)
-(* Find the representative for a node and compress the paths in the process *)
-let findReplacement
-    (pathcomp: bool)
-    (eq: (int * string, 'a node) H.t)
-    (fidx: int)
-    (name: string) : ('a * int) option =
-  if debugFind then 
-    ignore (E.log "findReplacement for %s(%d)\n" name fidx);
-  try
-    let nd = H.find eq (fidx, name) in
-    if nd.nrep == nd then begin
-      if debugFind then 
-        ignore (E.log "  is a representative\n");
-      None (* No replacement if this is the representative of its class *)
-    end else 
-      let rep = find pathcomp nd in
-      if rep != rep.nrep then 
-        E.s (bug "find does not return the representative\n");
-      if debugFind then 
-        ignore (E.log "  RES = %s(%d)\n" rep.nname rep.nfidx);
-      Some (rep.ndata, rep.nfidx)
-  with Not_found -> begin
-    if debugFind then 
-      ignore (E.log "  not found in the map\n");
-    None
-  end
-
-(* Make a node if one does not already exist. Otherwise return the 
- * representative *)
-let getNode    (eq: (int * string, 'a node) H.t)
-               (syn: (string, 'a node) H.t)
-               (fidx: int) (name: string) (data: 'a) 
-               (l: (location * int) option) = 
-  let debugGetNode = false in
-  if debugGetNode then 
-    ignore (E.log "getNode(%s(%d), %a)\n"
-              name fidx d_nloc l);
-  try
-    let res = H.find eq (fidx, name) in
-
-    (match res.nloc, l with 
-      (* Maybe we have a better location now *)
-      None, Some _ -> res.nloc <- l
-    | Some (old_l, old_idx), Some (l, idx) -> 
-        if old_idx != idx then 
-          ignore (warn "Duplicate definition of node %s(%d) at indices %d(%a) and %d(%a)"
-                    name fidx old_idx d_loc old_l idx d_loc l)
-        else
-          ()
-
-    | _, _ -> ());
-    if debugGetNode then 
-      ignore (E.log "  node already found\n");
-    find false res (* No path compression *)
-  with Not_found -> begin
-    let res = mkSelfNode eq syn fidx name data l in
-    if debugGetNode then 
-      ignore (E.log "   made a new one\n");
-    res
-  end
-
-
-
-(* Dump a graph *)
-let dumpGraph (what: string) (eq: (int * string, 'a node) H.t) : unit = 
-  ignore (E.log "Equivalence graph for %s is:\n" what);
-  H.iter (fun (fidx, name) nd -> 
-    ignore (E.log "  %s(%d) %s-> " 
-              name fidx (if nd.nloc = None then "(undef)" else ""));
-    if nd.nrep == nd then 
-      ignore (E.log "*\n")
-    else
-      ignore (E.log " %s(%d)\n" nd.nrep.nname nd.nrep.nfidx ))
-    eq
-
-
-
-
-(* For each name space we define a set of equivalence classes *)
-let vEq: (int * string, varinfo node) H.t = H.create 111 (* Vars *)
-let sEq: (int * string, compinfo node) H.t = H.create 111 (* Struct + union *)
-let eEq: (int * string, enuminfo node) H.t = H.create 111 (* Enums *)
-let tEq: (int * string, typeinfo node) H.t = H.create 111 (* Type names*)
-let iEq: (int * string, varinfo node) H.t = H.create 111 (* Inlines *)
-        
-(* Sometimes we want to merge synonyms. We keep some tables indexed by names. 
- * Each name is mapped to multiple exntries *)
-let vSyn: (string, varinfo node) H.t = H.create 111 (* Not actually used *)
-let iSyn: (string, varinfo node) H.t = H.create 111 (* Inlines *)
-let sSyn: (string, compinfo node) H.t = H.create 111
-let eSyn: (string, enuminfo node) H.t = H.create 111
-let tSyn: (string, typeinfo node) H.t = H.create 111
-
-(** A global environment for variables. Put in here only the non-static 
-  * variables, indexed by their name.  *)
-let vEnv : (string, varinfo node) H.t = H.create 111
-
-
-(* A set of inline functions indexed by their printout ! *)
-let inlineBodies : (P.doc, varinfo node) H.t = H.create 111
-
-(** A number of alpha conversion tables. We ought to keep one table for each 
- * name space. Unfortunately, because of the way the C lexer works, type 
- * names must be different from variable names!! We one alpha table both for 
- * variables and types. *)
-let vtAlpha : (string, location A.alphaTableData ref) H.t 
-    = H.create 57 (* Variables and 
-                                                             * types *)
-let sAlpha : (string, location A.alphaTableData ref) H.t 
-    = H.create 57 (* Structures and 
-                                                             * unions have 
-                                                             * the same name 
-                                                             * space *)
-let eAlpha : (string, location A.alphaTableData ref) H.t 
-    = H.create 57 (* Enumerations *)
-
-
-(** Keep track, for all global function definitions, of the names of the formal 
- * arguments. They might change during merging of function types if the 
- * prototype occurs after the function definition and uses different names. 
- * We'll restore the names at the end *)
-let formalNames: (int * string, string list) H.t = H.create 111
-
-
-(* Accumulate here the globals in the merged file *)
-let theFileTypes = ref []
-let theFile      = ref []
-
-(* add 'g' to the merged file *)
-let mergePushGlobal (g: global) : unit = 
-  pushGlobal g ~types:theFileTypes ~variables:theFile
-    
-let mergePushGlobals gl = List.iter mergePushGlobal gl
-
-
-(* The index of the current file being scanned *)
-let currentFidx = ref 0
-
-let currentDeclIdx = ref 0 (* The index of the definition in a file. This is 
-                            * maintained both in pass 1 and in pass 2. Make 
-                            * sure you count the same things in both passes. *)
-(* Keep here the file names *)
-let fileNames : (int, string) H.t = H.create 113
-
-
-
-(* Remember the composite types that we have already declared *)
-let emittedCompDecls: (string, bool) H.t = H.create 113
-(* Remember the variables also *)
-let emittedVarDecls: (string, bool) H.t = H.create 113
-
-(* also keep track of externally-visible function definitions;
- * name maps to declaration, location, and semantic checksum *)
-let emittedFunDefn: (string, fundec * location * int) H.t = H.create 113
-(* and same for variable definitions; name maps to GVar fields *)
-let emittedVarDefn: (string, varinfo * init option * location) H.t = H.create 113
-
-(** A mapping from the new names to the original names. Used in PASS2 when we 
- * rename variables. *)
-let originalVarNames: (string, string) H.t = H.create 113
-
-(* Initialize the module *)
-let init () = 
-  H.clear sAlpha;
-  H.clear eAlpha;
-  H.clear vtAlpha;
-
-  H.clear vEnv;
-
-  H.clear vEq;
-  H.clear sEq;
-  H.clear eEq;
-  H.clear tEq;
-  H.clear iEq;
-
-  H.clear vSyn;
-  H.clear sSyn;
-  H.clear eSyn;
-  H.clear tSyn;
-  H.clear iSyn;
-
-  theFile := [];
-  theFileTypes := [];
-
-  H.clear formalNames;
-  H.clear inlineBodies;
-
-  currentFidx := 0;
-  currentDeclIdx := 0;
-  H.clear fileNames;
-
-  H.clear emittedVarDecls;
-  H.clear emittedCompDecls;
-  
-  H.clear emittedFunDefn;
-  H.clear emittedVarDefn;
-
-  H.clear originalVarNames
-
-
-(* Some enumerations have to be turned into an integer. We implement this by
- * introducing a special enumeration type which we'll recognize later to be
- * an integer *)
-let intEnumInfo =
-  { ename = "!!!intEnumInfo!!!"; (* This is otherwise invalid *)
-    eitems = [];
-    eattr = [];
-    ereferenced = false;
-  }
-(* And add it to the equivalence graph *)
-let intEnumInfoNode =
-  getNode eEq eSyn 0 intEnumInfo.ename intEnumInfo
-                     (Some (locUnknown, 0))
-
-    (* Combine the types. Raises the Failure exception with an error message.
-     * isdef says whether the new type is for a definition *)
-type combineWhat =
-    CombineFundef (* The new definition is for a function definition. The old
-                   * is for a prototype *)
-  | CombineFunarg (* Comparing a function argument type with an old prototype
-                   * arg *)
-  | CombineFunret (* Comparing the return of a function with that from an old
-                   * prototype *)
-  | CombineOther
-
-
-let rec combineTypes (what: combineWhat) 
-                     (oldfidx: int)  (oldt: typ) 
-                     (fidx: int) (t: typ)  : typ = 
-  match oldt, t with
-  | TVoid olda, TVoid a -> TVoid (addAttributes olda a)
-  | TInt (oldik, olda), TInt (ik, a) -> 
-      let combineIK oldk k = 
-        if oldk == k then oldk else
-        (* GCC allows a function definition to have a more precise integer 
-         * type than a prototype that says "int" *)
-        if not !msvcMode && oldk = IInt && bitsSizeOf t <= 32 
-           && (what = CombineFunarg || what = CombineFunret) 
-        then 
-          k
-        else (
-          let msg =
-            P.sprint ~width:80
-              (P.dprintf
-                 "(different integer types %a and %a)"
-                 d_type oldt d_type t) in
-          raise (Failure msg)
-        )
-      in
-      TInt (combineIK oldik ik, addAttributes olda a)
-
-  | TFloat (oldfk, olda), TFloat (fk, a) -> 
-      let combineFK oldk k = 
-        if oldk == k then oldk else
-        (* GCC allows a function definition to have a more precise integer 
-         * type than a prototype that says "double" *)
-        if not !msvcMode && oldk = FDouble && k = FFloat  
-           && (what = CombineFunarg || what = CombineFunret) 
-        then 
-          k
-        else
-          raise (Failure "(different floating point types)")
-      in
-      TFloat (combineFK oldfk fk, addAttributes olda a)
-
-  | TEnum (oldei, olda), TEnum (ei, a) ->
-      (* Matching enumerations always succeeds. But sometimes it maps both 
-       * enumerations to integers *)
-      matchEnumInfo oldfidx oldei fidx ei;
-      TEnum (oldei, addAttributes olda a) 
-
-
-        (* Strange one. But seems to be handled by GCC *)
-  | TEnum (oldei, olda) , TInt(IInt, a) -> TEnum(oldei, 
-                                                 addAttributes olda a)
-
-        (* Strange one. But seems to be handled by GCC. Warning. Here we are 
-         * leaking types from new to old  *)
-  | TInt(IInt, olda), TEnum (ei, a) -> TEnum(ei, addAttributes olda a)
-        
-  | TComp (oldci, olda) , TComp (ci, a) ->
-      matchCompInfo oldfidx oldci fidx ci;
-      (* If we get here we were successful *)
-      TComp (oldci, addAttributes olda a) 
-
-  | TArray (oldbt, oldsz, olda), TArray (bt, sz, a) -> 
-      let combbt = combineTypes CombineOther oldfidx oldbt fidx bt in
-      let combinesz = 
-        match oldsz, sz with
-          None, Some _ -> sz
-        | Some _, None -> oldsz
-        | None, None -> oldsz
-        | Some oldsz', Some sz' ->
-            let samesz = 
-              match constFold true oldsz', constFold true sz' with 
-                Const(CInt64(oldi, _, _)), Const(CInt64(i, _, _)) -> oldi = i
-              | _, _ -> false
-            in
-            if samesz then oldsz else
-            raise (Failure "(different array sizes)")
-      in
-      TArray (combbt, combinesz, addAttributes olda a)
-        
-  | TPtr (oldbt, olda), TPtr (bt, a) -> 
-      TPtr (combineTypes CombineOther oldfidx oldbt fidx bt, 
-            addAttributes olda a)
-
-        (* WARNING: In this case we are leaking types from new to old !! *)
-  | TFun (_, _, _, [Attr("missingproto",_)]), TFun _ -> t
-
-
-  | TFun _, TFun (_, _, _, [Attr("missingproto",_)]) -> oldt
-        
-  | TFun (oldrt, oldargs, oldva, olda), TFun (rt, args, va, a) ->
-      let newrt = 
-        combineTypes 
-          (if what = CombineFundef then CombineFunret else CombineOther) 
-          oldfidx oldrt fidx rt 
-      in
-      if oldva != va then 
-        raise (Failure "(diferent vararg specifiers)");
-      (* If one does not have arguments, believe the one with the 
-      * arguments *)
-      let newargs = 
-        if oldargs = None then args else
-        if args = None then oldargs else
-        let oldargslist = argsToList oldargs in
-        let argslist = argsToList args in
-        if List.length oldargslist <> List.length argslist then 
-          raise (Failure "(different number of arguments)")
-        else begin
-          (* Go over the arguments and update the old ones with the 
-          * adjusted types *)
-          Some 
-            (List.map2 
-               (fun (on, ot, oa) (an, at, aa) -> 
-                 let n = if an <> "" then an else on in
-                 let t = 
-                   combineTypes 
-                     (if what = CombineFundef then 
-                       CombineFunarg else CombineOther) 
-                     oldfidx ot fidx at
-                 in
-                 let a = addAttributes oa aa in
-                 (n, t, a))
-               oldargslist argslist)
-        end
-      in
-      TFun (newrt, newargs, oldva, addAttributes olda a)
-        
-  | TBuiltin_va_list olda, TBuiltin_va_list a -> 
-      TBuiltin_va_list (addAttributes olda a)
-
-  | TNamed (oldt, olda), TNamed (t, a) -> 
-      matchTypeInfo oldfidx oldt fidx t;
-      (* If we get here we were able to match *)
-      TNamed(oldt, addAttributes olda a) 
-        
-        (* Unroll first the new type *)
-  | _, TNamed (t, a) -> 
-      let res = combineTypes what oldfidx oldt fidx t.ttype in
-      typeAddAttributes a res
-        
-        (* And unroll the old type as well if necessary *)
-  | TNamed (oldt, a), _ -> 
-      let res = combineTypes what oldfidx oldt.ttype fidx t in
-      typeAddAttributes a res
-        
-  | _ -> (
-      (* raise (Failure "(different type constructors)") *)
-      let msg:string = (P.sprint 1000 (P.dprintf "(different type constructors: %a vs. %a)"
-                                                 d_type oldt  d_type t)) in
-      raise (Failure msg)
-    )                                       
-
-
-(* Match two compinfos and throw a Failure if they do not match *)
-and matchCompInfo (oldfidx: int) (oldci: compinfo) 
-                     (fidx: int)    (ci: compinfo) : unit = 
-  if oldci.cstruct <> ci.cstruct then 
-    raise (Failure "(different struct/union types)");
-  (* See if we have a mapping already *)
-  (* Make the nodes if not already made. Actually return the 
-  * representatives *)
-  let oldcinode = getNode sEq sSyn oldfidx oldci.cname oldci None in
-  let    cinode = getNode sEq sSyn    fidx    ci.cname    ci None in 
-  if oldcinode == cinode then (* We already know they are the same *)
-        ()
-  else begin
-    (* Replace with the representative data *)
-    let oldci = oldcinode.ndata in
-    let oldfidx = oldcinode.nfidx in
-    let ci = cinode.ndata in
-    let fidx = cinode.nfidx in
-    
-    let old_len = List.length oldci.cfields in
-    let len = List.length ci.cfields in
-    (* It is easy to catch here the case when the new structure is undefined 
-     * and the old one was defined. We just reuse the old *)
-    (* More complicated is the case when the old one is not defined but the 
-     * new one is. We still reuse the old one and we'll take care of defining 
-     * it later with the new fields. 
-     * GN: 7/10/04, I could not find when is "later", so I added it below *)
-    if len <> 0 && old_len <> 0 && old_len <> len then (
-      let curLoc = !currentLoc in     (* d_global blows this away.. *)
-      (trace "merge" (P.dprintf "different # of fields\n%d: %a\n%d: %a\n"
-                                old_len  d_global (GCompTag(oldci,locUnknown))
-                                    len  d_global (GCompTag(ci,locUnknown))
-                     ));            
-      currentLoc := curLoc;
-      let msg = Printf.sprintf 
-	  "(different number of fields in %s and %s: %d != %d.)" 
-	  oldci.cname ci.cname old_len len in
-      raise (Failure msg)
-    );
-    (* We check that they are defined in the same way. While doing this there 
-     * might be recursion and we have to watch for going into an infinite 
-     * loop. So we add the assumption that they are equal *)
-    let newrep, undo = union oldcinode cinode in
-    (* We check the fields but watch for Failure. We only do the check when 
-     * the lengths are the same. Due to the code above this the other 
-     * possibility is that one of the length is 0, in which case we reuse the 
-     * old compinfo. *)
-    (* But what if the old one is the empty one ? *)
-    if old_len = len then begin
-      (try
-        List.iter2 
-          (fun oldf f ->
-            if oldf.fbitfield <> f.fbitfield then 
-              raise (Failure "(different bitfield info)");
-            if oldf.fattr <> f.fattr then 
-              raise (Failure "(different field attributes)");
-            (* Make sure the types are compatible *)
-            let newtype = 
-              combineTypes CombineOther oldfidx oldf.ftype fidx f.ftype
-            in
-            (* Change the type in the representative *)
-            oldf.ftype <- newtype;
-          ) 
-          oldci.cfields ci.cfields
-      with Failure reason -> begin
-        (* Our assumption was wrong. Forget the isomorphism *)
-        undo ();
-        let msg = 
-          P.sprint ~width:80
-            (P.dprintf
-               "\n\tFailed assumption that %s and %s are isomorphic %s@!%a@!%a"
-               (compFullName oldci) (compFullName ci) reason 
-               dn_global (GCompTag(oldci,locUnknown))
-               dn_global (GCompTag(ci,locUnknown)))
-               in
-        raise (Failure msg)
-      end)
-    end else begin
-      (* We will reuse the old one. One of them is empty. If the old one is 
-       * empty, copy over the fields from the new one. Won't this result in 
-       * all sorts of undefined types??? *)
-      if old_len = 0 then 
-        oldci.cfields <- ci.cfields;
-    end;
-    (* We get here when we succeeded checking that they are equal, or one of 
-     * them was empty *)
-    newrep.ndata.cattr <- addAttributes oldci.cattr ci.cattr;
-    ()
-  end
-
-(* Match two enuminfos and throw a Failure if they do not match *)
-and matchEnumInfo (oldfidx: int) (oldei: enuminfo) 
-                   (fidx: int)    (ei: enuminfo) : unit = 
-  (* Find the node for this enum, no path compression. *)
-  let oldeinode = getNode eEq eSyn oldfidx oldei.ename oldei None in
-  let einode    = getNode eEq eSyn fidx ei.ename ei None in
-  if oldeinode == einode then (* We already know they are the same *)
-    ()
-  else begin
-    (* Replace with the representative data *)
-    let oldei = oldeinode.ndata in
-    let ei = einode.ndata in
-    (* Try to match them. But if you cannot just make them both integers *)
-    try
-      (* We do not have a mapping. They better be defined in the same way *)
-      if List.length oldei.eitems <> List.length ei.eitems then 
-        raise (Failure "(different number of enumeration elements)");
-      (* We check that they are defined in the same way. This is a fairly 
-      * conservative check. *)
-      List.iter2 
-        (fun (old_iname, old_iv, _) (iname, iv, _) -> 
-          if old_iname <> iname then 
-            raise (Failure "(different names for enumeration items)");
-          let samev = 
-            match constFold true old_iv, constFold true iv with 
-              Const(CInt64(oldi, _, _)), Const(CInt64(i, _, _)) -> oldi = i
-            | _ -> false
-          in
-          if not samev then 
-            raise (Failure "(different values for enumeration items)"))
-        oldei.eitems ei.eitems;
-      (* Set the representative *)
-      let newrep, _ = union oldeinode einode in
-      (* We get here if the enumerations match *)
-      newrep.ndata.eattr <- addAttributes oldei.eattr ei.eattr;
-      ()
-    with Failure msg -> begin
-      (* Get here if you cannot merge two enumeration nodes *)
-      if oldeinode != intEnumInfoNode then begin
-        let _ = union oldeinode intEnumInfoNode in ()
-      end;
-      if einode != intEnumInfoNode then begin
-        let _ = union einode intEnumInfoNode in ()
-      end;
-    end
-  end
-
-      
-(* Match two typeinfos and throw a Failure if they do not match *)
-and matchTypeInfo (oldfidx: int) (oldti: typeinfo) 
-                   (fidx: int)      (ti: typeinfo) : unit = 
-  if oldti.tname = "" || ti.tname = "" then 
-    E.s (bug "matchTypeInfo for anonymous type\n");
-  (* Find the node for this enum, no path compression. *)
-  let oldtnode = getNode tEq tSyn oldfidx oldti.tname oldti None in
-  let    tnode = getNode tEq tSyn    fidx ti.tname    ti None in
-  if oldtnode == tnode then (* We already know they are the same *)
-    ()
-  else begin
-    (* Replace with the representative data *)
-    let oldti = oldtnode.ndata in
-    let oldfidx = oldtnode.nfidx in
-    let ti = tnode.ndata in
-    let fidx = tnode.nfidx in
-    (* Check that they are the same *)
-    (try
-      ignore (combineTypes CombineOther oldfidx oldti.ttype fidx ti.ttype);
-    with Failure reason -> begin
-      let msg = 
-        P.sprint ~width:80
-          (P.dprintf
-             "\n\tFailed assumption that %s and %s are isomorphic %s"
-             oldti.tname ti.tname reason) in
-      raise (Failure msg)
-    end);
-    let _ = union oldtnode tnode in
-    ()
-  end
-
-(* Scan all files and do two things *)
-(* 1. Initialize the alpha renaming tables with the names of the globals so 
- * that when we come in the second pass to generate new names, we do not run 
- * into conflicts.  *)
-(* 2. For all declarations of globals unify their types. In the process 
- * construct a set of equivalence classes on type names, structure and 
- * enumeration tags  *)
-(* 3. We clean the referenced flags *)
-
-let rec oneFilePass1 (f:file) : unit = 
-  H.add fileNames !currentFidx f.fileName;
-  if debugMerge || !E.verboseFlag then 
-    ignore (E.log "Pre-merging (%d) %s\n" !currentFidx f.fileName);
-  currentDeclIdx := 0;
-  if f.globinitcalled || f.globinit <> None then
-    E.s (E.warn "Merging file %s has global initializer" f.fileName);
-
-  (* We scan each file and we look at all global varinfo. We see if globals 
-   * with the same name have been encountered before and we merge those types 
-   * *)
-  let matchVarinfo (vi: varinfo) (l: location * int) = 
-    ignore (Alpha.registerAlphaName vtAlpha None vi.vname !currentLoc);
-    (* Make a node for it and put it in vEq *)
-    let vinode = mkSelfNode vEq vSyn !currentFidx vi.vname vi (Some l) in
-    try
-      let oldvinode = find true (H.find vEnv vi.vname) in 
-      let oldloc, _ = 
-        match oldvinode.nloc with
-          None -> E.s (bug "old variable is undefined")
-        | Some l -> l
-      in
-      let oldvi     = oldvinode.ndata in
-      (* There is an old definition. We must combine the types. Do this first 
-       * because it might fail *)
-      let newtype = 
-        try
-          combineTypes CombineOther 
-            oldvinode.nfidx oldvi.vtype  
-            !currentFidx vi.vtype;
-        with (Failure reason) -> begin
-          (* Go ahead *)
-          let f = if !ignore_merge_conflicts then warn else error in
-          ignore (f "Incompatible declaration for %s (from %s(%d)).@! Previous was at %a (from %s (%d)) %s " 
-                    vi.vname (H.find fileNames !currentFidx) !currentFidx
-                    d_loc oldloc 
-                    (H.find fileNames oldvinode.nfidx) oldvinode.nfidx 
-                    reason);
-          raise Not_found
-        end
-      in
-      let newrep, _ = union oldvinode vinode in 
-      (* We do not want to turn non-"const" globals into "const" one. That 
-       * can happen if one file declares the variable a non-const while 
-       * others declare it as "const". *)
-      if hasAttribute "const" (typeAttrs vi.vtype) != 
-         hasAttribute "const" (typeAttrs oldvi.vtype) then begin
-        newrep.ndata.vtype <- typeRemoveAttributes ["const"] newtype;
-      end else begin
-        newrep.ndata.vtype <- newtype;
-      end;
-      (* clean up the storage.  *)
-      let newstorage = 
-        if vi.vstorage = oldvi.vstorage || vi.vstorage = Extern then 
-          oldvi.vstorage 
-        else if oldvi.vstorage = Extern then vi.vstorage 
-        (* Sometimes we turn the NoStorage specifier into Static for inline 
-         * functions *)
-        else if oldvi.vstorage = Static && 
-                vi.vstorage = NoStorage then Static 
-        else begin
-          ignore (warn "Inconsistent storage specification for %s. Now is %a and previous was %a at %a" 
-                    vi.vname d_storage vi.vstorage d_storage oldvi.vstorage 
-                    d_loc oldloc);
-          vi.vstorage
-        end
-      in
-      newrep.ndata.vstorage <- newstorage;
-      newrep.ndata.vattr <- addAttributes oldvi.vattr vi.vattr;
-      ()
-    with Not_found -> (* Not present in the previous files. Remember it for 
-                       * later  *)
-      H.add vEnv vi.vname vinode
-
-  in
-  List.iter
-    (function 
-      | GVarDecl (vi, l) | GVar (vi, _, l) -> 
-          currentLoc := l;
-          incr currentDeclIdx;
-          vi.vreferenced <- false;
-          if vi.vstorage <> Static then begin
-            matchVarinfo vi (l, !currentDeclIdx);
-          end
-
-      | GFun (fdec, l) -> 
-          currentLoc := l;
-          incr currentDeclIdx;
-          (* Save the names of the formal arguments *)
-          let _, args, _, _ = splitFunctionTypeVI fdec.svar in
-          H.add formalNames (!currentFidx, fdec.svar.vname) 
-            (List.map (fun (fn, _, _) -> fn) (argsToList args));
-          fdec.svar.vreferenced <- false;
-          (* Force inline functions to be static. *) 
-          (* GN: This turns out to be wrong. inline functions are external, 
-           * unless specified to be static. *)
-          (*
-          if fdec.svar.vinline && fdec.svar.vstorage = NoStorage then 
-            fdec.svar.vstorage <- Static;
-          *)
-          if fdec.svar.vstorage <> Static then begin
-            matchVarinfo fdec.svar (l, !currentDeclIdx)
-          end else begin
-            if fdec.svar.vinline && mergeInlines then 
-              (* Just create the nodes for inline functions *)
-              ignore (getNode iEq iSyn !currentFidx 
-                        fdec.svar.vname fdec.svar (Some (l, !currentDeclIdx)))
-          end
-              (* Make nodes for the defined type and structure tags *)
-      | GType (t, l) ->
-          incr currentDeclIdx;
-          t.treferenced <- false; 
-          if t.tname <> "" then (* The empty names are just for introducing 
-                                 * undefined comp tags *)
-            ignore (getNode tEq tSyn !currentFidx t.tname t 
-                      (Some (l, !currentDeclIdx)))
-          else begin (* Go inside and clean the referenced flag for the 
-                      * declared tags *)
-            match t.ttype with 
-              TComp (ci, _) -> 
-                ci.creferenced <- false;
-                (* Create a node for it *)
-                ignore (getNode sEq sSyn !currentFidx ci.cname ci None)
-                
-            | TEnum (ei, _) -> 
-                ei.ereferenced <- false;
-                ignore (getNode eEq eSyn !currentFidx ei.ename ei None);
-
-            | _ -> E.s (bug "Anonymous Gtype is not TComp")
-          end
-
-      | GCompTag (ci, l) -> 
-          incr currentDeclIdx;
-          ci.creferenced <- false;
-          ignore (getNode sEq sSyn !currentFidx ci.cname ci 
-                    (Some (l, !currentDeclIdx)))
-      | GEnumTag (ei, l) -> 
-          incr currentDeclIdx;
-          ei.ereferenced <- false;
-          ignore (getNode eEq eSyn !currentFidx ei.ename ei 
-                    (Some (l, !currentDeclIdx)))
-
-      | _ -> ())
-    f.globals
-
-
-(* Try to merge synonyms. Do not give an error if they fail to merge *)
-let doMergeSynonyms 
-    (syn : (string, 'a node) H.t)
-    (eq : (int * string, 'a node) H.t)
-    (compare : int -> 'a -> int -> 'a -> unit) (* A comparison function that 
-                                                * throws Failure if no match *)
-    : unit = 
-  H.iter (fun n node -> 
-    if not node.nmergedSyns then begin
-      (* find all the nodes for the same name *)
-      let all = H.find_all syn n in
-      let rec tryone (classes: 'a node list) (* A number of representatives 
-                                              * for this name *)
-                     (nd: 'a node) : 'a node list (* Returns an expanded set 
-                                                   * of classes *) = 
-        nd.nmergedSyns <- true;
-        (* Compare in turn with all the classes we have so far *)
-        let rec compareWithClasses = function
-            [] -> [nd](* No more classes. Add this as a new class *)
-          | c :: restc -> 
-              try
-                compare c.nfidx c.ndata  nd.nfidx nd.ndata;
-                (* Success. Stop here the comparison *)
-                c :: restc
-              with Failure _ -> (* Failed. Try next class *)
-                c :: (compareWithClasses restc)
-        in
-        compareWithClasses classes
-      in
-      (* Start with an empty set of classes for this name *)
-      let _ = List.fold_left tryone [] all in 
-      ()
-    end)
-    syn
-
-
-let matchInlines (oldfidx: int) (oldi: varinfo) 
-                 (fidx: int) (i: varinfo) = 
-  let oldinode = getNode iEq iSyn oldfidx oldi.vname oldi None in
-  let    inode = getNode iEq iSyn    fidx    i.vname    i None in
-  if oldinode == inode then 
-    () 
-  else begin
-    (* Replace with the representative data *)
-    let oldi = oldinode.ndata in
-    let oldfidx = oldinode.nfidx in
-    let i = inode.ndata in
-    let fidx = inode.nfidx in
-    (* There is an old definition. We must combine the types. Do this first 
-     * because it might fail *)
-    oldi.vtype <- 
-       combineTypes CombineOther 
-         oldfidx oldi.vtype fidx i.vtype;
-    (* We get here if we have success *)
-    (* Combine the attributes as well *)
-    oldi.vattr <- addAttributes oldi.vattr i.vattr;
-    (* Do not union them yet because we do not know that they are the same. 
-     * We have checked only the types so far *)
-    ()
-  end
-
-(************************************************************
- *
- *  PASS 2
- *
- *
- ************************************************************)  
-
-(** Keep track of the functions we have used already in the file. We need 
-  * this to avoid removing an inline function that has been used already. 
-  * This can only occur if the inline function is defined after it is used 
-  * already; a bad style anyway *)
-let varUsedAlready: (string, unit) H.t = H.create 111
-
-(** A visitor that renames uses of variables and types *)      
-class renameVisitorClass = object (self)
-  inherit nopCilVisitor 
-      
-      (* This is either a global variable which we took care of, or a local 
-       * variable. Must do its type and attributes. *)
-  method vvdec (vi: varinfo) = DoChildren
-
-      (* This is a variable use. See if we must change it *)
-  method vvrbl (vi: varinfo) : varinfo visitAction = 
-    if not vi.vglob then DoChildren else
-    if vi.vreferenced then begin 
-      H.add varUsedAlready vi.vname ();
-      DoChildren 
-    end else begin
-      match findReplacement true vEq !currentFidx vi.vname with
-        None -> DoChildren
-      | Some (vi', oldfidx) -> 
-          if debugMerge then 
-              ignore (E.log "Renaming use of var %s(%d) to %s(%d)\n"
-                        vi.vname !currentFidx vi'.vname oldfidx);
-          vi'.vreferenced <- true; 
-          H.add varUsedAlready vi'.vname ();
-          ChangeTo vi'
-    end
-
-          
-        (* The use of a type. Change only those types whose underlying info 
-         * is not a root. *)
-  method vtype (t: typ) = 
-    match t with 
-      TComp (ci, a) when not ci.creferenced -> begin
-        match findReplacement true sEq !currentFidx ci.cname with
-          None -> DoChildren
-        | Some (ci', oldfidx) -> 
-            if debugMerge then 
-              ignore (E.log "Renaming use of %s(%d) to %s(%d)\n"
-                        ci.cname !currentFidx ci'.cname oldfidx);
-            ChangeTo (TComp (ci', visitCilAttributes (self :> cilVisitor) a))
-      end
-    | TEnum (ei, a) when not ei.ereferenced -> begin
-        match findReplacement true eEq !currentFidx ei.ename with
-          None -> DoChildren
-        | Some (ei', _) -> 
-            if ei' == intEnumInfo then 
-              (* This is actually our friend intEnumInfo *)
-              ChangeTo (TInt(IInt, visitCilAttributes (self :> cilVisitor) a))
-            else
-              ChangeTo (TEnum (ei', visitCilAttributes (self :> cilVisitor) a))
-      end
-
-    | TNamed (ti, a) when not ti.treferenced -> begin
-        match findReplacement true tEq !currentFidx ti.tname with
-          None -> DoChildren
-        | Some (ti', _) -> 
-            ChangeTo (TNamed (ti', visitCilAttributes (self :> cilVisitor) a))
-    end
-        
-    | _ -> DoChildren
-
-  (* The Field offset might need to be changed to use new compinfo *)
-  method voffs = function
-      Field (f, o) -> begin
-        (* See if the compinfo was changed *)
-        if f.fcomp.creferenced then 
-          DoChildren
-        else begin
-          match findReplacement true sEq !currentFidx f.fcomp.cname with
-            None -> DoChildren (* We did not replace it *)
-          | Some (ci', oldfidx) -> begin
-              (* First, find out the index of the original field *)
-              let rec indexOf (i: int) = function
-                  [] -> 
-                    E.s (bug "Cannot find field %s in %s(%d)\n"
-                           f.fname (compFullName f.fcomp) !currentFidx)
-                | f' :: rest when f' == f -> i
-                | _ :: rest -> indexOf (i + 1) rest
-              in
-              let index = indexOf 0 f.fcomp.cfields in
-              if List.length ci'.cfields <= index then 
-                E.s (bug "Too few fields in replacement %s(%d) for %s(%d)\n"
-                       (compFullName ci') oldfidx
-                       (compFullName f.fcomp) !currentFidx);
-              let f' = List.nth ci'.cfields index in 
-              ChangeDoChildrenPost (Field (f', o), fun x -> x)
-          end
-        end
-      end
-    | _ -> DoChildren
-
-  method vinitoffs o =
-    (self#voffs o)      (* treat initializer offsets same as lvalue offsets *)
-
-end
-
-let renameVisitor = new renameVisitorClass
-
-
-(** A visitor that renames uses of inline functions that were discovered in 
- * pass 2 to be used before they are defined. This is like the renameVisitor 
- * except it only looks at the variables (thus it is a bit more efficient) 
- * and it also renames forward declarations of the inlines to be removed. *)
-
-class renameInlineVisitorClass = object (self)
-  inherit nopCilVisitor 
-      
-      (* This is a variable use. See if we must change it *)
-  method vvrbl (vi: varinfo) : varinfo visitAction = 
-    if not vi.vglob then DoChildren else
-    if vi.vreferenced then begin (* Already renamed *)
-      DoChildren 
-    end else begin
-      match findReplacement true vEq !currentFidx vi.vname with
-        None -> DoChildren
-      | Some (vi', oldfidx) -> 
-          if debugMerge then 
-              ignore (E.log "Renaming var %s(%d) to %s(%d)\n"
-                        vi.vname !currentFidx vi'.vname oldfidx);
-          vi'.vreferenced <- true; 
-          ChangeTo vi'
-    end
-
-  (* And rename some declarations of inlines to remove. We cannot drop this 
-   * declaration (see small1/combineinline6) *)
-  method vglob = function
-      GVarDecl(vi, l) when vi.vinline -> begin
-        (* Get the original name *)
-        let origname = 
-          try H.find originalVarNames vi.vname 
-          with Not_found -> vi.vname
-        in
-        (* Now see if this must be replaced *)
-        match findReplacement true vEq !currentFidx origname with
-          None -> DoChildren
-        | Some (vi', _) -> ChangeTo [GVarDecl (vi', l)]
-      end
-    | _ -> DoChildren
-
-end
-let renameInlinesVisitor = new renameInlineVisitorClass
-
-
-(* sm: First attempt at a semantic checksum for function bodies.
- * Ideally, two function's checksums would be equal only when their
- * bodies were provably equivalent; but I'm using a much simpler and
- * less accurate heuristic here.  It should be good enough for the
- * purpose I have in mind, which is doing duplicate removal of
- * multiply-instantiated template functions. *)
-let functionChecksum (dec: fundec) : int =
-begin
-  (* checksum the structure of the statements (only) *)
-  let rec stmtListSum (lst : stmt list) : int =
-    (List.fold_left (fun acc s -> acc + (stmtSum s)) 0 lst)
-  and stmtSum (s: stmt) : int =
-    (* strategy is to just throw a lot of prime numbers into the
-     * computation in hopes of avoiding accidental collision.. *)
-    match s.skind with
-    | Instr(l) -> 13 + 67*(List.length l)
-    | Return(_) -> 17
-    | Goto(_) -> 19
-    | Break(_) -> 23
-    | Continue(_) -> 29
-    | If(_,b1,b2,_) -> 31 + 37*(stmtListSum b1.bstmts) 
-                          + 41*(stmtListSum b2.bstmts)
-    | Switch(_,b,_,_) -> 43 + 47*(stmtListSum b.bstmts)
-                            (* don't look at stmt list b/c is not part of tree *)
-(*
-    | Loop(b,_,_,_) -> 49 + 53*(stmtListSum b.bstmts)
-*)
-    | While(_,b,_) -> 49 + 53*(stmtListSum b.bstmts)
-    | DoWhile(_,b,_) -> 49 + 53*(stmtListSum b.bstmts)
-    | For(_,_,_,b,_) -> 49 + 53*(stmtListSum b.bstmts)
-    | Block(b) -> 59 + 61*(stmtListSum b.bstmts)
-    | TryExcept (b, (il, e), h, _) -> 
-        67 + 83*(stmtListSum b.bstmts) + 97*(stmtListSum h.bstmts)
-    | TryFinally (b, h, _) -> 
-        103 + 113*(stmtListSum b.bstmts) + 119*(stmtListSum h.bstmts)
-  in
-  
-  (* disabled 2nd and 3rd measure because they appear to get different
-   * values, for the same code, depending on whether the code was just
-   * parsed into CIL or had previously been parsed into CIL, printed
-   * out, then re-parsed into CIL *)
-  let a,b,c,d,e =
-    (List.length dec.sformals),        (* # formals *)
-    0 (*(List.length dec.slocals)*),         (* # locals *)
-    0 (*dec.smaxid*),                        (* estimate of internal statement count *)
-    (List.length dec.sbody.bstmts),    (* number of statements at outer level *)
-    (stmtListSum dec.sbody.bstmts) in  (* checksum of statement structure *)
-  (*(trace "sm" (P.dprintf "sum: %s is %d %d %d %d %d\n"*)
-  (*                       dec.svar.vname a b c d e));*)
-  2*a + 3*b + 5*c + 7*d + 11*e
-end
-
-
-(* sm: equality for initializers, etc.; this is like '=', except
- * when we reach shared pieces (like references into the type
- * structure), we use '==', to prevent circularity *)
-(* update: that's no good; I'm using this to find things which
- * are equal but from different CIL trees, so nothing will ever
- * be '=='.. as a hack I'll just change those places to 'true',
- * so these functions are not now checking proper equality..
- * places where equality is not complete are marked "INC" *)
-let rec equalInits (x: init) (y: init) : bool =
-begin
-  match x,y with
-  | SingleInit(xe), SingleInit(ye) -> (equalExps xe ye)
-  | CompoundInit(xt, xoil), CompoundInit(yt, yoil) ->
-      (*(xt == yt) &&*)  (* INC *)       (* types need to be identically equal *)
-      let rec equalLists xoil yoil : bool =
-        match xoil,yoil with
-        | ((xo,xi) :: xrest), ((yo,yi) :: yrest) ->
-            (equalOffsets xo yo) &&
-            (equalInits xi yi) &&
-            (equalLists xrest yrest)
-        | [], [] -> true
-        | _, _ -> false
-      in
-      (equalLists xoil yoil)
-  | _, _ -> false
-end
-
-and equalOffsets (x: offset) (y: offset) : bool =
-begin
-  match x,y with
-  | NoOffset, NoOffset -> true
-  | Field(xfi,xo), Field(yfi,yo) ->
-      (xfi.fname = yfi.fname) &&     (* INC: same fieldinfo name.. *)
-      (equalOffsets xo yo)
-  | Index(xe,xo), Index(ye,yo) ->
-      (equalExps xe ye) &&
-      (equalOffsets xo yo)
-  | _,_ -> false
-end
-
-and equalExps (x: exp) (y: exp) : bool =
-begin
-  match x,y with
-  | Const(xc), Const(yc) ->        xc = yc   ||    (* safe to use '=' on literals *)
-    (
-      (* CIL changes (unsigned)0 into 0U during printing.. *)
-      match xc,yc with
-      | CInt64(xv,_,_),CInt64(yv,_,_) ->
-          (Int64.to_int xv) = 0   &&     (* ok if they're both 0 *)
-          (Int64.to_int yv) = 0
-      | _,_ -> false
-    )
-  | Lval(xl), Lval(yl) ->          (equalLvals xl yl)
-  | SizeOf(xt), SizeOf(yt) ->      true (*INC: xt == yt*)  (* identical types *)
-  | SizeOfE(xe), SizeOfE(ye) ->    (equalExps xe ye)
-  | AlignOf(xt), AlignOf(yt) ->    true (*INC: xt == yt*)
-  | AlignOfE(xe), AlignOfE(ye) ->  (equalExps xe ye)
-  | UnOp(xop,xe,xt), UnOp(yop,ye,yt) ->
-      xop = yop &&
-      (equalExps xe ye) &&
-      true  (*INC: xt == yt*)
-  | BinOp(xop,xe1,xe2,xt), BinOp(yop,ye1,ye2,yt) ->
-      xop = yop &&
-      (equalExps xe1 ye1) &&
-      (equalExps xe2 ye2) &&
-      true  (*INC: xt == yt*)
-  | CastE(xt,xe), CastE(yt,ye) ->
-      (*INC: xt == yt &&*)
-      (equalExps xe ye)
-  | AddrOf(xl), AddrOf(yl) ->      (equalLvals xl yl)
-  | StartOf(xl), StartOf(yl) ->    (equalLvals xl yl)
-  
-  (* initializers that go through CIL multiple times sometimes lose casts they
-   * had the first time; so allow a different of a cast *)
-  | CastE(xt,xe), ye ->
-      (equalExps xe ye)
-  | xe, CastE(yt,ye) ->
-      (equalExps xe ye)
-
-  | _,_ -> false
-end
-
-and equalLvals (x: lval) (y: lval) : bool =
-begin
-  match x,y with
-  | (Var(xv),xo), (Var(yv),yo) ->
-      (* I tried, I really did.. the problem is I see these names
-       * before merging collapses them, so __T123 != __T456,
-       * so whatever *)
-      (*(xv.vname = vy.vname) &&      (* INC: same varinfo names.. *)*)
-      (equalOffsets xo yo)
-
-  | (Mem(xe),xo), (Mem(ye),yo) ->
-      (equalExps xe ye) &&
-      (equalOffsets xo yo)
-  | _,_ -> false
-end
-
-let equalInitOpts (x: init option) (y: init option) : bool =
-begin
-  match x,y with
-  | None,None -> true
-  | Some(xi), Some(yi) -> (equalInits xi yi)
-  | _,_ -> false
-end
-
-
-  (* Now we go once more through the file and we rename the globals that we 
-   * keep. We also scan the entire body and we replace references to the 
-   * representative types or variables. We set the referenced flags once we 
-   * have replaced the names. *)
-let oneFilePass2 (f: file) = 
-  if debugMerge || !E.verboseFlag then 
-    ignore (E.log "Final merging phase (%d): %s\n" 
-              !currentFidx f.fileName);
-  currentDeclIdx := 0; (* Even though we don't need it anymore *)
-  H.clear varUsedAlready;
-  H.clear originalVarNames;
-  (* If we find inline functions that are used before being defined, and thus 
-   * before knowing that we can throw them away, then we mark this flag so 
-   * that we can make another pass over the file *)
-  let repeatPass2 = ref false in
-  (* Keep a pointer to the contents of the file so far *)
-  let savedTheFile = !theFile in
-
-  let processOneGlobal (g: global) : unit = 
-      (* Process a varinfo. Reuse an old one, or rename it if necessary *)
-    let processVarinfo (vi: varinfo) (vloc: location) : varinfo =  
-      if vi.vreferenced then 
-        vi (* Already done *)
-      else begin
-        (* Maybe it is static. Rename it then *)
-        if vi.vstorage = Static then begin
-          let newName, _ = A.newAlphaName vtAlpha None vi.vname !currentLoc in
-          (* Remember the original name *)
-          H.add originalVarNames newName vi.vname;
-          if debugMerge then ignore (E.log "renaming %s at %a to %s\n"
-                                           vi.vname d_loc vloc newName);
-          vi.vname <- newName;
-          vi.vid <- newVID ();
-          vi.vreferenced <- true;
-          vi
-        end else begin
-          (* Find the representative *)
-          match findReplacement true vEq !currentFidx vi.vname with
-            None -> vi (* This is the representative *)
-          | Some (vi', _) -> (* Reuse some previous one *)
-              vi'.vreferenced <- true; (* Mark it as done already *)
-              vi'.vaddrof <- vi.vaddrof || vi'.vaddrof;
-              vi'
-        end
-      end
-    in
-    try
-      match g with 
-      | GVarDecl (vi, l) as g -> 
-          currentLoc := l;
-          incr currentDeclIdx;
-          let vi' = processVarinfo vi l in
-          if vi != vi' then (* Drop this declaration *) ()
-          else if H.mem emittedVarDecls vi'.vname then (* No need to keep it *)
-            ()
-          else begin
-            H.add emittedVarDecls vi'.vname true; (* Remember that we emitted
-                                                   * it  *)
-            mergePushGlobals (visitCilGlobal renameVisitor g)
-          end
-
-      | GVar (vi, init, l) ->
-          currentLoc := l;
-          incr currentDeclIdx;
-          let vi' = processVarinfo vi l in
-          (* We must keep this definition even if we reuse this varinfo,
-           * because maybe the previous one was a declaration *)
-          H.add emittedVarDecls vi.vname true; (* Remember that we emitted it*)
-
-          let emitIt:bool = (not mergeGlobals) ||
-            try
-              let prevVar, prevInitOpt, prevLoc =
-                (H.find emittedVarDefn vi'.vname) in
-              (* previously defined; same initializer? *)
-              if (equalInitOpts prevInitOpt init.init)
-                || (init.init = None) then (
-                (trace "mergeGlob"
-                  (P.dprintf "dropping global var %s at %a in favor of the one at %a\n"
-                             vi'.vname  d_loc l  d_loc prevLoc));
-                false  (* do not emit *)
-              )
-              else if prevInitOpt = None then (
-                (* We have an initializer, but the previous one didn't.
-                   We should really convert the previous global from GVar
-                   to GVarDecl, but that's not convenient to do here. *)
-                true
-              )
-              else ( 
-                (* Both GVars have initializers. *)
-                (E.s (error "global var %s at %a has different initializer than %a\n"
-                              vi'.vname  d_loc l  d_loc prevLoc));
-              )
-            with Not_found -> (
-              (* no previous definition *)
-              (H.add emittedVarDefn vi'.vname (vi', init.init, l));
-              true     (* emit it *)
-            )
-          in
-
-          if emitIt then
-            mergePushGlobals (visitCilGlobal renameVisitor (GVar(vi', init, l)))
-            
-      | GFun (fdec, l) as g -> 
-          currentLoc := l;
-          incr currentDeclIdx;
-          (* We apply the renaming *)
-          fdec.svar <- processVarinfo fdec.svar l;
-          (* Get the original name. *)
-          let origname = 
-            try H.find originalVarNames fdec.svar.vname 
-            with Not_found -> fdec.svar.vname
-          in
-          (* Go in there and rename everything as needed *)
-          let fdec' = 
-            match visitCilGlobal renameVisitor g with 
-              [GFun(fdec', _)] -> fdec' 
-            | _ -> E.s (unimp "renameVisitor for GFun returned something else")
-          in
-          let g' = GFun(fdec', l) in
-          (* Now restore the parameter names *)
-          let _, args, _, _ = splitFunctionTypeVI fdec'.svar in
-          let oldnames, foundthem = 
-            try H.find formalNames (!currentFidx, origname), true
-            with Not_found -> begin
-              ignore (warnOpt "Cannot find %s in formalNames" origname);
-              [], false
-            end
-          in
-          if foundthem then begin
-            let argl = argsToList args in
-            if List.length oldnames <> List.length argl then 
-              E.s (unimp "After merging the function has more arguments");
-            List.iter2
-              (fun oldn a -> if oldn <> "" then a.vname <- oldn)
-              oldnames fdec.sformals;
-            (* Reflect them in the type *)
-            setFormals fdec fdec.sformals
-          end;
-          (** See if we can remove this inline function *)
-          if fdec'.svar.vinline && mergeInlines then begin
-            let printout = 
-              (* Temporarily turn of printing of lines *)
-              let oldprintln = !lineDirectiveStyle in
-              lineDirectiveStyle := None;
-              (* Temporarily set the name to all functions in the same way *)
-              let newname = fdec'.svar.vname in
-              fdec'.svar.vname <- "@@alphaname@@";
-              (* If we must do alpha conversion then temporarily set the 
-               * names of the local variables and formals in a standard way *)
-              let nameId = ref 0 in 
-              let oldNames : string list ref = ref [] in
-              let renameOne (v: varinfo) = 
-                oldNames := v.vname :: !oldNames; 
-                incr nameId;
-                v.vname <- "___alpha" ^ string_of_int !nameId
-              in
-              let undoRenameOne (v: varinfo) = 
-                match !oldNames with 
-                  n :: rest -> 
-                    oldNames := rest;
-                    v.vname <- n
-                | _ -> E.s (bug "undoRenameOne")
-              in
-              (* Remember the original type *)
-              let origType = fdec'.svar.vtype in
-              if mergeInlinesWithAlphaConvert then begin
-                (* Rename the formals *)
-                List.iter renameOne fdec'.sformals;
-                (* Reflect in the type *)
-                setFormals fdec' fdec'.sformals;
-                (* Now do the locals *)
-                List.iter renameOne fdec'.slocals
-              end;
-              (* Now print it *)
-              let res = d_global () g' in
-              lineDirectiveStyle := oldprintln;
-              fdec'.svar.vname <- newname;
-              if mergeInlinesWithAlphaConvert then begin
-                (* Do the locals in reverse order *)
-                List.iter undoRenameOne (List.rev fdec'.slocals);
-                (* Do the formals in reverse order *)
-                List.iter undoRenameOne (List.rev fdec'.sformals);
-                (* Restore the type *)
-                fdec'.svar.vtype <- origType;
-              end;
-              res
-            in
-            (* Make a node for this inline function using the original name. *)
-            let inode = 
-              getNode vEq vSyn !currentFidx origname fdec'.svar 
-                (Some (l, !currentDeclIdx))
-            in
-            if debugInlines then begin
-              ignore (E.log "getNode %s(%d) with loc=%a. declidx=%d\n"
-                        inode.nname inode.nfidx
-                        d_nloc inode.nloc
-                        !currentDeclIdx);
-              ignore (E.log 
-                        "Looking for previous definition of inline %s(%d)\n"
-                        origname !currentFidx); 
-            end;
-            try
-              let oldinode = H.find inlineBodies printout in
-              if debugInlines then
-                ignore (E.log "  Matches %s(%d)\n" 
-                          oldinode.nname oldinode.nfidx);
-              (* There is some other inline function with the same printout. 
-               * We should reuse this, but watch for the case when the inline 
-               * was already used. *)
-              if H.mem varUsedAlready fdec'.svar.vname then begin
-                if mergeInlinesRepeat then begin
-                  repeatPass2 := true
-                end else begin
-                  ignore (warn "Inline function %s because it is used before it is defined" fdec'.svar.vname);
-                  raise Not_found 
-                end
-              end;
-              let _ = union oldinode inode in
-              (* Clean up the vreferenced bit in the new inline, so that we 
-               * can rename it. Reset the name to the original one so that 
-               * we can find the replacement name. *)
-              fdec'.svar.vreferenced <- false;
-              fdec'.svar.vname <- origname;
-              () (* Drop this definition *)
-            with Not_found -> begin
-              if debugInlines then ignore (E.log " Not found\n");
-              H.add inlineBodies printout inode;
-              mergePushGlobal g'
-            end
-          end else begin
-            (* either the function is not inline, or we're not attempting to 
-             * merge inlines *)
-            if (mergeGlobals &&
-                not fdec'.svar.vinline &&
-                fdec'.svar.vstorage <> Static) then 
-              begin
-                (* sm: this is a non-inline, non-static function.  I want to
-                * consider dropping it if a same-named function has already
-                * been put into the merged file *)
-                let curSum = (functionChecksum fdec') in
-                (*(trace "mergeGlob" (P.dprintf "I see extern function %s, sum is %d\n"*)
-              (*                              fdec'.svar.vname curSum));*)
-                try
-                  let prevFun, prevLoc, prevSum =
-                    (H.find emittedFunDefn fdec'.svar.vname) in
-                  (* previous was found *)
-                  if (curSum = prevSum) then
-                    (trace "mergeGlob"
-                       (P.dprintf "dropping duplicate def'n of func %s at %a in favor of that at %a\n"
-                          fdec'.svar.vname  d_loc l  d_loc prevLoc))
-                  else begin
-                    (* the checksums differ, so print a warning but keep the
-                     * older one to avoid a link error later.  I think this is 
-		     * a reasonable approximation of what ld does. *)
-                    (ignore (warn "def'n of func %s at %a (sum %d) conflicts with the one at %a (sum %d); keeping the one at %a.\n"
-                               fdec'.svar.vname  d_loc l  curSum  d_loc prevLoc
-			       prevSum d_loc prevLoc))
-                  end
-                with Not_found -> begin
-                  (* there was no previous definition *)
-                  (mergePushGlobal g');
-                  (H.add emittedFunDefn fdec'.svar.vname (fdec', l, curSum))
-                end
-              end else begin
-                (* not attempting to merge global functions, or it was static 
-                 * or inline *)
-                mergePushGlobal g'
-              end
-          end
-              
-      | GCompTag (ci, l) as g -> begin
-          currentLoc := l;
-          incr currentDeclIdx;
-          if ci.creferenced then 
-            () 
-          else begin
-            match findReplacement true sEq !currentFidx ci.cname with
-              None -> 
-                (* A new one, we must rename it and keep the definition *)
-                (* Make sure this is root *)
-                (try 
-                  let nd = H.find sEq (!currentFidx, ci.cname) in
-                  if nd.nrep != nd then 
-                    E.s (bug "Setting creferenced for struct %s(%d) which is not root!\n"
-                           ci.cname !currentFidx);
-                with Not_found -> begin
-                  E.s (bug "Setting creferenced for struct %s(%d) which is not in the sEq!\n"
-                         ci.cname !currentFidx);
-                end);
-                let newname, _ = 
-                  A.newAlphaName sAlpha None ci.cname !currentLoc in
-                ci.cname <- newname;
-                ci.creferenced <- true; 
-                ci.ckey <- H.hash (compFullName ci);
-                (* Now we should visit the fields as well *)
-                H.add emittedCompDecls ci.cname true; (* Remember that we 
-                                                       * emitted it  *)
-                mergePushGlobals (visitCilGlobal renameVisitor g)
-            | Some (oldci, oldfidx) -> begin
-                (* We are not the representative. Drop this declaration 
-                 * because we'll not be using it. *)
-                ()
-            end
-          end  
-      end
-      | GEnumTag (ei, l) as g -> begin
-          currentLoc := l;
-          incr currentDeclIdx;
-          if ei.ereferenced then 
-            () 
-          else begin
-            match findReplacement true eEq !currentFidx ei.ename with 
-              None -> (* We must rename it *)
-                let newname, _ = 
-                  A.newAlphaName eAlpha None ei.ename !currentLoc in
-                ei.ename <- newname;
-                ei.ereferenced <- true;
-                (* And we must rename the items to using the same name space 
-                 * as the variables *)
-                ei.eitems <- 
-                   List.map
-                     (fun (n, i, loc) -> 
-                       let newname, _ = 
-                         A.newAlphaName vtAlpha None n !currentLoc in
-                       newname, i, loc)
-                     ei.eitems;
-                mergePushGlobals (visitCilGlobal renameVisitor g);
-            | Some (ei', _) -> (* Drop this since we are reusing it from 
-                                * before *)
-                ()
-          end
-      end
-      | GCompTagDecl (ci, l) -> begin
-          currentLoc := l; (* This is here just to introduce an undefined 
-                            * structure. But maybe the structure was defined 
-                            * already.  *)
-          (* Do not increment currentDeclIdx because it is not incremented in 
-           * pass 1*)
-          if H.mem emittedCompDecls ci.cname then 
-            () (* It was already declared *)
-          else begin
-            H.add emittedCompDecls ci.cname true;
-            (* Keep it as a declaration *)
-            mergePushGlobal g;
-          end
-      end
-
-      | GEnumTagDecl (ei, l) -> 
-          currentLoc := l;
-          (* Do not increment currentDeclIdx because it is not incremented in 
-           * pass 1*)
-          (* Keep it as a declaration *)
-          mergePushGlobal g
-          
-
-      | GType (ti, l) as g -> begin
-          currentLoc := l;
-          incr currentDeclIdx;
-          if ti.treferenced then 
-            () 
-          else begin
-            match findReplacement true tEq !currentFidx ti.tname with 
-              None -> (* We must rename it and keep it *)
-                let newname, _ = 
-                  A.newAlphaName vtAlpha None ti.tname !currentLoc in
-                ti.tname <- newname;
-                ti.treferenced <- true;
-                mergePushGlobals (visitCilGlobal renameVisitor g);
-            | Some (ti', _) ->(* Drop this since we are reusing it from 
-                * before *)
-                  ()
-          end
-      end
-      | g -> mergePushGlobals (visitCilGlobal renameVisitor g)
-  with e -> begin
-    let globStr:string = (P.sprint 1000 (P.dprintf 
-      "error when merging global %a: %s"
-      d_global g  (Printexc.to_string e))) in
-    ignore (E.log "%s\n" globStr);
-    (*"error when merging global: %s\n" (Printexc.to_string e);*)
-    mergePushGlobal (GText (P.sprint 80 
-                              (P.dprintf "/* error at %t:" d_thisloc)));
-    mergePushGlobal g;
-    mergePushGlobal (GText ("*************** end of error*/"));
-    raise e    
-  end
-  in
-  (* Now do the real PASS 2 *)
-  List.iter processOneGlobal f.globals;
-  (* See if we must re-visit the globals in this file because an inline that 
-   * is being removed was used before we saw the definition and we decided to 
-   * remove it *)
-  if mergeInlinesRepeat && !repeatPass2 then begin
-    if debugMerge || !E.verboseFlag then 
-      ignore (E.log "Repeat final merging phase (%d): %s\n" 
-                !currentFidx f.fileName);
-    (* We are going to rescan the globals we have added while processing this 
-     * file. *)
-    let theseGlobals : global list ref = ref [] in
-    (* Scan a list of globals until we hit a given tail *)
-    let rec scanUntil (tail: 'a list) (l: 'a list) = 
-      if tail == l then ()
-      else
-        match l with 
-        | [] -> E.s (bug "mergecil: scanUntil could not find the marker\n")
-        | g :: rest -> 
-            theseGlobals := g :: !theseGlobals;
-            scanUntil tail rest
-    in
-    (* Collect in theseGlobals all the globals from this file *)
-    theseGlobals := [];
-    scanUntil savedTheFile !theFile;
-    (* Now reprocess them *)
-    theFile := savedTheFile;
-    List.iter (fun g -> 
-                 theFile := (visitCilGlobal renameInlinesVisitor g) @ !theFile)
-      !theseGlobals;
-    (* Now check if we have inlines that we could not remove
-    H.iter (fun name _ -> 
-      if not (H.mem inlinesRemoved name) then 
-        ignore (warn "Could not remove inline %s. I have no idea why!\n"
-                  name))
-      inlinesToRemove *)
-  end
-
-
-let merge (files: file list) (newname: string) : file = 
-  init ();
-  
-  (* Make the first pass over the files *)
-  currentFidx := 0;
-  List.iter (fun f -> oneFilePass1 f; incr currentFidx) files;
-
-  (* Now maybe try to force synonyms to be equal *)
-  if mergeSynonyms then begin
-    doMergeSynonyms sSyn sEq matchCompInfo;
-    doMergeSynonyms eSyn eEq matchEnumInfo;
-    doMergeSynonyms tSyn tEq matchTypeInfo;
-    if mergeInlines then begin 
-      (* Copy all the nodes from the iEq to vEq as well. This is needed 
-       * because vEq will be used for variable renaming *)
-      H.iter (fun k n -> H.add vEq k n) iEq;
-      doMergeSynonyms iSyn iEq matchInlines;
-    end
-  end;
-
-  (* Now maybe dump the graph *)
-  if debugMerge then begin
-    dumpGraph "type" tEq;
-    dumpGraph "struct and union" sEq;
-    dumpGraph "enum" eEq;
-    dumpGraph "variable" vEq;
-    if mergeInlines then dumpGraph "inline" iEq;
-  end;
-  (* Make the second pass over the files. This is when we start rewriting the 
-   * file *)
-  currentFidx := 0;
-  List.iter (fun f -> oneFilePass2 f; incr currentFidx) files;
-
-  (* Now reverse the result and return the resulting file *)
-  let rec revonto acc = function
-      [] -> acc
-    | x :: t -> revonto (x :: acc) t
-  in
-  let res = 
-    { fileName = newname;
-      globals  = revonto (revonto [] !theFile) !theFileTypes;
-      globinit = None;
-      globinitcalled = false;} in
-  init (); (* Make the GC happy *)
-  (* We have made many renaming changes and sometimes we have just guessed a 
-   * name wrong. Make sure now that the local names are unique. *)
-  uniqueVarNames res; 
-  res
-
-
-
-
-
diff --git a/cil/src/mergecil.mli b/cil/src/mergecil.mli
deleted file mode 100644
index a864c69a9..000000000
--- a/cil/src/mergecil.mli
+++ /dev/null
@@ -1,42 +0,0 @@
-(*
- *
- * Copyright (c) 2001-2002, 
- *  George C. Necula    <necula@cs.berkeley.edu>
- *  Scott McPeak        <smcpeak@cs.berkeley.edu>
- *  Wes Weimer          <weimer@cs.berkeley.edu>
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. The names of the contributors may not be used to endorse or promote
- * products derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
- * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
- * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- *)
-
-(** Set this to true to ignore the merge conflicts *)
-val ignore_merge_conflicts: bool ref
-
-(** Merge a number of CIL files *)
-val merge: Cil.file list -> string -> Cil.file
diff --git a/cil/src/rmtmps.ml b/cil/src/rmtmps.ml
deleted file mode 100644
index b7dea931c..000000000
--- a/cil/src/rmtmps.ml
+++ /dev/null
@@ -1,778 +0,0 @@
-(*
- *
- * Copyright (c) 2001-2002, 
- *  George C. Necula    <necula@cs.berkeley.edu>
- *  Scott McPeak        <smcpeak@cs.berkeley.edu>
- *  Wes Weimer          <weimer@cs.berkeley.edu>
- *  Ben Liblit          <liblit@cs.berkeley.edu>
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. The names of the contributors may not be used to endorse or promote
- * products derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
- * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
- * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- *)
-
-(* rmtmps.ml *)
-(* implementation for rmtmps.mli *)
-
-open Pretty
-open Cil
-module H = Hashtbl
-module E = Errormsg
-module U = Util
-
-(* Set on the command-line: *)
-let keepUnused = ref false
-let rmUnusedInlines = ref false
-
-
-let trace = Trace.trace "rmtmps"
-
-
-
-(***********************************************************************
- *
- *  Clearing of "referenced" bits
- *
- *)
-
-
-let clearReferencedBits file =
-  let considerGlobal global =
-    match global with
-    | GType (info, _) ->
-	trace (dprintf "clearing mark: %a\n" d_shortglobal global);
-	info.treferenced <- false
-
-    | GEnumTag (info, _)
-    | GEnumTagDecl (info, _) ->
-	trace (dprintf "clearing mark: %a\n" d_shortglobal global);
-	info.ereferenced <- false
-
-    | GCompTag (info, _)
-    | GCompTagDecl (info, _) ->
-	trace (dprintf "clearing mark: %a\n" d_shortglobal global);
-	info.creferenced <- false
-
-    | GVar ({vname = name} as info, _, _)
-    | GVarDecl ({vname = name} as info, _) ->
-	trace (dprintf "clearing mark: %a\n" d_shortglobal global);
-	info.vreferenced <- false
-
-    | GFun ({svar = info} as func, _) ->
-	trace (dprintf "clearing mark: %a\n" d_shortglobal global);
-	info.vreferenced <- false;
-	let clearMark local =
-	  trace (dprintf "clearing mark: local %s\n" local.vname);
-	  local.vreferenced <- false
-	in
-	List.iter clearMark func.slocals
-
-    | _ ->
-	()
-  in
-  iterGlobals file considerGlobal
-
-
-(***********************************************************************
- *
- *  Scanning and categorization of pragmas
- *
- *)
-
-
-(* collections of names of things to keep *)
-type collection = (string, unit) H.t
-type keepers = {
-    typedefs : collection;
-    enums : collection;
-    structs : collection;
-    unions : collection;
-    defines : collection;
-  }
-
-
-(* rapid transfer of control when we find a malformed pragma *)
-exception Bad_pragma
-
-let ccureddeepcopystring = "ccureddeepcopy"
-(* Save this length so we don't recompute it each time. *)
-let ccureddeepcopystring_length = String.length ccureddeepcopystring
-
-(* CIL and CCured define several pragmas which prevent removal of
- * various global symbols.  Here we scan for those pragmas and build
- * up collections of the corresponding symbols' names.
- *)
-
-let categorizePragmas file =
-
-  (* names of things which should be retained *)
-  let keepers = {
-    typedefs = H.create 0;
-    enums = H.create 0;
-    structs = H.create 0;
-    unions = H.create 0;
-    defines = H.create 1
-  } in
-  
-  (* populate these name collections in light of each pragma *)
-  let considerPragma =
-
-    let badPragma location pragma =
-      ignore (warnLoc location "Invalid argument to pragma %s" pragma)
-    in
-    
-    function
-      | GPragma (Attr ("cilnoremove" as directive, args), location) ->
-	  (* a very flexible pragma: can retain typedefs, enums,
-	   * structs, unions, or globals (functions or variables) *)
-	  begin
-	    let processArg arg =
-	      try
-		match arg with
-		| AStr specifier ->
-		    (* isolate and categorize one symbol name *)
-		    let collection, name =
-		      (* Two words denotes a typedef, enum, struct, or
-		       * union, as in "type foo" or "enum bar".  A
-		       * single word denotes a global function or
-		       * variable. *)
-		      let whitespace = Str.regexp "[ \t]+" in
-		      let words = Str.split whitespace specifier in
-		      match words with
-		      | ["type"; name] ->
-			  keepers.typedefs, name
-		      | ["enum"; name] ->
-			  keepers.enums, name
-		      | ["struct"; name] ->
-			  keepers.structs, name
-		      | ["union"; name] ->
-			  keepers.unions, name
-		      | [name] ->
-			  keepers.defines, name
-		      | _ ->
-			  raise Bad_pragma
-		    in
-		    H.add collection name ()
-		| _ ->
-		    raise Bad_pragma
-	      with Bad_pragma ->
-		badPragma location directive
-	    in
-	    List.iter processArg args
-	  end
-      | GVarDecl (v, _) -> begin
-          (* Look for alias attributes, e.g. Linux modules *)
-          match filterAttributes "alias" v.vattr with
-              [] -> ()  (* ordinary prototype. *)
-            | [Attr("alias", [AStr othername])] ->
-                H.add keepers.defines othername ()
-           | _ -> E.s (error "Bad alias attribute at %a" d_loc !currentLoc)
-        end          
-
-      (*** Begin CCured-specific checks:  ***)
-      (* these pragmas indirectly require that we keep the function named in
-	  -- the first arguments of boxmodelof and ccuredwrapperof, and
-	  -- the third argument of ccureddeepcopy*. *)
-      | GPragma (Attr("ccuredwrapper" as directive, attribute :: _), location) ->
-	  begin
-	    match attribute with
-	    | AStr name ->
-		H.add keepers.defines name ()
-	    | _ ->
-		badPragma location directive
-	  end
-      | GPragma (Attr("ccuredvararg", funcname :: (ASizeOf t) :: _), location) ->
-	  begin
-	    match t with
-	    | TComp(c,_) when c.cstruct -> (* struct *)
-		H.add keepers.structs c.cname ()
-	    | TComp(c,_) -> (* union *)
-		H.add keepers.unions c.cname ()
-	    | TNamed(ti,_) ->
-		H.add keepers.typedefs ti.tname ()
-	    | TEnum(ei, _) ->
-		H.add keepers.enums ei.ename ()
-	    | _ ->
-		()
-	  end
-      | GPragma (Attr(directive, _ :: _ :: attribute :: _), location)
-           when String.length directive > ccureddeepcopystring_length
-	       && (Str.first_chars directive ccureddeepcopystring_length)
-	           = ccureddeepcopystring ->
-	  begin
-	    match attribute with
-	    | AStr name ->
-		H.add keepers.defines name ()
-	    | _ ->
-		badPragma location directive
-	  end
-      (** end CCured-specific stuff **)
-      |	_ ->
-	  ()
-  in
-  iterGlobals file considerPragma;
-  keepers
-
-
-
-(***********************************************************************
- *
- *  Function body elimination from pragmas
- *
- *)
-
-
-(* When performing global slicing, any functions not explicitly marked
- * as pragma roots are reduced to mere declarations.  This leaves one
- * with a reduced source file that still compiles to object code, but
- * which contains the bodies of only explicitly retained functions.
- *)
-
-let amputateFunctionBodies keptGlobals file =
-  let considerGlobal = function
-    | GFun ({svar = {vname = name} as info}, location)
-      when not (H.mem keptGlobals name) ->
-	trace (dprintf "slicing: reducing to prototype: function %s\n" name);
-	GVarDecl (info, location)
-    | other ->
-	other
-  in
-  mapGlobals file considerGlobal
-
-
-
-(***********************************************************************
- *
- *  Root collection from pragmas
- *
- *)
-
-
-let isPragmaRoot keepers = function
-  | GType ({tname = name}, _) ->
-      H.mem keepers.typedefs name
-  | GEnumTag ({ename = name}, _)
-  | GEnumTagDecl ({ename = name}, _) ->
-      H.mem keepers.enums name
-  | GCompTag ({cname = name; cstruct = structure}, _)
-  | GCompTagDecl ({cname = name; cstruct = structure}, _) ->
-      let collection = if structure then keepers.structs else keepers.unions in
-      H.mem collection name
-  | GVar ({vname = name}, _, _)
-  | GVarDecl ({vname = name}, _)
-  | GFun ({svar = {vname = name}}, _) ->
-      H.mem keepers.defines name
-  | _ ->
-      false
-
-
-
-(***********************************************************************
- *
- *  Common root collecting utilities
- *
- *)
-
-
-let traceRoot reason global =
-  trace (dprintf "root (%s): %a@!" reason d_shortglobal global);
-  true
-
-
-let traceNonRoot reason global =
-  trace (dprintf "non-root (%s): %a@!" reason d_shortglobal global);
-  false
-
-
-let hasExportingAttribute funvar =
-  let rec isExportingAttribute = function
-    | Attr ("constructor", []) -> true
-    | Attr ("destructor", []) -> true
-    | _ -> false
-  in
-  List.exists isExportingAttribute funvar.vattr
-
-
-
-(***********************************************************************
- *
- *  Root collection from external linkage
- *
- *)
-
-
-(* Exported roots are those global symbols which are visible to the
- * linker and dynamic loader.  For variables, this consists of
- * anything that is not "static".  For functions, this consists of:
- *
- * - functions bearing a "constructor" or "destructor" attribute
- * - functions declared extern but not inline
- * - functions declared neither inline nor static
- *
- * gcc incorrectly (according to C99) makes inline functions visible to
- * the linker.  So we can only remove inline functions on MSVC.
- *)
-
-let isExportedRoot global =
-  let result, reason = match global with
-  | GVar ({vstorage = Static}, _, _) ->
-      false, "static variable"
-  | GVar _ ->
-      true, "non-static variable"
-  | GFun ({svar = v}, _) -> begin 
-      if hasExportingAttribute v then 
-	true, "constructor or destructor function"
-      else if v.vstorage = Static then 
-        false, "static function"
-      else if v.vinline && v.vstorage != Extern
-              && (!msvcMode || !rmUnusedInlines) then 
-        false, "inline function"
-      else
-	true, "other function"
-  end
-  | GVarDecl(v,_) when hasAttribute "alias" v.vattr ->
-      true, "has GCC alias attribute"
-  | _ ->
-      false, "neither function nor variable"
-  in
-  trace (dprintf "isExportedRoot %a -> %b, %s@!" 
-           d_shortglobal global result reason);
-  result
-
-
-
-(***********************************************************************
- *
- *  Root collection for complete programs
- *
- *)
-
-
-(* Exported roots are "main()" and functions bearing a "constructor"
- * or "destructor" attribute.  These are the only things which must be
- * retained in a complete program.
- *)
-
-let isCompleteProgramRoot global =
-  let result = match global with
-  | GFun ({svar = {vname = "main"; vstorage = vstorage}}, _) ->
-      vstorage <> Static
-  | GFun (fundec, _)
-    when hasExportingAttribute fundec.svar ->
-      true
-  | _ ->
-      false
-  in
-  trace (dprintf "complete program root -> %b for %a@!" result d_shortglobal global);
-  result
-
-
-(***********************************************************************
- *
- *  Transitive reachability closure from roots
- *
- *)
-
-
-(* This visitor recursively marks all reachable types and variables as used. *)
-class markReachableVisitor 
-    ((globalMap: (string, Cil.global) H.t),
-     (currentFunc: fundec option ref)) = object (self)
-  inherit nopCilVisitor
-
-  method vglob = function
-    | GType (typeinfo, _) ->
-	typeinfo.treferenced <- true;
-	DoChildren
-    | GCompTag (compinfo, _)
-    | GCompTagDecl (compinfo, _) ->
-	compinfo.creferenced <- true;
-	DoChildren
-    | GEnumTag (enuminfo, _)
-    | GEnumTagDecl (enuminfo, _) ->
-	enuminfo.ereferenced <- true;
-	DoChildren
-    | GVar (varinfo, _, _)
-    | GVarDecl (varinfo, _)
-    | GFun ({svar = varinfo}, _) ->
-	varinfo.vreferenced <- true;
-	DoChildren
-    | _ ->
-	SkipChildren
-
-  method vinst = function
-      Asm (_, tmpls, _, _, _, _) when !msvcMode -> 
-          (* If we have inline assembly on MSVC, we cannot tell which locals 
-           * are referenced. Keep thsem all *)
-        (match !currentFunc with 
-          Some fd -> 
-            List.iter (fun v -> 
-              let vre = Str.regexp_string (Str.quote v.vname) in 
-              if List.exists (fun tmp -> 
-                try ignore (Str.search_forward vre tmp 0); true
-                with Not_found -> false)
-                  tmpls 
-              then
-                v.vreferenced <- true) fd.slocals
-        | _ -> assert false);
-        DoChildren
-    | _ -> DoChildren
-
-  method vvrbl v =
-    if not v.vreferenced then
-      begin
-	let name = v.vname in
-	if v.vglob then
-	  trace (dprintf "marking transitive use: global %s\n" name)
-	else
-	  trace (dprintf "marking transitive use: local %s\n" name);
-	
-        (* If this is a global, we need to keep everything used in its
-	 * definition and declarations. *)
-	if v.vglob then
-	  begin
-	    trace (dprintf "descending: global %s\n" name);
-	    let descend global =
-	      ignore (visitCilGlobal (self :> cilVisitor) global)
-	    in
-	    let globals = Hashtbl.find_all globalMap name in
-	    List.iter descend globals
-	  end
-	else
-	  v.vreferenced <- true;
-      end;
-    SkipChildren
-
-  method vexpr (e: exp) = 
-    match e with 
-      Const (CEnum (_, _, ei)) -> ei.ereferenced <- true;
-                                  DoChildren
-    | _ -> DoChildren
-
-  method vtype typ =
-    let old : bool =
-      let visitAttrs attrs =
-	ignore (visitCilAttributes (self :> cilVisitor) attrs)
-      in
-      let visitType typ =
-	ignore (visitCilType (self :> cilVisitor) typ)
-      in
-      match typ with
-      | TEnum(e, attrs) ->
-	  let old = e.ereferenced in
-	  if not old then
-	    begin
-	      trace (dprintf "marking transitive use: enum %s\n" e.ename);
-	      e.ereferenced <- true;
-	      visitAttrs attrs;
-	      visitAttrs e.eattr
-	    end;
-	  old
-
-      | TComp(c, attrs) ->
-	  let old = c.creferenced in
-          if not old then
-            begin
-	      trace (dprintf "marking transitive use: compound %s\n" c.cname);
-	      c.creferenced <- true;
-
-              (* to recurse, we must ask explicitly *)
-	      let recurse f = visitType f.ftype in
-	      List.iter recurse c.cfields;
-	      visitAttrs attrs;
-	      visitAttrs c.cattr
-	    end;
-	  old
-
-      | TNamed(ti, attrs) ->
-	  let old = ti.treferenced in
-          if not old then
-	    begin
-	      trace (dprintf "marking transitive use: typedef %s\n" ti.tname);
-	      ti.treferenced <- true;
-	      
-	      (* recurse deeper into the type referred-to by the typedef *)
-	      (* to recurse, we must ask explicitly *)
-	      visitType ti.ttype;
-	      visitAttrs attrs
-	    end;
-	  old
-
-      | _ ->
-          (* for anything else, just look inside it *)
-	  false
-    in
-    if old then
-      SkipChildren
-    else
-      DoChildren
-end
-
-
-let markReachable file isRoot =
-  (* build a mapping from global names back to their definitions & 
-   * declarations *)
-  let globalMap = Hashtbl.create 137 in
-  let considerGlobal global =
-    match global with
-    | GFun ({svar = info}, _)
-    | GVar (info, _, _)
-    | GVarDecl (info, _) ->
-	Hashtbl.add globalMap info.vname global
-    | _ ->
-	()
-  in
-  iterGlobals file considerGlobal;
-
-  let currentFunc = ref None in 
-
-  (* mark everything reachable from the global roots *)
-  let visitor = new markReachableVisitor (globalMap, currentFunc) in
-  let visitIfRoot global =
-    if isRoot global then
-      begin
-	trace (dprintf "traversing root global: %a\n" d_shortglobal global);
-        (match global with 
-          GFun(fd, _) -> currentFunc := Some fd
-        | _ -> currentFunc := None);
-	ignore (visitCilGlobal visitor global)
-      end
-    else
-      trace (dprintf "skipping non-root global: %a\n" d_shortglobal global)
-  in
-  iterGlobals file visitIfRoot
-
-
-(**********************************************************************
- *
- * Marking and removing of unused labels
- *
- **********************************************************************)
-
-(* We keep only one label, preferably one that was not introduced by CIL. 
- * Scan a list of labels and return the data for the label that should be 
- * kept, and the remaining filtered list of labels *)
-let labelsToKeep (ll: label list) : (string * location * bool) * label list = 
-  let rec loop (sofar: string * location * bool) = function
-      [] -> sofar, []
-    | l :: rest -> 
-        let newlabel, keepl = 
-          match l with
-          | Case _ | Default _ -> sofar, true 
-          | Label (ln, lloc, isorig) -> begin
-              match isorig, sofar with 
-              | false, ("", _, _) -> 
-                  (* keep this one only if we have no label so far *)
-                  (ln, lloc, isorig), false
-              | false, _ -> sofar, false
-              | true, (_, _, false) -> 
-                  (* this is an original label; prefer it to temporary or 
-                   * missing labels *)
-                  (ln, lloc, isorig), false
-              | true, _ -> sofar, false
-          end
-        in
-        let newlabel', rest' = loop newlabel rest in
-        newlabel', (if keepl then l :: rest' else rest')
-  in
-  loop ("", locUnknown, false) ll
-
-class markUsedLabels (labelMap: (string, unit) H.t) = object
-  inherit nopCilVisitor
-
-  method vstmt (s: stmt) = 
-    match s.skind with 
-      Goto (dest, _) -> 
-        let (ln, _, _), _ = labelsToKeep !dest.labels in
-        if ln = "" then 
-          E.s (E.bug "rmtmps: destination of statement does not have labels");
-        (* Mark it as used *)
-        H.replace labelMap ln ();
-        DoChildren
-
-    | _ -> DoChildren
-
-   (* No need to go into expressions or instructions *)
-  method vexpr _ = SkipChildren
-  method vinst _ = SkipChildren
-  method vtype _ = SkipChildren
-end
-
-class removeUnusedLabels (labelMap: (string, unit) H.t) = object
-  inherit nopCilVisitor
-
-  method vstmt (s: stmt) = 
-    let (ln, lloc, lorig), lrest = labelsToKeep s.labels in
-    s.labels <-
-       (if ln <> "" && H.mem labelMap ln then (* We had labels *)
-         (Label(ln, lloc, lorig) :: lrest)
-       else
-         lrest);
-    DoChildren
-
-   (* No need to go into expressions or instructions *)
-  method vexpr _ = SkipChildren
-  method vinst _ = SkipChildren
-  method vtype _ = SkipChildren
-end
-
-(***********************************************************************
- *
- *  Removal of unused symbols
- *
- *)
-
-
-(* regular expression matching names of uninteresting locals *)
-let uninteresting =
-  let names = [
-    (* Cil.makeTempVar *)
-    "__cil_tmp";
-    
-    (* sm: I don't know where it comes from but these show up all over. *)
-    (* this doesn't seem to do what I wanted.. *)
-    "iter";
-
-    (* various macros in glibc's <bits/string2.h> *)		   
-    "__result";
-    "__s"; "__s1"; "__s2";
-    "__s1_len"; "__s2_len";
-    "__retval"; "__len";
-
-    (* various macros in glibc's <ctype.h> *)
-    "__c"; "__res";
-
-    (* We remove the __malloc variables *)
-  ] in
-
-  (* optional alpha renaming *)
-  let alpha = "\\(___[0-9]+\\)?" in
-  
-  let pattern = "\\(" ^ (String.concat "\\|" names) ^ "\\)" ^ alpha ^ "$" in
-  Str.regexp pattern
-
-
-let removeUnmarked file =
-  let removedLocals = ref [] in
-  
-  let filterGlobal global =
-    match global with
-    (* unused global types, variables, and functions are simply removed *)
-    | GType ({treferenced = false}, _)
-    | GCompTag ({creferenced = false}, _)
-    | GCompTagDecl ({creferenced = false}, _)
-    | GEnumTag ({ereferenced = false}, _)
-    | GEnumTagDecl ({ereferenced = false}, _)
-    | GVar ({vreferenced = false}, _, _)
-    | GVarDecl ({vreferenced = false}, _)
-    | GFun ({svar = {vreferenced = false}}, _) ->
-	trace (dprintf "removing global: %a\n" d_shortglobal global);
-	false
-
-    (* retained functions may wish to discard some unused locals *)
-    | GFun (func, _) ->
-	let rec filterLocal local =
-	  if not local.vreferenced then
-	    begin
-	      (* along the way, record the interesting locals that were removed *)
-	      let name = local.vname in
-	      trace (dprintf "removing local: %s\n" name);
-	      if not (Str.string_match uninteresting name 0) then
-		removedLocals := (func.svar.vname ^ "::" ^ name) :: !removedLocals;
-	    end;
-	  local.vreferenced
-	in
-	func.slocals <- List.filter filterLocal func.slocals;
-        (* We also want to remove unused labels. We do it all here, including 
-         * marking the used labels *)
-        let usedLabels:(string, unit) H.t = H.create 13 in
-        ignore (visitCilBlock (new markUsedLabels usedLabels) func.sbody);
-        (* And now we scan again and we remove them *)
-        ignore (visitCilBlock (new removeUnusedLabels usedLabels) func.sbody);
-	true
-
-    (* all other globals are retained *)
-    | _ ->
-	trace (dprintf "keeping global: %a\n" d_shortglobal global);
-	true
-  in
-  file.globals <- List.filter filterGlobal file.globals;
-  !removedLocals
-
-
-(***********************************************************************
- *
- *  Exported interface
- *
- *)
-
-
-type rootsFilter = global -> bool
-
-let isDefaultRoot = isExportedRoot
-
-let rec removeUnusedTemps ?(isRoot : rootsFilter = isDefaultRoot) file =
-  if !keepUnused || Trace.traceActive "disableTmpRemoval" then
-    Trace.trace "disableTmpRemoval" (dprintf "temp removal disabled\n")
-  else
-    begin
-      if !E.verboseFlag then 
-        ignore (E.log "Removing unused temporaries\n" );
-
-      if Trace.traceActive "printCilTree" then
-	dumpFile defaultCilPrinter stdout "stdout" file;
-
-      (* digest any pragmas that would create additional roots *)
-      let keepers = categorizePragmas file in
-
-      (* if slicing, remove the bodies of non-kept functions *)
-      if !Cilutil.sliceGlobal then
-	amputateFunctionBodies keepers.defines file;
-
-      (* build up the root set *)
-      let isRoot global =
-	isPragmaRoot keepers global ||
-	isRoot global
-      in
-
-      (* mark everything reachable from the global roots *)
-      clearReferencedBits file;
-      markReachable file isRoot;
-
-      (* take out the trash *)
-      let removedLocals = removeUnmarked file in
-
-      (* print which original source variables were removed *)
-      if false && removedLocals != [] then
-	let count = List.length removedLocals in
-	if count > 2000 then 
-	  ignore (E.warn "%d unused local variables removed" count)
-	else
-	  ignore (E.warn "%d unused local variables removed:@!%a"
-		    count (docList ~sep:(chr ',' ++ break) text) removedLocals)
-    end
diff --git a/cil/src/rmtmps.mli b/cil/src/rmtmps.mli
deleted file mode 100644
index e29f0c6bd..000000000
--- a/cil/src/rmtmps.mli
+++ /dev/null
@@ -1,82 +0,0 @@
-(*
- *
- * Copyright (c) 2001-2002, 
- *  George C. Necula    <necula@cs.berkeley.edu>
- *  Scott McPeak        <smcpeak@cs.berkeley.edu>
- *  Wes Weimer          <weimer@cs.berkeley.edu>
- *  Ben Liblit          <liblit@cs.berkeley.edu>
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. The names of the contributors may not be used to endorse or promote
- * products derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
- * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
- * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- *)
-
-(* rmtmps.mli *)
-(* remove unused things from cil files:               *)
-(*   - local temporaries introduced but not used      *)
-(*   - global declarations that are not used          *)
-(*   - types that are not used                        *)
-(*   - labels that are not used (gn)                  *)
-
-
-(* Some clients may wish to augment or replace the standard strategy
- * for finding the initially reachable roots.  The optional
- * "isRoot" argument to Rmtmps.removeUnusedTemps grants this
- * flexibility.  If given, it should name a function which will return
- * true if a given global should be treated as a retained root.
- * 
- * Function Rmtmps.isDefaultRoot encapsulates the default root
- * collection, which consists of those global variables and functions
- * which are visible to the linker and runtime loader.  A client's
- * root filter can use this if the goal is to augment rather than
- * replace the standard logic.  Function Rmtmps.isExportedRoot is an
- * alternate name for this same function.
- * 
- * Function Rmtmps.isCompleteProgramRoot is an example of an alternate
- * root collection.  This function assumes that it is operating on a
- * complete program rather than just one object file.  It treats
- * "main()" as a root, as well as any function carrying the
- * "constructor" or "destructor" attribute.  All other globals are
- * candidates for removal, regardless of their linkage.
- * 
- * Note that certain CIL- and CCured-specific pragmas induce
- * additional global roots.  This functionality is always present, and
- * is not subject to replacement by "filterRoots".
- *)
-
-type rootsFilter = Cil.global -> bool
-val isDefaultRoot : rootsFilter
-val isExportedRoot : rootsFilter
-val isCompleteProgramRoot : rootsFilter
-
-(* process a complete Cil file *)
-val removeUnusedTemps: ?isRoot:rootsFilter -> Cil.file -> unit
-
-
-val keepUnused: bool ref (* Set this to true to turn off this module *)
-val rmUnusedInlines: bool ref (* Delete unused inline funcs in gcc mode? *)
diff --git a/cil/src/testcil.ml b/cil/src/testcil.ml
deleted file mode 100644
index 0c0ef0184..000000000
--- a/cil/src/testcil.ml
+++ /dev/null
@@ -1,440 +0,0 @@
-(*
- *
- * Copyright (c) 2001-2002, 
- *  George C. Necula    <necula@cs.berkeley.edu>
- *  Scott McPeak        <smcpeak@cs.berkeley.edu>
- *  Wes Weimer          <weimer@cs.berkeley.edu>
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. The names of the contributors may not be used to endorse or promote
- * products derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
- * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
- * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- *)
-
-(* A test for CIL *)
-open Pretty
-open Cil
-module E = Errormsg
-
-let lu = locUnknown
-
-(* If you have trouble try to reproduce the problem on a smaller type. Try 
- * limiting the maxNesting and integerKinds *)
-let integerKinds = [ IChar; ISChar; IUChar; IInt; IUInt; IShort; IUShort;
-                     ILong; IULong; ILongLong; IULongLong ] 
-let floatKinds = [ FFloat; FDouble ] 
-    
-let baseTypes = 
-       (List.map (fun ik -> (1, fun _ -> TInt(ik, []))) integerKinds)
-     @ (List.map (fun fk -> (1, fun _ -> TFloat(fk, []))) floatKinds)
-
-
-(* Make a random struct *)
-let maxNesting  = ref 3  (* Maximum number of levels for struct nesting *)
-let maxFields   = ref 8  (* The maximum number of fields in a struct *)
-let useBitfields = ref false
-let useZeroBitfields = ref true
-
-
-
-(* Collect here the globals *)
-let globals: global list ref = ref []
-let addGlobal (g:global) = globals := g :: !globals
-let getGlobals () = List.rev !globals
- 
-(* Collect here the statements for main *)
-let statements: stmt list ref = ref []
-let addStatement (s: stmt) = statements := s :: !statements
-let getStatements () = List.rev !statements
-
-(* Keep here the main function *)
-let main: fundec ref = ref dummyFunDec
-let mainRetVal: varinfo ref = ref dummyFunDec.svar
-
-let assertId = ref 0 
-let addAssert (b: exp) (extra: stmt list) : unit = 
-  incr assertId;
-  addStatement (mkStmt (If(UnOp(LNot, b, intType),
-                           mkBlock (extra @ 
-                                    [mkStmt (Return (Some (integer !assertId),
-                                                     lu))]),
-                           mkBlock [], lu)))
-
-let addSetRetVal (b: exp) (extra: stmt list) : unit = 
-  addStatement 
-    (mkStmt (If(UnOp(LNot, b, intType),
-                mkBlock (extra @ 
-                         [mkStmtOneInstr (Set(var !mainRetVal, one, lu))]),
-                mkBlock [], lu)))
-
-
-let printfFun: fundec = 
-  let fdec = emptyFunction "printf" in
-  fdec.svar.vtype <- 
-     TFun(intType, Some [ ("format", charPtrType, [])], true, []);
-  fdec
-
-
-let memsetFun: fundec = 
-  let fdec = emptyFunction "memset" in
-  fdec.svar.vtype <- 
-     TFun(voidPtrType, Some [ ("start", voidPtrType, []);
-                              ("v", intType, []);
-                              ("len", uintType, [])], false, []);
-  fdec
-
-let checkOffsetFun: fundec = 
-  let fdec = emptyFunction "checkOffset" in
-  fdec.svar.vtype <- 
-     TFun(voidType, Some [ ("start", voidPtrType, []);
-                           ("len", uintType, []);
-                           ("expected_start", intType, []);
-                           ("expected_width", intType, []);
-                           ("name", charPtrType, []) ], false, []);
-  fdec
-
-let checkSizeOfFun: fundec = 
-  let fdec = emptyFunction "checkSizeOf" in
-  fdec.svar.vtype <- 
-     TFun(voidType, Some [ ("len", uintType, []);
-                           ("expected", intType, []);
-                           ("name", charPtrType, []) ], false, []);
-  fdec
-
-
-let doPrintf format args = 
-  mkStmtOneInstr (Call(None, Lval(var printfFun.svar),
-                       (Const(CStr format)) :: args, lu))
-
-
-(* Select among the choices, each with a given weight *)
-type 'a selection = int * (unit -> 'a)
-let select (choices: 'a selection list) : 'a = 
-  (* Find the total weight *)
-  let total = List.fold_left (fun sum (w, _) -> sum + w) 0 choices in
-  if total = 0 then E.s (E.bug "Total for choices = 0\n");
-  (* Pick a random number *)
-  let thechoice = Random.int total in
-  (* Now get the choice *)
-  let rec loop thechoice = function
-      [] -> E.s (E.bug "Ran out of choices\n")
-    | (w, c) :: rest -> 
-        if thechoice < w then c () else loop (thechoice - w) rest
-  in
-  loop thechoice choices
-
-
-(* Generate a new name *)
-let nameId = ref 0
-let newName (base: string) = 
-  incr nameId;
-  base ^ (string_of_int !nameId)
-
-
-(********** Testing of SIZEOF ***********)
-
-(* The current selection of types *)
-let typeChoices : typ selection list ref = ref [] 
-
-let baseTypeChoices : typ selection list ref = ref []
-
-
-let currentNesting = ref 0
-let mkCompType (iss: bool) =  
-  if !currentNesting >= !maxNesting then (* Replace it with an int *)
-    select !baseTypeChoices
-  else begin
-    incr currentNesting;
-    let ci = 
-      mkCompInfo iss (newName "comp") 
-        (fun _ -> 
-          let nrFields = 1 + (Random.int !maxFields) in
-          let rec mkFields (i: int) =
-            if i = nrFields then [] else begin
-              let ft = select !typeChoices in
-              let fname = "f" ^ string_of_int i in
-              let fname', width = 
-                if not !useBitfields || not (isIntegralType ft) 
-                                     || (Random.int 8 >= 6) then 
-                  fname, None 
-                else begin
-                  let tw = bitsSizeOf ft in (* Assume this works for TInt *)
-                  let w = (if !useZeroBitfields then 0 else 1) + 
-                          Random.int (3 * tw / 4) in
-                  (if w = 0 then "___missing_field_name" else fname), Some w
-                end
-              in
-              (fname', ft, width, [], lu) :: mkFields (i + 1) 
-            end
-          in
-          mkFields 0)
-        []
-    in
-    decr currentNesting;
-    (* Register it with the file *)
-    addGlobal (GCompTag(ci, lu));
-    TComp(ci, [])
-  end
-
-(* Make a pointer type. They are all equal so make one to void *)
-let mkPtrType () = TPtr(TVoid([]), [])
-
-(* Make an array type. *)
-let mkArrayType () = 
-  if !currentNesting >= !maxNesting then 
-    select !baseTypeChoices
-  else begin
-    incr currentNesting;
-    let at = TArray(select !typeChoices, Some (integer (1 + (Random.int 32))),
-                    []) in
-    decr currentNesting;
-    at
-  end
-  
-
-let testSizeOf () = 
-  let doOne (i: int) = 
-(*    ignore (E.log "doOne %d\n" i); *)
-    (* Make a random type *)
-    let t = select !typeChoices in
-    (* Create a global with that type *)
-    let g = makeGlobalVar (newName "g") t in
-    addGlobal (GVar(g, {init=None}, lu));
-    addStatement (mkStmtOneInstr(Call(None, Lval(var memsetFun.svar),
-                                      [ mkAddrOrStartOf (var g); zero;
-                                        SizeOfE(Lval(var g))], lu)));
-    try
-(*      if i = 0 then ignore (E.log "0: %a\n" d_plaintype t); *)
-      let bsz = 
-        try bitsSizeOf t  (* This is what we are testing *)
-        with e -> begin
-          ignore (E.log "Exception %s caught while computing bitsSizeOf(%a)\n"
-                    (Printexc.to_string e) d_type t);
-          raise (Failure "")
-        end
-      in
-(*      ignore (E.log "1 "); *)
-      if bsz mod 8 <> 0 then begin
-        ignore (E.log "bitsSizeOf did not return a multiple of 8\n");
-        raise (Failure "");
-      end;
-(*      ignore (E.log "2 "); *)
-      (* Check the offset of all fields in there *)
-      let rec checkOffsets (lv: lval) (lvt: typ) = 
-        match lvt with
-          TComp(c, _) -> 
-            List.iter 
-              (fun f -> 
-                if f.fname <> "___missing_field_name" then 
-                  checkOffsets (addOffsetLval (Field(f, NoOffset)) lv) f.ftype)
-              c.cfields
-        | TArray (bt, Some len, _) -> 
-            let leni = 
-              match isInteger len with
-                Some i64 -> Int64.to_int i64
-              | None -> E.s (E.bug "Array length is not a constant")
-            in
-            let i = Random.int leni in
-            checkOffsets (addOffsetLval (Index(integer i, NoOffset)) lv) bt
-
-        | _ -> (* Now a base type *)
-            let _, off = lv in 
-            let start, width = bitsOffset t off in
-            let setLv (v: exp) = 
-              match lvt with
-                TFloat (FFloat, _) -> 
-                  Set((Mem (mkCast (AddrOf lv) intPtrType), NoOffset),
-                      v, lu)
-              | TFloat (FDouble, _) -> 
-                  Set((Mem (mkCast (AddrOf lv) 
-                              (TPtr(TInt(IULongLong, []), []))), NoOffset),
-                      mkCast v (TInt(IULongLong, [])), lu)
-
-              | (TPtr _ | TInt((IULongLong|ILongLong), _)) -> 
-                  Set(lv, mkCast v lvt, lu)
-              | _ -> Set(lv, v, lu)
-            in
-            let ucharPtrType = TPtr(TInt(IUChar, []), []) in
-            let s = 
-              mkStmt (Instr ([ setLv mone;
-                               Call(None, Lval(var checkOffsetFun.svar),
-                                    [ mkCast (mkAddrOrStartOf (var g))
-                                             ucharPtrType;
-                                      SizeOfE (Lval(var g));
-                                      integer start; 
-                                      integer width;
-                                      (Const(CStr(sprint 80 
-                                                    (d_lval () lv))))],lu);
-                               setLv zero])) in
-            addStatement s
-      in
-      checkOffsets (var g) t;
-(*      ignore (E.log "3 ");*)
-      (* Now check the size of *)
-      let s = mkStmtOneInstr (Call(None, Lval(var checkSizeOfFun.svar),
-                                   [ SizeOfE (Lval (var g));
-                                     integer (bitsSizeOf t);
-                                     mkString g.vname ], lu)) in
-      addStatement s;
-(*      ignore (E.log "10\n"); *)
-    with _ -> ()
-  in
-
-  (* Make the composite choices more likely *)
-  typeChoices := 
-     [ (1, mkPtrType); 
-       (5, mkArrayType);
-       (5, fun _ -> mkCompType true);
-       (5, fun _ -> mkCompType false); ]
-     @ baseTypes;
-  baseTypeChoices := baseTypes;
-  useBitfields := false;
-  maxFields := 4;
-  for i = 0 to 100 do 
-    doOne i
-  done;
-                   
-  (* Now test the bitfields. *)
-  typeChoices :=  [ (1, fun _ -> mkCompType true) ];
-  baseTypeChoices := [(1, fun _ -> TInt(IInt, []))];
-  useBitfields := true;
-
-  for i = 0 to 100 do
-    doOne i
-  done;
-
-  (* Now make it a bit more complicated *)
-  baseTypeChoices := 
-     List.map (fun ik -> (1, fun _ -> TInt(ik, []))) 
-       [IInt; ILong; IUInt; IULong ];
-  useBitfields := true;
-  for i = 0 to 100 do
-    doOne i
-  done;
-
-  (* An really complicated now *)
-  baseTypeChoices := baseTypes;
-  useBitfields := true;
-  for i = 0 to 100 do 
-    doOne i
-  done;
-
-  ()
-
-
-(* Now the main tester. Pass to it the name of a command "cmd" that when 
- * invoked will compile "testingcil.c" and run the result *)
-let createFile () = 
-
-  assertId := 0;
-  nameId := 0;
-
-  (* Start a new file *)
-  globals := [];
-  statements := [];
-
-  (* Now make a main function *)
-  main := emptyFunction "main";
-  !main.svar.vtype <- TFun(intType, None, false, []);
-  mainRetVal := makeGlobalVar "retval" intType;
-
-  addGlobal (GVar(!mainRetVal, {init=None}, lu));
-  addGlobal (GText("#include \"testcil.h\"\n"));
-  addStatement (mkStmtOneInstr(Set(var !mainRetVal, zero, lu)));
-
-  (* Add prototype for printf *)
-  addGlobal (GVar(printfFun.svar, {init=None}, lu));
-  addGlobal (GVar(memsetFun.svar, {init=None}, lu));
-
-  (* now fill in the composites and the code of main. For simplicity we add 
-   * the statements of main in reverse order *)
-
-  testSizeOf ();
-
-
-  (* Now add a return 0 at the end *)
-  addStatement (mkStmt (Return(Some (Lval(var !mainRetVal)), lu)));
-  
-  
-  (* Add main at the end *)
-  addGlobal (GFun(!main, lu));
-  !main.sbody.bstmts <- getStatements ();
-
-  (* Now build the CIL.file *)
-  let file = 
-    { fileName = "testingcil.c";
-      globals  = getGlobals ();
-      globinit = None;
-      globinitcalled = false;
-    } 
-  in
-  (* Print the file *)
-  let oc = open_out "testingcil.c" in
-  dumpFile defaultCilPrinter oc "testingcil.c" file;
-  close_out oc
-
-  
-
-
-
-(* initialization code for the tester *)
-let randomStateFile = "testcil.random"  (* The name of a file where we store 
-                                         * the state of the random number 
-                                         * generator last time *)
-let doit (command: string) = 
-  while true do
-    (* Initialize the random no generator *)
-    begin
-      try
-        let randomFile = open_in randomStateFile in
-        (* The file exists so restore the Random state *)
-        Random.set_state (Marshal.from_channel randomFile);
-        ignore (E.log "!! Restoring Random state from %s\n" randomStateFile);
-        close_in randomFile;
-        (* Leave the file there until we succeed *)
-      with _ -> begin
-        (* The file does not exist *)
-        Random.self_init ();
-        (* Save the state of the generator *)
-        let randomFile = open_out randomStateFile in
-        Marshal.to_channel randomFile (Random.get_state()) [] ;
-        close_out randomFile;
-      end
-    end;
-    createFile ();
-    (* Now compile and run the file *)
-    ignore (E.log "Running %s\n" command);
-    let err = Sys.command command in
-    if err <> 0 then
-      E.s (E.bug "Failed to run the command: %s (errcode=%d)" command err)
-    else begin
-      ignore (E.log "Successfully ran one more round. Press CTRL-C to stop\n");
-      (* Delete the file *)
-      Sys.remove randomStateFile
-    end
-  done
-
diff --git a/cil/test/small1/func.c b/cil/test/small1/func.c
deleted file mode 100644
index a0f4e4e56..000000000
--- a/cil/test/small1/func.c
+++ /dev/null
@@ -1,24 +0,0 @@
-int (*pfun1)(int (*)(int), int);
-int (*pfun2)(int (*)(int), int);
-
-typedef int (*intfun)(int);
-intfun arrfun[5];
-
-int testf(int k) {
-  return k;
-}
-
-int foo(int (*bar)(int), int n) {
-
-  pfun1 = foo;
-  pfun1 = & foo;
-  pfun1 = * * * pfun2;
-
-  pfun1 = arrfun[4];
-  
-  pfun2(* * testf, 5);
-
-  return 1;
-}
-
-
diff --git a/cil/test/small1/hello.c b/cil/test/small1/hello.c
deleted file mode 100644
index cbe8ad07a..000000000
--- a/cil/test/small1/hello.c
+++ /dev/null
@@ -1,8 +0,0 @@
-#include <stdio.h>
-
-
-
-int main() {
-  printf("Hello world\n");
-  return 0;
-}
diff --git a/cil/test/small1/init.c b/cil/test/small1/init.c
deleted file mode 100644
index 4578b5be8..000000000
--- a/cil/test/small1/init.c
+++ /dev/null
@@ -1,177 +0,0 @@
-#ifndef __NULLTERM
-#define __NULLTERM
-#define __SIZED
-#endif
-#include "testharness.h"
-
-extern int strcmp(const char*, const char*);
-
-/* run this with COMPATMODE=1 if compiling directly, since neither GCC nor 
- * MSVCC fully support the C standard */
-static char *usageplocal = "Usage";
-static char usageescape = 'C';
-
-char *usagep = "Usage non-local";
-char *usagep1 = { "Usage in a brace" };
-int  g = { 6 } ;
-
-char usages[] = "Usage string";
-char strange[] = { "several" };
-
-char *null = (void*)0;
-
-
-typedef struct s {
-  char *name;
-  int   data;
-} STR;
-
-extern int afunc(int x);
-int (*fptr)(int) = afunc;
-
-STR a[] = {
-  {"first", 0},
-  {"second", 1},
-  {& usages[2], 2},
-  { & usageescape, 3},
-  { usages, 4},
-};
-
-
-typedef struct {
-  struct {
-    char * a1[10];
-    char * a2;
-    char   strbuff[20] __NULLTERM;
-  } f1;
-  struct {
-    int * i1;
-  } f2[5] __SIZED;
-} NESTED;
-
-NESTED glob1;
-
-int glob3;
-int * glob2 = & glob3;
-
-int afunc(int a) {
-  NESTED loc1;
-  char   locbuff[30] __NULLTERM;
-  char   indexbuff[10] __SIZED;
-
-  loc1.f1.a2 = glob1.f1.a2;
-  
-  return * loc1.f2[3].i1 + (locbuff[0] - indexbuff[0]);
-}
-
-
-
-// now initialization for union
-union  {
-  struct {
-    int a;
-    int *b;
-  } u1;
-  int c;
-} uarray[] = { 1, 0, 2, 0, 3, 0 };
-
-
-// now some examples from the standard
-int z[4][3] =
-{ { 1 }, { 2 }, { 3 }, { 4 } };
-
-struct str1 { int a[3]; int b;};
-
-struct str1 w[] =
-{ { 1 }, { 2 } };
-
-
-short q[4][3][2] = {
-  { 1 } ,
-  { 2, 3 },
-  { 4, 5, 6}
-};
-
-short q1[4][3][2] = {
-  1, 0, 0, 0, 0, 0,
-  2, 3, 0, 0, 0, 0,
-  4, 5, 6, 0, 0, 0,
-};
-
-
-
-#ifdef _GNUCC
-int a1[10] = {
-  1, 3, 5, 7, 9, [6] = 8, 6, 4, 2};
-
-
-enum { member_one, member_two, member_three };
-char *nm[] = {
-  [member_two] = "member_two",
-  [member_three] = "member_three",
-};
-
-
-#endif
-
-
-
-#define ERROR(n) { printf("Incorrect init: %d\n", n); exit(1); }
-// Test the initialization
-int main() {
-  int i;
-
-  struct str1 astr = w[0];
-    
-  if(strcmp(a[0].name, "first")) {
-    ERROR(0);
-  }
-  if(sizeof(uarray) / sizeof(uarray[0]) != 3) {
-    ERROR(1);
-  } 
-  if(uarray[2].u1.a != 3) {
-    ERROR(2);
-  }
-
-  if(z[2][0] != 3 ||
-     z[2][1] != 0) {
-    ERROR(4);
-  }
-
-  if(sizeof(w) / sizeof(w[0]) != 2 ||
-     w[1].a[0] != 2) {
-    ERROR(5);
-  }
-  {
-    short * ps = (short*)q, * ps1 = (short*)q1;
-    for(i=0;i<sizeof(q) / sizeof(short); i++, ps ++, ps1 ++) {
-      if(*ps != *ps1) {
-        ERROR(6);
-      }
-    }
-  }
-
-#ifdef _GNUCC
-  if(a1[1] != 3 ||
-     a1[5] != 0 ||
-     a1[6] != 8 ||
-     a1[7] != 6) {
-    ERROR(7);
-  }
-
-
-  if(strcmp(nm[1], "member_two") ||
-     strcmp(nm[2], "member_three") ||
-     sizeof(nm) != 3 * sizeof(nm[0])) {
-    ERROR(8);
-  }
-
-#endif
-
-  
-  printf("Initialization test succeeded\n");
-  return 0;
-}
-
-
-
diff --git a/cil/test/small1/init1.c b/cil/test/small1/init1.c
deleted file mode 100644
index e6334df9d..000000000
--- a/cil/test/small1/init1.c
+++ /dev/null
@@ -1,17 +0,0 @@
-extern void exit(int);
-
-struct {
-  struct {
-    int *f1;
-    int *f2;
-  } s1;
-  struct {
-    int *f3;
-  } s2;
-} memory[10] = { 1 };
-
-int main() {
-  if(memory[0].s1.f1 != (int*)1)
-    exit(1);
-  exit(0);
-}
diff --git a/cil/test/small1/testharness.h b/cil/test/small1/testharness.h
deleted file mode 100644
index a1057e343..000000000
--- a/cil/test/small1/testharness.h
+++ /dev/null
@@ -1,17 +0,0 @@
-#ifndef printf
-  /* sm: this works with gcc-2.95 */
-  extern int printf(const char * format, ...);
-# ifdef CCURED
-   #pragma ccuredvararg("printf", printf(1))
-# endif
-#else
-  /* but in gcc-3 headers it's a macro.. */
-  #include <stdio.h>        /* printf */
-#endif
-
-extern void exit(int);
-
-/* Always call E with a non-zero number */
-#define E(n) { printf("Error %d\n", n); exit(n); }
-#define SUCCESS { printf("Success\n"); exit(0); }
-
diff --git a/cil/test/small1/vararg1.c b/cil/test/small1/vararg1.c
deleted file mode 100644
index cc710a7b7..000000000
--- a/cil/test/small1/vararg1.c
+++ /dev/null
@@ -1,47 +0,0 @@
-
-/* VA.C: The program below illustrates passing a variable
- * number of arguments using the following macros:
- *      va_start            va_arg              va_end
- *      va_list             va_dcl (UNIX only)
- */
-
-#include <stdio.h>
-#include <stdarg.h>
-int average( int first, ... );
-union vararg_average {
-  int ints;                   /* We only pass ints to this one */
-};
-
-#include "testharness.h"
-
-int main( void )
-{
-   /* Call with 3 integers (-1 is used as terminator). */
-  if(average( 2, 3, 4, -1 ) != 3) E(1);
-  if(average( 5, 7, 9, 11, 13, -1 ) != 9) E(2);
-  if(average( -1 ) != 0) E(3);
-
-   SUCCESS;
-}
-
-
-
-/* Returns the average of a variable list of integers. */
-int average( int first, ... )
-{
-   int count = 0, sum = 0, i = first;
-   va_list marker;
-
-   va_start( marker, first );     /* Initialize variable arguments. */
-   while( i != -1 )
-   {
-      sum += i;
-      count++;
-      i = va_arg( marker, int);
-   }
-   va_end( marker );              /* Reset variable arguments.      */
-   return( sum ? (sum / count) : 0 );
-}
-
-// Put this intentionally at the end
-#pragma ccuredvararg("average", sizeof(union vararg_average))
diff --git a/cil/test/small1/wchar1.c b/cil/test/small1/wchar1.c
deleted file mode 100644
index 3306e571b..000000000
--- a/cil/test/small1/wchar1.c
+++ /dev/null
@@ -1,24 +0,0 @@
-#include "testharness.h"
-#include <stddef.h>
-
-int main() {
-  wchar_t *wbase = L"Hello" L", world";
-  char * w = (char *)wbase;
-  char * s =  "Hello" ", world";
-  int i;
-
-  // See if this is little or big endian
-  short foo = 0x0011;
-  char little_endian = (int) * (char*)&foo;
-
-  for (i=0; i < 10; i++) {
-    if (w[i * sizeof(wchar_t)] != (little_endian ? s[i] : 0)) {
-      E(1); 
-    } 
-    if (w[i * sizeof(wchar_t) + (sizeof(wchar_t)-1)]
-        != (little_endian ? 0 : s[i])) {
-      E(2);
-    } 
-  }
-  SUCCESS;
-}
diff --git a/configure b/configure
index 2b53b4409..d8c63fe8e 100755
--- a/configure
+++ b/configure
@@ -163,14 +163,6 @@ LIBMATH=-lm
 EOF
 fi
 
-# Extract and configure Cil
-
-(cd cil && ./configure)
-
-# Extract 'ARCHOS' info from Cil configuration
-
-grep '^ARCHOS=' cil/config.log >> Makefile.config
-
 # Summarize configuration
 
 if test "$target" = "manual"; then
-- 
GitLab