blob: eee63c8e9239b0970ecec2832058f5ea7396f739 [file] [log] [blame]
Hans Wennborg8f5b44a2019-07-18 11:51:05 +00001========================================
2Clang 10.0.0 (In-Progress) Release Notes
3========================================
Sean Silvafe251442012-12-23 01:19:35 +00004
5.. contents::
6 :local:
7 :depth: 2
8
Hans Wennborg0aa0d912018-09-10 08:51:25 +00009Written by the `LLVM Team <https://llvm.org/>`_
Sean Silvafe251442012-12-23 01:19:35 +000010
11.. warning::
12
Hans Wennborg8f5b44a2019-07-18 11:51:05 +000013 These are in-progress notes for the upcoming Clang 10 release.
Hans Wennborg189f1f32017-02-09 23:26:34 +000014 Release notes for previous releases can be found on
Hans Wennborg0aa0d912018-09-10 08:51:25 +000015 `the Download Page <https://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 Wennborg8f5b44a2019-07-18 11:51:05 +000021frontend, part of the LLVM Compiler Infrastructure, release 10.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
Hans Wennborg0aa0d912018-09-10 08:51:25 +000025documentation <https://llvm.org/docs/ReleaseNotes.html>`_. All LLVM
Sean Silvafe251442012-12-23 01:19:35 +000026releases may be downloaded from the `LLVM releases web
Hans Wennborg0aa0d912018-09-10 08:51:25 +000027site <https://llvm.org/releases/>`_.
Sean Silvafe251442012-12-23 01:19:35 +000028
Hans Wennborgd878ca82017-08-30 18:35:44 +000029For more information about Clang or LLVM, including information about the
Hans Wennborg0aa0d912018-09-10 08:51:25 +000030latest release, please see the `Clang Web Site <https://clang.llvm.org>`_ or the
31`LLVM Web Site <https://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
Hans Wennborg0aa0d912018-09-10 08:51:25 +000036see the `releases page <https://llvm.org/releases/>`_.
Sean Silvafe251442012-12-23 01:19:35 +000037
Hans Wennborg8f5b44a2019-07-18 11:51:05 +000038What's New in Clang 10.0.0?
39===========================
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 Wennborg1fe469a2019-01-16 10:57:02 +000049- ...
Rafael Espindola34970692013-12-12 16:07:11 +000050
Sean Silvafe251442012-12-23 01:19:35 +000051Improvements to Clang's diagnostics
52^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
53
Richard Trieu6541c792019-09-21 02:37:10 +000054- -Wtautological-overlap-compare will warn on negative numbers and non-int
55 types.
Richard Trieu4c05de82019-09-21 03:02:26 +000056- -Wtautological-compare for self comparisons and
57 -Wtautological-overlap-compare will now look through member and array
58 access to determine if two operand expressions are the same.
Richard Trieu8b0d14a2019-10-19 00:57:23 +000059- -Wtautological-bitwise-compare is a new warning group. This group has the
60 current warning which diagnoses the tautological comparison of a bitwise
mydeveloperday8b5f6c12019-11-19 08:34:23 +000061 operation and a constant. The group also has the new warning which diagnoses
Richard Trieu8b0d14a2019-10-19 00:57:23 +000062 when a bitwise-or with a non-negative value is converted to a bool, since
63 that bool will always be true.
Richard Trieu637af4c2019-10-19 01:47:49 +000064- -Wbitwise-conditional-parentheses will warn on operator precedence issues
65 when mixing bitwise-and (&) and bitwise-or (|) operator with the
66 conditional operator (?:).
Roman Lebedev61061d62018-04-07 10:39:21 +000067
Erich Keaneb0c78092017-07-26 18:04:45 +000068Non-comprehensive list of changes in this release
69-------------------------------------------------
70
Roman Lebedev536b0ee2019-10-10 09:25:02 +000071* In both C and C++ (C17 ``6.5.6p8``, C++ ``[expr.add]``), pointer arithmetic is
72 only permitted within arrays. In particular, the behavior of a program is not
73 defined if it adds a non-zero offset (or in C, any offset) to a null pointer,
74 or if it forms a null pointer by subtracting an integer from a non-null
75 pointer, and the LLVM optimizer now uses those guarantees for transformations.
76 This may lead to unintended behavior in code that performs these operations.
77 The Undefined Behavior Sanitizer ``-fsanitize=pointer-overflow`` check has
78 been extended to detect these cases, so that code relying on them can be
79 detected and fixed.
80
Roman Lebedevb98a0c72019-11-27 17:07:06 +030081* The Implicit Conversion Sanitizer (``-fsanitize=implicit-conversion``) has
82 learned to sanitize pre/post increment/decrement of types with bit width
83 smaller than ``int``.
84
Craig Topper635d3832019-09-11 23:54:36 +000085- For X86 target, -march=skylake-avx512, -march=icelake-client,
86 -march=icelake-server, -march=cascadelake, -march=cooperlake will default to
87 not using 512-bit zmm registers in vectorized code unless 512-bit intrinsics
88 are used in the source code. 512-bit operations are known to cause the CPUs
89 to run at a lower frequency which can impact performance. This behavior can be
90 changed by passing -mprefer-vector-width=512 on the command line.
Ilya Biryukov88aef522018-12-05 18:32:05 +000091
Fangrui Songe4fce652019-12-12 10:49:46 -080092* clang now defaults to ``.init_array`` on Linux. It used to use ``.ctors`` if
93 the found gcc installation is older than 4.7.0. Add ``-fno-use-init-array`` to
94 get the old behavior (``.ctors``).
95
Sean Silvafe251442012-12-23 01:19:35 +000096New Compiler Flags
97------------------
98
Reid Kleckner5e866e42019-10-10 21:04:25 +000099- The -fgnuc-version= flag now controls the value of ``__GNUC__`` and related
100 macros. This flag does not enable or disable any GCC extensions implemented in
101 Clang. Setting the version to zero causes Clang to leave ``__GNUC__`` and
102 other GNU-namespaced macros, such as ``__GXX_WEAK__``, undefined.
Aaron Ballman2b3bc4c2017-10-21 16:45:08 +0000103
Craig Topperb2b6a542019-11-04 10:20:00 -0800104- vzeroupper insertion on X86 targets can now be disabled with -mno-vzeroupper.
105 You can also force vzeroupper insertion to be used on CPUs that normally
106 wouldn't with -mvzeroupper.
107
Joerg Sonnenbergerc9199682017-07-01 21:36:21 +0000108Deprecated Compiler Flags
109-------------------------
110
111The following options are deprecated and ignored. They will be removed in
112future versions of Clang.
113
Craig Topper5a43fdd2019-08-29 18:09:02 +0000114- -mmpx used to enable the __MPX__ preprocessor define for the Intel MPX
115 instructions. There were no MPX intrinsics.
116- -mno-mpx used to disable -mmpx and is the default behavior.
117
Hans Wennborgfbb21e02017-07-19 14:14:07 +0000118- ...
Joerg Sonnenbergerc9199682017-07-01 21:36:21 +0000119
Yuka Takahashiba900ab2018-03-07 11:34:02 +0000120Modified Compiler Flags
121-----------------------
122
Simon Cookc00e5cf2019-11-18 10:44:13 +0000123- RISC-V now sets the architecture (riscv32/riscv64) based on the value provided
124 to the ``-march`` flag, overriding the target provided by ``-triple``.
Yuka Takahashiba900ab2018-03-07 11:34:02 +0000125
Tyler Nowickidb2668a2014-06-18 00:51:32 +0000126New Pragmas in Clang
Eugene Zelenkoad5684a2018-05-15 21:45:01 +0000127--------------------
Tyler Nowickidb2668a2014-06-18 00:51:32 +0000128
Hans Wennborg1fe469a2019-01-16 10:57:02 +0000129- ...
Paul Robinsonf9ede1c2016-07-18 17:19:12 +0000130
131Attribute Changes in Clang
132--------------------------
133
Hans Wennborgfbb21e02017-07-19 14:14:07 +0000134- ...
Paul Robinsonf9ede1c2016-07-18 17:19:12 +0000135
Hans Wennborg02dc0002014-08-05 00:21:23 +0000136Windows Support
137---------------
138
Hans Wennborg99c86512019-09-25 11:53:17 +0000139- Previous Clang versions contained a work-around to avoid an issue with the
140 standard library headers in Visual Studio 2019 versions prior to 16.3. This
141 work-around has now been removed, and users of Visual Studio 2019 are
142 encouraged to upgrade to 16.3 or later, otherwise they may see link errors as
143 below:
144
145 .. code-block:: console
146
147 error LNK2005: "bool const std::_Is_integral<int>" (??$_Is_integral@H@std@@3_NB) already defined
148
Renato Golinf2fcddb2013-12-13 09:27:34 +0000149C Language Changes in Clang
150---------------------------
151
Kristina Brooksc0eb8a92019-06-05 03:47:02 +0000152- ...
Renato Golinf2fcddb2013-12-13 09:27:34 +0000153
Sean Silvafe251442012-12-23 01:19:35 +0000154C11 Feature Support
155^^^^^^^^^^^^^^^^^^^
156
157...
158
159C++ Language Changes in Clang
160-----------------------------
161
Martin Storsjo71decf82019-09-27 12:25:19 +0000162- The behaviour of the `gnu_inline` attribute now matches GCC, for cases
163 where used without the `extern` keyword. As this is a change compared to
164 how it behaved in previous Clang versions, a warning is emitted for this
165 combination.
Richard Smith8eb53c82016-05-05 18:40:37 +0000166
167C++1z Feature Support
Sean Silvafe251442012-12-23 01:19:35 +0000168^^^^^^^^^^^^^^^^^^^^^
169
170...
171
172Objective-C Language Changes in Clang
173-------------------------------------
174
James Y Knightd11a9012019-11-04 12:44:31 -0500175- In both Objective-C and
176 Objective-C++, ``-Wcompare-distinct-pointer-types`` will now warn when
177 comparing ObjC ``Class`` with an ObjC instance type pointer.
178
179 .. code-block:: objc
180
181 Class clz = ...;
182 MyType *instance = ...;
183 bool eq = (clz == instance); // Previously undiagnosed, now warns.
184
185- Objective-C++ now diagnoses conversions between ``Class`` and ObjC
186 instance type pointers. Such conversions already emitted an
187 on-by-default ``-Wincompatible-pointer-types`` warning in Objective-C
188 mode, but had inadvertently been missed entirely in
189 Objective-C++. This has been fixed, and they are now diagnosed as
190 errors, consistent with the usual C++ treatment for conversions
191 between unrelated pointer types.
192
193 .. code-block:: objc
194
195 Class clz = ...;
196 MyType *instance = ...;
197 clz = instance; // Previously undiagnosed, now an error.
198 instance = clz; // Previously undiagnosed, now an error.
199
200 One particular issue you may run into is attempting to use a class
201 as a key in a dictionary literal. This will now result in an error,
202 because ``Class`` is not convertable to ``id<NSCopying>``. (Note that
203 this was already a warning in Objective-C mode.) While an arbitrary
204 ``Class`` object is not guaranteed to implement ``NSCopying``, the
205 default metaclass implementation does. Therefore, the recommended
206 solution is to insert an explicit cast to ``id``, which disables the
207 type-checking here.
208
209 .. code-block:: objc
210
211 Class cls = ...;
212
213 // Error: cannot convert from Class to id<NSCoding>.
214 NSDictionary* d = @{cls : @"Hello"};
215
216 // Fix: add an explicit cast to 'id'.
217 NSDictionary* d = @{(id)cls : @"Hello"};
Sean Silvafe251442012-12-23 01:19:35 +0000218
Erik Schnetter489700d2013-11-11 06:36:33 +0000219OpenCL C Language Changes in Clang
220----------------------------------
221
Bill Wendling0a794a4b2013-11-20 10:13:37 +0000222...
Erik Schnetter489700d2013-11-11 06:36:33 +0000223
Richard Smith6822bd72018-10-26 19:26:45 +0000224ABI Changes in Clang
225--------------------
226
Craig Topper6c8a34e2019-09-06 06:02:13 +0000227- gcc passes vectors of __int128 in memory on X86-64. Clang historically
228 broke the vectors into multiple scalars using two 64-bit values for each
229 element. Clang now matches the gcc behavior on Linux and NetBSD. You can
230 switch back to old API behavior with flag: -fclang-abi-compat=9.0.
Richard Smith6822bd72018-10-26 19:26:45 +0000231
Sam Elliotte3d5ff52019-11-15 15:10:02 +0000232- RISC-V now chooses a default ``-march=`` and ``-mabi=`` to match (in almost
233 all cases) the GCC defaults. On baremetal targets, where neither ``-march=``
234 nor ``-mabi=`` are specified, Clang now differs from GCC by defaulting to
235 ``-march=rv32imac -mabi=ilp32`` or ``-march=rv64imac -mabi=lp64`` depending on
236 the architecture in the target triple. These do not always match the defaults
237 in Clang 9. We strongly suggest that you explicitly pass `-march=` and
238 `-mabi=` when compiling for RISC-V, due to how extensible this architecture
239 is.
240
Alexey Bataev44b67502016-05-31 11:17:08 +0000241OpenMP Support in Clang
Shoaib Meenai5be71fa2019-03-04 21:19:53 +0000242-----------------------
Alexey Bataev44b67502016-05-31 11:17:08 +0000243
Hans Wennborg8f5b44a2019-07-18 11:51:05 +0000244- ...
Alexey Bataev44b67502016-05-31 11:17:08 +0000245
Jonas Hahnfeld8da9c2a2018-04-20 13:04:54 +0000246CUDA Support in Clang
247---------------------
248
Hans Wennborg8f5b44a2019-07-18 11:51:05 +0000249- ...
Jonas Hahnfeld8da9c2a2018-04-20 13:04:54 +0000250
Sean Silvafe251442012-12-23 01:19:35 +0000251Internal API Changes
252--------------------
253
Hans Wennborg8f5b44a2019-07-18 11:51:05 +0000254These are major API changes that have happened since the 9.0.0 release of
Sean Silvafe251442012-12-23 01:19:35 +0000255Clang. If upgrading an external codebase that uses Clang as a library,
256this section should help get you past the largest hurdles of upgrading.
257
Dmitri Gribenkob22804b2019-08-30 09:29:34 +0000258- libTooling APIs that transfer ownership of `FrontendAction` objects now pass
259 them by `unique_ptr`, making the ownership transfer obvious in the type
260 system. `FrontendActionFactory::create()` now returns a
261 `unique_ptr<FrontendAction>`. `runToolOnCode`, `runToolOnCodeWithArgs`,
262 `ToolInvocation::ToolInvocation()` now take a `unique_ptr<FrontendAction>`.
263
Shoaib Meenai5be71fa2019-03-04 21:19:53 +0000264Build System Changes
265--------------------
266
Hans Wennborg8f5b44a2019-07-18 11:51:05 +0000267These are major changes to the build system that have happened since the 9.0.0
Shoaib Meenai5be71fa2019-03-04 21:19:53 +0000268release of Clang. Users of the build system should adjust accordingly.
269
270- In 8.0.0 and below, the install-clang-headers target would install clang's
271 resource directory headers. This installation is now performed by the
272 install-clang-resource-headers target. Users of the old install-clang-headers
Shoaib Meenai20e7c0c2019-03-11 18:53:57 +0000273 target should switch to the new install-clang-resource-headers target. The
274 install-clang-headers target now installs clang's API headers (corresponding
275 to its libraries), which is consistent with the install-llvm-headers target.
Shoaib Meenai5be71fa2019-03-04 21:19:53 +0000276
Chris Bienemana80a3a2b2019-08-14 16:49:52 +0000277- In 9.0.0 and later Clang added a new target, clang-cpp, which generates a
278 shared library comprised of all the clang component libraries and exporting
279 the clang C++ APIs. Additionally the build system gained the new
280 "CLANG_LINK_CLANG_DYLIB" option, which defaults Off, and when set to On, will
281 force clang (and clang-based tools) to link the clang-cpp library instead of
282 statically linking clang's components. This option will reduce the size of
283 binary distributions at the expense of compiler performance.
284
285- ...
Richard Smitha0334a92015-05-14 00:22:12 +0000286
Aaron Ballmancdc43af2015-09-17 13:47:22 +0000287AST Matchers
288------------
Aaron Ballmancdc43af2015-09-17 13:47:22 +0000289
Paul Hoadccc6f832019-03-22 22:47:34 +0000290- ...
Sylvestre Ledru72e3fa72017-03-14 09:43:55 +0000291
292clang-format
293------------
294
Sam McCall08bfd9e2019-10-02 09:52:52 +0000295- The ``Standard`` style option specifies which version of C++ should be used
296 when parsing and formatting C++ code. The set of allowed values has changed:
Simon Pilgrim68f21b32019-10-05 16:08:17 +0000297
Sam McCall08bfd9e2019-10-02 09:52:52 +0000298 - ``Latest`` will always enable new C++ language features.
299 - ``c++03``, ``c++11``, ``c++14``, ``c++17``, ``c++20`` will pin to exactly
300 that language version.
301 - ``Auto`` is the default and detects style from the code (this is unchanged).
Simon Pilgrim68f21b32019-10-05 16:08:17 +0000302
303 The previous values of ``Cpp03`` and ``Cpp11`` are deprecated. Note that
mydeveloperday8b5f6c12019-11-19 08:34:23 +0000304 ``Cpp11`` is treated as ``Latest``, as this was always clang-format's
305 behavior. (One motivation for this change is the new name describes the
306 behavior better).
Sylvestre Ledruc9410392017-12-05 09:23:47 +0000307
mydeveloperday8b5f6c12019-11-19 08:34:23 +0000308- Clang-format has a new option called ``--dry-run`` or ``-n`` to emit a
309 warning for clang-format violations. This can be used together
310 with --ferror-limit=N to limit the number of warnings per file and --Werror
311 to make warnings into errors.
Sylvestre Ledru4c44fd32019-11-08 23:26:29 +0100312
mydeveloperday8b5f6c12019-11-19 08:34:23 +0000313- Option *IncludeIsMainSourceRegex* has been added to allow for additional
mydeveloperday335ac2e2019-11-12 21:15:17 +0000314 suffixes and file extensions to be considered as a source file
315 for execution of logic that looks for "main *include* file" to put
316 it on top.
317
318 By default, clang-format considers *source* files as "main" only when
319 they end with: ``.c``, ``.cc``, ``.cpp``, ``.c++``, ``.cxx``,
320 ``.m`` or ``.mm`` extensions. This config option allows to
321 extend this set of source files considered as "main".
mydeveloperday8b5f6c12019-11-19 08:34:23 +0000322
mydeveloperday335ac2e2019-11-12 21:15:17 +0000323 For example, if this option is configured to ``(Impl\.hpp)$``,
324 then a file ``ClassImpl.hpp`` is considered "main" (in addition to
325 ``Class.c``, ``Class.cc``, ``Class.cpp`` and so on) and "main
326 include file" logic will be executed (with *IncludeIsMainRegex* setting
327 also being respected in later phase). Without this option set,
328 ``ClassImpl.hpp`` would not have the main include file put on top
329 before any other include.
330
mydeveloperday8b5f6c12019-11-19 08:34:23 +0000331- Options ``DeriveLineEnding`` and ``UseCRLF`` have been added to allow
332 clang-format to control the newlines. ``DeriveLineEnding`` is by default
333 ``true`` and reflects is the existing mechanism, which based is on majority
334 rule. The new options allows this to be turned off and ``UseCRLF`` to control
335 the decision as to which sort of line ending to use.
336
337- Option ``SpaceBeforeSquareBrackets`` has been added to insert a space before
338 array declarations.
339
340 .. code-block:: c++
341
342 int a [5]; vs int a[5];
343
344- Clang-format now supports JavaScript null operators.
345
346 .. code-block:: c++
347
348 const x = foo ?? default;
349 const z = foo?.bar?.baz;
350
Ted Kremenek3a2291b2013-04-24 07:33:52 +0000351libclang
352--------
353
Hans Wennborg8f5b44a2019-07-18 11:51:05 +0000354- ...
Ted Kremenek3a2291b2013-04-24 07:33:52 +0000355
Anna Zaksb6219a92013-04-25 23:14:38 +0000356Static Analyzer
Ted Kremenek004e8232013-04-26 00:01:34 +0000357---------------
Anna Zaksb6219a92013-04-25 23:14:38 +0000358
Sylvestre Ledru9bea4ec2019-10-11 20:33:43 +0000359- The Clang analyzer checker ``DeadStores`` gets a new option called
360 ``WarnForDeadNestedAssignments`` to detect nested dead assignments
361 (enabled by default).
Hans Wennborg8f5b44a2019-07-18 11:51:05 +0000362- ...
Ted Kremenek004e8232013-04-26 00:01:34 +0000363
Roman Lebedevb69ba222018-07-30 18:58:30 +0000364.. _release-notes-ubsan:
365
Vedant Kumar840c2c72017-06-13 02:52:31 +0000366Undefined Behavior Sanitizer (UBSan)
367------------------------------------
368
Roman Lebedev536b0ee2019-10-10 09:25:02 +0000369- * The ``pointer-overflow`` check was extended added to catch the cases where
370 a non-zero offset is applied to a null pointer, or the result of
371 applying the offset is a null pointer.
372
373 .. code-block:: c++
374
375 #include <cstdint> // for intptr_t
376
377 static char *getelementpointer_inbounds(char *base, unsigned long offset) {
378 // Potentially UB.
379 return base + offset;
380 }
381
382 char *getelementpointer_unsafe(char *base, unsigned long offset) {
383 // Always apply offset. UB if base is ``nullptr`` and ``offset`` is not
384 // zero, or if ``base`` is non-``nullptr`` and ``offset`` is
385 // ``-reinterpret_cast<intptr_t>(base)``.
386 return getelementpointer_inbounds(base, offset);
387 }
388
389 char *getelementpointer_safe(char *base, unsigned long offset) {
390 // Cast pointer to integer, perform usual arithmetic addition,
391 // and cast to pointer. This is legal.
392 char *computed =
393 reinterpret_cast<char *>(reinterpret_cast<intptr_t>(base) + offset);
394 // If either the pointer becomes non-``nullptr``, or becomes
395 // ``nullptr``, we must use ``computed`` result.
396 if (((base == nullptr) && (computed != nullptr)) ||
397 ((base != nullptr) && (computed == nullptr)))
398 return computed;
399 // Else we can use ``getelementpointer_inbounds()``.
400 return getelementpointer_inbounds(base, offset);
401 }
402
Ted Kremenek004e8232013-04-26 00:01:34 +0000403Core Analysis Improvements
404==========================
405
Bill Wendling61f44cc2013-06-04 06:17:46 +0000406- ...
Ted Kremenek004e8232013-04-26 00:01:34 +0000407
408New Issues Found
409================
410
Bill Wendling61f44cc2013-06-04 06:17:46 +0000411- ...
Anna Zaksb6219a92013-04-25 23:14:38 +0000412
Sean Silvafe251442012-12-23 01:19:35 +0000413Python Binding Changes
414----------------------
415
416The following methods have been added:
417
418- ...
419
420Significant Known Problems
421==========================
422
423Additional Information
424======================
425
426A wide variety of additional information is available on the `Clang web
Hans Wennborg0aa0d912018-09-10 08:51:25 +0000427page <https://clang.llvm.org/>`_. The web page contains versions of the
Sean Silvafe251442012-12-23 01:19:35 +0000428API documentation which are up-to-date with the Subversion version of
429the source code. You can access versions of these documents specific to
430this release by going into the "``clang/docs/``" directory in the Clang
431tree.
432
433If you have any questions or comments about Clang, please feel free to
434contact us via the `mailing
Hans Wennborg0aa0d912018-09-10 08:51:25 +0000435list <https://lists.llvm.org/mailman/listinfo/cfe-dev>`_.