blob: 71e330bcb3d7bc3518cbf3a5f1791ce603d83ae3 [file] [log] [blame]
Hans Wennborg60d06bf2016-07-18 18:05:19 +00001=======================================
Hans Wennborgfbb21e02017-07-19 14:14:07 +00002Clang 6.0.0 (In-Progress) Release Notes
Hans Wennborg60d06bf2016-07-18 18:05:19 +00003=======================================
Sean Silvafe251442012-12-23 01:19:35 +00004
5.. contents::
6 :local:
7 :depth: 2
8
9Written by the `LLVM Team <http://llvm.org/>`_
10
11.. warning::
12
Hans Wennborgfbb21e02017-07-19 14:14:07 +000013 These are in-progress notes for the upcoming Clang 6 release.
Hans Wennborg189f1f32017-02-09 23:26:34 +000014 Release notes for previous releases can be found on
15 `the Download Page <http://releases.llvm.org/download.html>`_.
Sean Silvafe251442012-12-23 01:19:35 +000016
17Introduction
18============
19
20This document contains the release notes for the Clang C/C++/Objective-C
Hans Wennborgfbb21e02017-07-19 14:14:07 +000021frontend, part of the LLVM Compiler Infrastructure, release 6.0.0. Here we
Sean Silvafe251442012-12-23 01:19:35 +000022describe the status of Clang in some detail, including major
23improvements from the previous release and new feature work. For the
24general LLVM release notes, see `the LLVM
25documentation <http://llvm.org/docs/ReleaseNotes.html>`_. All LLVM
26releases may be downloaded from the `LLVM releases web
27site <http://llvm.org/releases/>`_.
28
Hans Wennborgd878ca82017-08-30 18:35:44 +000029For more information about Clang or LLVM, including information about the
30latest release, please see the `Clang Web Site <http://clang.llvm.org>`_ or the
31`LLVM Web Site <http://llvm.org>`_.
Sean Silvafe251442012-12-23 01:19:35 +000032
33Note that if you are reading this file from a Subversion checkout or the
34main Clang web page, this document applies to the *next* release, not
35the current one. To see the release notes for a specific release, please
36see the `releases page <http://llvm.org/releases/>`_.
37
Hans Wennborgfbb21e02017-07-19 14:14:07 +000038What's New in Clang 6.0.0?
Hans Wennborg60d06bf2016-07-18 18:05:19 +000039==========================
Sean Silvafe251442012-12-23 01:19:35 +000040
41Some of the major new features and improvements to Clang are listed
42here. Generic improvements to Clang as a whole or to its underlying
43infrastructure are described first, followed by language-specific
44sections with improvements to Clang's support for those languages.
45
46Major New Features
47------------------
48
Hans Wennborg60d06bf2016-07-18 18:05:19 +000049- ...
Rafael Espindola34970692013-12-12 16:07:11 +000050
Sean Silvafe251442012-12-23 01:19:35 +000051Improvements to Clang's diagnostics
52^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
53
Alex Lorenzdbbe8222017-07-31 14:22:43 +000054- ``-Wpragma-pack`` is a new warning that warns in the following cases:
55
56 - When a translation unit is missing terminating ``#pragma pack (pop)``
Alex Lorenz51748662017-07-31 14:08:41 +000057 directives.
Alex Lorenzdbbe8222017-07-31 14:22:43 +000058
Alex Lorenz51748662017-07-31 14:08:41 +000059 - When leaving an included file that changes the current alignment value,
Alex Lorenzdbbe8222017-07-31 14:22:43 +000060 i.e. when the alignment before ``#include`` is different to the alignment
61 after ``#include``.
62
63 - ``-Wpragma-pack-suspicious-include`` (disabled by default) warns on an
64 ``#include`` when the included file contains structures or unions affected by
65 a non-default alignment that has been specified using a ``#pragma pack``
66 directive prior to the ``#include``.
Sean Silvafe251442012-12-23 01:19:35 +000067
Alex Lorenzd9f12842017-08-25 16:12:17 +000068- ``-Wobjc-messaging-id`` is a new, non-default warning that warns about
69 message sends to unqualified ``id`` in Objective-C. This warning is useful
70 for projects that would like to avoid any potential future compiler
71 errors/warnings, as the system frameworks might add a method with the same
72 selector which could make the message send to ``id`` ambiguous.
73
Roman Lebedev6aa34aa2017-09-07 22:14:25 +000074- ``-Wtautological-compare`` now warns when comparing an unsigned integer and 0
75 regardless of whether the constant is signed or unsigned."
76
77- ``-Wtautological-compare`` now warns about comparing a signed integer and 0
78 when the signed integer is coerced to an unsigned type for the comparison.
79 ``-Wsign-compare`` was adjusted not to warn in this case.
80
Roman Lebedev6de129e2017-10-15 20:13:17 +000081- ``-Wtautological-constant-compare`` is a new warning that warns on
82 tautological comparisons between integer variable of the type ``T`` and the
83 largest/smallest possible integer constant of that same type.
84
Roman Lebedevd9af8e12017-11-04 20:27:47 +000085- For C code, ``-Wsign-compare``, ``-Wsign-conversion``,
86 ``-Wtautological-constant-compare`` and
Roman Lebedev7ade0172017-10-24 21:05:43 +000087 ``-Wtautological-constant-out-of-range-compare`` were adjusted to use the
88 underlying datatype of ``enum``.
89
Sylvestre Ledrua59e6542017-09-28 08:00:18 +000090- ``-Wnull-pointer-arithmetic`` now warns about performing pointer arithmetic
91 on a null pointer. Such pointer arithmetic has an undefined behavior if the
92 offset is nonzero. It also now warns about arithmetic on a null pointer
93 treated as a cast from integer to pointer (GNU extension).
94
Roman Lebedev809df342017-10-26 13:18:14 +000095- ``-Wzero-as-null-pointer-constant`` was adjusted not to warn on null pointer
96 constants that originate from system macros, except ``NULL`` macro.
97
Erich Keaneb0c78092017-07-26 18:04:45 +000098Non-comprehensive list of changes in this release
99-------------------------------------------------
100
Sylvestre Ledru31f4fee2017-09-05 13:56:40 +0000101- Bitrig OS was merged back into OpenBSD, so Bitrig support has been
Erich Keaneb0c78092017-07-26 18:04:45 +0000102 removed from Clang/LLVM.
103
Reid Klecknerc65f16c2017-10-06 21:02:28 +0000104- The default value of _MSC_VER was raised from 1800 to 1911, making it
105 compatible with the Visual Studio 2015 and 2017 C++ standard library headers.
106 Users should generally expect this to be regularly raised to match the most
107 recently released version of the Visual C++ compiler.
108
Nico Weber0763ab42017-10-26 23:26:29 +0000109- clang now defaults to ``.init_array`` if no gcc installation can be found.
110 If a gcc installation is found, it still prefers ``.ctors`` if the found
111 gcc is older than 4.7.0.
112
Sean Silvafe251442012-12-23 01:19:35 +0000113New Compiler Flags
114------------------
115
Yuka Takahashi9b6b5d52017-08-11 09:44:42 +0000116- --autocomplete was implemented to obtain a list of flags and its arguments. This is used for shell autocompletion.
Sylvestre Ledruf6b48972016-11-12 10:37:17 +0000117
Aaron Ballman2b3bc4c2017-10-21 16:45:08 +0000118- The ``-fdouble-square-bracket-attributes`` and corresponding
119 ``-fno-double-square-bracket-attributes`` flags were added to enable or
120 disable [[]] attributes in any language mode. Currently, only a limited
121 number of attributes are supported outside of C++ mode. See the Clang
122 attribute documentation for more information about which attributes are
123 supported for each syntax.
124
Joerg Sonnenbergerc9199682017-07-01 21:36:21 +0000125Deprecated Compiler Flags
126-------------------------
127
128The following options are deprecated and ignored. They will be removed in
129future versions of Clang.
130
Hans Wennborgfbb21e02017-07-19 14:14:07 +0000131- ...
Joerg Sonnenbergerc9199682017-07-01 21:36:21 +0000132
Tyler Nowickidb2668a2014-06-18 00:51:32 +0000133New Pragmas in Clang
134-----------------------
135
Rafael Espindolaaf742502014-08-22 21:59:11 +0000136Clang now supports the ...
Mark Heffernanbd26f5e2014-07-21 18:08:34 +0000137
Paul Robinsonf9ede1c2016-07-18 17:19:12 +0000138
139Attribute Changes in Clang
140--------------------------
141
Erik Pilkington1b003722017-08-08 17:09:09 +0000142- The presence of __attribute__((availability(...))) on a declaration no longer
143 implies default visibility for that declaration on macOS.
144
Hans Wennborgfbb21e02017-07-19 14:14:07 +0000145- ...
Paul Robinsonf9ede1c2016-07-18 17:19:12 +0000146
Hans Wennborg02dc0002014-08-05 00:21:23 +0000147Windows Support
148---------------
149
Rafael Espindolaaf742502014-08-22 21:59:11 +0000150Clang's support for building native Windows programs ...
Hans Wennborg02dc0002014-08-05 00:21:23 +0000151
152
Renato Golinf2fcddb2013-12-13 09:27:34 +0000153C Language Changes in Clang
154---------------------------
155
Hans Wennborg60d06bf2016-07-18 18:05:19 +0000156- ...
Pirama Arumuga Nainarc85c8532016-06-21 16:09:30 +0000157
Renato Golinf2fcddb2013-12-13 09:27:34 +0000158...
159
Sean Silvafe251442012-12-23 01:19:35 +0000160C11 Feature Support
161^^^^^^^^^^^^^^^^^^^
162
163...
164
165C++ Language Changes in Clang
166-----------------------------
167
Richard Smith8eb53c82016-05-05 18:40:37 +0000168...
169
170C++1z Feature Support
Sean Silvafe251442012-12-23 01:19:35 +0000171^^^^^^^^^^^^^^^^^^^^^
172
173...
174
175Objective-C Language Changes in Clang
176-------------------------------------
177
178...
179
Erik Schnetter489700d2013-11-11 06:36:33 +0000180OpenCL C Language Changes in Clang
181----------------------------------
182
Bill Wendling0a794a4b2013-11-20 10:13:37 +0000183...
Erik Schnetter489700d2013-11-11 06:36:33 +0000184
Alexey Bataev44b67502016-05-31 11:17:08 +0000185OpenMP Support in Clang
186----------------------------------
187
Hans Wennborg60d06bf2016-07-18 18:05:19 +0000188...
Alexey Bataev44b67502016-05-31 11:17:08 +0000189
Sean Silvafe251442012-12-23 01:19:35 +0000190Internal API Changes
191--------------------
192
Hans Wennborg159d6ad2017-01-12 21:55:16 +0000193These are major API changes that have happened since the 4.0.0 release of
Sean Silvafe251442012-12-23 01:19:35 +0000194Clang. If upgrading an external codebase that uses Clang as a library,
195this section should help get you past the largest hurdles of upgrading.
196
Vedant Kumar5fb00e42016-07-27 23:01:55 +0000197- ...
Richard Smitha0334a92015-05-14 00:22:12 +0000198
Aaron Ballmancdc43af2015-09-17 13:47:22 +0000199AST Matchers
200------------
Aaron Ballmancdc43af2015-09-17 13:47:22 +0000201
Manuel Klimek696e5052017-08-02 13:04:44 +0000202The hasDeclaration matcher now works the same for Type and QualType and only
203ever looks through one level of sugaring in a limited number of cases.
Aaron Ballmancdc43af2015-09-17 13:47:22 +0000204
Manuel Klimek696e5052017-08-02 13:04:44 +0000205There are two main patterns affected by this:
206
207- qualType(hasDeclaration(recordDecl(...))): previously, we would look through
208 sugar like TypedefType to get at the underlying recordDecl; now, we need
209 to explicitly remove the sugaring:
210 qualType(hasUnqualifiedDesugaredType(hasDeclaration(recordDecl(...))))
211
212- hasType(recordDecl(...)): hasType internally uses hasDeclaration; previously,
213 this matcher used to match for example TypedefTypes of the RecordType, but
214 after the change they don't; to fix, use:
215
216::
217 hasType(hasUnqualifiedDesugaredType(
218 recordType(hasDeclaration(recordDecl(...)))))
219
220- templateSpecializationType(hasDeclaration(classTemplateDecl(...))):
221 previously, we would directly match the underlying ClassTemplateDecl;
222 now, we can explicitly match the ClassTemplateSpecializationDecl, but that
223 requires to explicitly get the ClassTemplateDecl:
224
225::
226 templateSpecializationType(hasDeclaration(
227 classTemplateSpecializationDecl(
228 hasSpecializedTemplate(classTemplateDecl(...)))))
Sylvestre Ledru72e3fa72017-03-14 09:43:55 +0000229
230clang-format
231------------
232
Sylvestre Ledru31f4fee2017-09-05 13:56:40 +0000233* Option *IndentPPDirectives* added to indent preprocessor directives on
234 conditionals.
235
236 +----------------------+----------------------+
237 | Before | After |
238 +======================+======================+
239 | .. code-block:: c++ | .. code-block:: c++ |
240 | | |
241 | #if FOO | #if FOO |
242 | #if BAR | # if BAR |
243 | #include <foo> | # include <foo> |
244 | #endif | # endif |
245 | #endif | #endif |
246 +----------------------+----------------------+
Sylvestre Ledru72e3fa72017-03-14 09:43:55 +0000247
Sylvestre Ledrud23dd6c2017-08-12 15:15:10 +0000248* Option -verbose added to the command line.
249 Shows the list of processed files.
250
Ted Kremenek3a2291b2013-04-24 07:33:52 +0000251libclang
252--------
253
Bill Wendling61f44cc2013-06-04 06:17:46 +0000254...
Ted Kremenek3a2291b2013-04-24 07:33:52 +0000255
Sylvestre Ledruea49d3a2016-08-06 20:23:54 +0000256
Anna Zaksb6219a92013-04-25 23:14:38 +0000257Static Analyzer
Ted Kremenek004e8232013-04-26 00:01:34 +0000258---------------
Anna Zaksb6219a92013-04-25 23:14:38 +0000259
Roman Lebedev88b56ca2017-11-30 09:18:35 +0000260- Static Analyzer can now properly detect and diagnose unary pre-/post-
261 increment/decrement on an uninitialized value.
262
Bill Wendling0a794a4b2013-11-20 10:13:37 +0000263...
Ted Kremenek004e8232013-04-26 00:01:34 +0000264
Vedant Kumar840c2c72017-06-13 02:52:31 +0000265Undefined Behavior Sanitizer (UBSan)
266------------------------------------
267
Vedant Kumar90c80a32017-09-11 21:37:05 +0000268* A minimal runtime is now available. It is suitable for use in production
269 environments, and has a small attack surface. It only provides very basic
270 issue logging and deduplication, and does not support ``-fsanitize=vptr``
271 checking.
Vedant Kumar840c2c72017-06-13 02:52:31 +0000272
Ted Kremenek004e8232013-04-26 00:01:34 +0000273Core Analysis Improvements
274==========================
275
Bill Wendling61f44cc2013-06-04 06:17:46 +0000276- ...
Ted Kremenek004e8232013-04-26 00:01:34 +0000277
278New Issues Found
279================
280
Bill Wendling61f44cc2013-06-04 06:17:46 +0000281- ...
Anna Zaksb6219a92013-04-25 23:14:38 +0000282
Sean Silvafe251442012-12-23 01:19:35 +0000283Python Binding Changes
284----------------------
285
286The following methods have been added:
287
288- ...
289
290Significant Known Problems
291==========================
292
293Additional Information
294======================
295
296A wide variety of additional information is available on the `Clang web
297page <http://clang.llvm.org/>`_. The web page contains versions of the
298API documentation which are up-to-date with the Subversion version of
299the source code. You can access versions of these documents specific to
300this release by going into the "``clang/docs/``" directory in the Clang
301tree.
302
303If you have any questions or comments about Clang, please feel free to
304contact us via the `mailing
Tanya Lattner4a08e932015-08-05 03:55:23 +0000305list <http://lists.llvm.org/mailman/listinfo/cfe-dev>`_.