new feature
[oota-llvm.git] / docs / ReleaseNotes.html
1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
2                       "http://www.w3.org/TR/html4/strict.dtd">
3 <html>
4 <head>
5   <link rel="stylesheet" href="llvm.css" type="text/css">
6   <title>LLVM 1.3 Release Notes</title>
7 </head>
8 <body>
9
10 <div class="doc_title">LLVM 1.3 Release Notes</div>
11  
12 <ol>
13   <li><a href="#intro">Introduction</a></li>
14   <li><a href="#whatsnew">What's New?</a></li>
15   <li><a href="GettingStarted.html">Installation Instructions</a></li>
16   <li><a href="#portability">Portability and Supported Platforms</a></li>
17   <li><a href="#knownproblems">Known Problems</a>
18   <ul>
19     <li><a href="#experimental">Experimental features included in this
20                                 release</a>
21     <li><a href="#core">Known problems with the LLVM Core</a>
22     <li><a href="#c-fe">Known problems with the C Front-end</a>
23     <li><a href="#c++-fe">Known problems with the C++ Front-end</a>
24     <li><a href="#x86-be">Known problems with the X86 Back-end</a>
25     <li><a href="#sparc-be">Known problems with the Sparc Back-end</a>
26     <li><a href="#c-be">Known problems with the C back-end</a>
27   </ul></li>
28   <li><a href="#additionalinfo">Additional Information</a></li>
29 </ol>
30
31 <div class="doc_author">
32   <p>Written by the <a href="http://llvm.cs.uiuc.edu">LLVM team</a><p>
33 </div>
34
35 <!-- *********************************************************************** -->
36 <div class="doc_section">
37   <a name="intro">Introduction</a>
38 </div>
39 <!-- *********************************************************************** -->
40
41 <div class="doc_text">
42
43 <p>This document contains the release notes for the LLVM compiler
44 infrastructure, release 1.3.  Here we describe the status of LLVM, including any
45 known problems and bug fixes from the previous release.  The most up-to-date
46 version of this document can be found on the <a
47 href="http://llvm.cs.uiuc.edu/releases/1.3/">LLVM 1.3 web site</a>.  If you are
48 not reading this on the LLVM web pages, you should probably go there because
49 this document may be updated after the release.</p>
50
51 <p>For more information about LLVM, including information about potentially more
52 current releases, please check out the <a href="http://llvm.cs.uiuc.edu">main
53 web site</a>.  If you have questions or comments, the <a
54 href="http://mail.cs.uiuc.edu/mailman/listinfo/llvmdev">LLVM developer's mailing
55 list</a> is a good place to send them.</p>
56
57 <p>Note that if you are reading this file from CVS, this document applies
58 to the <i>next</i> release, not the current one.  To see the release notes for
59 the current or previous releases, see the <a
60 href="http://llvm.cs.uiuc.edu/releases/">releases page</a>.</p>
61
62 </div>
63
64 <!-- *********************************************************************** -->
65 <div class="doc_section">
66   <a name="whatsnew">What's New?</a>
67 </div>
68 <!-- *********************************************************************** -->
69
70 <div class="doc_text">
71
72 <p>This is the fourth public release of the LLVM compiler infrastructure.  This
73 release primarily improves the <a href="#codequality">performance of the
74 code</a> produced by all aspects of the LLVM compiler and adds some <a
75 href="#newfeatures">new features</a>, though it does <a href="#bugfix">fix a few
76 bugs</a> as well.</p>
77
78 <p> At this time, LLVM is known to correctly compile and run all C &amp; C++
79 SPEC CPU2000 benchmarks, the Olden benchmarks, and the Ptrdist benchmarks.  It
80 has also been used to compile <b>many</b> other programs.  LLVM now also works
81 with a broad variety of C++ programs, though it has still received less testing
82 than the C front-end.</p>
83
84 </div>
85
86 <!--=========================================================================-->
87 <div class="doc_subsubsection">
88 <a name="newfeatures">This release implements the following new features:</a>
89 </div>
90
91 <div class="doc_text">
92
93 <ol>
94 <li>The LLVM <a href="LangRef.html#i_select"><tt>select</tt></a> instruction is
95 now fully implemented and supported by all transformations, native code
96 generators, and the interpreter.</li>
97 <li>Bugpoint can now narrow down code-generation bugs to a loop nest, where
98 before it could only narrow them down to a function being miscompiled.</li>
99 <li><a href="http://llvm.cs.uiuc.edu/PR40">Bugpoint can now debug arbitrary
100 modes of llc</a> and lli, by passing them command line flags (e.g., 
101 <tt>-regalloc=linearscan</tt>, <tt>-enable-correct-eh-support</tt>, etc.) </li>
102 <li>The Control Flow Graph in the native code generators is no longer
103 constrained to be the same as the CFG for the LLVM input code.</li>
104 <li>The LLVM induction variable analysis routines have been rewritten.</li>
105 <li>LLVM now has new loop unrolling and loop unswitching passes.</li>
106 <li>The induction variable substitution pass performs linear function test
107 replacement and exit value replacement optimizations.</li>
108 <li>The <a href="BytecodeFormat.html">LLVM Bytecode file format</a> is now 
109     documented.</a></li>
110 <li>LLVM now has first-class support for <a href="GarbageCollection.html">Accurate 
111 Garbage Collection</a>, enabling the use of aggressive copying and generational 
112 collectors.</li>
113 <li>LLVM now includes an implementation of Andersen's interprocedural alias 
114 analysis algorithm.</li>
115 <li>Bugpoint can <a href="http://llvm.cs.uiuc.edu/PR327">extract individual
116 basic blocks</a> to track down reduce miscompilation testcases.</li>
117 </ol>
118
119 </div>
120
121
122 <!--=========================================================================-->
123 <div class="doc_subsubsection">
124 In this release, the following missing features were implemented:
125 </div>
126
127 <div class="doc_text">
128
129 <ol>
130 <li><a href="http://llvm.cs.uiuc.edu/PR82">LLVM cannot handle structures with
131 more than 256 elements</a></li>
132 <li><a href="http://llvm.cs.uiuc.edu/PR38">[bugpoint] External functions used in
133 non-instruction entities, such as global constant initializer</a></li>
134 <li><a href="http://llvm.cs.uiuc.edu/PR178">Stacker does not handle targets 
135 with 64-bit pointers.</a></li>
136 <li><a href="http://llvm.cs.uiuc.edu/PR290">Bugpoint doesn't support
137 uses of external fns by immediate constant exprs</a></li>
138 </ol>
139
140 </div>
141
142 <!--=========================================================================-->
143 <div class="doc_subsubsection">
144 <a name="qualityofimp">In this release, the following Quality of Implementation
145 issues were fixed:</a>
146 </div>
147
148 <div class="doc_text">
149
150 <ol>
151 <li><a href="http://llvm.cs.uiuc.edu/PR305">LLVM tools will happily spew
152 bytecode onto your terminal</a></li>
153 <li><a href="http://llvm.cs.uiuc.edu/PR329">[llvmgcc] type names are not emitted
154 for structure typedefs</a></li>
155 <li>All documentation is now conformant to the HTML 4.01 (Strict) level.</li>
156 </ol>
157
158 </div>
159
160 <!--=========================================================================-->
161 <div class="doc_subsubsection">
162 In this release, the following build problems were fixed:
163 </div>
164
165 <div class="doc_text">
166 <ol>
167 <li><a href="http://llvm.cs.uiuc.edu/PR301">Minor configure bugs with
168 -disable/enable-povray and -disable-spec</a></li>
169 <li><a href="http://llvm.cs.uiuc.edu/PR289">shell scripts output by gccld don't
170 work if you change PATH</a></li>
171 </ol>
172 </div>
173
174 <!--=========================================================================-->
175 <div class="doc_subsubsection">
176 <a name="codequality">This release includes the following Code Quality
177 improvements:</a>
178 </div>
179
180 <div class="doc_text">
181 <ol>
182 <li>Fixed: <a href="http://llvm.cs.uiuc.edu/PR309">[vmcore] Code quality problem
183 due to long operand of getelementptr</a></li>
184
185 <li>The X86 backend now generates substantially better code for 64-bit integer
186 and floating point operations.</li>
187
188 <li>The -inline pass no longer inlines mutually recursive functions until it
189 hits the inlining threshold.</li>
190
191 <li>The -inline pass no longer misses obvious inlining opportunities just
192 because the callee eventually calls into an external function.</li>
193
194 <li>The -simplifycfg pass can now "if convert" simple statements into the new
195 <tt>select</tt> instruction.</li>
196
197 <li>The -loopsimplify pass can now break <a
198 href="http://llvm.cs.uiuc.edu/PR35">natural loops with multiple backedges</a>
199 into multiple nested loops.  This enables a variety of subsequent
200 optimizations.</li>
201
202 <li>The -adce pass can now eliminate calls to functions that do not not write to
203 memory.</li>
204
205 <li>The link-time optimizer now runs the -prune-eh pass (to remove unused
206 exception handlers).</li>
207
208 <li>The -simplifycfg pass can now eliminate simple correlated branches (such as
209 "<tt>if (A &lt; B &amp;&amp; A &lt; B)</tt>", and can turn short-circuiting
210 operators into the strict versions when useful (such as "<tt>if (A &lt; B || A
211 &gt; C)</tt>" into "<tt>if (A &lt; B | A &gt; C)</tt>"</li>
212
213 <li>LLVM now has infrastructure for (simple and sparse conditional) constant
214 propagation of function calls.  It currently supports a few math library
215 functions like sqrt/sin/cos/etc.</li>
216 </ol>
217 </div>
218
219 <!--=========================================================================-->
220 <div class="doc_subsubsection">
221 <a name="bugfix">In this release, the following bugs in the previous release
222 were fixed:</a>
223 </div>
224
225 <div class="doc_text">
226
227 <p>Bugs in the LLVM Core:</p>
228
229 <ol>
230 <li><a href="http://llvm.cs.uiuc.edu/PR330">[vmcore] Linker causes erroneous
231 asssertion</a></li>
232 <li><a href="http://llvm.cs.uiuc.edu/PR306">[loopsimplify] Loop simplify
233 incorrectly updates dominator information</a></li>
234 <li><a href="http://llvm.cs.uiuc.edu/PR310">[tailduplicate] DemoteRegToStack
235 breaks SSA form</a></li>
236 <li><a href="http://llvm.cs.uiuc.edu/PR313">[X86] JIT miscompiles unsigned short
237 to floating point cast</a></li>
238 <li><a href="http://llvm.cs.uiuc.edu/PR332">[adce] Crash handling unreachable
239 code that unwinds</a></li>
240 <li><a href="http://llvm.cs.uiuc.edu/PR333">[sparc] LLC can't emit 2 functions
241 of the same name, both having constant pools</a></li>
242 <li><a href="http://llvm.cs.uiuc.edu/PR337">[livevar] Live variables missed
243 physical register use of aliased definition</a></li>
244 <li><a href="http://llvm.cs.uiuc.edu/PR340">Verifier misses malformed switch instruction</a></li>
245 </ol>
246
247 <p>Bugs in the C/C++ front-end:</p>
248
249 <ol>
250 <li><a href="http://llvm.cs.uiuc.edu/PR326">[llvmgcc] Crash on use of undeclared
251 enum type</a></li>
252 <li><a href="http://llvm.cs.uiuc.edu/PR298">[llvmgcc] Variable length array
253 indexing miscompiled</a></li>
254 </ol>
255 </div>
256
257 <!-- *********************************************************************** -->
258 <div class="doc_section">
259   <a name="portability">Portability and Supported Platforms</a>
260 </div>
261 <!-- *********************************************************************** -->
262
263 <div class="doc_text">
264
265 <p>LLVM has been extensively tested on Intel and AMD machines running Red Hat
266 Linux.  It has also been tested under FreeBSD, and on Sun UltraSPARC
267 workstations running Solaris 8.  Additionally, LLVM works on Mac OS X 10.3 and
268 above, but only with the C backend and interpreter; no native machine-code
269 generator for the PowerPC is available yet.</p>
270
271 <p>The core LLVM infrastructure uses
272 <a href="http://www.gnu.org/software/autoconf/">GNU autoconf</a> to adapt itself
273 to the machine and operating system on which it is built.  However, minor
274 porting may be required to get LLVM to work on new platforms.  We welcome your
275 portability patches and reports of successful builds or error messages.</p>
276
277 </div>
278
279 <!--=========================================================================-->
280 <div class="doc_subsection">
281 In this release, the following portability problems were fixed:
282 </div>
283
284 <div class="doc_text">
285
286 <ol>
287 <li><a href="http://llvm.cs.uiuc.edu/PR304">warnings compiling Stacker compiler
288 on Mac OS X</a></li>
289 <li><a href="http://llvm.cs.uiuc.edu/PR308">Archive file reader doesn't
290 understand abbreviated names in headers</a></li>
291 </ol>
292
293 </div>
294
295 <!-- *********************************************************************** -->
296 <div class="doc_section">
297   <a name="knownproblems">Known Problems</a>
298 </div>
299 <!-- *********************************************************************** -->
300
301 <div class="doc_text">
302
303 <p>This section contains all known problems with the LLVM system, listed by
304 component.  As new problems are discovered, they will be added to these
305 sections.  If you run into a problem, please check the <a
306 href="http://llvm.cs.uiuc.edu/bugs/">LLVM bug database</a> and submit a bug if
307 there isn't already one.</p>
308
309 </div>
310
311 <!-- ======================================================================= -->
312 <div class="doc_subsection">
313   <a name="experimental">Experimental features included with this release</a>
314 </div>
315
316 <div class="doc_text">
317
318 <p>The following components of this LLVM release are either untested, known to
319 be broken or unreliable, or are in early development.  These components should
320 not be relied on, and bugs should not be filed against them, but they may be
321 useful to some people.  In particular, if you would like to work on one of these
322 components, please contact us on the llvmdev list.</p>
323
324 <ul>
325 <li>The following passes are incomplete or buggy: <tt>-pgmdep, -memdep,
326     -ipmodref, -sortstructs, -swapstructs, -cee</tt></li>
327
328 <li>The <tt>-pre</tt> pass is incomplete (there are cases it doesn't handle that
329     it should) and not thoroughly tested.</li>
330 <li>The <tt>llvm-ar</tt> tool is incomplete and probably buggy.</li>
331 <li>The <tt>llvm-db</tt> tool is in a very early stage of development.</li>
332 </ul>
333
334 </div>
335
336 <!-- ======================================================================= -->
337 <div class="doc_subsection">
338   <a name="core">Known problems with the LLVM Core</a>
339 </div>
340
341 <div class="doc_text">
342
343 <ul>
344
345 <li>In the JIT, <tt>dlsym</tt> on a symbol compiled by the JIT will not
346 work.</li>
347
348 <li>The JIT does not use mutexes to protect its internal data structures.  As
349 such, execution of a threaded program could cause these data structures to be
350 corrupted.</li>
351
352 <li>It is not possible to <tt>dlopen</tt> an LLVM bytecode file in the JIT.</li>
353
354 <li>Linking in static archive files (.a files) is very slow (there is no symbol
355 table in the archive).</li>
356
357 <li>The gccld program <a href="http://llvm.cs.uiuc.edu/PR139">does not link
358 objects/archives in the order specified on the command line.</a></li>
359
360 <li><a href="http://llvm.cs.uiuc.edu/PR240">The lower-invoke pass does not mark
361 values live across a setjmp as volatile</a>.  This missing feature only affects
362 targets whose setjmp/longjmp libraries do not save and restore the entire
363 register file.</li>
364 </ul>
365 </div>
366
367 <!-- ======================================================================= -->
368 <div class="doc_subsection">
369   <a name="c-fe">Known problems with the C front-end</a>
370 </div>
371
372 <!-- _______________________________________________________________________ -->
373 <div class="doc_subsubsection">Bugs</div>
374
375 <div class="doc_text">
376 <ul>
377 <li>C99 Variable sized arrays do not release stack memory when they go out of 
378     scope.  Thus, the following program may run out of stack space:
379 <pre>
380     for (i = 0; i != 1000000; ++i) {
381       int X[n];
382       foo(X);
383     }
384 </pre></li>
385
386 <li>Initialization of global union variables can only be done <a
387 href="http://llvm.cs.uiuc.edu/bugs/show_bug.cgi?id=162">with the largest union
388 member</a>.</li>
389
390 <li><a href="http://llvm.cs.uiuc.edu/PR244">[llvm-gcc] Error when an implicitly
391 external function is re-declared as static</a></li>
392
393 </ul>
394 </div>
395
396 <!-- _______________________________________________________________________ -->
397 <div class="doc_subsubsection">
398   Notes
399 </div>
400
401 <div class="doc_text">
402
403 <ul>
404
405 <li>Inline assembly is not yet supported.</li>
406
407 <li>"long double" is transformed by the front-end into "double".  There is no
408 support for floating point data types of any size other than 32 and 64
409 bits.</li>
410     
411 <li>The following Unix system functionality has not been tested and may not
412 work:
413   <ol>
414   <li><tt>sigsetjmp</tt>, <tt>siglongjmp</tt> - These are not turned into the
415       appropriate <tt>invoke</tt>/<tt>unwind</tt> instructions.  Note that
416       <tt>setjmp</tt> and <tt>longjmp</tt> <em>are</em> compiled correctly.
417   <li><tt>getcontext</tt>, <tt>setcontext</tt>, <tt>makecontext</tt>
418       - These functions have not been tested.
419   </ol></li>
420
421 <li>Although many GCC extensions are supported, some are not.  In particular,
422     the following extensions are known to <b>not be</b> supported:
423   <ol>
424   <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Local-Labels.html#Local%20Labels">Local Labels</a>: Labels local to a block.</li>
425   <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Nested-Functions.html#Nested%20Functions">Nested Functions</a>: As in Algol and Pascal, lexical scoping of functions.</li>
426   <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Constructing-Calls.html#Constructing%20Calls">Constructing Calls</a>: Dispatching a call to another function.</li>
427   <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Extended-Asm.html#Extended%20Asm">Extended Asm</a>: Assembler instructions with C expressions as operands.</li>
428   <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Constraints.html#Constraints">Constraints</a>: Constraints for asm operands.</li>
429   <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Asm-Labels.html#Asm%20Labels">Asm Labels</a>: Specifying the assembler name to use for a C symbol.</li>
430   <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Explicit-Reg-Vars.html#Explicit%20Reg%20Vars">Explicit Reg Vars</a>: Defining variables residing in specified registers.</li>
431   <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Vector-Extensions.html#Vector%20Extensions">Vector Extensions</a>: Using vector instructions through built-in functions.</li>
432   <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Target-Builtins.html#Target%20Builtins">Target Builtins</a>:   Built-in functions specific to particular targets.</li>
433   <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Thread-Local.html#Thread-Local">Thread-Local</a>: Per-thread variables.</li>
434   <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Pragmas.html#Pragmas">Pragmas</a>: Pragmas accepted by GCC.</li>
435   </ol>
436
437   <p>The following GCC extensions are <b>partially</b> supported.  An ignored
438   attribute means that the LLVM compiler ignores the presence of the attribute,
439   but the code should still work.  An unsupported attribute is one which is
440   ignored by the LLVM compiler and will cause a different interpretation of
441   the program.</p>
442
443   <ol>
444   <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Variable-Length.html#Variable%20Length">Variable Length</a>:
445       Arrays whose length is computed at run time.<br>
446       Supported, but allocated stack space is not freed until the function returns (noted above).</li>
447
448   <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html#Function%20Attributes">Function Attributes</a>:
449
450       Declaring that functions have no side effects or that they can never
451       return.<br>
452
453       <b>Supported:</b> <tt>format</tt>, <tt>format_arg</tt>, <tt>non_null</tt>,
454       <tt>constructor</tt>, <tt>destructor</tt>, <tt>unused</tt>,
455       <tt>deprecated</tt>, <tt>warn_unused_result</tt>, <tt>weak</tt><br>
456
457       <b>Ignored:</b> <tt>noreturn</tt>, <tt>noinline</tt>,
458       <tt>always_inline</tt>, <tt>pure</tt>, <tt>const</tt>, <tt>nothrow</tt>,
459       <tt>malloc</tt>, <tt>no_instrument_function</tt>, <tt>cdecl</tt><br>
460
461       <b>Unsupported:</b> <tt>used</tt>, <tt>section</tt>, <tt>alias</tt>,
462       <tt>visibility</tt>, <tt>regparm</tt>, <tt>stdcall</tt>,
463       <tt>fastcall</tt>, all other target specific attributes</li>
464    
465   <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Variable-Attributes.html#Variable%20Attributes">Variable Attributes</a>:
466       Specifying attributes of variables.<br>
467       <b>Supported:</b> <tt>cleanup</tt>, <tt>common</tt>, <tt>nocommon</tt>,
468                         <tt>deprecated</tt>, <tt>transparent_union</tt>,
469                         <tt>unused</tt>, <tt>weak</tt><br>
470
471       <b>Unsupported:</b> <tt>aligned</tt>, <tt>mode</tt>, <tt>packed</tt>,
472                         <tt>section</tt>, <tt>shared</tt>, <tt>tls_model</tt>,
473                         <tt>vector_size</tt>, <tt>dllimport</tt>, 
474                         <tt>dllexport</tt>, all target specific attributes.</li>
475
476   <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Type-Attributes.html#Type%20Attributes">Type Attributes</a>:   Specifying attributes of types.<br>
477       <b>Supported:</b> <tt>transparent_union</tt>, <tt>unused</tt>,
478                         <tt>deprecated</tt>, <tt>may_alias</tt><br>
479
480       <b>Unsupported:</b> <tt>aligned</tt>, <tt>packed</tt>, 
481                         all target specific attributes.</li>
482
483   <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html#Other%20Builtins">Other Builtins</a>:
484       Other built-in functions.<br>
485       We support all builtins which have a C language equivalent (e.g., 
486          <tt>__builtin_cos</tt>),  <tt>__builtin_alloca</tt>, 
487          <tt>__builtin_types_compatible_p</tt>, <tt>__builtin_choose_expr</tt>,
488          <tt>__builtin_constant_p</tt>, and <tt>__builtin_expect</tt> (ignored).</li>
489
490   </ol>
491
492   <p>The following extensions <b>are</b> known to be supported:</p>
493
494   <ol>
495   <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Labels-as-Values.html#Labels%20as%20Values">Labels as Values</a>: Getting pointers to labels and computed gotos.</li>
496   <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Statement-Exprs.html#Statement%20Exprs">Statement Exprs</a>:   Putting statements and declarations inside expressions.</li>
497   <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Typeof.html#Typeof">Typeof</a>: <code>typeof</code>: referring to the type of an expression.</li>
498   <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Lvalues.html#Lvalues">Lvalues</a>: Using <code>?:</code>, "<code>,</code>" and casts in lvalues.</li>
499   <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Conditionals.html#Conditionals">Conditionals</a>: Omitting the middle operand of a <code>?:</code> expression.</li>
500   <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Long-Long.html#Long%20Long">Long Long</a>: Double-word integers.</li>
501   <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Complex.html#Complex">Complex</a>:   Data types for complex numbers.</li>
502   <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Hex-Floats.html#Hex%20Floats">Hex Floats</a>:Hexadecimal floating-point constants.</li>
503   <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Zero-Length.html#Zero%20Length">Zero Length</a>: Zero-length arrays.</li>
504   <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Empty-Structures.html#Empty%20Structures">Empty Structures</a>: Structures with no members.</li>
505   <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Variadic-Macros.html#Variadic%20Macros">Variadic Macros</a>: Macros with a variable number of arguments.</li>
506   <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Escaped-Newlines.html#Escaped%20Newlines">Escaped Newlines</a>:  Slightly looser rules for escaped newlines.</li>
507   <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Subscripting.html#Subscripting">Subscripting</a>: Any array can be subscripted, even if not an lvalue.</li>
508   <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Pointer-Arith.html#Pointer%20Arith">Pointer Arith</a>: Arithmetic on <code>void</code>-pointers and function pointers.</li>
509   <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Initializers.html#Initializers">Initializers</a>: Non-constant initializers.</li>
510   <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Compound-Literals.html#Compound%20Literals">Compound Literals</a>: Compound literals give structures, unions,
511 or arrays as values.</li>
512   <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Designated-Inits.html#Designated%20Inits">Designated Inits</a>: Labeling elements of initializers.</li>
513   <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Cast-to-Union.html#Cast%20to%20Union">Cast to Union</a>: Casting to union type from any member of the union.</li>
514   <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Case-Ranges.html#Case%20Ranges">Case Ranges</a>: `case 1 ... 9' and such.</li>
515   <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Mixed-Declarations.html#Mixed%20Declarations">Mixed Declarations</a>: Mixing declarations and code.</li>
516   <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Function-Prototypes.html#Function%20Prototypes">Function Prototypes</a>: Prototype declarations and old-style definitions.</li>
517   <li><a href="http://gcc.gnu.org/onlinedocs/gcc/C---Comments.html#C++%20Comments">C++ Comments</a>: C++ comments are recognized.</li>
518   <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Dollar-Signs.html#Dollar%20Signs">Dollar Signs</a>: Dollar sign is allowed in identifiers.</li>
519   <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Character-Escapes.html#Character%20Escapes">Character Escapes</a>: <code>\e</code> stands for the character &lt;ESC&gt;.</li>
520   <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Alignment.html#Alignment">Alignment</a>: Inquiring about the alignment of a type or variable.</li>
521   <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Inline.html#Inline">Inline</a>: Defining inline functions (as fast as macros).</li>
522   <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Alternate-Keywords.html#Alternate%20Keywords">Alternate Keywords</a>:<code>__const__</code>, <code>__asm__</code>, etc., for header files.</li>
523   <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Incomplete-Enums.html#Incomplete%20Enums">Incomplete Enums</a>:  <code>enum foo;</code>, with details to follow.</li>
524   <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Function-Names.html#Function%20Names">Function Names</a>: Printable strings which are the name of the current function.</li>
525   <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Return-Address.html#Return%20Address">Return Address</a>: Getting the return or frame address of a function.</li>
526   <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Unnamed-Fields.html#Unnamed%20Fields">Unnamed Fields</a>: Unnamed struct/union fields within structs/unions.</li>
527   <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Attribute-Syntax.html#Attribute%20Syntax">Attribute Syntax</a>: Formal syntax for attributes.</li>
528   </ol></li>
529
530 </ul>
531
532 <p>If you run into GCC extensions which have not been included in any of these
533 lists, please let us know (also including whether or not they work).</p>
534
535 </div>
536
537 <!-- ======================================================================= -->
538 <div class="doc_subsection">
539   <a name="c++-fe">Known problems with the C++ front-end</a>
540 </div>
541
542 <div class="doc_text">
543
544 <p>For this release, the C++ front-end is considered to be fully functional but
545 has not been tested as thoroughly as the C front-end.  It has been tested and 
546 works for a number of non-trivial programs, but there may be lurking bugs.
547 Please report any bugs or problems.</p>
548
549 </div>
550
551 <!-- _______________________________________________________________________ -->
552 <div class="doc_subsubsection">Bugs</div>
553
554 <div class="doc_text">
555
556 <ul>
557 <li>The C++ front-end inherits all problems afflicting the <a href="#c-fe">C
558     front-end</a>.</li>
559 </ul>
560 </div>
561
562 <!-- _______________________________________________________________________ -->
563 <div class="doc_subsubsection">
564   Notes
565 </div>
566
567 <div class="doc_text">
568
569 <ul>
570
571 <li>The C++ front-end is based on a pre-release of the GCC 3.4 C++ parser.  This
572 parser is significantly more standards compliant (and picky) than prior GCC
573 versions.  For more information, see the C++ section of the <a
574 href="http://gcc.gnu.org/gcc-3.4/changes.html">GCC 3.4 release notes</a>.</li>
575
576 <li>Destructors for local objects are not always run when a <tt>longjmp</tt> is
577     performed. In particular, destructors for objects in the <tt>longjmp</tt>ing
578     function and in the <tt>setjmp</tt> receiver function may not be run.
579     Objects in intervening stack frames will be destroyed, however (which is
580     better than most compilers).</li>
581
582 <li>The LLVM C++ front-end follows the <a
583     href="http://www.codesourcery.com/cxx-abi">Itanium C++ ABI</a>.
584     This document, which is not Itanium specific, specifies a standard for name
585     mangling, class layout, v-table layout, RTTI formats, and other C++
586     representation issues.  Because we use this API, code generated by the LLVM
587     compilers should be binary compatible with machine code generated by other
588     Itanium ABI C++ compilers (such as G++, the Intel and HP compilers, etc).
589     <i>However</i>, the exception handling mechanism used by LLVM is very
590     different from the model used in the Itanium ABI, so <b>exceptions will not
591     interact correctly</b>. </li>
592
593 </ul>
594
595 </div>
596
597 <!-- ======================================================================= -->
598 <div class="doc_subsection">
599   <a name="x86-be">Known problems with the X86 back-end</a>
600 </div>
601
602 <div class="doc_text">
603
604 <ul>
605 <li>None so far.
606 </ul>
607
608 </div>
609
610 <!-- ======================================================================= -->
611 <div class="doc_subsection">
612   <a name="sparc-be">Known problems with the Sparc back-end</a>
613 </div>
614
615 <div class="doc_text">
616
617 <ul>
618 <li>There are several programs in the LLVM testsuite that the Sparc code generator is known to miscompile.</li>
619 </ul>
620
621 </div>
622
623 <!-- ======================================================================= -->
624 <div class="doc_subsection">
625   <a name="c-be">Known problems with the C back-end</a>
626 </div>
627
628 <div class="doc_text">
629
630 <ul>
631
632 <li>The C back-end produces code that violates the ANSI C Type-Based Alias
633 Analysis rules.  As such, special options may be necessary to compile the code
634 (for example, GCC requires the <tt>-fno-strict-aliasing</tt> option).  This
635 problem probably cannot be fixed.</li>
636
637 <li><a href="http://llvm.cs.uiuc.edu/PR33">Initializers for global variables</a>
638 cannot include special floating point numbers like Not-A-Number or
639 Infinity.</li>
640
641 <li><a href="http://llvm.cs.uiuc.edu/PR56">Zero arg vararg functions are not 
642 supported</a>.  This should not affect LLVM produced by the C or C++ 
643 frontends.</li>
644
645 </ul>
646
647 </div>
648
649 <!-- *********************************************************************** -->
650 <div class="doc_section">
651   <a name="additionalinfo">Additional Information</a>
652 </div>
653 <!-- *********************************************************************** -->
654
655 <div class="doc_text">
656
657 <p>A wide variety of additional information is available on the LLVM web page,
658 including mailing lists and publications describing algorithms and components
659 implemented in LLVM.  The web page also contains versions of the API
660 documentation which is up-to-date with the CVS version of the source code.  You
661 can access versions of these documents specific to this release by going into
662 the "<tt>llvm/doc/</tt>" directory in the LLVM tree.</p>
663
664 <p>If you have any questions or comments about LLVM, please feel free to contact
665 us via the <a href="http://mail.cs.uiuc.edu/mailman/listinfo/llvmdev">mailing
666 lists</a>.</p>
667
668 </div>
669
670 <!-- *********************************************************************** -->
671
672 <hr>
673 <address>
674   <a href="http://jigsaw.w3.org/css-validator/check/referer"><img
675   src="http://jigsaw.w3.org/css-validator/images/vcss" alt="Valid CSS!"></a>
676   <a href="http://validator.w3.org/check/referer"><img
677   src="http://www.w3.org/Icons/valid-html401" alt="Valid HTML 4.01!" /></a>
678
679   <a href="http://llvm.cs.uiuc.edu">The LLVM Compiler Infrastructure</a><br>
680   Last modified: $Date$
681 </address>
682
683 </body>
684 </html>