blob: 15ae73e859e753198bac6e3b60102856c7e2dac8 [file] [log] [blame]
Hans Wennborg60d06bf2016-07-18 18:05:19 +00001=======================================
Hans Wennborg7b852ea2018-01-03 15:49:39 +00002Clang 7.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 Wennborg7b852ea2018-01-03 15:49:39 +000013 These are in-progress notes for the upcoming Clang 7 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 Wennborg7b852ea2018-01-03 15:49:39 +000021frontend, part of the LLVM Compiler Infrastructure, release 7.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 Wennborg7b852ea2018-01-03 15:49:39 +000038What's New in Clang 7.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
Roman Lebedevc9977f32018-03-16 18:01:07 +000054- ``-Wc++98-compat-extra-semi`` is a new flag, which was previously inseparable
55 from ``-Wc++98-compat-pedantic``. The latter still controls the new flag.
56
57- ``-Wextra-semi`` now also controls ``-Wc++98-compat-extra-semi``.
58 Please do note that if you pass ``-Wno-c++98-compat-pedantic``, it implies
59 ``-Wno-c++98-compat-extra-semi``, so if you want that diagnostic, you need
60 to explicitly re-enable it (e.g. by appending ``-Wextra-semi``).
Roman Lebedev809df342017-10-26 13:18:14 +000061
Roman Lebedev61061d62018-04-07 10:39:21 +000062- ``-Wself-assign`` and ``-Wself-assign-field`` were extended to diagnose
63 self-assignment operations using overloaded operators (i.e. classes).
64 If you are doing such an assignment intentionally, e.g. in a unit test for
Roman Lebedev6ed0fad2018-04-23 21:35:21 +000065 a data structure, the first warning can be disabled by passing
66 ``-Wno-self-assign-overloaded``, also the warning can be suppressed by adding
67 ``*&`` to the right-hand side or casting it to the appropriate reference type.
Roman Lebedev61061d62018-04-07 10:39:21 +000068
Erich Keaneb0c78092017-07-26 18:04:45 +000069Non-comprehensive list of changes in this release
70-------------------------------------------------
71
Richard Smithbb0ad1e2018-04-03 18:28:13 +000072- Clang binary and libraries have been renamed from 7.0 to 7.
73 For example, the ``clang`` binary will be called ``clang-7``
74 instead of ``clang-7.0``.
Sylvestre Ledrua8b717f2018-03-29 10:05:46 +000075
Richard Smithb6070db2018-04-05 18:55:37 +000076- Clang implements a collection of recent fixes to the C++ standard's definition
77 of "standard-layout". In particular, a class is only considered to be
78 standard-layout if all base classes and the first data member (or bit-field)
79 can be laid out at offset zero.
80
Richard Smith4ae767b2018-04-29 04:55:46 +000081- Clang's handling of the GCC ``packed`` class attribute in C++ has been fixed
82 to apply only to non-static data members and not to base classes. This fixes
83 an ABI difference between Clang and GCC, but creates an ABI difference between
84 Clang 7 and earlier versions. The old behavior can be restored by setting
85 ``-fclang-abi-compat`` to ``6`` or earlier.
86
Richard Smithb5a317f2018-05-07 06:43:30 +000087- Clang implements the proposed resolution of LWG issue 2358, along with the
88 `corresponding change to the Itanium C++ ABI
89 <https://github.com/itanium-cxx-abi/cxx-abi/pull/51>`_, which make classes
90 containing only unnamed non-zero-length bit-fields be considered non-empty.
91 This is an ABI break compared to prior Clang releases, but makes Clang
92 generate code that is ABI-compatible with other compilers. The old
93 behavior can be restored by setting ``-fclang-abi-compat`` to ``6`` or
94 lower.
95
Jonas Devlieghereb48447a2018-05-16 10:23:25 +000096- An existing tool named ``diagtool`` has been added to the release. As the
97 name suggests, it helps with dealing with diagnostics in ``clang``, such as
98 finding out the warning hierarchy, and which of them are enabled by default
99 or for a particular compiler invocation.
100
Hans Wennborg7b852ea2018-01-03 15:49:39 +0000101- ...
Alex Lorenzd8ec4312017-12-14 19:22:02 +0000102
Sean Silvafe251442012-12-23 01:19:35 +0000103New Compiler Flags
104------------------
105
Sanjay Patelc81450e2018-04-30 18:19:03 +0000106- :option:`-fstrict-float-cast-overflow` and
Eugene Zelenkoad5684a2018-05-15 21:45:01 +0000107 :option:`-fno-strict-float-cast-overflow`.
108
109 When a floating-point value is not representable in a destination integer
110 type, the code has undefined behavior according to the language standard. By
111 default, Clang will not guarantee any particular result in that case. With the
112 'no-strict' option, Clang attempts to match the overflowing behavior of the
113 target's native float-to-int conversion instructions.
Sanjay Patelcee47be2018-04-27 16:21:22 +0000114
Piotr Padlewskie368de32018-06-13 13:55:42 +0000115- :option: `-fforce-emit-vtables` and `-fno-force-emit-vtables`.
116
117 In order to improve devirtualization, forces emitting of vtables even in
118 modules where it isn't necessary. It causes more inline virtual functions
119 to be emitted.
120
Hans Wennborg7b852ea2018-01-03 15:49:39 +0000121- ...
Aaron Ballman2b3bc4c2017-10-21 16:45:08 +0000122
Joerg Sonnenbergerc9199682017-07-01 21:36:21 +0000123Deprecated Compiler Flags
124-------------------------
125
126The following options are deprecated and ignored. They will be removed in
127future versions of Clang.
128
Hans Wennborgfbb21e02017-07-19 14:14:07 +0000129- ...
Joerg Sonnenbergerc9199682017-07-01 21:36:21 +0000130
Yuka Takahashiba900ab2018-03-07 11:34:02 +0000131Modified Compiler Flags
132-----------------------
133
Sylvestre Ledrue0b46382018-04-04 09:38:22 +0000134- Before Clang 7, we prepended the `#` character to the `--autocomplete`
Eugene Zelenkod02f3e92018-03-08 01:37:39 +0000135 argument to enable cc1 flags. For example, when the `-cc1` or `-Xclang` flag
136 is in the :program:`clang` invocation, the shell executed
Sylvestre Ledrue0b46382018-04-04 09:38:22 +0000137 `clang --autocomplete=#-<flag to be completed>`. Clang 7 now requires the
Eugene Zelenkod02f3e92018-03-08 01:37:39 +0000138 whole invocation including all flags to be passed to the `--autocomplete` like
139 this: `clang --autocomplete=-cc1,-xc++,-fsyn`.
Yuka Takahashiba900ab2018-03-07 11:34:02 +0000140
Tyler Nowickidb2668a2014-06-18 00:51:32 +0000141New Pragmas in Clang
Eugene Zelenkoad5684a2018-05-15 21:45:01 +0000142--------------------
Tyler Nowickidb2668a2014-06-18 00:51:32 +0000143
Rafael Espindolaaf742502014-08-22 21:59:11 +0000144Clang now supports the ...
Mark Heffernanbd26f5e2014-07-21 18:08:34 +0000145
Paul Robinsonf9ede1c2016-07-18 17:19:12 +0000146
147Attribute Changes in Clang
148--------------------------
149
Erich Keaneace10a22018-01-08 23:36:29 +0000150- Clang now supports function multiversioning with attribute 'target' on ELF
151 based x86/x86-64 environments by using indirect functions. This implementation
152 has a few minor limitations over the GCC implementation for the sake of AST
153 sanity, however it is otherwise compatible with existing code using this
154 feature for GCC. Consult the documentation for the target attribute for more
155 information.
Eugene Zelenkod02f3e92018-03-08 01:37:39 +0000156
Hans Wennborgfbb21e02017-07-19 14:14:07 +0000157- ...
Paul Robinsonf9ede1c2016-07-18 17:19:12 +0000158
Hans Wennborg02dc0002014-08-05 00:21:23 +0000159Windows Support
160---------------
161
Rafael Espindolaaf742502014-08-22 21:59:11 +0000162Clang's support for building native Windows programs ...
Hans Wennborg02dc0002014-08-05 00:21:23 +0000163
164
Renato Golinf2fcddb2013-12-13 09:27:34 +0000165C Language Changes in Clang
166---------------------------
167
Hans Wennborg60d06bf2016-07-18 18:05:19 +0000168- ...
Pirama Arumuga Nainarc85c8532016-06-21 16:09:30 +0000169
Renato Golinf2fcddb2013-12-13 09:27:34 +0000170...
171
Sean Silvafe251442012-12-23 01:19:35 +0000172C11 Feature Support
173^^^^^^^^^^^^^^^^^^^
174
175...
176
177C++ Language Changes in Clang
178-----------------------------
179
Hans Wennborg7b852ea2018-01-03 15:49:39 +0000180- ...
Richard Smith8eb53c82016-05-05 18:40:37 +0000181
182C++1z Feature Support
Sean Silvafe251442012-12-23 01:19:35 +0000183^^^^^^^^^^^^^^^^^^^^^
184
185...
186
187Objective-C Language Changes in Clang
188-------------------------------------
189
190...
191
Erik Schnetter489700d2013-11-11 06:36:33 +0000192OpenCL C Language Changes in Clang
193----------------------------------
194
Bill Wendling0a794a4b2013-11-20 10:13:37 +0000195...
Erik Schnetter489700d2013-11-11 06:36:33 +0000196
Alexey Bataev44b67502016-05-31 11:17:08 +0000197OpenMP Support in Clang
198----------------------------------
199
Hans Wennborg7b852ea2018-01-03 15:49:39 +0000200- ...
Alexey Bataev44b67502016-05-31 11:17:08 +0000201
Jonas Hahnfeld8da9c2a2018-04-20 13:04:54 +0000202CUDA Support in Clang
203---------------------
204
205- Clang will now try to locate the CUDA installation next to :program:`ptxas`
206 in the `PATH` environment variable. This behavior can be turned off by passing
207 the new flag `--cuda-path-ignore-env`.
208
209- Clang now supports generating object files with relocatable device code. This
210 feature needs to be enabled with `-fcuda-rdc` and my result in performance
211 penalties compared to whole program compilation. Please note that NVIDIA's
212 :program:`nvcc` must be used for linking.
213
Sean Silvafe251442012-12-23 01:19:35 +0000214Internal API Changes
215--------------------
216
Hans Wennborg7b852ea2018-01-03 15:49:39 +0000217These are major API changes that have happened since the 6.0.0 release of
Sean Silvafe251442012-12-23 01:19:35 +0000218Clang. If upgrading an external codebase that uses Clang as a library,
219this section should help get you past the largest hurdles of upgrading.
220
Vedant Kumar5fb00e42016-07-27 23:01:55 +0000221- ...
Richard Smitha0334a92015-05-14 00:22:12 +0000222
Aaron Ballmancdc43af2015-09-17 13:47:22 +0000223AST Matchers
224------------
Aaron Ballmancdc43af2015-09-17 13:47:22 +0000225
Hans Wennborg7b852ea2018-01-03 15:49:39 +0000226- ...
Sylvestre Ledru72e3fa72017-03-14 09:43:55 +0000227
228clang-format
229------------
230
Krasimir Georgievf2ca41d2018-05-08 09:25:12 +0000231- Clang-format will now support detecting and formatting code snippets in raw
232 string literals. This is configured through the `RawStringFormats` style
233 option.
234
Hans Wennborg7b852ea2018-01-03 15:49:39 +0000235- ...
Sylvestre Ledruc9410392017-12-05 09:23:47 +0000236
Ted Kremenek3a2291b2013-04-24 07:33:52 +0000237libclang
238--------
239
Bill Wendling61f44cc2013-06-04 06:17:46 +0000240...
Ted Kremenek3a2291b2013-04-24 07:33:52 +0000241
Sylvestre Ledruea49d3a2016-08-06 20:23:54 +0000242
Anna Zaksb6219a92013-04-25 23:14:38 +0000243Static Analyzer
Ted Kremenek004e8232013-04-26 00:01:34 +0000244---------------
Anna Zaksb6219a92013-04-25 23:14:38 +0000245
Hans Wennborg7b852ea2018-01-03 15:49:39 +0000246- ...
Roman Lebedev88b56ca2017-11-30 09:18:35 +0000247
Bill Wendling0a794a4b2013-11-20 10:13:37 +0000248...
Ted Kremenek004e8232013-04-26 00:01:34 +0000249
Vedant Kumar840c2c72017-06-13 02:52:31 +0000250Undefined Behavior Sanitizer (UBSan)
251------------------------------------
252
Hans Wennborg7b852ea2018-01-03 15:49:39 +0000253* ...
Vedant Kumar840c2c72017-06-13 02:52:31 +0000254
Ted Kremenek004e8232013-04-26 00:01:34 +0000255Core Analysis Improvements
256==========================
257
Bill Wendling61f44cc2013-06-04 06:17:46 +0000258- ...
Ted Kremenek004e8232013-04-26 00:01:34 +0000259
260New Issues Found
261================
262
Bill Wendling61f44cc2013-06-04 06:17:46 +0000263- ...
Anna Zaksb6219a92013-04-25 23:14:38 +0000264
Sean Silvafe251442012-12-23 01:19:35 +0000265Python Binding Changes
266----------------------
267
268The following methods have been added:
269
270- ...
271
272Significant Known Problems
273==========================
274
275Additional Information
276======================
277
278A wide variety of additional information is available on the `Clang web
279page <http://clang.llvm.org/>`_. The web page contains versions of the
280API documentation which are up-to-date with the Subversion version of
281the source code. You can access versions of these documents specific to
282this release by going into the "``clang/docs/``" directory in the Clang
283tree.
284
285If you have any questions or comments about Clang, please feel free to
286contact us via the `mailing
Tanya Lattner4a08e932015-08-05 03:55:23 +0000287list <http://lists.llvm.org/mailman/listinfo/cfe-dev>`_.