New in version 3.4
January 6th, 2014
- This is a big new release with a lot of features. Clang now supports all of the features in the current working draft of the upcoming C++ standard, provisionally named C++1y. The static analyzer has greatly improved C++ support, produces fewer false positives and catches more bugs. Clang also includes a few new capabilities: 1) a tool called "clang-format" which can be used in an IDE or text editor to auto-format your code according to builtin styles, and 2) a new (experimental!) driver designed for drop-in compatibility with Visual Studio on Windows. In the code generator, overall performance is greatly increased. Notably, the loop auto-vectorizer is now enabled at -Os and -O2 in addition to -O3 (with appropriately tuned heuristics for each level). The SLP ("straight-line code") auto-vectorizer is now enabled by default as well. Many targets have made major leaps, but the R600 target is now built by default (instead of experimental), the PowerPC backend has made several major improvements to code generation quality and compile time, and the X86, SPARC, ARM32, Aarch64 and SystemZ backends have all seen major feature work. In addition to all of the improvements, there is one notable change: clang -O4 now no longer implicitly enables link-time optimization. LTO continues to be available with the -flto flag, and can be enabled at any optimization level. To get the previous -O4 behavior, simply use "clang -O3 -flto". In addition, LLVM 3.4 will be the last release that will build with a plain C++'98 compiler. Future releases will require some C++'11 support in the host compiler to build. LLVM 3.4 is the result of an incredible number of people working together over the last six months, but this release would not be possible without our volunteer release team! Thanks to Bill Wendling for making it all possible by shepherding the release, and to the awesome release testers: Arnaud A. de Grandmaison, Ben Pope, Dimitry Andric, Duncan Sands, Erik Verbruggen, Hans Wennborg, Nikola Smiljanic, Paweł Worach, Rafael Espíndola, Renato Golin, Sebastian Dreßler, Sylvestre Ledru, and Tom Stellard.
New in version 3.2 (December 21st, 2012)
- This release includes a huge number of bug fixes, performance tweaks and minor improvements.
New in version 3.1 (May 23rd, 2012)
- Partial support for gcc-4.7. Ada support is poor, but other languages work fairly well.
- Support for ARM processors. Some essential gcc headers that are needed to build DragonEgg for ARM are not installed by gcc. To work around this, copy the missing headers from the gcc source tree.
- Better optimization for Fortran by exploiting the fact that Fortran scalar arguments have 'restrict' semantics.
- Better optimization for all languages by passing information about type aliasing and type ranges to the LLVM optimizers.
- A regression test-suite was added.
New in version 3.0 (December 2nd, 2011)
- Greatly improved support for building C++ applications, with greater stability and better diagnostics.
- Improved support for the C++ 2011 standard (aka "C++'0x"), including implementations of non-static data member initializers, alias templates, delegating constructors, range-based for loops, and implicitly-generated move constructors and move assignment operators, among others.
- Implemented support for some features of the upcoming C1x standard, including static assertions and generic selections.
- Better detection of include and linking paths for system headers and libraries, especially for Linux distributions.
- Several improvements to Objective-C support, including:
- Automatic Reference Counting (ARC) and an improved memory model cleanly separating object and C memory.
- A migration tool for moving manual retain/release code to ARC
- Better support for data hiding, allowing instance variables to be declared in implementation contexts or class extensions
- Weak linking support for Objective-C classes
- Improved static type checking by inferring the return type of methods such as +alloc and -init.
- Some new Objective-C features require either the Mac OS X 10.7 / iOS 5 Objective-C runtime, or version 1.6 or later of the GNUstep Objective-C runtime version.
- Implemented a number of optimizations in libclang, the Clang C interface, to improve the performance of code completion and the mapping from source locations to abstract syntax tree nodes.
New in version 2.9 (April 7th, 2011)
- Type Based Alias Analysis (TBAA) is now implemented and turned on by default in Clang. This allows substantially better load/store optimization in some cases. TBAA can be disabled by passing -fno-strict-aliasing.
- This release has seen a continued focus on quality of debug information. LLVM now generates much higher fidelity debug information, particularly when debugging optimized code.
- Inline assembly now supports multiple alternative constraints.
- A new backend for the NVIDIA PTX virtual ISA (used to target its GPUs) is under rapid development. It is not generally useful in 2.9, but is making rapid progress.
New in version 2.7 (April 27th, 2010)
- C++ Support: Clang is now capable of self-hosting! While still alpha-quality, Clang's C++ support has matured enough to build LLVM and Clang, and C++ is now enabled by default. See the Clang C++ compatibility page for common C++ migration issues.
- Objective-C: Clang now includes experimental support for an updated Objective-C ABI on non-Darwin platforms. This includes support for non-fragile instance variables and accelerated proxies, as well as greater potential for future optimisations. The new ABI is used when compiling with the -fobjc-nonfragile-abi and -fgnu-runtime options. Code compiled with these options may be mixed with code compiled with GCC or clang using the old GNU ABI, but requires the libobjc2 runtime from the GNUstep project.
- New warnings: Clang contains a number of new warnings, including control-flow warnings (unreachable code, missing return statements in a non-void function, etc.), sign-comparison warnings, and improved format-string warnings.
- CIndex API and Python bindings: Clang now includes a C API as part of the CIndex library. Although we may make some changes to the API in the future, it is intended to be stable and has been designed for use by external projects. See the Clang doxygen CIndex documentation for more details. The CIndex API also includes a preliminary set of Python bindings.
- ARM Support: Clang now has ABI support for both the Darwin and Linux ARM ABIs. Coupled with many improvements to the LLVM ARM backend, Clang is now suitable for use as a beta quality ARM compiler.
New in version 2.5 (March 3rd, 2009)
- Clang now has a new driver, which is focused on providing a GCC-compatible interface.
- The X86-64 ABI is now supported, including support for the Apple 64-bit Objective-C runtime and zero cost exception handling.
- Precompiled header support is now implemented.
- Objective-C support is significantly improved beyond LLVM 2.4, supporting many features, such as Objective-C Garbage Collection.
- Variable length arrays are now fully supported.
- C99 designated initializers are now fully supported.
- Clang now includes all major compiler headers, including a redesigned tgmath.h and several more intrinsic headers.
- Many many bugs are fixed and many features have been added.