blob: 076c5e5d839eb9f470e2b7dccd2a57d88141da0a [file] [log] [blame]
Bill Wendlingad0116e2013-12-16 19:53:36 +00001=======================
2Clang 3.4 Release Notes
3=======================
Sean Silvadebc0182012-12-23 01:19:35 +00004
5.. contents::
6 :local:
7 :depth: 2
8
Sean Silvadebc0182012-12-23 01:19:35 +00009Introduction
10============
11
12This document contains the release notes for the Clang C/C++/Objective-C
Bill Wendlinga03209e2013-06-04 06:17:46 +000013frontend, part of the LLVM Compiler Infrastructure, release 3.4. Here we
Sean Silvadebc0182012-12-23 01:19:35 +000014describe the status of Clang in some detail, including major
15improvements from the previous release and new feature work. For the
16general LLVM release notes, see `the LLVM
17documentation <http://llvm.org/docs/ReleaseNotes.html>`_. All LLVM
18releases may be downloaded from the `LLVM releases web
19site <http://llvm.org/releases/>`_.
20
21For more information about Clang or LLVM, including information about
Gabor Greif3cb8e312013-12-16 11:18:18 +000022the latest release, please check out the main `Clang Web
Sean Silvadebc0182012-12-23 01:19:35 +000023Site <http://clang.llvm.org>`_ or the `LLVM Web
24Site <http://llvm.org>`_.
25
26Note that if you are reading this file from a Subversion checkout or the
27main Clang web page, this document applies to the *next* release, not
28the current one. To see the release notes for a specific release, please
29see the `releases page <http://llvm.org/releases/>`_.
30
Bill Wendlinga03209e2013-06-04 06:17:46 +000031What's New in Clang 3.4?
Sean Silvadebc0182012-12-23 01:19:35 +000032========================
33
34Some of the major new features and improvements to Clang are listed
35here. Generic improvements to Clang as a whole or to its underlying
36infrastructure are described first, followed by language-specific
37sections with improvements to Clang's support for those languages.
38
Chandler Carruthfe1088d2013-11-07 00:26:32 +000039Last release which will build as C++98
40--------------------------------------
41
42This is expected to be the last release of Clang which compiles using a C++98
43toolchain. We expect to start using some C++11 features in Clang starting after
44this release. That said, we are committed to supporting a reasonable set of
45modern C++ toolchains as the host compiler on all of the platforms. This will
46at least include Visual Studio 2012 on Windows, and Clang 3.1 or GCC 4.7.x on
47Mac and Linux. The final set of compilers (and the C++11 features they support)
48is not set in stone, but we wanted users of Clang to have a heads up that the
49next release will involve a substantial change in the host toolchain
50requirements.
51
52Note that this change is part of a change for the entire LLVM project, not just
53Clang.
54
Sean Silvadebc0182012-12-23 01:19:35 +000055Major New Features
56------------------
57
58Improvements to Clang's diagnostics
59^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
60
61Clang's diagnostics are constantly being improved to catch more issues,
62explain them more clearly, and provide more accurate source information
Bill Wendlinga03209e2013-06-04 06:17:46 +000063about them. The improvements since the 3.3 release include:
Sean Silvadebc0182012-12-23 01:19:35 +000064
Richard Trieu06907e12013-12-03 01:35:18 +000065- -Wheader-guard warns on mismatches between the #ifndef and #define lines
66 in a header guard.
67- -Wlogical-not-parentheses warns when a logical not ('!') only applies to the
68 left-hand side of a comparison. This warning is part of -Wparentheses.
69- Boolean increment, a deprecated feature, has own warning flag
70 -Wdeprecated-increment-bool, and is still part of -Wdeprecated.
71- Clang errors on builtin enum increments and decrements.
Sylvestre Ledruaa7fc192013-12-13 11:30:23 +000072- -Wloop-analysis now warns on for-loops which have the same increment or
Richard Trieu06907e12013-12-03 01:35:18 +000073 decrement in the loop header as the last statement in the loop.
74- -Wuninitialized now performs checking across field initializers to detect
75 when one field in used uninitialized in another field initialization.
76- Clang can detect initializer list use inside a macro and suggest parentheses
77 if possible to fix.
Kaelyn Uhrainb4ec8b12013-12-04 02:25:41 +000078- Many improvements to Clang's typo correction facilities, such as:
Richard Smithf1a28372013-12-12 02:26:06 +000079
Kaelyn Uhrainb4ec8b12013-12-04 02:25:41 +000080 + Adding global namespace qualifiers so that corrections can refer to shadowed
81 or otherwise ambiguous or unreachable namespaces.
82 + Including accessible class members in the set of typo correction candidates,
83 so that corrections requiring a class name in the name specifier are now
84 possible.
85 + Allowing typo corrections that involve removing a name specifier.
86 + In some situations, correcting function names when a function was given the
87 wrong number of arguments, including situations where the original function
88 name was correct but was shadowed by a lexically closer function with the
89 same name yet took a different number of arguments.
90 + Offering typo suggestions for 'using' declarations.
91 + Providing better diagnostics and fixit suggestions in more situations when
92 a '->' was used instead of '.' or vice versa.
93 + Providing more relevant suggestions for typos followed by '.' or '='.
94 + Various performance improvements when searching for typo correction
95 candidates.
Sean Silvadebc0182012-12-23 01:19:35 +000096
Bill Wendlingad0116e2013-12-16 19:53:36 +000097- `LeakSanitizer <LeakSanitizer.rst>`_ is an experimental memory leak detector
98 which can be combined with AddressSanitizer.
99
Sean Silvadebc0182012-12-23 01:19:35 +0000100New Compiler Flags
101------------------
102
Rafael Espindola3b0f62b2013-08-23 21:49:00 +0000103- Clang no longer special cases -O4 to enable lto. Explicitly pass -flto to
104 enable it.
Richard Smith22540da2013-12-12 02:20:54 +0000105- Clang no longer fails on >= -O5. These flags are mapped to -O3 instead.
Sylvestre Ledru762e5672013-11-18 13:23:07 +0000106- Command line "clang -O3 -flto a.c -c" and "clang -emit-llvm a.c -c"
Shuxin Yang8b498542013-08-23 22:01:03 +0000107 are no longer equivalent.
Rafael Espindola3dd4dd62013-10-16 16:32:17 +0000108- Clang now errors on unknown -m flags (``-munknown-to-clang``),
109 unknown -f flags (``-funknown-to-clang``) and unknown
110 options (``-what-is-this``).
Sean Silvadebc0182012-12-23 01:19:35 +0000111
112C Language Changes in Clang
113---------------------------
114
Michael Gottesman98d1ec12013-06-20 23:28:10 +0000115- Added new checked arithmetic builtins for security critical applications.
116
Sean Silvadebc0182012-12-23 01:19:35 +0000117C11 Feature Support
118^^^^^^^^^^^^^^^^^^^
119
120...
121
122C++ Language Changes in Clang
123-----------------------------
124
Eli Friedman65400522013-07-20 01:06:31 +0000125- Fixed an ABI regression, introduced in Clang 3.2, which affected
126 member offsets for classes inheriting from certain classes with tail padding.
127 See PR16537.
128
Richard Smith22540da2013-12-12 02:20:54 +0000129- Clang 3.4 supports the 2013-08-28 draft of the ISO WG21 SG10 feature test
130 macro recommendations. These aim to provide a portable method to determine
131 whether a compiler supports a language feature, much like Clang's
Richard Smithf1a28372013-12-12 02:26:06 +0000132 |has_feature macro|_.
Rafael Espindola40db5152013-04-09 12:51:24 +0000133
Richard Smithf1a28372013-12-12 02:26:06 +0000134.. |has_feature macro| replace:: ``__has_feature`` macro
135.. _has_feature macro: LanguageExtensions.html#has-feature-and-has-extension
Richard Smith22540da2013-12-12 02:20:54 +0000136
137C++1y Feature Support
Sean Silvadebc0182012-12-23 01:19:35 +0000138^^^^^^^^^^^^^^^^^^^^^
139
Richard Smith22540da2013-12-12 02:20:54 +0000140Clang 3.4 supports all the features in the current working draft of the
141upcoming C++ standard, provisionally named C++1y. Support for the following
142major new features has been added since Clang 3.3:
143
144- Generic lambdas and initialized lambda captures.
145- Deduced function return types (``auto f() { return 0; }``).
146- Generalized ``constexpr`` support (variable mutation and loops).
147- Variable templates and static data member templates.
148- Use of ``'`` as a digit separator in numeric literals.
149- Support for sized ``::operator delete`` functions.
150
151In addition, ``[[deprecated]]`` is now accepted as a synonym for Clang's
152existing ``deprecated`` attribute.
153
154Use ``-std=c++1y`` to enable C++1y mode.
Sean Silvadebc0182012-12-23 01:19:35 +0000155
156Objective-C Language Changes in Clang
157-------------------------------------
158
159...
160
Erik Schnettera87219b2013-11-11 06:36:33 +0000161OpenCL C Language Changes in Clang
162----------------------------------
163
164- OpenCL C "long" now always has a size of 64 bit, and all OpenCL C
165 types are aligned as specified in the OpenCL C standard. Also,
166 "char" is now always signed.
167
Sean Silvadebc0182012-12-23 01:19:35 +0000168Internal API Changes
169--------------------
170
Bill Wendlinga03209e2013-06-04 06:17:46 +0000171These are major API changes that have happened since the 3.3 release of
Sean Silvadebc0182012-12-23 01:19:35 +0000172Clang. If upgrading an external codebase that uses Clang as a library,
173this section should help get you past the largest hurdles of upgrading.
174
Hans Wennborg0437e0d2013-05-20 14:53:06 +0000175Wide Character Types
176^^^^^^^^^^^^^^^^^^^^
177
178The ASTContext class now keeps track of two different types for wide character
179types: WCharTy and WideCharTy. WCharTy represents the built-in wchar_t type
180available in C++. WideCharTy is the type used for wide character literals; in
181C++ it is the same as WCharTy, but in C99, where wchar_t is a typedef, it is an
182integer type.
183
Sean Silvadebc0182012-12-23 01:19:35 +0000184...
185
Ted Kremenek230fc372013-04-24 07:33:52 +0000186libclang
187--------
188
Bill Wendlinga03209e2013-06-04 06:17:46 +0000189...
Ted Kremenek230fc372013-04-24 07:33:52 +0000190
Anna Zaks08741a02013-04-25 23:14:38 +0000191Static Analyzer
Ted Kremenek1377a462013-04-26 00:01:34 +0000192---------------
Anna Zaks08741a02013-04-25 23:14:38 +0000193
Sylvestre Ledru309dd092013-12-16 10:43:55 +0000194The static analyzer has been greatly improved. This impacts the overall analyzer quality and reduces a number of false positives.
195In particular, this release provides enhanced C++ support, reasoning about initializer lists, zeroing constructors, noreturn destructors and modeling of destructor calls on calls to delete.
Sylvestre Ledruaa7fc192013-12-13 11:30:23 +0000196
Daniel Jasper87ddfdd2013-12-11 14:41:33 +0000197Clang Format
198------------
199
200Clang now includes a new tool ``clang-format`` which can be used to
201automatically format C, C++ and Objective-C source code. ``clang-format``
202automatically chooses linebreaks and indentation and can be easily integrated
203into editors, IDEs and version control systems. It supports several pre-defined
204styles as well as precise style control using a multitude of formatting
205options. ``clang-format`` itself is just a thin wrapper around a library which
206can also be used directly from code refactoring and code translation tools.
207More information can be found on `Clang Format's
208site <http://clang.llvm.org/docs/ClangFormat.html>`_.
209
Hans Wennborga6c18502013-12-02 22:38:55 +0000210Windows Support
211---------------
212
Richard Smith94aaee22013-12-12 02:30:46 +0000213- `clang-cl <UsersManual.html#clang-cl>`_ provides a new driver mode that is
Hans Wennborga6c18502013-12-02 22:38:55 +0000214 designed for compatibility with Visual Studio's compiler, cl.exe. This driver
Hans Wennborg70cb8382013-12-09 20:00:25 +0000215 mode makes Clang accept the same kind of command-line options as cl.exe. The
216 installer will attempt to expose clang-cl in any Visual Studio installations
217 on the system as a Platform Toolset, e.g. "LLVM-vs2012". clang-cl targets the
218 Microsoft ABI by default. Please note that this driver mode and compatibility
219 with the MS ABI is highly experimental.
Hans Wennborga6c18502013-12-02 22:38:55 +0000220
Ted Kremenek1377a462013-04-26 00:01:34 +0000221Core Analysis Improvements
222==========================
223
Bill Wendlinga03209e2013-06-04 06:17:46 +0000224- ...
Ted Kremenek1377a462013-04-26 00:01:34 +0000225
226New Issues Found
227================
228
Bill Wendlinga03209e2013-06-04 06:17:46 +0000229- ...
Anna Zaks08741a02013-04-25 23:14:38 +0000230
Sean Silvadebc0182012-12-23 01:19:35 +0000231Python Binding Changes
232----------------------
233
234The following methods have been added:
235
236- ...
237
238Significant Known Problems
239==========================
240
241Additional Information
242======================
243
244A wide variety of additional information is available on the `Clang web
245page <http://clang.llvm.org/>`_. The web page contains versions of the
Gabor Greif3cb8e312013-12-16 11:18:18 +0000246API documentation which are up-to-date with the Subversion revision of
Sean Silvadebc0182012-12-23 01:19:35 +0000247the source code. You can access versions of these documents specific to
248this release by going into the "``clang/docs/``" directory in the Clang
249tree.
250
251If you have any questions or comments about Clang, please feel free to
252contact us via the `mailing
253list <http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev>`_.