summaryrefslogtreecommitdiffstats
path: root/docs/ReleaseNotes.rst
blob: 0902d2f723c3b27b2fea8eee7b4885306df89913 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
=======================================
Clang 5.0.0 (In-Progress) Release Notes
=======================================

.. contents::
   :local:
   :depth: 2

Written by the `LLVM Team <http://llvm.org/>`_

.. warning::

   These are in-progress notes for the upcoming Clang 5 release.
   Release notes for previous releases can be found on
   `the Download Page <http://releases.llvm.org/download.html>`_.

Introduction
============

This document contains the release notes for the Clang C/C++/Objective-C
frontend, part of the LLVM Compiler Infrastructure, release 5.0.0. Here we
describe the status of Clang in some detail, including major
improvements from the previous release and new feature work. For the
general LLVM release notes, see `the LLVM
documentation <http://llvm.org/docs/ReleaseNotes.html>`_. All LLVM
releases may be downloaded from the `LLVM releases web
site <http://llvm.org/releases/>`_.

For more information about Clang or LLVM, including information about
the latest release, please check out the main please see the `Clang Web
Site <http://clang.llvm.org>`_ or the `LLVM Web
Site <http://llvm.org>`_.

Note that if you are reading this file from a Subversion checkout or the
main Clang web page, this document applies to the *next* release, not
the current one. To see the release notes for a specific release, please
see the `releases page <http://llvm.org/releases/>`_.

What's New in Clang 5.0.0?
==========================

Some of the major new features and improvements to Clang are listed
here. Generic improvements to Clang as a whole or to its underlying
infrastructure are described first, followed by language-specific
sections with improvements to Clang's support for those languages.

Major New Features
------------------

-  ...

C++ coroutines
^^^^^^^^^^^^^^
`C++ coroutines TS
<http://open-std.org/jtc1/sc22/wg21/docs/papers/2017/n4680.pdf>`_
implementation has landed. Use ``-fcoroutines-ts -stdlib=libc++`` to enable
coroutine support. Here is `an example
<https://wandbox.org/permlink/Dth1IO5q8Oe31ew2>`_ to get you started.


Improvements to Clang's diagnostics
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

-  -Wcast-qual was implemented for C++. C-style casts are now properly
   diagnosed.

-  -Wunused-lambda-capture warns when a variable explicitly captured
   by a lambda is not used in the body of the lambda.

-  -Wstrict-prototypes is a new warning that warns about non-prototype
   function and block declarations and types in C and Objective-C.

-  -Wunguarded-availability is a new warning that warns about uses of new
   APIs that were introduced in a system whose version is newer than the
   deployment target version. A new Objective-C expression ``@available`` has
   been introduced to perform system version checking at runtime. This warning
   is off by default to prevent unexpected warnings in existing projects.
   However, its less strict sibling -Wunguarded-availability-new is on by
   default. It warns about unguarded uses of APIs only when they were introduced
   in or after macOS 10.13, iOS 11, tvOS 11 or watchOS 4.

-  The -Wdocumentation warning now allows the use of ``\param`` and
   ``\returns`` documentation directives in the documentation comments for
   declarations with a function or a block pointer type.

-  The compiler no longer warns about unreachable ``__builtin_unreachable``
   statements.

New Compiler Flags
------------------

- --autocomplete was implemented to obtain a list of flags and its arguments. This is used for shell autocompletion.

Deprecated Compiler Flags
-------------------------

The following options are deprecated and ignored. They will be removed in
future versions of Clang.

- -fslp-vectorize-aggressive used to enable the BB vectorizing pass. They have been superseeded
  by the normal SLP vectorizer.
- -fno-slp-vectorize-aggressive used to be the default behavior of clang.

New Pragmas in Clang
-----------------------

- Clang now supports the ``clang attribute`` pragma that allows users to apply
  an attribute to multiple declarations.

- ``pragma pack`` directives that are included in a precompiled header are now
  applied correctly to the declarations in the compilation unit that includes
  that precompiled header.

Attribute Changes in Clang
--------------------------

-  The ``overloadable`` attribute now allows at most one function with a given
   name to lack the ``overloadable`` attribute. This unmarked function will not
   have its name mangled.
