1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
2 "http://www.w3.org/TR/html4/strict.dtd">
5 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
6 <link rel="stylesheet" href="llvm.css" type="text/css">
7 <title>LLVM 1.4 Release Notes</title>
11 <div class="doc_title">LLVM 1.4 Release Notes</div>
14 <li><a href="#intro">Introduction</a></li>
15 <li><a href="#whatsnew">What's New?</a></li>
16 <li><a href="GettingStarted.html">Installation Instructions</a></li>
17 <li><a href="#portability">Portability and Supported Platforms</a></li>
18 <li><a href="#knownproblems">Known Problems</a>
20 <li><a href="#experimental">Experimental features included in this
22 <li><a href="#core">Known problems with the LLVM Core</a>
23 <li><a href="#c-fe">Known problems with the C Front-end</a>
24 <li><a href="#c++-fe">Known problems with the C++ Front-end</a>
25 <li><a href="#x86-be">Known problems with the X86 Back-end</a>
26 <li><a href="#sparcv9-be">Known problems with the SparcV9 Back-end</a>
27 <li><a href="#ppc-be">Known problems with the PowerPC Back-end</a>
28 <li><a href="#c-be">Known problems with the C back-end</a>
30 <li><a href="#additionalinfo">Additional Information</a></li>
33 <div class="doc_author">
34 <p>Written by the <a href="http://llvm.cs.uiuc.edu">LLVM team</a><p>
37 <!-- *********************************************************************** -->
38 <div class="doc_section">
39 <a name="intro">Introduction</a>
41 <!-- *********************************************************************** -->
43 <div class="doc_text">
45 <p>This document contains the release notes for the LLVM compiler
46 infrastructure, release 1.4. Here we describe the status of LLVM, including any
47 known problems and improvements from the previous release. The most up-to-date
48 version of this document can be found on the <a
49 href="http://llvm.cs.uiuc.edu/releases/1.4/">LLVM 1.4 web site</a>. If you are
50 not reading this on the LLVM web pages, you should probably go there because
51 this document may be updated after the release.</p>
53 <p>For more information about LLVM, including information about the latest
54 release, please check out the <a href="http://llvm.cs.uiuc.edu">main LLVM
55 web site</a>. If you have questions or comments, the <a
56 href="http://mail.cs.uiuc.edu/mailman/listinfo/llvmdev">LLVM developer's mailing
57 list</a> is a good place to send them.</p>
59 <p>Note that if you are reading this file from CVS, this document applies
60 to the <i>next</i> release, not the current one. To see the release notes for
61 the current or previous releases, see the <a
62 href="http://llvm.cs.uiuc.edu/releases/">releases page</a>.</p>
66 <!-- *********************************************************************** -->
67 <div class="doc_section">
68 <a name="whatsnew">What's New?</a>
70 <!-- *********************************************************************** -->
72 <div class="doc_text">
74 <p>This is the fifth public release of the LLVM compiler infrastructure.</p>
76 <p> At this time, LLVM is known to correctly compile on a broad range of
77 C and C++ programs, including the SPEC CPU95 & 2000 suite. This release
78 includes several major enhancements to the LLVM system, including a new
79 PowerPC JIT, enhancements to the C/C++ front-end to provide source line number
80 information in LLVM, a new <a href="CommandGuide/html/llvmc.html">compiler
81 driver</a>, and several other enhancements listed below. It also includes
82 bug fixes for those problems found since the 1.3 release.</p>
84 <p>Note that this release seperates the LLVM Program Testsuite out of the
85 main LLVM distribution into a seperate CVS repository and tarball. This
86 reduces the size of the main LLVM distribution. Also note that LLVM now
87 builds tools into llvm/Debug/bin by default instead of llvm/tools/Debug.</p>
91 <!--=========================================================================-->
92 <div class="doc_subsubsection">
93 <a name="newfeatures">This release implements the following new features:</a>
96 <div class="doc_text">
98 <li>LLVM now includes a Just-In-Time compiler for the PowerPC target.</li>
99 <li>llvmgcc and llvmg++ now emit source line number information when '-g' is
100 passed in, making it possible to map from LLVM code back to source.
101 This information is currently used by llvm-db and can be used with other
102 tools and passes.</li>
103 <li>The test/Programs hierarchy <a href="http://llvm.cs.uiuc.edu/PR257">has
104 been moved out of the main LLVM tree</a> into a separate CVS repository and
105 tarball. This shrinks the distribution size of LLVM itself significantly.
107 <li>LLVM now optimizes global variables more aggressively than it did
109 <li>LLVM now includes the new '<tt>undef</tt>' value and
110 <a href="LangRef.html#i_unreachable"><tt>unreachable</tt></a> instruction,
111 which give the optimizer more information about the behavior of the
114 <li>Bytecode compression with bzip2 has been implemented. All bytecode files
115 generated by LLVM will now be compressed by default. Compression can be
116 disabled with the <tt>-disable-compression</tt> option to the tools that can
117 generate bytecode files.
119 <li>A generic <a href="CommandGuide/html/llvmc.html">compiler driver</a>
121 an associated <a href="CommandGuide/html/llvm-ld.html">generic linker</a>
122 (llvm-ld) have been added. The compiler driver is generic because it can be
124 to pre-process, translate, optimize, assemble, and link code from any source
125 language with an LLVM front-end. This makes it easier for compiler writers
126 to hide the multiple steps required to compile a program (compiling,
127 optimizing, linking runtime libraries, etc) in one simple command.
129 <li>The <a href="http://llvm.cs.uiuc.edu/PR263">dependent libraries</a>
130 feature has been implemented. This allows front end compilers to indicate in
131 the bytecode which libraries the bytecode needs to be linked with. Both the
132 C/C++ and Stacker front ends support generating the required dependencies.
133 The linker now supports using this information to ensure required libaries are
134 linked into the module. This minimizes the need to use the <tt>-l</tt> option
135 when using <a href="CommandGuide/html/llvmc.html"><tt>llvmc</tt></a>.
137 <li>The LLVM makefiles have been improved to build LLVM much faster and
138 includes new targets (like dist-check, uninstall). One important user-visible
139 change is that libraries and tools will now be built into
140 <tt>$builddir/Debug/{bin,lib}</tt>
141 instead of <tt>$builddir/tools/Debug</tt> and <tt>$builddir/lib/Debug</tt>
142 (Similarly for <tt>Release</tt> and <tt>Profile</tt> builds).
144 <li>The LLVM source code is much more compatible with Microsoft Visual C++,
145 including the JIT and runtime-code generation, though the entire system
146 may not work with it.
148 <li>The JIT-Target interfaces <a href="http://llvm.cs.uiuc.edu/PR283">are
149 now much simpler</a> and more powerful.
151 <li>LLVM now provides llvm-ar and llvm-ranlib tools for working with archives
152 of LLVM bytecode files.</li>
153 <li>zlib and libpng are <a href="http://llvm.cs.uiuc.edu/PR417">no longer
154 included in the main LLVM tarball</a>.</li>
155 <li>The LLVM code generator now automatically generates assembly code writers
156 from an abstract target descriptions, eliminating the need to write
157 assembly printers manually.</li>
158 <li>LLVM regression and feature tests now use DejaGNU instead of QMTest.</li>
164 <!--=========================================================================-->
165 <div class="doc_subsubsection">
166 In this release, the following missing features were implemented:
169 <div class="doc_text">
172 <li><a href="http://llvm.cs.uiuc.edu/PR419">JIT interface should support
175 <li>The <tt>llvm-ar</tt> tool was previously incomplete and didn't properly
176 support other ar(1) implementations. This has been corrected. <tt>llvm-ar</tt>
177 now fully supports all archive editing functions, table of contents listing,
178 extraction, and printing. It can also read BSD4.4/MacOSX and SVR4 style
179 archives. See <a href="CommandGuide/html/llvm-ar.html">llvm-ar</a> for
186 <!--=========================================================================-->
187 <div class="doc_subsubsection">
188 <a name="qualityofimp">In this release, the following Quality of Implementation
189 issues were fixed:</a>
192 <div class="doc_text">
195 <li>The linker no longer <a href="http://llvm.cs.uiuc.edu/PR426">emits many
196 useless warnings</a> when linking C++ programs.
198 <li>The LLVM <a href="http://llvm.cs.uiuc.edu/PR352">#include namespace</a>
199 has been made consistent. Files in <tt>llvm/include/{Support,Config}</tt>
200 are now located in <tt>llvm/include/llvm/{Support,Config}</tt>.
202 <li>The names of the libraries generated by compiling LLVM source have been
203 changed to ensure they do not conflict with other packages upon installation.
204 Each LLVM library is now prefixed with LLVM and uses mixed clase. For example,
205 the library <tt>libasmparser.a</tt> in 1.3 has become
206 <tt>libLLVMAsmParser.a</tt> in release 1.4.
208 <li>The C++ frontend no longer expands and emits <a
209 href="http://llvm.cs.uiuc.edu/PR459">all inline functions, even if they
210 are unused</a>. It now properly tracks which functions are needed and
211 only compiles those.</li>
213 <li>Many improvements in the <a href="http://llvm.cs.uiuc.edu/PR256">autoconf
214 and makefile systems</a> have been implemented.</li>
218 <!--=========================================================================-->
219 <div class="doc_subsubsection">
220 <a name="codequality">This release includes the following Code Quality
224 <div class="doc_text">
226 <li>The optimizer produces <a href="http://llvm.cs.uiuc.edu/PR362">more
227 efficient code for std::min/std::max</a> and other similar functions.</li>
228 <li>The X86 backend generates substantially faster code for floating point
229 intensive programs.</li>
230 <li>The PowerPC backend generates more efficient code in many common
235 <!--=========================================================================-->
236 <div class="doc_subsubsection">
237 <a name="bugfix">In this release, the following bugs in the previous release
241 <div class="doc_text">
243 <p>Bugs fixed in the LLVM Core:</p>
246 <li><a href="http://llvm.cs.uiuc.edu/PR420">[licm] LICM invalidates alias
247 analysis info and uses broken information</a> (optimizer crash)</li>
248 <li><a href="http://llvm.cs.uiuc.edu/PR422">[asmwriter] Asmwriter is really
249 slow for functions with lots of values</a></li>
250 <li><a href="http://llvm.cs.uiuc.edu/PR423">[anders-aa] Andersen's AA is
251 completely broken in LLVM 1.3</a></li>
252 <li><a href="http://llvm.cs.uiuc.edu/PR430">[bcwriter] Empty compaction
253 tables defined</a></li>
254 <li><a href="http://llvm.cs.uiuc.edu/PR227">[X86] llc output for functions
255 w/certain names tickles GNU 'as' bugs</a></li>
256 <li><a href="http://llvm.cs.uiuc.edu/PR472">[cbackend] Static globals are
257 prototyped as 'extern'</a></li>
260 <p>Bugs in the C/C++ front-end:</p>
263 <li><a href="http://llvm.cs.uiuc.edu/PR445">[llvmg++] not enough templates are
264 instantiated</a></li>
265 <li><a href="http://llvm.cs.uiuc.edu/PR450">[llvmg++] Extern const globals
266 cannot be marked 'constant' if they have nontrivial ctors or dtors</a></li>
267 <li><a href="http://llvm.cs.uiuc.edu/PR461">[llvmgcc] Crash compiling unnamed
268 bitfield which does not increase struct size</a></li>
269 <li><a href="http://llvm.cs.uiuc.edu/PR424">[llvmgcc] llvmgcc emits invalid
270 constant exprs</a></li>
271 <li><a href="http://llvm.cs.uiuc.edu/PR421">[llvmg++] Crash initializing
272 array with constructors in hard EH situations</a></li>
273 <li><a href="http://llvm.cs.uiuc.edu/PR397">[llvm-gcc] Inline function
274 redefinitions error due to 'asm' function rename</a></li>
275 <li><a href="http://llvm.cs.uiuc.edu/PR244">[llvm-gcc] Error when an
276 implicitly external function is re-declared as static</a></li>
277 <li><a href="http://llvm.cs.uiuc.edu/PR360">[llvmgcc] Structure field with
278 non-constant offset crashes llvmgcc</a></li>
279 <li><a href="http://llvm.cs.uiuc.edu/PR447">[llvmg++] Crash compiling
280 friend with default argument</a></li>
283 <p>Bugs fixed in the Sparc V9 back-end:</p>
286 <li><a href="http://llvm.cs.uiuc.edu/PR428">[sparcv9] regalloc assertion
287 failure with certain indirect calls</a></li>
292 <!-- *********************************************************************** -->
293 <div class="doc_section">
294 <a name="portability">Portability and Supported Platforms</a>
296 <!-- *********************************************************************** -->
298 <div class="doc_text">
300 <p>LLVM is known to work on the following platforms:</p>
303 <li>Intel and AMD machines running Red Hat Linux and FreeBSD (and probably
304 other unix-like systems).</li>
305 <li>Sun UltraSPARC workstations running Solaris 8.</li>
306 <li>Intel and AMD machines running on Win32 with the Cygwin libraries (limited
307 support is available for native builds with Visual C++).</li>
308 <li>PowerPC-based Mac OS X systems, running 10.2 and above.</li>
311 <p>The core LLVM infrastructure uses
312 <a href="http://www.gnu.org/software/autoconf/">GNU autoconf</a> to adapt itself
313 to the machine and operating system on which it is built. However, minor
314 porting may be required to get LLVM to work on new platforms. We welcome your
315 portability patches and reports of successful builds or error messages.</p>
318 <p>Note that the LLVM build system does not currently support directories with
319 spaces on them when running on Win32/cygwin. We strongly recommend running
320 LLVM and the C frontend out of a top-level directory without spaces (e.g.,
321 <tt>/cygdrive/c/llvm</tt>). Also, make sure to install <b>all</b> of the
322 cygwin packages. By default, many important tools are not installed that
323 are needed by the LLVM build process or test suite (e.g., /bin/time). Finally,
324 please make sure that there are no directories with spaces in them in your
325 PATH environment variable.</p>
330 <!-- *********************************************************************** -->
331 <div class="doc_section">
332 <a name="knownproblems">Known Problems</a>
334 <!-- *********************************************************************** -->
336 <div class="doc_text">
338 <p>This section contains all known problems with the LLVM system, listed by
339 component. As new problems are discovered, they will be added to these
340 sections. If you run into a problem, please check the <a
341 href="http://llvm.cs.uiuc.edu/bugs/">LLVM bug database</a> and submit a bug if
342 there isn't already one.</p>
346 <!-- ======================================================================= -->
347 <div class="doc_subsection">
348 <a name="experimental">Experimental features included with this release</a>
351 <div class="doc_text">
353 <p>The following components of this LLVM release are either untested, known to
354 be broken or unreliable, or are in early development. These components should
355 not be relied on, and bugs should not be filed against them, but they may be
356 useful to some people. In particular, if you would like to work on one of these
357 components, please contact us on the llvmdev list.</p>
360 <li>The following passes are incomplete or buggy, and may be removed in future
361 releases: <tt>-pgmdep, -memdep, -ipmodref, -cee, -branch-combine,
362 -instloops, -paths, -pre</tt></li>
363 <li>The <tt>llvm-db</tt> tool is in a very early stage of development, but can
364 be used to step through programs and inspect the stack.</li>
365 <li>The "iterative scan" register allocator (enabled with -regalloc=iterativescan)
371 <!-- ======================================================================= -->
372 <div class="doc_subsection">
373 <a name="core">Known problems with the LLVM Core</a>
376 <div class="doc_text">
379 <li>In the JIT, <tt>dlsym</tt> on a symbol compiled by the JIT will not work.
381 <li>The JIT does not use mutexes to protect its internal data structures. As
382 such, execution of a threaded program could cause these data structures to be
385 <li><a href="http://llvm.cs.uiuc.edu/PR240">The lower-invoke pass does not
386 mark values live across a setjmp as volatile</a>. This missing feature
387 only affects targets whose setjmp/longjmp libraries do not save and restore
388 the entire register file.</li>
392 <!-- ======================================================================= -->
393 <div class="doc_subsection">
394 <a name="c-fe">Known problems with the C front-end</a>
397 <!-- _______________________________________________________________________ -->
398 <div class="doc_subsubsection">Bugs</div>
400 <div class="doc_text">
402 <li>C99 Variable sized arrays do not release stack memory when they go out of
403 scope. Thus, the following program may run out of stack space:
405 for (i = 0; i != 1000000; ++i) {
411 <li>Initialization of global union variables can only be done <a
412 href="http://llvm.cs.uiuc.edu/PR162">with the largest union member</a>.</li>
417 <!-- _______________________________________________________________________ -->
418 <div class="doc_subsubsection">
422 <div class="doc_text">
426 <li>Inline assembly is not yet supported.</li>
428 <li>"long double" is transformed by the front-end into "double". There is no
429 support for floating point data types of any size other than 32 and 64
432 <li>The following Unix system functionality has not been tested and may not
435 <li><tt>sigsetjmp</tt>, <tt>siglongjmp</tt> - These are not turned into the
436 appropriate <tt>invoke</tt>/<tt>unwind</tt> instructions. Note that
437 <tt>setjmp</tt> and <tt>longjmp</tt> <em>are</em> compiled correctly.
438 <li><tt>getcontext</tt>, <tt>setcontext</tt>, <tt>makecontext</tt>
439 - These functions have not been tested.
442 <li>Although many GCC extensions are supported, some are not. In particular,
443 the following extensions are known to <b>not be</b> supported:
445 <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Local-Labels.html#Local%20Labels">Local Labels</a>: Labels local to a block.</li>
446 <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>
447 <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Constructing-Calls.html#Constructing%20Calls">Constructing Calls</a>: Dispatching a call to another function.</li>
448 <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>
449 <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Constraints.html#Constraints">Constraints</a>: Constraints for asm operands.</li>
450 <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>
451 <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>
452 <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>
453 <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>
454 <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Thread_002dLocal.html">Thread-Local</a>: Per-thread variables.</li>
455 <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Pragmas.html#Pragmas">Pragmas</a>: Pragmas accepted by GCC.</li>
458 <p>The following GCC extensions are <b>partially</b> supported. An ignored
459 attribute means that the LLVM compiler ignores the presence of the attribute,
460 but the code should still work. An unsupported attribute is one which is
461 ignored by the LLVM compiler and will cause a different interpretation of
465 <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Variable-Length.html#Variable%20Length">Variable Length</a>:
466 Arrays whose length is computed at run time.<br>
467 Supported, but allocated stack space is not freed until the function returns (noted above).</li>
469 <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html#Function%20Attributes">Function Attributes</a>:
471 Declaring that functions have no side effects or that they can never
474 <b>Supported:</b> <tt>format</tt>, <tt>format_arg</tt>, <tt>non_null</tt>,
475 <tt>noreturn</tt>, <tt>constructor</tt>, <tt>destructor</tt>,
477 <tt>deprecated</tt>, <tt>warn_unused_result</tt>, <tt>weak</tt><br>
479 <b>Ignored:</b> <tt>noinline</tt>,
480 <tt>always_inline</tt>, <tt>pure</tt>, <tt>const</tt>, <tt>nothrow</tt>,
481 <tt>malloc</tt>, <tt>no_instrument_function</tt>, <tt>cdecl</tt><br>
483 <b>Unsupported:</b> <tt>used</tt>, <tt>section</tt>, <tt>alias</tt>,
484 <tt>visibility</tt>, <tt>regparm</tt>, <tt>stdcall</tt>,
485 <tt>fastcall</tt>, all other target specific attributes</li>
487 <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Variable-Attributes.html#Variable%20Attributes">Variable Attributes</a>:
488 Specifying attributes of variables.<br>
489 <b>Supported:</b> <tt>cleanup</tt>, <tt>common</tt>, <tt>nocommon</tt>,
490 <tt>deprecated</tt>, <tt>transparent_union</tt>,
491 <tt>unused</tt>, <tt>weak</tt><br>
493 <b>Unsupported:</b> <tt>aligned</tt>, <tt>mode</tt>, <tt>packed</tt>,
494 <tt>section</tt>, <tt>shared</tt>, <tt>tls_model</tt>,
495 <tt>vector_size</tt>, <tt>dllimport</tt>,
496 <tt>dllexport</tt>, all target specific attributes.</li>
498 <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Type-Attributes.html#Type%20Attributes">Type Attributes</a>: Specifying attributes of types.<br>
499 <b>Supported:</b> <tt>transparent_union</tt>, <tt>unused</tt>,
500 <tt>deprecated</tt>, <tt>may_alias</tt><br>
502 <b>Unsupported:</b> <tt>aligned</tt>, <tt>packed</tt>,
503 all target specific attributes.</li>
505 <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html#Other%20Builtins">Other Builtins</a>:
506 Other built-in functions.<br>
507 We support all builtins which have a C language equivalent (e.g.,
508 <tt>__builtin_cos</tt>), <tt>__builtin_alloca</tt>,
509 <tt>__builtin_types_compatible_p</tt>, <tt>__builtin_choose_expr</tt>,
510 <tt>__builtin_constant_p</tt>, and <tt>__builtin_expect</tt>
511 (currently ignored). We also support builtins for ISO C99 floating
512 point comparison macros (e.g., <tt>__builtin_islessequal</tt>).</li>
515 <p>The following extensions <b>are</b> known to be supported:</p>
518 <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>
519 <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Statement-Exprs.html#Statement%20Exprs">Statement Exprs</a>: Putting statements and declarations inside expressions.</li>
520 <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>
521 <li><a href="http://gcc.gnu.org/onlinedocs/gcc-3.4.0/gcc/Lvalues.html#Lvalues">Lvalues</a>: Using <code>?:</code>, "<code>,</code>" and casts in lvalues.</li>
522 <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Conditionals.html#Conditionals">Conditionals</a>: Omitting the middle operand of a <code>?:</code> expression.</li>
523 <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Long-Long.html#Long%20Long">Long Long</a>: Double-word integers.</li>
524 <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Complex.html#Complex">Complex</a>: Data types for complex numbers.</li>
525 <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Hex-Floats.html#Hex%20Floats">Hex Floats</a>:Hexadecimal floating-point constants.</li>
526 <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Zero-Length.html#Zero%20Length">Zero Length</a>: Zero-length arrays.</li>
527 <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Empty-Structures.html#Empty%20Structures">Empty Structures</a>: Structures with no members.</li>
528 <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>
529 <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Escaped-Newlines.html#Escaped%20Newlines">Escaped Newlines</a>: Slightly looser rules for escaped newlines.</li>
530 <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>
531 <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>
532 <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Initializers.html#Initializers">Initializers</a>: Non-constant initializers.</li>
533 <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Compound-Literals.html#Compound%20Literals">Compound Literals</a>: Compound literals give structures, unions,
534 or arrays as values.</li>
535 <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Designated-Inits.html#Designated%20Inits">Designated Inits</a>: Labeling elements of initializers.</li>
536 <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>
537 <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Case-Ranges.html#Case%20Ranges">Case Ranges</a>: `case 1 ... 9' and such.</li>
538 <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Mixed-Declarations.html#Mixed%20Declarations">Mixed Declarations</a>: Mixing declarations and code.</li>
539 <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Function-Prototypes.html#Function%20Prototypes">Function Prototypes</a>: Prototype declarations and old-style definitions.</li>
540 <li><a href="http://gcc.gnu.org/onlinedocs/gcc/C_002b_002b-Comments.html#C_002b_002b-Comments">C++ Comments</a>: C++ comments are recognized.</li>
541 <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Dollar-Signs.html#Dollar%20Signs">Dollar Signs</a>: Dollar sign is allowed in identifiers.</li>
542 <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Character-Escapes.html#Character%20Escapes">Character Escapes</a>: <code>\e</code> stands for the character <ESC>.</li>
543 <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Alignment.html#Alignment">Alignment</a>: Inquiring about the alignment of a type or variable.</li>
544 <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Inline.html#Inline">Inline</a>: Defining inline functions (as fast as macros).</li>
545 <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>
546 <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>
547 <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>
548 <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>
549 <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>
550 <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Attribute-Syntax.html#Attribute%20Syntax">Attribute Syntax</a>: Formal syntax for attributes.</li>
555 <p>If you run into GCC extensions which have not been included in any of these
556 lists, please let us know (also including whether or not they work).</p>
560 <!-- ======================================================================= -->
561 <div class="doc_subsection">
562 <a name="c++-fe">Known problems with the C++ front-end</a>
565 <div class="doc_text">
567 <p>For this release, the C++ front-end is considered to be fully
568 tested and works for a number of non-trivial programs, including LLVM
573 <!-- _______________________________________________________________________ -->
574 <div class="doc_subsubsection">Bugs</div>
576 <div class="doc_text">
579 <li>The C++ front-end inherits all problems afflicting the <a href="#c-fe">C
582 <li><b>IA-64 specific</b>: The C++ front-end does not use <a
583 href="http://llvm.cs.uiuc.edu/PR406">IA64 ABI compliant layout of v-tables</a>.
584 In particular, it just stores function pointers instead of function
585 descriptors in the vtable. This bug prevents mixing C++ code compiled with
586 LLVM with C++ objects compiled by other C++ compilers.</li>
592 <!-- _______________________________________________________________________ -->
593 <div class="doc_subsubsection">
597 <div class="doc_text">
601 <li>The C++ front-end is based on a pre-release of the GCC 3.4 C++ parser. This
602 parser is significantly more standards compliant (and picky) than prior GCC
603 versions. For more information, see the C++ section of the <a
604 href="http://gcc.gnu.org/gcc-3.4/changes.html">GCC 3.4 release notes</a>.</li>
606 <li>Destructors for local objects are not always run when a <tt>longjmp</tt> is
607 performed. In particular, destructors for objects in the <tt>longjmp</tt>ing
608 function and in the <tt>setjmp</tt> receiver function may not be run.
609 Objects in intervening stack frames will be destroyed, however (which is
610 better than most compilers).</li>
612 <li>The LLVM C++ front-end follows the <a
613 href="http://www.codesourcery.com/cxx-abi">Itanium C++ ABI</a>.
614 This document, which is not Itanium specific, specifies a standard for name
615 mangling, class layout, v-table layout, RTTI formats, and other C++
616 representation issues. Because we use this API, code generated by the LLVM
617 compilers should be binary compatible with machine code generated by other
618 Itanium ABI C++ compilers (such as G++, the Intel and HP compilers, etc).
619 <i>However</i>, the exception handling mechanism used by LLVM is very
620 different from the model used in the Itanium ABI, so <b>exceptions will not
621 interact correctly</b>. </li>
627 <!-- ======================================================================= -->
628 <div class="doc_subsection">
629 <a name="x86-be">Known problems with the X86 back-end</a>
632 <div class="doc_text">
640 <!-- ======================================================================= -->
641 <div class="doc_subsection">
642 <a name="sparcv9-be">Known problems with the SparcV9 back-end</a>
645 <div class="doc_text">
648 <li><a href="http://llvm.cs.uiuc.edu/PR60">[sparcv9] SparcV9 backend miscompiles
649 several programs in the LLVM test suite</a></li>
654 <!-- ======================================================================= -->
655 <div class="doc_subsection">
656 <a name="ppc-be">Known problems with the PowerPC back-end</a>
659 <div class="doc_text">
667 <!-- ======================================================================= -->
668 <div class="doc_subsection">
669 <a name="c-be">Known problems with the C back-end</a>
672 <div class="doc_text">
676 <li>The C back-end produces code that violates the ANSI C Type-Based Alias
677 Analysis rules. As such, special options may be necessary to compile the code
678 (for example, GCC requires the <tt>-fno-strict-aliasing</tt> option). This
679 problem probably cannot be fixed.</li>
681 <li><a href="http://llvm.cs.uiuc.edu/PR56">Zero arg vararg functions are not
682 supported</a>. This should not affect LLVM produced by the C or C++
689 <!-- *********************************************************************** -->
690 <div class="doc_section">
691 <a name="additionalinfo">Additional Information</a>
693 <!-- *********************************************************************** -->
695 <div class="doc_text">
697 <p>A wide variety of additional information is available on the LLVM web page,
698 including mailing lists and publications describing algorithms and components
699 implemented in LLVM. The web page also contains versions of the API
700 documentation which is up-to-date with the CVS version of the source code. You
701 can access versions of these documents specific to this release by going into
702 the "<tt>llvm/doc/</tt>" directory in the LLVM tree.</p>
704 <p>If you have any questions or comments about LLVM, please feel free to contact
705 us via the <a href="http://mail.cs.uiuc.edu/mailman/listinfo/llvmdev">mailing
710 <!-- *********************************************************************** -->
714 <a href="http://jigsaw.w3.org/css-validator/check/referer"><img
715 src="http://jigsaw.w3.org/css-validator/images/vcss" alt="Valid CSS!"></a>
716 <a href="http://validator.w3.org/check/referer"><img
717 src="http://www.w3.org/Icons/valid-html401" alt="Valid HTML 4.01!" /></a>
719 <a href="http://llvm.cs.uiuc.edu">The LLVM Compiler Infrastructure</a><br>
720 Last modified: $Date$