<!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=US-ASCII">
<META name="GENERATOR" content="hevea 1.10">

<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="htoc57">20</A>&#XA0;&#XA0;Changes</H2><P><A NAME="sec-changes"></A></P><UL CLASS="itemize"><LI CLASS="li-itemize">
<B>April 24, 2009</B>: <B>Released version 1.3.7</B> (Subversion
revision 10727). Includes change below and other miscellaneous bug fixes.
</LI><LI CLASS="li-itemize"><B>April 22, 2009</B>: <TT>ocamlbuild</TT> make target added (thanks
to Gabriel Kerneis).
</LI><LI CLASS="li-itemize"><B>April 21, 2009</B>: <TT>__builtin_va_arg_pack</TT> support:
calls to this builtin need to remain as the last argument to a
function call. So to prevent CIL&#X2019;s usual rewriting, we internally
represent calls to <TT>__builtin_va_arg_pack</TT> as
<TT>sizeof(__builtin_va_arg_pack)</TT>&#X2026;</LI><LI CLASS="li-itemize"><B>April 21, 2009</B>: <TT>_Bool</TT> support, thanks to patches
from Christopher Ian Stern (Sourceforge bug #1497763).<P>This leads to the addition of a new integer kind, <TT>IBool</TT> 
which you might have to handle in some of your patterns. Note also, for
those not familiar with <TT>_Bool</TT>, that casts/conversion to <TT>_Bool</TT>
give the value 1 for non-zero values, and 0 otherwise (i.e. 
<TT>(_Bool)x</TT> behaves like <TT>x </TT><TT>=</TT><TT> 0</TT>).</P></LI><LI CLASS="li-itemize"><B>April 20, 2009</B>: Update builtin support, including
__builtin_strlen (Sourceforge bug #1873374), __builtin_choose_expr,
__builtin_types_compatible_p (Sourceforge bug #1852730).
For the latter two, we evaluate them in CIL (in line with the earlier handling
of __builtin_constant_p).<P>Note that as part of these fixes, mkAddrOf no longer replaces
<TT>&amp;a[0]</TT> with <TT>a</TT>, as this can break <TT>typeof</TT> (Sourceforge bug
#1852730 involves a use of <TT>typeof(&amp;a[0])</TT>).</P><P>Typo fixes from Gabriel Kerneis.</P></LI><LI CLASS="li-itemize"><B>April 17, 2009</B>: Update extern inline handling to match
current gcc versions (Sourceforge bug #1689503): the actual
definition is always preferred over the extern inline one. CIL
handles this by suppressing the extern inline definition (replacing
it by a declaration) if it sees a real definition. However, if no
real definition exists, you will get a CIL varinfo for an inline
function with storage class extern&#X2026;<P>You can revert to CIL&#X2019;s previous handling of extern inline by setting
<TT>oldstyleExternInline</TT> to true.
</P></LI><LI CLASS="li-itemize"><B>April 16, 2009</B>: Add allStmts function to cfg.ml, and
remove public visibility of nodeList and numNodes (Sourceforge bug
#1819746).
</LI><LI CLASS="li-itemize"><B>April 15, 2009</B>: Fix Sourceforge bugs #2265867 (bad constant
folding of unary minus), #2134504 (truncation warning), #1811676 (typo).
</LI><LI CLASS="li-itemize"><B>April 13, 2009</B>: Recognize gcc&#X2019;s -m32 and -m64 flags that select
between 32 and 64 bit targets.
</LI><LI CLASS="li-itemize"><B>April 8, 2009</B>: Rename libcil.a to libcil.o (ocaml 3.11 forces
us to use the correct extension).
</LI><LI CLASS="li-itemize"><B>April 7, 2009</B>: Add LLVM bitcode generator (partial C support, target
32-bit x86 only).
</LI><LI CLASS="li-itemize"><B>April 7, 2009</B>: Support enums over greater-than-int types (gcc
extension).
</LI><LI CLASS="li-itemize"><B>September 19, 2008</B>: Remove excess newlines in warnings and errors.
</LI><LI CLASS="li-itemize"><B>August 30, 2008</B>: Added an install-findlib Make target for
ocamlfind. Thanks to ploc for the patch.
</LI><LI CLASS="li-itemize"><B>May 28, 2008</B>: Cross-compilation support: ability to
select a machine model specified in an environment variable (CIL_MACHINE).
See Section&#XA0;<A HREF="cil007.html#sec-cilmachine">7.4</A> for details.
</LI><LI CLASS="li-itemize"><B>July 2, 2008</B>: Add a <TT>--gcc</TT> option to cilly to tell it to use
a particular version of gcc (useful for cross-compilation environments).
</LI><LI CLASS="li-itemize"><B>February 14, 2008</B>: Fixed a bug in temporary file
creation. Thanks to J. Aaron Pendergrass for the patch.
</LI><LI CLASS="li-itemize"><B>November 30, 2007</B>: Fixed a bug in assignment to lvalues that
depend on themselves.
</LI><LI CLASS="li-itemize"><B>April 4, 2007</B>: Benjamin Monate fixed a bug in
<A HREF="api/Cfg.html">Cfg</A> for empty loop bodies.
</LI><LI CLASS="li-itemize"><B>March 29, 2007</B>: Polyvios Pratikakis fixed a bug in 
<TT>src/ext/pta/uref.ml</TT>.
</LI><LI CLASS="li-itemize"><B>March 15, 2007</B>: Added support for
<TT>__attribute__((aligned))</TT> and
<TT>__attribute__((packed))</TT>.
</LI><LI CLASS="li-itemize"><B>March 7, 2007</B>: <TT>typeOf(StartOf _)</TT> now preserves the
attributes of the array.
</LI><LI CLASS="li-itemize"><B>February 22, 2007</B>: Added an inliner (ext/inliner.ml)
</LI><LI CLASS="li-itemize"><B>February 21, 2007</B>: We now constant-fold bitfield
expressions. Thanks to Virgile Prevosto for the patch.
</LI><LI CLASS="li-itemize"><B>February 13, 2007</B>: gcc preprocessor arguments passed
using <TT>-Wp</TT> are now used only during initial preproccessing, not
for the preprocessing after CIL. This fixes problems in the Linux
makefiles with dependency generation.
</LI><LI CLASS="li-itemize"><B>February 6, 2007</B>: Fixed <A HREF="api/Cil.html#VALparseInt">Cil.parseInt</A> for non-32
bit architectures.
</LI><LI CLASS="li-itemize"><B>February 5, 2007</B>: <B>Released version 1.3.6</B> (Subversion
revision 9211)
</LI><LI CLASS="li-itemize"><B>February 2, 2007</B>: Improved the way CIL gets configured for the
actual definitions of <TT>size_t</TT> and <TT>wchar_t</TT>. 
</LI><LI CLASS="li-itemize"><B>February 1, 2007</B>: 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.
</LI><LI CLASS="li-itemize"><B>January 18, 2007</B>: Require the destination of a <TT>Call</TT> to
have the same type as the function&#X2019;s return type, even if it means
inserting a temporary. To get the old behavior, set
<TT>Cabs2cil.doCollapseCallCast</TT> to true as described in
Section&#XA0;<A HREF="cil007.html#sec-cilly-internal-options">7.3</A>.
</LI><LI CLASS="li-itemize"><B>January 17, 2007</B>: Fix for <TT>__builtin_offsetof</TT> when
the field name is also a typedef name.
</LI><LI CLASS="li-itemize"><B>January 17, 2007</B>: Fixed <A HREF="api/Cil.html#VALloadBinaryFile">Cil.loadBinaryFile</A>
(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.
</LI><LI CLASS="li-itemize"><B>December 18, 2006</B>: The <TT>--stats</TT> flag now gets the CPU
speed at runtime rather than configure-time, so binary executables
can be moved to different computers.
</LI><LI CLASS="li-itemize"><B>December 14, 2006</B>: Fixed various warnings and errors on
64-bit architectures.
</LI><LI CLASS="li-itemize"><B>November 26, 2006</B>: Christoph Spiel added &#X201C;<TT>--no</TT>&#X201D;
options to many of CIL&#X2019;s command-line flags.
</LI><LI CLASS="li-itemize"><B>November 21, 2006</B>: Merged <TT>gccBuiltins</TT> and
<TT>msvcBuiltins</TT> into a single table <A HREF="api/Cil.html#VALbuiltinFunctions">Cil.builtinFunctions</A>
that is initialized by <A HREF="api/Cil.html#VALinitCIL">Cil.initCIL</A>.
</LI><LI CLASS="li-itemize"><B>October 28, 2006</B>: Added the field <TT>vdescr</TT> to the
<A HREF="api/Cil.html#TYPEvarinfo">Cil.varinfo</A> 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 <TT>foo(a,b)</TT>, then the
description will be &#X201C;foo(a,b)&#X201D;. The new printer
<A HREF="api/Cil.html#VALdescriptiveCilPrinter">Cil.descriptiveCilPrinter</A> 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: &#X201C;The value foo(a,b) may be tainted&#X201D; vs. &#X201C;The
value __cil_tmp29 may be tainted.&#X201D;
</LI><LI CLASS="li-itemize"><B>October 27, 2006</B>: Fixed a bug with duplicate entries in
the statement list of Switch nodes, and forbade duplicate
<TT>default</TT> cases.
</LI><LI CLASS="li-itemize"><B>October 12, 2006</B>: Added a new function <A HREF="api/Cil.html#VALexpToAttrParam">Cil.expToAttrParam</A>
that attempts to convert an expression into a attribute parameter. 
</LI><LI CLASS="li-itemize"><B>October 12, 2006</B>: Added an attribute with the length of the array,
when array types of formal arguments are converted to pointer types.
</LI><LI CLASS="li-itemize"><B>September 29, 2006</B>: Benjamin Monate fixed a bug in compound
local initializers that was causing duplicate code to be added.
</LI><LI CLASS="li-itemize"><B>August 9, 2006</B>: Changed the patcher to print &#X201C;<TT>#line
nnn</TT>&#X201D; directives instead of &#X201C;<TT># nnn</TT>&#X201D;.
</LI><LI CLASS="li-itemize"><B>August 6, 2006</B>: Joseph Koshy patched <TT>./configure</TT> for
FreeBSD on amd64.
</LI><LI CLASS="li-itemize"><B>July 27, 2006</B>: CIL files now include the prototypes of
builtin functions (such as <TT>__builtin_va_arg</TT>). 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.
</LI><LI CLASS="li-itemize"><B>July 23, 2006</B>: Incorporated some fixes for the constant folding
for lvalues, and fixed grammatical errors. Thanks to Christian Stork.
</LI><LI CLASS="li-itemize"><B>July 23, 2006</B>: 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.
</LI><LI CLASS="li-itemize"><B>July 21, 2006</B>: Cleaned up the printing of some Lvals. Things that
were printed as &#X201C;(*i)&#X201D; before are now printed simply as &#X201C;*i&#X201D; (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. 
</LI><LI CLASS="li-itemize"><B>July 21, 2006</B>: Added new hooks to the Usedef and 
Dataflow.BackwardsTransfer APIs. Code that uses these will need to
be changed slightly. Also, updated the <A HREF="api/Cfg.html">Cfg</A> code to
handle noreturn functions.
</LI><LI CLASS="li-itemize"><B>July 17, 2006</B>: Fix parsing of attributes on bitfields and
empty attribute lists. Thanks to Peter Hawkins.
</LI><LI CLASS="li-itemize"><B>July 10, 2006</B>: Fix Makefile problem for FreeBSD. Thanks
to Joseph Koshy for the patch.
</LI><LI CLASS="li-itemize"><B>June 25, 2006</B>: 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 &#X201C;<TT>(string * lval) list</TT>&#X201D; to 
&#X201C;<TT>(string option * string * lval) list</TT>&#X201D;. Some existing code
will need to be modified accordingly.
</LI><LI CLASS="li-itemize"><B>June 11, 2006</B>: Removed the function <TT>Cil.foldLeftCompoundAll</TT>.
Use instead <A HREF="api/Cil.html#VALfoldLeftCompound">Cil.foldLeftCompound</A> with <TT>&#XA0;implicit:true</TT>. 
</LI><LI CLASS="li-itemize"><B>June 9, 2006</B>: 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. 
</LI><LI CLASS="li-itemize"><B>June 2, 2006</B>: Added <TT>--commPrintLnSparse</TT> flag.
</LI><LI CLASS="li-itemize"><B>June 1, 2006</B>: Christian Stork provided some fixes for the handling
of variable argument functions. 
</LI><LI CLASS="li-itemize"><B>June 1, 2006</B>: Added support for x86 performance counters
on 64-bit processors. Thanks to tbergen for the patch.
</LI><LI CLASS="li-itemize"><B>May 23, 2006</B>: Benjamin Monate fixed a lexer bug when a
preprocessed file is missing a final newline.
</LI><LI CLASS="li-itemize"><B>May 23, 2006</B>: Fix for <TT>typeof(</TT><TT><I>e</I></TT><TT>)</TT> when <I>e</I> has type
<TT>void</TT>.
</LI><LI CLASS="li-itemize"><B>May 20, 2006</B>: <B>Released version 1.3.5</B> (Subversion
revision 8093)
</LI><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><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><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&#XA0;<A HREF="ext.html#sec-Extension">8</A>.
</LI><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><LI CLASS="li-itemize"><B>April 16, 2006</B>: Minor improvements to the <TT>--stats</TT>
flag (Section&#XA0;<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><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><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><LI CLASS="li-itemize"><B>April 6, 2006</B>: Fix for bitfields in the SFI module.
</LI><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><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><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><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><LI CLASS="li-itemize"><B>January 30, 2006</B>: Fix parsing of <TT>switch</TT> without braces.
</LI><LI CLASS="li-itemize"><B>January 30, 2006</B>: Allow &#X2018;$&#X2019; to appear in identifiers.
</LI><LI CLASS="li-itemize"><B>January 13, 2006</B>: Added support for gcc&#X2019;s alias attribute
on functions. See Section&#XA0;<A HREF="cil016.html#sec-ugly-gcc">16.2</A>, item 8. 
</LI><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><LI CLASS="li-itemize"><B>December 1, 2005</B>: Major rewrite of the ext/callgraph module. 
</LI><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><LI CLASS="li-itemize"><B>November 30, 2005</B>: Added support for many GCC <TT>__builtin</TT>
functions. 
</LI><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><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><LI CLASS="li-itemize"><B>November 23, 2005</B>: Do not add a return to functions that have the
noreturn attribute. 
</LI><LI CLASS="li-itemize"><B>November 22, 2005</B>: <B>Released version 1.3.4</B>
</LI><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><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><LI CLASS="li-itemize"><B>September 26, 2005</B>: CIL no longer uses the &#X2018;<TT>-I-</TT>&#X2019; flag
by default when preprocessing with gcc.
</LI><LI CLASS="li-itemize"><B>August 24, 2005</B>: Added a command-line option
&#X201C;--forceRLArgEval&#X201D; 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><LI CLASS="li-itemize"><B>August 9, 2005</B>: Fixed merging when there are more than 20
input files.
</LI><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><LI CLASS="li-itemize"><B>July 27, 2005</B>: Fixed bug in transparent unions.
</LI><LI CLASS="li-itemize"><B>July 27, 2005</B>: Fixed bug in collectInitializer. Thanks to
Benjamin Monate for the patch.
</LI><LI CLASS="li-itemize"><B>July 26, 2005</B>: Better support for extended inline assembly
in gcc.
</LI><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, &#X201C;<TT>__builtin_offsetof(t, field)</TT>&#X201D; is
rewritten as &#X201C;<TT>&amp;((t*)0)-&gt;field</TT>&#X201D;, the traditional way of calculating
an offset.
</LI><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><LI CLASS="li-itemize"><B>July 18, 2005</B>: Fixed bug where casts were not always
inserted in function calls.
</LI><LI CLASS="li-itemize"><B>June 10, 2005</B>: Fixed bug in the code that makes implicit
returns explicit. We weren&#X2019;t handling switch blocks correctly.
</LI><LI CLASS="li-itemize"><B>June 1, 2005</B>: <B>Released version 1.3.3</B>
</LI><LI CLASS="li-itemize"><B>May 31, 2005</B>: Fixed handling of noreturn attribute for function
pointers. 
</LI><LI CLASS="li-itemize"><B>May 30, 2005</B>: Fixed bugs in the handling of constructors in gcc.
</LI><LI CLASS="li-itemize"><B>May 30, 2005</B>: Fixed bugs in the generation of global variable IDs.
</LI><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><LI CLASS="li-itemize"><B>May 27, 2005</B>: Export the plainCilPrinter, for debugging.
</LI><LI CLASS="li-itemize"><B>May 27, 2005</B>: Fixed bug with printing of const attribute for
arrays. 
</LI><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><LI CLASS="li-itemize"><B>May 27, 2005</B>: Fixed bug in type comparisons using
TBuiltin_va_list.
</LI><LI CLASS="li-itemize"><B>May 27, 2005</B>: Improved the constant folding in array lengths and
case expressions. 
</LI><LI CLASS="li-itemize"><B>May 27, 2005</B>: Added the <TT>__builtin_frame_address</TT> to the set
of gcc builtins.
</LI><LI CLASS="li-itemize"><B>May 27, 2005</B>: Added the CIL project to SourceForge.
</LI><LI CLASS="li-itemize"><B>April 23, 2005</B>: The cattr field was not visited.
</LI><LI CLASS="li-itemize"><B>March 6, 2005</B>: Debian packaging support
</LI><LI CLASS="li-itemize"><B>February 16, 2005</B>: Merger fixes.
</LI><LI CLASS="li-itemize"><B>February 11, 2005</B>: Fixed a bug in <TT>--dopartial</TT>. Thanks to
Nathan Cooprider for this fix. 
</LI><LI CLASS="li-itemize"><B>January 31, 2005</B>: Make sure the input file is closed even if a
parsing error is encountered. 
</LI><LI CLASS="li-itemize"><B>January 11, 2005</B>: <B>Released version 1.3.2</B>
</LI><LI CLASS="li-itemize"><B>January 11, 2005</B>: Fixed printing of integer constants whose
integer kind is shorter than an int. 
</LI><LI CLASS="li-itemize"><B>January 11, 2005</B>: Added checks for negative size arrays and arrays
too big. 
</LI><LI CLASS="li-itemize"><B>January 10, 2005</B>: Added support for GCC attribute &#X201C;volatile&#X201D; for
tunctions (as a synonim for noreturn). 
</LI><LI CLASS="li-itemize"><B>January 10, 2005</B>: Improved the comparison of array sizes when
comparing array types. 
</LI><LI CLASS="li-itemize"><B>January 10, 2005</B>: Fixed handling of shell metacharacters in the
cilly command lione.
</LI><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><LI CLASS="li-itemize"><B>January 10, 2005</B>: Fixed some structural comparisons that were
broken in the Ocaml 3.08.
</LI><LI CLASS="li-itemize"><B>January 10, 2005</B>: Fixed the <TT>unrollType</TT> function to not forget
attributes. 
</LI><LI CLASS="li-itemize"><B>January 10, 2005</B>: Better keeping track of locations of function
prototypes and definitions. 
</LI><LI CLASS="li-itemize"><B>January 10, 2005</B>: Fixed bug with the expansion of enumeration
constants in attributes.
</LI><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><LI CLASS="li-itemize"><B>August 7, 2004</B>: <B>Released version 1.3.1</B>
</LI><LI CLASS="li-itemize"><B>August 4, 2004</B>: Fixed a bug in splitting of structs using 
<TT>--dosimplify</TT>
</LI><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><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><LI CLASS="li-itemize"><B>July 7, 2004</B>: <B>Released version 1.2.6</B>
</LI><LI CLASS="li-itemize"><B>July 2, 2004</B>: Character constants such as <TT>&#X2019;c&#X2019;</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><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><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><LI CLASS="li-itemize"><B>June 13, 2004</B>: Added new extensions for data flow analyses, and
for computing dominators.
</LI><LI CLASS="li-itemize"><B>June 10, 2004</B>: Force initialization of CIL at the start of
Cabs2cil. 
</LI><LI CLASS="li-itemize"><B>June 9, 2004</B>: Added support for GCC <TT>__attribute_used__</TT>
</LI><LI CLASS="li-itemize"><B>April 7, 2004</B>: <B>Released version 1.2.5</B>
</LI><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><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><LI CLASS="li-itemize"><B>April 7, 2004</B>: Added the - form of arguments to the MSVC driver.
</LI><LI CLASS="li-itemize"><B>April 7, 2004</B>: Added a few more GCC-specific string escapes, (, [,
{, %, E. 
</LI><LI CLASS="li-itemize"><B>April 7, 2004</B>: Fixed bug with continuation lines in MSVC.
</LI><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><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><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><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><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><LI CLASS="li-itemize"><B>February 20, 2004</B>: <B>Released version 1.2.4</B>
</LI><LI CLASS="li-itemize"><B>February 15, 2004</B>: Changed the parser to allow extra semicolons
after field declarations.
</LI><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><LI CLASS="li-itemize"><B>February 13, 2004</B>: Change the parsing of attributes to recognize
enumeration constants.
</LI><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><LI CLASS="li-itemize"><B>January 7, 2004</B>: <B>Released version 1.2.3</B>
</LI><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><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><LI CLASS="li-itemize"><B>December 5, 2003</B>: Added markup commands to the pretty-printer
module. Also, changed the &#X201C;@&lt;&#X201D; left-flush command into &#X201C;@'&#X2019;.
</LI><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><LI CLASS="li-itemize"><B>December 3, 2003</B>: Added support for structured exception handling
extensions for the Microsoft compilers.
</LI><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><LI CLASS="li-itemize"><B>November 26, 2003</B>: Added support for linkage specifications
(extern &#X201C;C&#X201D;). 
</LI><LI CLASS="li-itemize"><B>November 26, 2003</B>: Added the ocamlutil directory to contain some
utilities shared with other projects. 
</LI><LI CLASS="li-itemize"><B>November 25, 2003</B>: <B>Released version 1.2.2</B>
</LI><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><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><LI CLASS="li-itemize"><B>November 24, 2003</B>: Added printing of what CIL features are being
run.
</LI><LI CLASS="li-itemize"><B>November 24, 2003</B>: Fixed a bug that resulted in attributes being
dropped for integer types. 
</LI><LI CLASS="li-itemize"><B>November 11, 2003</B>: Fixed a bug in the visitor for enumeration
definitions. 
</LI><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><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><LI CLASS="li-itemize"><B>September 17, 2003: Released version 1.2.1.</B>
</LI><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><LI CLASS="li-itemize"><B>August 8, 2003</B>: Do not silently pad out functions calls with
arguments to match the prototype. 
</LI><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</LI><LI CLASS="li-itemize"><B>July 14, 2003</B>: Add basic support for GCC&#X2019;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</LI><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><LI CLASS="li-itemize"><B>July 8, 2003</B>: Fixed infinite loop bug (Stack Overflow) in the
visitor for __alignof.
</LI><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><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.</LI><LI CLASS="li-itemize"><B>July 2, 2003</B>: Relax CIL&#X2019;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.</LI><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 &#X201C;lv-&gt;field.more&#X201D;.</LI><LI CLASS="li-itemize"><B>June 28, 2003</B>: Extended the handling of gcc command lines
arguments in the Perl scripts. </LI><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
&#X201C;<TT>referenced</TT>&#X201D; fields directly is no longer supported.</LI><LI CLASS="li-itemize"><B>June 17, 2003</B>: Reimplement internal utility routine
<TT>Cil.escape_char</TT>. Faster and better. </LI><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</LI><LI CLASS="li-itemize"><B>May 30, 2003</B>: Released the regression tests. 
</LI><LI CLASS="li-itemize"><B>May 28, 2003</B>: <B>Released version 1.1.2</B>
</LI><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><LI CLASS="li-itemize"><B>May 26, 2003</B>: Various fixes and improvements to the pointer
analysis modules. 
</LI><LI CLASS="li-itemize"><B>May 26, 2003</B>: Added optional consistency checking for
transformations.
</LI><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><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 &#X201C;static&#X201D;, which is incorrect. 
</LI><LI CLASS="li-itemize"><B>May 22, 2003</B>: Expanded the CIL consistency checker to verify
undesired sharing relationships between data structures. 
</LI><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><LI CLASS="li-itemize"><B>May 5, 2003</B>: <B>Released version 1.0.11</B>
</LI><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><LI CLASS="li-itemize"><B>April 30, 2003</B>: Better description of how to use CIL for your
analysis. 
</LI><LI CLASS="li-itemize"><B>April 28, 2003</B>: Fixed a bug with <TT>--dooneRet</TT> and
<TT>--doheapify</TT>. Thanks, Manos Renieris.
</LI><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><LI CLASS="li-itemize"><TT>--keep=&lt;</TT><TT><I>dir</I></TT><TT>&gt;</TT> for various other CIL and
CCured output files
</LI><LI CLASS="li-itemize"><TT>--save-temps</TT> for various gcc intermediate files; MSVC
has no equivalent option
</LI></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
&#X201C;<TT>foocured.c</TT>&#X201D; now appears in &#X201C;<TT>foo.cured.c</TT>&#X201D;.
</LI><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><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><LI CLASS="li-itemize"><B>March 10, 2003</B>: <B>Released version 1.0.9</B>
</LI><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><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><LI CLASS="li-itemize"><B>February 15, 2003</B>: <B>Released version 1.0.8</B>
</LI><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><LI CLASS="li-itemize"><B>February 14, 2003</B>: CIL now comes bundled with alias analyses. 
</LI><LI CLASS="li-itemize"><B>February 11, 2003</B>: Added support for adding/removing options from
<TT>./configure</TT>. 
</LI><LI CLASS="li-itemize"><B>February 3, 2003</B>: <B>Released version 1.0.7</B>
</LI><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><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><LI CLASS="li-itemize"><B>January 28, 2003</B>: <B>Released version 1.0.6</B>
</LI><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><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><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><LI CLASS="li-itemize"><B>January 9, 2003</B>: Reworked lexer and parser&#X2019;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><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><LI CLASS="li-itemize"><B>January 6, 2003</B>: <B>Released version 1.0.5</B>
</LI><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><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><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).</LI><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><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><LI CLASS="li-itemize"><B>December 3, 2002</B>: Added a transformation to catch stack
overflows. Fixed the heapify transformation.
</LI><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><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><LI CLASS="li-itemize"><B>October 8, 2002</B>: FreeBSD configuration and porting fixes.
Thanks to Axel Simon for pointing out these problems. 
</LI><LI CLASS="li-itemize"><B>September 10, 2002</B>: Fixed bug in conversion to CIL. Now we drop
all &#X201C;const&#X201D; qualifiers from the types of locals, even from the fields of
local structures or elements of arrays.
</LI><LI CLASS="li-itemize"><B>September 7, 2002</B>: Extended visitor interface to distinguish visitng
offsets inside lvalues from offsets inside initializer lists.
</LI><LI CLASS="li-itemize"><B>September 7, 2002</B>: <B>Released version 1.0.1</B>
</LI><LI CLASS="li-itemize"><B>September 6, 2002</B>: Extended the patcher with the <TT>ateof</TT> flag.
</LI><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><LI CLASS="li-itemize"><B>September 3, 2002</B>: Fixed the merger documentation. 
</LI><LI CLASS="li-itemize"><B>August 29, 2002</B>: <B>Released version 1.0.0.</B>
</LI><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><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><LI CLASS="li-itemize"><B>August 24, 2002</B>: Added to the machine-dependent configuration the
<TT>sizeof</TT><TT>void</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><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><LI CLASS="li-itemize"><B>August 22, 2002</B>: Apply a patch from Richard H. Y. to support
FreeBSD installations. Thanks, Richard!
</LI><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><LI CLASS="li-itemize"><B>May 25, 2002</B>: Added interpreted constructors and destructors.
</LI><LI CLASS="li-itemize"><B>May 17, 2002</B>: Changed the representation of functions to move the
&#X201C;inline&#X201D; information to the varinfo. This way we can print the &#X201C;inline&#X201D;
even in declarations which is what gcc does. 
</LI><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><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><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><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><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>.
</LI></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>