-  The ```ms_abi`` attribute and the ``__builtin_ms_va_list`` types and builtins
   are now supported on AArch64.

Windows Support
---------------

Clang's support for building native Windows programs ...


C Language Changes in Clang
---------------------------

- Added near complete support for implicit scalar to vector conversion, a GNU
  C/C++ language extension. With this extension, the following code is
  considered valid:

.. code-block:: c

    typedef unsigned v4i32 __attribute__((vector_size(16)));

    v4i32 foo(v4i32 a) {
      // Here 5 is implicitly casted to an unsigned value and replicated into a
      // vector with as many elements as 'a'.
      return a + 5;
    }

The implicit conversion of a scalar value to a vector value--in the context of
a vector expression--occurs when:

- The type of the vector is that of a ``__attribute__((vector_size(size)))``
  vector, not an OpenCL ``__attribute__((ext_vector_type(size)))`` vector type.

- The scalar value can be casted to that of the vector element's type without
  the loss of precision based on the type of the scalar and the type of the
  vector's elements.

- For compile time constant values, the above rule is weakened to consider the
  value of the scalar constant rather than the constant's type.

- Floating point constants with precise integral representations are not
  implicitly converted to integer values, this is for compatability with GCC.


Currently the basic integer and floating point types with the following
operators are supported: ``+``, ``/``, ``-``, ``*``, ``%``, ``>``, ``<``,
``>=``, ``<=``, ``==``, ``!=``, ``&``, ``|``, ``^`` and the corresponding
assignment operators where applicable.

...

C11 Feature Support
^^^^^^^^^^^^^^^^^^^

...

C++ Language Changes in Clang
-----------------------------

- As mentioned in `C Language Changes in Clang`_, Clang's support for
  implicit scalar to vector conversions also applies to C++. Additionally
  the following operators are also supported: ``&&`` and ``||``.

...

C++1z Feature Support
^^^^^^^^^^^^^^^^^^^^^

...

Objective-C Language Changes in Clang
-------------------------------------

- Clang now guarantees that a ``readwrite`` property is synthesized when an
  ambiguous property (i.e. a property that's declared in multiple protocols)
  is synthesized. The ``-Wprotocol-property-synthesis-ambiguity`` warning that
  warns about incompatible property types is now promoted to an error when
  there's an ambiguity between ``readwrite`` and ``readonly`` properties.

- Clang now prohibits synthesis of ambiguous properties with incompatible
  explicit property attributes. The following property attributes are
  checked for differences: ``copy``, ``retain``/``strong``, ``atomic``,
  ``getter`` and ``setter``.

OpenCL C Language Changes in Clang
----------------------------------

Various bug fixes and improvements:

-  Extended OpenCL-related Clang tests.

-  Improved diagnostics across several areas: scoped address space
   qualified variables, function pointers, atomics, type rank for overloading,
   block captures, ``reserve_id_t``.

-  Several address space related fixes for constant address space function scope variables,
   IR generation, mangling of ``generic`` and alloca (post-fix from general Clang
   refactoring of address spaces).

-  Several improvements in extensions: fixed OpenCL version for ``cl_khr_mipmap_image``,
   added missing ``cl_khr_3d_image_writes``.

-  Improvements in ``enqueue_kernel``, especially the implementation of ``ndrange_t`` and blocks.

-  OpenCL type related fixes: global samplers, the ``pipe_t`` size, internal type redefinition,
   and type compatibility checking in ternary and other operations.

-  The OpenCL header has been extended with missing extension guards, and direct mapping of ``as_type``
   to ``__builtin_astype``.

-  Fixed ``kernel_arg_type_qual`` and OpenCL/SPIR version in metadata.

-  Added proper use of the kernel calling convention to various targets.

The following new functionalities have been added:

-  Added documentation on OpenCL to Clang user manual.

-  Extended Clang builtins with required ``cl_khr_subgroups`` support.

-  Add ``intel_reqd_sub_group_size`` attribute support.

-  Added OpenCL types to ``CIndex``.

OpenMP Support in Clang
----------------------------------

...

Internal API Changes
--------------------

These are major API changes that have happened since the 4.0.0 release of
Clang. If upgrading an external codebase that uses Clang as a library,
this section should help get you past the largest hurdles of upgrading.

-  ...

AST Matchers
------------

...


clang-format
------------

* Option **BreakBeforeInheritanceComma** added to break before ``:`` and ``,``  in case of
  multiple inheritance in a class declaration. Enabled by default in the Mozilla coding style.

  +---------------------+----------------------------------------+
  | true                | false                                  |
  +=====================+========================================+
  | .. code-block:: c++ | .. code-block:: c++                    |
  |                     |                                        |
  |   class MyClass     |   class MyClass : public X, public Y { |
  |       : public X    |   };                                   |
  |       , public Y {  |                                        |
  |   };                |                                        |
  +---------------------+----------------------------------------+

* Align block comment decorations.

  +----------------------+---------------------+
  | Before               | After               |
  +======================+=====================+
  |  .. code-block:: c++ | .. code-block:: c++ |
  |                      |                     |
  |    /* line 1         |   /* line 1         |
  |      * line 2        |    * line 2         |
  |     */               |    */               |
  +----------------------+---------------------+

* The :doc:`ClangFormatStyleOptions` documentation provides detailed examples for most options.

* Namespace end comments are now added or updated automatically.

  +---------------------+---------------------+
  | Before              | After               |
  +=====================+=====================+
  | .. code-block:: c++ | .. code-block:: c++ |
  |                     |                     |
  |   namespace A {     |   namespace A {     |
  |   int i;            |   int i;            |
  |   int j;            |   int j;            |
  |   }                 |   } // namespace A  |
  +---------------------+---------------------+

* Comment reflow support added. Overly long comment lines will now be reflown with the rest of
  the paragraph instead of just broken. Option **ReflowComments** added and enabled by default.

libclang
--------

- Libclang now provides code-completion results for more C++ constructs
  and keywords. The following keywords/identifiers are now included in the
  code-completion results: ``static_assert``, ``alignas``, ``constexpr``,
  ``final``, ``noexcept``, ``override`` and ``thread_local``.

- Libclang now provides code-completion results for members from dependent
  classes. For example:

  .. code-block:: c++

    template<typename T>
    void appendValue(std::vector<T> &dest, const T &value) {
        dest. // Relevant completion results are now shown after '.'
    }

  Note that code-completion results are still not provided when the member
  expression includes a dependent base expression. For example:

  .. code-block:: c++

    template<typename T>
    void appendValue(std::vector<std::vector<T>> &dest, const T &value) {
        dest.at(0). // Libclang fails to provide completion results after '.'
    }

Static Analyzer
---------------

- The static analyzer now supports using the
  `z3 theorem prover <https://github.com/z3prover/z3>`_ from Microsoft Research
  as an external constraint solver. This allows reasoning over more complex
  queries, but performance is ~15x slower than the default range-based
  constraint solver. To enable the z3 solver backend, clang must be built with
  the ``CLANG_ANALYZER_BUILD_Z3=ON`` option, and the
  ``-Xanalyzer -analyzer-constraints=z3`` arguments passed at runtime.

