## 20 Changes

- February 5, 2007: Released version 1.3.6 (Subversion revision 9211)
- February 2, 2007: Improved the way CIL gets configured for the actual definitions of `size_t` and `wchar_t`.
- February 1, 2007: Fixed the parser to support the unused attribute on labels. For now, we just drop this attribute since Rmtmps will remove unused labels anyways. Thanks to Peter Hawkins for the patch.
- January 18, 2007: Require the destination of a `Call` to have the same type as the function's return type, even if it means inserting a temporary. To get the old behavior, set `Cabs2cil.doCollapseCallCast` to true as described in Section 7.3.
- January 17, 2007: Fix for `__builtin_offsetof` when the field name is also a typedef name.
- January 17, 2007: Fixed Cil.loadBinaryFile (Sourceforge bug #1548894). You should only use loadBinaryFile if no other code has been loaded or generated in the current CIL process, since loadBinaryFile needs to load some global state.
- December 18, 2006: The `--stats` flag now gets the CPU speed at runtime rather than configure-time, so binary executables can be moved to different computers.
- December 14, 2006: Fixed various warnings and errors on 64-bit architectures.
- November 26, 2006: Christoph Spiel added “`--no`” options to many of CIL's command-line flags.
- November 21, 2006: Merged `gccBuiltins` and `msvcBuiltins` into a single table Cil.builtinFunctions that is initialized by Cil.initCIL.
- October 28, 2006: Added the field `vdescr` to the Cil.varinfo struct to remember what value is stored in certain CIL-introduced temporary variables. For example, if CIL adds a temporary to store the result of `foo(a,b)`, then the description will be “foo(a,b)”. The new printer Cil.descriptiveCilPrinter will substitute descriptions for the names of temporaries. The result is not necessarily valid C, but it may let you produce more helpful error messages in your analysis tools: “The value foo(a,b) may be tainted” vs. “The value __cil_tmp29 may be tainted.”
- October 27, 2006: Fixed a bug with duplicate entries in the statement list of Switch nodes, and forbade duplicate `default` cases.
- October 12, 2006: Added a new function Cil.expToAttrParam that attempts to convert an expression into a attribute parameter.
- October 12, 2006: Added an attribute with the length of the array, when array types of formal arguments are converted to pointer types.
- September 29, 2006: Benjamin Monate fixed a bug in compound local initializers that was causing duplicate code to be added.
- August 9, 2006: Changed the patcher to print “`#line nnn`” directives instead of “`# nnn`”.
- August 6, 2006: Joseph Koshy patched `./configure` for FreeBSD on amd64.
- July 27, 2006: CIL files now include the prototypes of builtin functions (such as `__builtin_va_arg`). This preserves the invariant that every function call has a corresponding function or function prototype in the file. However, the prototypes of builtins are not printed in the output files.
- July 23, 2006: Incorporated some fixes for the constant folding for lvalues, and fixed grammatical errors. Thanks to Christian Stork.
- July 23, 2006: Changed the way ./configure works. We now generate the file Makefile.features to record the configuration features. This is because autoconf does not work properly with multiline substitutions.
- July 21, 2006: Cleaned up the printing of some Lvals. Things that were printed as “(*i)” before are now printed simply as “*i” (no parentheses). However, this means that when you use pLval to print lvalues inside expressions, you must take care about parentheses yourself. Thanks to Benjamin Monate for pointing this out.
- July 21, 2006: Added new hooks to the Usedef and Dataflow.BackwardsTransfer APIs. Code that uses these will need to be changed slightly. Also, updated the Cfg code to handle noreturn functions.
- July 17, 2006: Fix parsing of attributes on bitfields and empty attribute lists. Thanks to Peter Hawkins.
- July 10, 2006: Fix Makefile problem for FreeBSD. Thanks to Joseph Koshy for the patch.
- June 25, 2006: Extended the inline assembly to support named arguments, as added in gcc 3.0. This changes the types of the input and output lists from “`(string * lval) list`” to “`(string option * string * lval) list`”. Some existing code will need to be modified accordingly.
- June 11, 2006: Removed the function `Cil.foldLeftCompoundAll`. Use instead Cil.foldLeftCompound with `implicit:true`.
- June 9, 2006: Extended the definition of the cilVisitor for initializers to pass more information around. This might result in backward incompatibilities with code that uses the visitor for initializers.
- June 2, 2006: Added `--commPrintLnSparse` flag.
- June 1, 2006: Christian Stork provided some fixes for the handling of variable argument functions.
- June 1, 2006: Added support for x86 performance counters on 64-bit processors. Thanks to tbergen for the patch.
- May 23, 2006: Benjamin Monate fixed a lexer bug when a preprocessed file is missing a final newline.
- May 23, 2006: Fix for `typeof(``e``)` when e has type `void`.
- May 20, 2006: Released version 1.3.5 (Subversion revision 8093)
- May 19, 2006: `Makefile.cil.in`/`Makefile.cil` have been renamed `Makefile.in`/`Makefile`. And `maincil.ml` has been renamed `main.ml`.
- May 18, 2006: Added a new module Cfg to compute the control-flow graph. Unlike the older Cil.computeCFGInfo, the new version does not modify the code.
- May 18, 2006: Added several new analyses: reaching definitions, available expressions, liveness analysis, and dead code elimination. See Section 8.
- May 2, 2006: Added a flag `--noInsertImplicitCasts`. When this flag is used, CIL code will only include casts inserted by the programmer. Implicit coercions are not changed to explicit casts.
- April 16, 2006: Minor improvements to the `--stats` flag (Section 7.2). We now use Pentium performance counters by default, if your processor supports them.
- April 10, 2006: Extended `machdep.c` 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.
- April 6, 2006: 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.
- April 6, 2006: Fix for bitfields in the SFI module.
- April 6, 2006: Various fixes for gcc attributes. `packed`, `section`, and `always_inline` attributes are now parsed correctly. Also fixed printing of attributes on enum types.
- March 30, 2006: Fix for `rmtemps.ml`, which deletes unused inline functions. When in `gcc` mode CIL now leaves all inline functions in place, since `gcc` treats these as externally visible.
- March 3, 2006: Assume inline assembly instructions can fall through for the purposes of adding return statements. Thanks to Nathan Cooprider for the patch.
- February 27, 2006: Fix for extern inline functions when the output of CIL is fed back into CIL.
- January 30, 2006: Fix parsing of `switch` without braces.
- January 30, 2006: Allow `$' to appear in identifiers.
- January 13, 2006: Added support for gcc's alias attribute on functions. See Section 16.2, item 8.
- December 9, 2005: 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.
- December 1, 2005: Major rewrite of the ext/callgraph module.
- December 1, 2005: Preserve enumeration constants in CIL. Default is the old behavior to replace them with integers.
- November 30, 2005: Added support for many GCC `__builtin` functions.
- November 30, 2005: Added the EXTRAFEATURES configure option, making it easier to add Features to the build process.
- November 23, 2005: In MSVC mode do not remove any locals whose name appears as a substring in an inline assembly.
- November 23, 2005: Do not add a return to functions that have the noreturn attribute.
- November 22, 2005: Released version 1.3.4
- November 21, 2005: Performance and correctness fixes for the Points-to Analysis module. Thanks to Christoph Spiel for the patches.
- October 5, 2005: CIL now builds on SPARC/Solaris. Thanks to Nick Petroni and Remco van Engelen for the patches.
- September 26, 2005: CIL no longer uses the ``-I-`' flag by default when preprocessing with gcc.
- August 24, 2005: Added a command-line option “--forceRLArgEval” 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.
- August 9, 2005: Fixed merging when there are more than 20 input files.
- August 3, 2005: When merging, it is now an error to declare the same global variable twice with different initializers.
- July 27, 2005: Fixed bug in transparent unions.
- July 27, 2005: Fixed bug in collectInitializer. Thanks to Benjamin Monate for the patch.
- July 26, 2005: Better support for extended inline assembly in gcc.
- July 26, 2005: 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, “`__builtin_offsetof(t, field)`” is rewritten as “`&((t*)0)->field`”, the traditional way of calculating an offset.
- July 18, 2005: Fixed bug in the constant folding of shifts when the second argument was negative or too large.
- July 18, 2005: Fixed bug where casts were not always inserted in function calls.
- June 10, 2005: Fixed bug in the code that makes implicit returns explicit. We weren't handling switch blocks correctly.
- June 1, 2005: Released version 1.3.3
- May 31, 2005: Fixed handling of noreturn attribute for function pointers.
- May 30, 2005: Fixed bugs in the handling of constructors in gcc.
- May 30, 2005: Fixed bugs in the generation of global variable IDs.
- May 27, 2005: 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.
- May 27, 2005: Export the plainCilPrinter, for debugging.
- May 27, 2005: Fixed bug with printing of const attribute for arrays.
- May 27, 2005: 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.
- May 27, 2005: Fixed bug in type comparisons using TBuiltin_va_list.
- May 27, 2005: Improved the constant folding in array lengths and case expressions.
- May 27, 2005: Added the `__builtin_frame_address` to the set of gcc builtins.
- May 27, 2005: Added the CIL project to SourceForge.
- April 23, 2005: The cattr field was not visited.
- March 6, 2005: Debian packaging support
- February 16, 2005: Merger fixes.
- February 11, 2005: Fixed a bug in `--dopartial`. Thanks to Nathan Cooprider for this fix.
- January 31, 2005: Make sure the input file is closed even if a parsing error is encountered.
- January 11, 2005: Released version 1.3.2
- January 11, 2005: Fixed printing of integer constants whose integer kind is shorter than an int.
- January 11, 2005: Added checks for negative size arrays and arrays too big.
- January 10, 2005: Added support for GCC attribute “volatile” for tunctions (as a synonim for noreturn).
- January 10, 2005: Improved the comparison of array sizes when comparing array types.
- January 10, 2005: Fixed handling of shell metacharacters in the cilly command lione.
- January 10, 2005: Fixed dropping of cast in initialization of local variable with the result of a function call.
- January 10, 2005: Fixed some structural comparisons that were broken in the Ocaml 3.08.
- January 10, 2005: Fixed the `unrollType` function to not forget attributes.
- January 10, 2005: Better keeping track of locations of function prototypes and definitions.
- January 10, 2005: Fixed bug with the expansion of enumeration constants in attributes.
- October 18, 2004: Fixed a bug in cabsvisit.ml. CIl would wrap a BLOCK around a single atom unnecessarily.
- August 7, 2004: Released version 1.3.1
- August 4, 2004: Fixed a bug in splitting of structs using `--dosimplify`
- July 29, 2004: 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.
- July 28, 2004: Ocaml version 3.08 is required. Numerous small changes while porting to Ocaml 3.08.
- July 7, 2004: Released version 1.2.6
- July 2, 2004: Character constants such as `'c'` should have type `int`, not `char`. Added a utility function `Cil.charConstToInt` that sign-extends chars greater than 128, if needed.
- July 2, 2004: 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 `int`.
- June 13, 2004: Added the field `sallstmts` to a function description, to hold all statements in the function.
- June 13, 2004: Added new extensions for data flow analyses, and for computing dominators.
- June 10, 2004: Force initialization of CIL at the start of Cabs2cil.
- June 9, 2004: Added support for GCC `__attribute_used__`
- April 7, 2004: Released version 1.2.5
- April 7, 2004: 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.
- April 7, 2004: Fixed a bug in the driver. The temporary files are deleted by the Perl script before the CL compiler gets to them?
- April 7, 2004: Added the - form of arguments to the MSVC driver.
- April 7, 2004: Added a few more GCC-specific string escapes, (, [, {, %, E.
- April 7, 2004: Fixed bug with continuation lines in MSVC.
- April 6, 2004: Fixed embarassing bug in the parser: the precedence of casts and unary operators was switched.
- April 5, 2004: 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.
- April 5, 2004: 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.
- March 11, 2004 : Fixed a bug in the Cil.copyFunction function. The new local variables were not getting fresh IDs.
- March 5, 2004: 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.
- February 20, 2004: Released version 1.2.4
- February 15, 2004: Changed the parser to allow extra semicolons after field declarations.
- February 14, 2004: Changed the Errormsg functions: error, unimp, bug to not raise an exception. Instead they just set Errormsg.hadErrors.
- February 13, 2004: Change the parsing of attributes to recognize enumeration constants.
- February 10, 2004: In some versions of `gcc` the identifier _{thread is an identifier and in others it is a keyword. Added code during configuration to detect which is the case.
- January 7, 2004: Released version 1.2.3
- January 7, 2004: 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.
- December 30, 2003 : Extended the `cilly` command to understand better linker command options `-lfoo`.
- December 5, 2003: Added markup commands to the pretty-printer module. Also, changed the “@<” left-flush command into “@''.
- December 4, 2003: 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.
- December 3, 2003: Added support for structured exception handling extensions for the Microsoft compilers.
- December 1, 2003: Fixed a Makefile bug in the generation of the Cil library (e.g., `cil.cma`) that was causing it to be unusable. Thanks to KEvin Millikin for pointing out this bug.
- November 26, 2003: Added support for linkage specifications (extern “C”).
- November 26, 2003: Added the ocamlutil directory to contain some utilities shared with other projects.
- November 25, 2003: Released version 1.2.2
- November 24, 2003: Fixed a bug that allowed a static local to conflict with a global with the same name that is declared later in the file.
- November 24, 2003: Removed the `--keep` option of the `cilly` driver and replaced it with `--save-temps`.
- November 24, 2003: Added printing of what CIL features are being run.
- November 24, 2003: Fixed a bug that resulted in attributes being dropped for integer types.
- November 11, 2003: Fixed a bug in the visitor for enumeration definitions.
- October 24, 2003: Fixed a problem in the configuration script. It was not recognizing the Ocaml version number for beta versions.
- October 15, 2003: Fixed a problem in version 1.2.1 that was preventing compilation on OCaml 3.04.
- September 17, 2003: Released version 1.2.1.
- September 7, 2003: Redesigned the interface for choosing `#line` directive printing styles. Cil.printLn and Cil.printLnComment have been merged into Cil.lineDirectiveStyle.
- August 8, 2003: Do not silently pad out functions calls with arguments to match the prototype.
- August 1, 2003: 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
- July 14, 2003: 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
- July 8, 2003: Fixed some of the __alignof computations. Fixed bug in the designated initializers for arrays (Array.get error).
- July 8, 2003: Fixed infinite loop bug (Stack Overflow) in the visitor for __alignof.
- July 8, 2003: 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.
- July 7, 2003: New Escape module provides utility functions for escaping characters and strings in accordance with C lexical rules.
- July 2, 2003: 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.
- June 28, 2003: In the Formatparse module, Eric Haugh found and fixed a bug in the handling of lvalues of the form “lv->field.more”.
- June 28, 2003: Extended the handling of gcc command lines arguments in the Perl scripts.
- June 23, 2003: 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 “`referenced`” fields directly is no longer supported.
- June 17, 2003: Reimplement internal utility routine `Cil.escape_char`. Faster and better.
- June 14, 2003: Implemented support for `__attribute__s` 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
- May 30, 2003: Released the regression tests.
- May 28, 2003: Released version 1.1.2
- May 26, 2003: Add the `simplify` module that compiles CIL expressions into simpler expressions, similar to those that appear in a 3-address intermediate language.
- May 26, 2003: Various fixes and improvements to the pointer analysis modules.
- May 26, 2003: Added optional consistency checking for transformations.
- May 25, 2003: Added configuration support for big endian machines. Now Cil.little_endian can be used to test whether the machine is little endian or not.
- May 22, 2003: Fixed a bug in the handling of inline functions. The CIL merger used to turn these functions into “static”, which is incorrect.
- May 22, 2003: Expanded the CIL consistency checker to verify undesired sharing relationships between data structures.
- May 22, 2003: Fixed bug in the `oneret` CIL module: it was mishandling certain labeled return statements.
- May 5, 2003: Released version 1.0.11
- May 5, 2003: OS X (powerpc/darwin) support for CIL. Special thanks to Jeff Foster, Andy Begel and Tim Leek.
- April 30, 2003: Better description of how to use CIL for your analysis.
- April 28, 2003: Fixed a bug with `--dooneRet` and `--doheapify`. Thanks, Manos Renieris.
- April 16, 2003: 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:
  - `--keepmerged` for the single-file merge of all sources
  - `--keep=<``dir``>` for various other CIL and CCured output files
  - `--save-temps` for various gcc intermediate files; MSVC has no equivalent option
  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 “`foocured.c`” now appears in “`foo.cured.c`”.
- April 7, 2003: Changed the representation of the Cil.GVar 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 Cil.visitCilFileSameGlobals and the Cil.GVar was the only global that could not be updated in place.
- April 6, 2003: Reimplemented parts of the cilly.pl script to make it more robust in the presence of complex compiler arguments.
- March 10, 2003: Released version 1.0.9
- March 10, 2003: 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.
- February 18, 2003: Fixed a bug in logwrites that was causing it to produce invalid C code on writes to bitfields. Thanks, David Park.
- February 15, 2003: Released version 1.0.8
- February 15, 2003: PDF versions of the manual and API are available for those who would like to print them out.
- February 14, 2003: CIL now comes bundled with alias analyses.
- February 11, 2003: Added support for adding/removing options from `./configure`.
- February 3, 2003: Released version 1.0.7
- February 1, 2003: Some bug fixes in the handling of variable argument functions in new versions of `gcc` And `glibc`.
- January 29, 2003: Added the logical AND and OR operators. Exapanded the translation to CIL to handle more complicated initializers (including those that contain logical operators).
- January 28, 2003: Released version 1.0.6
- January 28, 2003: Added support for the new handling of variable-argument functions in new versions of `glibc`.
- January 19, 2003: Added support for declarations in interpreted constructors. Relaxed the semantics of the patterns for variables.
- January 17, 2003: Added built-in prototypes for the gcc built-in functions. Changed the `pGlobal` method in the printers to print the carriage return as well.
- January 9, 2003: 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.
- January 9, 2003: 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.
- January 6, 2003: Released version 1.0.5
- January 4, 2003: 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.
- January 3, 2003: Extended the `rmtmps` module to also remove unused labels that are generated in the conversion to CIL. This reduces the number of warnings that you get from `cgcc` afterwards.
- December 17, 2002: 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 `sizeof("foo bar")` and `sizeof((char*)"foo bar")` (the former is 8 and the latter is 4).
- December 8, 2002: 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.
- December 5, 2002: Fixed visitor bugs that were causing some attributes not to be visited and some queued instructions to be dropped.
- December 3, 2002: Added a transformation to catch stack overflows. Fixed the heapify transformation.
- October 14, 2002: CIL is now available under the BSD license (see the License section or the file LICENSE). Released version 1.0.4
- October 9, 2002: More FreeBSD configuration changes, support for the GCC-ims `__signed` and `__volatile`. Thanks to Axel Simon for pointing out these problems. Released version 1.0.3
- October 8, 2002: FreeBSD configuration and porting fixes. Thanks to Axel Simon for pointing out these problems.
- September 10, 2002: Fixed bug in conversion to CIL. Now we drop all “const” qualifiers from the types of locals, even from the fields of local structures or elements of arrays.
- September 7, 2002: Extended visitor interface to distinguish visitng offsets inside lvalues from offsets inside initializer lists.
- September 7, 2002: Released version 1.0.1
- September 6, 2002: Extended the patcher with the `ateof` flag.
- September 4, 2002: Fixed bug in the elaboration to CIL. In some cases constant folding of `||` and `&&` was computed wrong.
- September 3, 2002: Fixed the merger documentation.
- August 29, 2002: Released version 1.0.0.
- August 29, 2002: Started numbering versions with a major nubmer, minor and revisions. Released version 1.0.0.
- August 25, 2002: Fixed the implementation of the unique identifiers for global variables and composites. Now those identifiers are globally unique.
- August 24, 2002: Added to the machine-dependent configuration the `sizeof` `void`. It is 1 on gcc and 0 on MSVC. Extended the implementation of `Cil.bitsSizeOf` to handle this (it was previously returning an error when trying to compute the size of `void`).
- August 24, 2002: 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.
- August 22, 2002: Apply a patch from Richard H. Y. to support FreeBSD installations. Thanks, Richard!
- August 12, 2002: 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.
- May 25, 2002: Added interpreted constructors and destructors.
- May 17, 2002: Changed the representation of functions to move the “inline” information to the varinfo. This way we can print the “inline” even in declarations which is what gcc does.
- May 15, 2002: Changed the visitor for initializers to make two tail-recursive passes (the second is a `List.rev` and only done if one of the initializers change). This prevents `Stack_Overflow` for large initializers. Also improved the processing of initializers when converting to CIL.
- May 15, 2002: Changed the front-end to allow the use of `MSVC` mode even on machines that do not have MSVC. The machine-dependent parameters for GCC will be used in that case.
- May 11, 2002: Changed the representation of formals in function types. Now the function type is purely functional.
- May 4, 2002: Added the function Cil.visitCilFileSameGlobals and changed Cil.visitCilFile to be tail recursive. This prevents stack overflow on huge files.
- February 28, 2002: Changed the significance of the `CompoundInit` in Cil.init to allow for missing initializers at the end of an array initializer. Added the API function Cil.foldLeftCompoundAll.