mirror of
https://github.com/thead-yocto-mirror/gpu_bxm_4_64-kernel
synced 2026-07-16 13:17:14 +02:00
365 lines
13 KiB
ReStructuredText
365 lines
13 KiB
ReStructuredText
=========================
|
|
Clang 9.0.0 Release Notes
|
|
=========================
|
|
|
|
.. contents::
|
|
:local:
|
|
:depth: 2
|
|
|
|
Written by the `LLVM Team <https://llvm.org/>`_
|
|
|
|
|
|
Introduction
|
|
============
|
|
|
|
This document contains the release notes for the Clang C/C++/Objective-C
|
|
frontend, part of the LLVM Compiler Infrastructure, release 9.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 <https://llvm.org/docs/ReleaseNotes.html>`_. All LLVM
|
|
releases may be downloaded from the `LLVM releases web
|
|
site <https://llvm.org/releases/>`_.
|
|
|
|
For more information about Clang or LLVM, including information about the
|
|
latest release, please see the `Clang Web Site <https://clang.llvm.org>`_ or the
|
|
`LLVM Web Site <https://llvm.org>`_.
|
|
|
|
|
|
What's New in Clang 9.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
|
|
------------------
|
|
|
|
- Experimental support for :ref:`C++ for OpenCL <openclcpp>` has been
|
|
added.
|
|
|
|
|
|
Non-comprehensive list of changes in this release
|
|
-------------------------------------------------
|
|
|
|
- The ``__VERSION__`` macro has been updated.
|
|
Previously this macro contained the string '4.2.1 Compatible' to achieve
|
|
compatibility with GCC 4.2.1, but that should no longer be necessary.
|
|
However, to retrieve Clang's version, please favor the one of the macro
|
|
defined in :ref:`clang namespaced version macros <languageextensions-builtin-macros>`.
|
|
|
|
|
|
New Compiler Flags
|
|
------------------
|
|
|
|
- ``-ftime-trace`` and ``ftime-trace-granularity=N``
|
|
Emits flame chart style compilation time report in chrome://tracing and
|
|
speedscope.app compatible format. A trace .json file is written next to the
|
|
compiled object file, containing hierarchical time information about frontend
|
|
activities (file parsing, template instantiation) and backend activities
|
|
(modules and functions being optimized, optimization passes).
|
|
|
|
|
|
Modified Compiler Flags
|
|
-----------------------
|
|
|
|
- ``clang -dumpversion`` now returns the version of Clang itself.
|
|
|
|
|
|
Windows Support
|
|
---------------
|
|
|
|
- clang-cl now treats non-existent files as possible typos for flags,
|
|
``clang-cl /diagnostic:caret /c test.cc`` for example now produces
|
|
``clang: error: no such file or directory: '/diagnostic:caret'; did you mean '/diagnostics:caret'?``
|
|
|
|
- clang now parses the ``__declspec(allocator)`` specifier and generates debug
|
|
information, so that memory usage can be tracked in Visual Studio.
|
|
|
|
- The ``-print-search-dirs`` option now separates elements with semicolons,
|
|
as is the norm for path lists on Windows
|
|
|
|
- Improved handling of dllexport in conjunction with explicit template
|
|
instantiations for MinGW, to allow building a shared libc++ for MinGW
|
|
without ``--export-all-symbols`` to override the dllexport attributes
|
|
|
|
|
|
C Language Changes in Clang
|
|
---------------------------
|
|
|
|
- The ``__FILE_NAME__`` macro has been added as a Clang specific extension supported
|
|
in all C-family languages. This macro is similar to ``__FILE__`` except it
|
|
will always provide the last path component when possible.
|
|
|
|
- Initial support for ``asm goto`` statements (a GNU C extension) has been
|
|
added for control flow from inline assembly to labels. The main consumers of
|
|
this construct are the Linux kernel (CONFIG_JUMP_LABEL=y) and glib. There are
|
|
still a few unsupported corner cases in Clang's integrated assembler and
|
|
IfConverter. Please file bugs for any issues you run into.
|
|
|
|
|
|
C++ Language Changes in Clang
|
|
-----------------------------
|
|
|
|
- Support for the address space attribute in various C++ features was improved,
|
|
refer to :ref:`C++ for OpenCL <openclcpp>` for more details. The following
|
|
features deviated from OpenCL:
|
|
|
|
(1) Address spaces as method qualifiers are not accepted yet;
|
|
|
|
(2) There is no address space deduction.
|
|
|
|
|
|
Objective-C Language Changes in Clang
|
|
-------------------------------------
|
|
|
|
- Fixed encoding of ObjC pointer types that are pointers to typedefs.
|
|
|
|
.. code-block:: objc
|
|
|
|
typedef NSArray<NSObject *> MyArray;
|
|
|
|
// clang used to encode this as "^{NSArray=#}" instead of "@".
|
|
const char *s0 = @encode(MyArray *);
|
|
|
|
OpenCL Kernel Language Changes in Clang
|
|
---------------------------------------
|
|
|
|
OpenCL C
|
|
^^^^^^^^
|
|
|
|
- Enabled use of variadic macro as a Clang extension.
|
|
|
|
- Added initial support for implicitly including OpenCL builtin
|
|
fuctions using efficient trie lookup generated by TableGen.
|
|
A corresponding frontend-only flag ``-fdeclare-opencl-builtins``
|
|
has been added to enable trie during parsing.
|
|
|
|
- Refactored header file to be used for common parts between
|
|
regular header added using ``-finclude-default-header`` and trie
|
|
based declarations added using ``-fdeclare-opencl-builtins``.
|
|
|
|
- Improved string formatting diagnostics in printf for vector types.
|
|
|
|
- Simplified the internal representation of blocks, including their
|
|
generation in IR. Furthermore, indirect calls to block function
|
|
has been changed to direct function calls.
|
|
|
|
- Added diagnostics for conversions of nested pointers with
|
|
different address spaces.
|
|
|
|
- Added ``cl_arm_integer_dot_product`` extension.
|
|
|
|
- Fixed global samplers in OpenCL v2.0.
|
|
|
|
- Improved math builtin functions with parameters of type ``long
|
|
long`` for x86.
|
|
|
|
.. _openclcpp:
|
|
|
|
C++ for OpenCL
|
|
^^^^^^^^^^^^^^
|
|
|
|
Experimental support for C++17 features in OpenCL has been added
|
|
and backwards compatibility with OpenCL C v2.0 was enabled.
|
|
The documentation has been added for supported language features
|
|
into :doc:`LanguageExtensions` and :doc:`UsersManual`.
|
|
|
|
Implemented features are:
|
|
|
|
- Address space behavior is improved in majority of C++ features:
|
|
|
|
- Templates parameters and arguments;
|
|
|
|
- Reference types;
|
|
|
|
- Type deduction;
|
|
|
|
- Objects and member functions, including special member
|
|
functions;
|
|
|
|
- Builtin operators;
|
|
|
|
- Method qualifiers now include address space;
|
|
|
|
- Address space deduction has been extended for C++ use cases;
|
|
|
|
- Improved overload ranking rules;
|
|
|
|
- All standard cast operators now prevent converting address
|
|
spaces (except for conversions allowed implicitly). They
|
|
can still be cast using C-style cast.
|
|
|
|
- Vector types as in OpenCL C, including compound vector
|
|
initialization.
|
|
|
|
- OpenCL-specific types: images, samplers, events, pipes, are
|
|
accepted. Note that blocks are not supported yet.
|
|
|
|
- OpenCL standard header in Clang can be compiled in C++ mode.
|
|
|
|
- Global constructors can be invoked from the host side using
|
|
a specific, compiler-generated kernel.
|
|
|
|
- Overloads with generic address space are added to all atomic
|
|
builtin functions, including the ones prior to OpenCL v2.0.
|
|
|
|
|
|
OpenMP Support in Clang
|
|
-----------------------
|
|
|
|
- Added emission of the debug information for NVPTX target devices.
|
|
|
|
CUDA Support in Clang
|
|
---------------------
|
|
|
|
- Added emission of the debug information for the device code.
|
|
|
|
Internal API Changes
|
|
--------------------
|
|
|
|
These are major API changes that have happened since the 8.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.
|
|
|
|
Build System Changes
|
|
--------------------
|
|
|
|
These are major changes to the build system that have happened since the 8.0.0
|
|
release of Clang. Users of the build system should adjust accordingly.
|
|
|
|
- In 8.0.0 and below, the install-clang-headers target would install clang's
|
|
resource directory headers. This installation is now performed by the
|
|
install-clang-resource-headers target. Users of the old install-clang-headers
|
|
target should switch to the new install-clang-resource-headers target. The
|
|
install-clang-headers target now installs clang's API headers (corresponding
|
|
to its libraries), which is consistent with the install-llvm-headers target.
|
|
|
|
- In 9.0.0 and later Clang added a new target on Linux/Unix systems, clang-cpp,
|
|
which generates a shared library comprised of all the clang component
|
|
libraries and exporting the clang C++ APIs. Additionally the build system
|
|
gained the new "CLANG_LINK_CLANG_DYLIB" option, which defaults Off, and when
|
|
set to On, will force clang (and clang-based tools) to link the clang-cpp
|
|
library instead of statically linking clang's components. This option will
|
|
reduce the size of binary distributions at the expense of compiler performance.
|
|
|
|
|
|
clang-format
|
|
------------
|
|
|
|
- Add language support for clang-formatting C# files.
|
|
- Add Microsoft coding style to encapsulate default C# formatting style.
|
|
- Added new option ``PPDIS_BeforeHash`` (in configuration: ``BeforeHash``) to
|
|
``IndentPPDirectives`` which indents preprocessor directives before the hash.
|
|
- Added new option ``AlignConsecutiveMacros`` to align the C/C++ preprocessor
|
|
macros of consecutive lines.
|
|
|
|
libclang
|
|
--------
|
|
|
|
- When ``CINDEXTEST_INCLUDE_ATTRIBUTED_TYPES`` is not provided when making a
|
|
CXType, the equivalent type of the AttributedType is returned instead of the
|
|
modified type if the user does not want attribute sugar. The equivalent type
|
|
represents the minimally-desugared type which the AttributedType is
|
|
canonically equivalent to.
|
|
|
|
|
|
Static Analyzer
|
|
---------------
|
|
|
|
- Fixed a bug where an incorrect checker name would be displayed for a bug
|
|
report.
|
|
|
|
- New checker: ``security.insecureAPI.DeprecatedOrUnsafeBufferHandling`` to detect
|
|
uses of unsafe/deprecated buffer handling functions for C code using the C11
|
|
standard or newer.
|
|
|
|
- New checker: ``osx.MIGChecker`` to find violations of the Mach Interface
|
|
Generator calling convention
|
|
|
|
- New checker: ``optin.osx.OSObjectCStyleCast`` to find C-style casts of of XNU
|
|
libkern OSObjects
|
|
|
|
- New package: ``apiModeling.llvm`` contains modeling checkers to improve the
|
|
accuracy of reports on LLVM's own codebase.
|
|
|
|
- The Static Analyzer received
|
|
:ref:`developer documentation <clang-static-analyzer-docs>`.
|
|
|
|
- The UninitializedObject checker is now considered as stable.
|
|
(moved from the ``alpha.cplusplus`` to the ``optin.cplusplus`` package)
|
|
|
|
- New frontend flags: The list of available checkers are now split into 3
|
|
different frontend flags:
|
|
|
|
- ``-analyzer-checker-help``: The list of user-facing, stable checkers.
|
|
|
|
- ``-analyzer-checker-help-alpha``: The list of in-development
|
|
checkers not yet advised to be turned on.
|
|
|
|
- ``-analyzer-checker-help-developer``: Checkers never meant to be
|
|
enabled/disabled by hand + development checkers.
|
|
|
|
- New frontend flags: While they have always been around, for the first time,
|
|
checker and package options are listable:
|
|
|
|
- ``-analyzer-checker-option-help``: The list of user-facing, stable checker
|
|
and package options.
|
|
|
|
- ``-analyzer-checker-option-help-alpha``: The list of in-development checker
|
|
options not yet advised to be used.
|
|
|
|
- ``-analyzer-checker-option-help-developer``: Options never meant to be
|
|
enabled/disabled by hand + development options.
|
|
|
|
- New frontend flag: ``-analyzer-werror`` to turn analyzer warnings into errors.
|
|
|
|
- Numerous fixes to increase the stability of the experimental cross translation
|
|
unit analysis (CTU).
|
|
|
|
- CTU now handles virtual functions as well.
|
|
|
|
|
|
Linux Kernel
|
|
============
|
|
|
|
With support for asm goto, the mainline Linux kernel for x86_64 is now buildable
|
|
(and bootable) with Clang 9. Other architectures that don't require
|
|
CONFIG_JUMP_LABEL=y such as arm, aarch64, ppc32, ppc64le, (and possibly mips)
|
|
have been supported with older releases of Clang (Clang 4 was first used with
|
|
aarch64).
|
|
|
|
The Android and ChromeOS Linux distributions have moved to building their Linux
|
|
kernels with Clang, and Google is currently testing Clang built kernels for
|
|
their production Linux kernels.
|
|
|
|
Further, LLD, llvm-objcopy, llvm-ar, llvm-nm, llvm-objdump can all be used to
|
|
build a working Linux kernel.
|
|
|
|
More information about building Linux kernels with Clang can be found:
|
|
|
|
- `ClangBuiltLinux web page <https://clangbuiltlinux.github.io/>`_.
|
|
- `Issue Tracker <https://github.com/ClangBuiltLinux/linux/issues>`_.
|
|
- `Wiki <https://github.com/ClangBuiltLinux/linux/wiki>`_.
|
|
- `Mailing List <clang-built-linux@googlegroups.com>`_.
|
|
- `Bi-weekly Meeting <https://calendar.google.com/calendar/embed?src=google.com_bbf8m6m4n8nq5p2bfjpele0n5s%40group.calendar.google.com>`_.
|
|
- #clangbuiltlinux on Freenode.
|
|
- `Clang Meta bug <https://bugs.llvm.org/show_bug.cgi?id=4068>`_.
|
|
- `Continuous Integration <https://travis-ci.com/ClangBuiltLinux/continuous-integration>`_.
|
|
|
|
Additional Information
|
|
======================
|
|
|
|
A wide variety of additional information is available on the `Clang web
|
|
page <https://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 <https://lists.llvm.org/mailman/listinfo/cfe-dev>`_.
|