diff options
Diffstat (limited to 'cil/doc/cil012.html')
-rw-r--r-- | cil/doc/cil012.html | 133 |
1 files changed, 0 insertions, 133 deletions
diff --git a/cil/doc/cil012.html b/cil/doc/cil012.html deleted file mode 100644 index 5d18fd52..00000000 --- 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> 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), &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 “extern inline”. Such a function can -be defined twice: first with the “extern inline” specifier and the second -time without it. If optimizations are turned off then the “extern inline” -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&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 -(“signed” and “unsigned” 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> |