blob: 480c85aafcee561939793980cc7853e3463d55ab [file] [log] [blame]
Sean Silva28c1f752013-01-02 22:05:33 +00001=====================================
Bill Wendlinga03209e2013-06-04 06:17:46 +00002Clang 3.4 (In-Progress) Release Notes
Sean Silva28c1f752013-01-02 22:05:33 +00003=====================================
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
22the latest release, please check out the main please see the `Clang Web
23Site <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.
72- -Wloop-analysis now warns on for-loops which have the same increment or
73 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:
79 + Adding global namespace qualifiers so that corrections can refer to shadowed
80 or otherwise ambiguous or unreachable namespaces.
81 + Including accessible class members in the set of typo correction candidates,
82 so that corrections requiring a class name in the name specifier are now
83 possible.
84 + Allowing typo corrections that involve removing a name specifier.
85 + In some situations, correcting function names when a function was given the
86 wrong number of arguments, including situations where the original function
87 name was correct but was shadowed by a lexically closer function with the
88 same name yet took a different number of arguments.
89 + Offering typo suggestions for 'using' declarations.
90 + Providing better diagnostics and fixit suggestions in more situations when
91 a '->' was used instead of '.' or vice versa.
92 + Providing more relevant suggestions for typos followed by '.' or '='.
93 + Various performance improvements when searching for typo correction
94 candidates.
Sean Silvadebc0182012-12-23 01:19:35 +000095
Sean Silvadebc0182012-12-23 01:19:35 +000096New Compiler Flags
97------------------
98
Rafael Espindola3b0f62b2013-08-23 21:49:00 +000099- Clang no longer special cases -O4 to enable lto. Explicitly pass -flto to
100 enable it.
Richard Smith22540da2013-12-12 02:20:54 +0000101- Clang no longer fails on >= -O5. These flags are mapped to -O3 instead.
Sylvestre Ledru762e5672013-11-18 13:23:07 +0000102- Command line "clang -O3 -flto a.c -c" and "clang -emit-llvm a.c -c"
Shuxin Yang8b498542013-08-23 22:01:03 +0000103 are no longer equivalent.
Rafael Espindola3dd4dd62013-10-16 16:32:17 +0000104- Clang now errors on unknown -m flags (``-munknown-to-clang``),
105 unknown -f flags (``-funknown-to-clang``) and unknown
106 options (``-what-is-this``).
Sean Silvadebc0182012-12-23 01:19:35 +0000107
108C Language Changes in Clang
109---------------------------
110
Michael Gottesman98d1ec12013-06-20 23:28:10 +0000111- Added new checked arithmetic builtins for security critical applications.
112
Sean Silvadebc0182012-12-23 01:19:35 +0000113C11 Feature Support
114^^^^^^^^^^^^^^^^^^^
115
116...
117
118C++ Language Changes in Clang
119-----------------------------
120
Eli Friedman65400522013-07-20 01:06:31 +0000121- Fixed an ABI regression, introduced in Clang 3.2, which affected
122 member offsets for classes inheriting from certain classes with tail padding.
123 See PR16537.
124
Richard Smith22540da2013-12-12 02:20:54 +0000125- Clang 3.4 supports the 2013-08-28 draft of the ISO WG21 SG10 feature test
126 macro recommendations. These aim to provide a portable method to determine
127 whether a compiler supports a language feature, much like Clang's
128 |__has_feature macro|_.
Rafael Espindola40db5152013-04-09 12:51:24 +0000129
Richard Smith22540da2013-12-12 02:20:54 +0000130.. |__has_feature macro| replace:: ``__has_feature`` macro
131.. ___has_feature macro: LanguageExtensions.html#has-feature-and-has-extension
132
133C++1y Feature Support
Sean Silvadebc0182012-12-23 01:19:35 +0000134^^^^^^^^^^^^^^^^^^^^^
135
Richard Smith22540da2013-12-12 02:20:54 +0000136Clang 3.4 supports all the features in the current working draft of the
137upcoming C++ standard, provisionally named C++1y. Support for the following
138major new features has been added since Clang 3.3:
139
140- Generic lambdas and initialized lambda captures.
141- Deduced function return types (``auto f() { return 0; }``).
142- Generalized ``constexpr`` support (variable mutation and loops).
143- Variable templates and static data member templates.
144- Use of ``'`` as a digit separator in numeric literals.
145- Support for sized ``::operator delete`` functions.
146
147In addition, ``[[deprecated]]`` is now accepted as a synonym for Clang's
148existing ``deprecated`` attribute.
149
150Use ``-std=c++1y`` to enable C++1y mode.
Sean Silvadebc0182012-12-23 01:19:35 +0000151
152Objective-C Language Changes in Clang
153-------------------------------------
154
155...
156
Erik Schnettera87219b2013-11-11 06:36:33 +0000157OpenCL C Language Changes in Clang
158----------------------------------
159
160- OpenCL C "long" now always has a size of 64 bit, and all OpenCL C
161 types are aligned as specified in the OpenCL C standard. Also,
162 "char" is now always signed.
163
Sean Silvadebc0182012-12-23 01:19:35 +0000164Internal API Changes
165--------------------
166
Bill Wendlinga03209e2013-06-04 06:17:46 +0000167These are major API changes that have happened since the 3.3 release of
Sean Silvadebc0182012-12-23 01:19:35 +0000168Clang. If upgrading an external codebase that uses Clang as a library,
169this section should help get you past the largest hurdles of upgrading.
170
Hans Wennborg0437e0d2013-05-20 14:53:06 +0000171Wide Character Types
172^^^^^^^^^^^^^^^^^^^^
173
174The ASTContext class now keeps track of two different types for wide character
175types: WCharTy and WideCharTy. WCharTy represents the built-in wchar_t type
176available in C++. WideCharTy is the type used for wide character literals; in
177C++ it is the same as WCharTy, but in C99, where wchar_t is a typedef, it is an
178integer type.
179
Sean Silvadebc0182012-12-23 01:19:35 +0000180...
181
Ted Kremenek230fc372013-04-24 07:33:52 +0000182libclang
183--------
184
Bill Wendlinga03209e2013-06-04 06:17:46 +0000185...
Ted Kremenek230fc372013-04-24 07:33:52 +0000186
Anna Zaks08741a02013-04-25 23:14:38 +0000187Static Analyzer
Ted Kremenek1377a462013-04-26 00:01:34 +0000188---------------
Anna Zaks08741a02013-04-25 23:14:38 +0000189
Ted Kremenek1377a462013-04-26 00:01:34 +0000190The static analyzer (which contains additional code checking beyond compiler
191warnings) has improved significantly in both in the core analysis engine and
192also in the kinds of issues it can find.
193
Daniel Jasper87ddfdd2013-12-11 14:41:33 +0000194Clang Format
195------------
196
197Clang now includes a new tool ``clang-format`` which can be used to
198automatically format C, C++ and Objective-C source code. ``clang-format``
199automatically chooses linebreaks and indentation and can be easily integrated
200into editors, IDEs and version control systems. It supports several pre-defined
201styles as well as precise style control using a multitude of formatting
202options. ``clang-format`` itself is just a thin wrapper around a library which
203can also be used directly from code refactoring and code translation tools.
204More information can be found on `Clang Format's
205site <http://clang.llvm.org/docs/ClangFormat.html>`_.
206
Hans Wennborga6c18502013-12-02 22:38:55 +0000207Windows Support
208---------------
209
210- `clang-cl <UsersManual.html#clang-cl>` provides a new driver mode that is
211 designed for compatibility with Visual Studio's compiler, cl.exe. This driver
Hans Wennborg70cb8382013-12-09 20:00:25 +0000212 mode makes Clang accept the same kind of command-line options as cl.exe. The
213 installer will attempt to expose clang-cl in any Visual Studio installations
214 on the system as a Platform Toolset, e.g. "LLVM-vs2012". clang-cl targets the
215 Microsoft ABI by default. Please note that this driver mode and compatibility
216 with the MS ABI is highly experimental.
Hans Wennborga6c18502013-12-02 22:38:55 +0000217
Ted Kremenek1377a462013-04-26 00:01:34 +0000218Core Analysis Improvements
219==========================
220
Bill Wendlinga03209e2013-06-04 06:17:46 +0000221- ...
Ted Kremenek1377a462013-04-26 00:01:34 +0000222
223New Issues Found
224================
225
Bill Wendlinga03209e2013-06-04 06:17:46 +0000226- ...
Anna Zaks08741a02013-04-25 23:14:38 +0000227
Sean Silvadebc0182012-12-23 01:19:35 +0000228Python Binding Changes
229----------------------
230
231The following methods have been added:
232
233- ...
234
235Significant Known Problems
236==========================
237
238Additional Information
239======================
240
241A wide variety of additional information is available on the `Clang web
242page <http://clang.llvm.org/>`_. The web page contains versions of the
243API documentation which are up-to-date with the Subversion version of
244the source code. You can access versions of these documents specific to
245this release by going into the "``clang/docs/``" directory in the Clang
246tree.
247
248If you have any questions or comments about Clang, please feel free to
249contact us via the `mailing
250list <http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev>`_.