Undefined Behavior Sanitizer (UBSan)
------------------------------------

- The Undefined Behavior Sanitizer has a new check for pointer overflow. This
  check is on by default. The flag to control this functionality is
  -fsanitize=pointer-overflow.

  Pointer overflow is an indicator of undefined behavior: when a pointer
  indexing expression wraps around the address space, or produces other
  unexpected results, its result may not point to a valid object.

- UBSan has several new checks which detect violations of nullability
  annotations. These checks are off by default. The flag to control this group
  of checks is -fsanitize=nullability. The checks can be individially enabled
  by -fsanitize=nullability-arg (which checks calls),
  -fsanitize=nullability-assign (which checks assignments), and
  -fsanitize=nullability-return (which checks return statements).

- UBSan can now detect invalid loads from bitfields and from ObjC BOOLs.

- UBSan can now avoid emitting unnecessary type checks in C++ class methods and
  in several other cases where the result is known at compile-time. UBSan can
  also avoid emitting unnecessary overflow checks in arithmetic expressions
  with promoted integer operands.

Core Analysis Improvements
==========================

- ...

New Issues Found
================

- ...

Python Binding Changes
----------------------

Python bindings now support both Python 2 and Python 3.

The following methods have been added:

- ``is_scoped_enum`` has been added to ``Cursor``.

- ``exception_specification_kind`` has been added to ``Cursor``.

- ``get_address_space`` has been added to ``Type``.

- ``get_typedef_name`` has been added to ``Type``.

- ``get_exception_specification_kind`` has been added to ``Type``.

-  ...

Significant Known Problems
==========================

Additional Information
======================

A wide variety of additional information is available on the `Clang web
page <http://clang.llvm.org/>`_. The web page contains versions of the
API documentation which are up-to-date with the Subversion version of
the source code. You can access versions of these documents specific to
this release by going into the "``clang/docs/``" directory in the Clang
tree.

If you have any questions or comments about Clang, please feel free to
contact us via the `mailing
list <http://lists.llvm.org/mailman/listinfo/cfe-dev>`_.