2016-07-19 02:05:19 +08:00
|
|
|
=======================================
|
2018-08-01 22:01:27 +08:00
|
|
|
Clang 8.0.0 (In-Progress) Release Notes
|
2016-07-19 02:05:19 +08:00
|
|
|
=======================================
|
docs: Convert ReleaseNotes to reST.
This is the last of the "regular" documents to convert to reST, and so
I'm declaring the initial clang reST conversion "done".
However,
- There are some documents in clang/www/ which probably should
be migrated into clang/docs/, such as www/OpenProjects.html
The primary thing blocking me from doing this right now is not knowing
how to set up a redirect so that the old URL's continue to work.
- LibASTMatchersReference.html is not reST. This page is auto-generated
by clang/docs/tools/dump_ast_matchers.py from the source and has some
collapse/expand logic that isn't expressible directly with Sphinx, so
just converting it to reST is not really a good strategy.
Manuel Klimek and I discussed this and the general agreed-upon
direction is making that page data-driven so that it, say, pulls in an
auto-generated blob of JSON which describes the matchers and builds up
the "matcher reference" part of the page with a small amount of JS.
- There are some rogue .txt files hanging around.
Also, I dropped the little dragon logo at the top because Sphinx was
warning about an external image reference (not sure why, but meh, I
didn't want to fight it). If anything, we would want such a logo
integrated into the site's overall theme, rather than hardcoded here.
llvm-svn: 170994
2012-12-23 09:19:35 +08:00
|
|
|
|
|
|
|
.. contents::
|
|
|
|
:local:
|
|
|
|
:depth: 2
|
|
|
|
|
2018-09-10 16:51:25 +08:00
|
|
|
Written by the `LLVM Team <https://llvm.org/>`_
|
docs: Convert ReleaseNotes to reST.
This is the last of the "regular" documents to convert to reST, and so
I'm declaring the initial clang reST conversion "done".
However,
- There are some documents in clang/www/ which probably should
be migrated into clang/docs/, such as www/OpenProjects.html
The primary thing blocking me from doing this right now is not knowing
how to set up a redirect so that the old URL's continue to work.
- LibASTMatchersReference.html is not reST. This page is auto-generated
by clang/docs/tools/dump_ast_matchers.py from the source and has some
collapse/expand logic that isn't expressible directly with Sphinx, so
just converting it to reST is not really a good strategy.
Manuel Klimek and I discussed this and the general agreed-upon
direction is making that page data-driven so that it, say, pulls in an
auto-generated blob of JSON which describes the matchers and builds up
the "matcher reference" part of the page with a small amount of JS.
- There are some rogue .txt files hanging around.
Also, I dropped the little dragon logo at the top because Sphinx was
warning about an external image reference (not sure why, but meh, I
didn't want to fight it). If anything, we would want such a logo
integrated into the site's overall theme, rather than hardcoded here.
llvm-svn: 170994
2012-12-23 09:19:35 +08:00
|
|
|
|
|
|
|
.. warning::
|
|
|
|
|
2018-08-01 22:01:27 +08:00
|
|
|
These are in-progress notes for the upcoming Clang 8 release.
|
2017-02-10 07:26:34 +08:00
|
|
|
Release notes for previous releases can be found on
|
2018-09-10 16:51:25 +08:00
|
|
|
`the Download Page <https://releases.llvm.org/download.html>`_.
|
docs: Convert ReleaseNotes to reST.
This is the last of the "regular" documents to convert to reST, and so
I'm declaring the initial clang reST conversion "done".
However,
- There are some documents in clang/www/ which probably should
be migrated into clang/docs/, such as www/OpenProjects.html
The primary thing blocking me from doing this right now is not knowing
how to set up a redirect so that the old URL's continue to work.
- LibASTMatchersReference.html is not reST. This page is auto-generated
by clang/docs/tools/dump_ast_matchers.py from the source and has some
collapse/expand logic that isn't expressible directly with Sphinx, so
just converting it to reST is not really a good strategy.
Manuel Klimek and I discussed this and the general agreed-upon
direction is making that page data-driven so that it, say, pulls in an
auto-generated blob of JSON which describes the matchers and builds up
the "matcher reference" part of the page with a small amount of JS.
- There are some rogue .txt files hanging around.
Also, I dropped the little dragon logo at the top because Sphinx was
warning about an external image reference (not sure why, but meh, I
didn't want to fight it). If anything, we would want such a logo
integrated into the site's overall theme, rather than hardcoded here.
llvm-svn: 170994
2012-12-23 09:19:35 +08:00
|
|
|
|
|
|
|
Introduction
|
|
|
|
============
|
|
|
|
|
|
|
|
This document contains the release notes for the Clang C/C++/Objective-C
|
2018-08-01 22:01:27 +08:00
|
|
|
frontend, part of the LLVM Compiler Infrastructure, release 8.0.0. Here we
|
docs: Convert ReleaseNotes to reST.
This is the last of the "regular" documents to convert to reST, and so
I'm declaring the initial clang reST conversion "done".
However,
- There are some documents in clang/www/ which probably should
be migrated into clang/docs/, such as www/OpenProjects.html
The primary thing blocking me from doing this right now is not knowing
how to set up a redirect so that the old URL's continue to work.
- LibASTMatchersReference.html is not reST. This page is auto-generated
by clang/docs/tools/dump_ast_matchers.py from the source and has some
collapse/expand logic that isn't expressible directly with Sphinx, so
just converting it to reST is not really a good strategy.
Manuel Klimek and I discussed this and the general agreed-upon
direction is making that page data-driven so that it, say, pulls in an
auto-generated blob of JSON which describes the matchers and builds up
the "matcher reference" part of the page with a small amount of JS.
- There are some rogue .txt files hanging around.
Also, I dropped the little dragon logo at the top because Sphinx was
warning about an external image reference (not sure why, but meh, I
didn't want to fight it). If anything, we would want such a logo
integrated into the site's overall theme, rather than hardcoded here.
llvm-svn: 170994
2012-12-23 09:19:35 +08:00
|
|
|
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
|
2018-09-10 16:51:25 +08:00
|
|
|
documentation <https://llvm.org/docs/ReleaseNotes.html>`_. All LLVM
|
docs: Convert ReleaseNotes to reST.
This is the last of the "regular" documents to convert to reST, and so
I'm declaring the initial clang reST conversion "done".
However,
- There are some documents in clang/www/ which probably should
be migrated into clang/docs/, such as www/OpenProjects.html
The primary thing blocking me from doing this right now is not knowing
how to set up a redirect so that the old URL's continue to work.
- LibASTMatchersReference.html is not reST. This page is auto-generated
by clang/docs/tools/dump_ast_matchers.py from the source and has some
collapse/expand logic that isn't expressible directly with Sphinx, so
just converting it to reST is not really a good strategy.
Manuel Klimek and I discussed this and the general agreed-upon
direction is making that page data-driven so that it, say, pulls in an
auto-generated blob of JSON which describes the matchers and builds up
the "matcher reference" part of the page with a small amount of JS.
- There are some rogue .txt files hanging around.
Also, I dropped the little dragon logo at the top because Sphinx was
warning about an external image reference (not sure why, but meh, I
didn't want to fight it). If anything, we would want such a logo
integrated into the site's overall theme, rather than hardcoded here.
llvm-svn: 170994
2012-12-23 09:19:35 +08:00
|
|
|
releases may be downloaded from the `LLVM releases web
|
2018-09-10 16:51:25 +08:00
|
|
|
site <https://llvm.org/releases/>`_.
|
docs: Convert ReleaseNotes to reST.
This is the last of the "regular" documents to convert to reST, and so
I'm declaring the initial clang reST conversion "done".
However,
- There are some documents in clang/www/ which probably should
be migrated into clang/docs/, such as www/OpenProjects.html
The primary thing blocking me from doing this right now is not knowing
how to set up a redirect so that the old URL's continue to work.
- LibASTMatchersReference.html is not reST. This page is auto-generated
by clang/docs/tools/dump_ast_matchers.py from the source and has some
collapse/expand logic that isn't expressible directly with Sphinx, so
just converting it to reST is not really a good strategy.
Manuel Klimek and I discussed this and the general agreed-upon
direction is making that page data-driven so that it, say, pulls in an
auto-generated blob of JSON which describes the matchers and builds up
the "matcher reference" part of the page with a small amount of JS.
- There are some rogue .txt files hanging around.
Also, I dropped the little dragon logo at the top because Sphinx was
warning about an external image reference (not sure why, but meh, I
didn't want to fight it). If anything, we would want such a logo
integrated into the site's overall theme, rather than hardcoded here.
llvm-svn: 170994
2012-12-23 09:19:35 +08:00
|
|
|
|
2017-08-31 02:35:44 +08:00
|
|
|
For more information about Clang or LLVM, including information about the
|
2018-09-10 16:51:25 +08:00
|
|
|
latest release, please see the `Clang Web Site <https://clang.llvm.org>`_ or the
|
|
|
|
`LLVM Web Site <https://llvm.org>`_.
|
docs: Convert ReleaseNotes to reST.
This is the last of the "regular" documents to convert to reST, and so
I'm declaring the initial clang reST conversion "done".
However,
- There are some documents in clang/www/ which probably should
be migrated into clang/docs/, such as www/OpenProjects.html
The primary thing blocking me from doing this right now is not knowing
how to set up a redirect so that the old URL's continue to work.
- LibASTMatchersReference.html is not reST. This page is auto-generated
by clang/docs/tools/dump_ast_matchers.py from the source and has some
collapse/expand logic that isn't expressible directly with Sphinx, so
just converting it to reST is not really a good strategy.
Manuel Klimek and I discussed this and the general agreed-upon
direction is making that page data-driven so that it, say, pulls in an
auto-generated blob of JSON which describes the matchers and builds up
the "matcher reference" part of the page with a small amount of JS.
- There are some rogue .txt files hanging around.
Also, I dropped the little dragon logo at the top because Sphinx was
warning about an external image reference (not sure why, but meh, I
didn't want to fight it). If anything, we would want such a logo
integrated into the site's overall theme, rather than hardcoded here.
llvm-svn: 170994
2012-12-23 09:19:35 +08:00
|
|
|
|
|
|
|
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
|
2018-09-10 16:51:25 +08:00
|
|
|
see the `releases page <https://llvm.org/releases/>`_.
|
docs: Convert ReleaseNotes to reST.
This is the last of the "regular" documents to convert to reST, and so
I'm declaring the initial clang reST conversion "done".
However,
- There are some documents in clang/www/ which probably should
be migrated into clang/docs/, such as www/OpenProjects.html
The primary thing blocking me from doing this right now is not knowing
how to set up a redirect so that the old URL's continue to work.
- LibASTMatchersReference.html is not reST. This page is auto-generated
by clang/docs/tools/dump_ast_matchers.py from the source and has some
collapse/expand logic that isn't expressible directly with Sphinx, so
just converting it to reST is not really a good strategy.
Manuel Klimek and I discussed this and the general agreed-upon
direction is making that page data-driven so that it, say, pulls in an
auto-generated blob of JSON which describes the matchers and builds up
the "matcher reference" part of the page with a small amount of JS.
- There are some rogue .txt files hanging around.
Also, I dropped the little dragon logo at the top because Sphinx was
warning about an external image reference (not sure why, but meh, I
didn't want to fight it). If anything, we would want such a logo
integrated into the site's overall theme, rather than hardcoded here.
llvm-svn: 170994
2012-12-23 09:19:35 +08:00
|
|
|
|
2018-08-01 22:01:27 +08:00
|
|
|
What's New in Clang 8.0.0?
|
2016-07-19 02:05:19 +08:00
|
|
|
==========================
|
docs: Convert ReleaseNotes to reST.
This is the last of the "regular" documents to convert to reST, and so
I'm declaring the initial clang reST conversion "done".
However,
- There are some documents in clang/www/ which probably should
be migrated into clang/docs/, such as www/OpenProjects.html
The primary thing blocking me from doing this right now is not knowing
how to set up a redirect so that the old URL's continue to work.
- LibASTMatchersReference.html is not reST. This page is auto-generated
by clang/docs/tools/dump_ast_matchers.py from the source and has some
collapse/expand logic that isn't expressible directly with Sphinx, so
just converting it to reST is not really a good strategy.
Manuel Klimek and I discussed this and the general agreed-upon
direction is making that page data-driven so that it, say, pulls in an
auto-generated blob of JSON which describes the matchers and builds up
the "matcher reference" part of the page with a small amount of JS.
- There are some rogue .txt files hanging around.
Also, I dropped the little dragon logo at the top because Sphinx was
warning about an external image reference (not sure why, but meh, I
didn't want to fight it). If anything, we would want such a logo
integrated into the site's overall theme, rather than hardcoded here.
llvm-svn: 170994
2012-12-23 09:19:35 +08:00
|
|
|
|
|
|
|
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
|
|
|
|
------------------
|
|
|
|
|
2018-10-11 07:13:35 +08:00
|
|
|
- Clang supports use of a profile remapping file, which permits
|
|
|
|
profile data captured for one version of a program to be applied
|
|
|
|
when building another version where symbols have changed (for
|
|
|
|
example, due to renaming a class or namespace).
|
|
|
|
See the :doc:`UsersManual` for details.
|
2013-12-13 00:07:11 +08:00
|
|
|
|
docs: Convert ReleaseNotes to reST.
This is the last of the "regular" documents to convert to reST, and so
I'm declaring the initial clang reST conversion "done".
However,
- There are some documents in clang/www/ which probably should
be migrated into clang/docs/, such as www/OpenProjects.html
The primary thing blocking me from doing this right now is not knowing
how to set up a redirect so that the old URL's continue to work.
- LibASTMatchersReference.html is not reST. This page is auto-generated
by clang/docs/tools/dump_ast_matchers.py from the source and has some
collapse/expand logic that isn't expressible directly with Sphinx, so
just converting it to reST is not really a good strategy.
Manuel Klimek and I discussed this and the general agreed-upon
direction is making that page data-driven so that it, say, pulls in an
auto-generated blob of JSON which describes the matchers and builds up
the "matcher reference" part of the page with a small amount of JS.
- There are some rogue .txt files hanging around.
Also, I dropped the little dragon logo at the top because Sphinx was
warning about an external image reference (not sure why, but meh, I
didn't want to fight it). If anything, we would want such a logo
integrated into the site's overall theme, rather than hardcoded here.
llvm-svn: 170994
2012-12-23 09:19:35 +08:00
|
|
|
Improvements to Clang's diagnostics
|
|
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
[Sema] Extend -Wself-assign and -Wself-assign-field to warn on overloaded self-assignment (classes)
Summary:
This has just bit me, so i though it would be nice to avoid that next time :)
Motivational case:
https://godbolt.org/g/cq9UNk
Basically, it's likely to happen if you don't like shadowing issues,
and use `-Wshadow` and friends. And it won't be diagnosed by clang.
The reason is, these self-assign diagnostics only work for builtin assignment
operators. Which makes sense, one could have a very special operator=,
that does something unusual in case of self-assignment,
so it may make sense to not warn on that.
But while it may be intentional in some cases, it may be a bug in other cases,
so it would be really great to have some diagnostic about it...
Reviewers: aaron.ballman, rsmith, rtrieu, nikola, rjmccall, dblaikie
Reviewed By: rjmccall
Subscribers: EricWF, lebedev.ri, thakis, Quuxplusone, cfe-commits
Differential Revision: https://reviews.llvm.org/D44883
llvm-svn: 329493
2018-04-07 18:39:21 +08:00
|
|
|
|
2017-07-27 02:04:45 +08:00
|
|
|
Non-comprehensive list of changes in this release
|
|
|
|
-------------------------------------------------
|
|
|
|
|
2018-01-03 23:49:39 +08:00
|
|
|
- ...
|
2017-12-15 03:22:02 +08:00
|
|
|
|
docs: Convert ReleaseNotes to reST.
This is the last of the "regular" documents to convert to reST, and so
I'm declaring the initial clang reST conversion "done".
However,
- There are some documents in clang/www/ which probably should
be migrated into clang/docs/, such as www/OpenProjects.html
The primary thing blocking me from doing this right now is not knowing
how to set up a redirect so that the old URL's continue to work.
- LibASTMatchersReference.html is not reST. This page is auto-generated
by clang/docs/tools/dump_ast_matchers.py from the source and has some
collapse/expand logic that isn't expressible directly with Sphinx, so
just converting it to reST is not really a good strategy.
Manuel Klimek and I discussed this and the general agreed-upon
direction is making that page data-driven so that it, say, pulls in an
auto-generated blob of JSON which describes the matchers and builds up
the "matcher reference" part of the page with a small amount of JS.
- There are some rogue .txt files hanging around.
Also, I dropped the little dragon logo at the top because Sphinx was
warning about an external image reference (not sure why, but meh, I
didn't want to fight it). If anything, we would want such a logo
integrated into the site's overall theme, rather than hardcoded here.
llvm-svn: 170994
2012-12-23 09:19:35 +08:00
|
|
|
New Compiler Flags
|
|
|
|
------------------
|
|
|
|
|
2018-01-03 23:49:39 +08:00
|
|
|
- ...
|
2017-10-22 00:45:08 +08:00
|
|
|
|
2017-07-02 05:36:21 +08:00
|
|
|
Deprecated Compiler Flags
|
|
|
|
-------------------------
|
|
|
|
|
|
|
|
The following options are deprecated and ignored. They will be removed in
|
|
|
|
future versions of Clang.
|
|
|
|
|
2017-07-19 22:14:07 +08:00
|
|
|
- ...
|
2017-07-02 05:36:21 +08:00
|
|
|
|
2018-03-07 19:34:02 +08:00
|
|
|
Modified Compiler Flags
|
|
|
|
-----------------------
|
|
|
|
|
2018-10-27 03:26:45 +08:00
|
|
|
- As of clang 8, `alignof` and `_Alignof` return the ABI alignment of a type,
|
|
|
|
as opposed to the preferred alignment. `__alignof` still returns the
|
|
|
|
preferred alignment. `-fclang-abi-compat=7` (and previous) will make
|
|
|
|
`alignof` and `_Alignof` return preferred alignment again.
|
|
|
|
|
2018-03-07 19:34:02 +08:00
|
|
|
|
2014-06-18 08:51:32 +08:00
|
|
|
New Pragmas in Clang
|
2018-05-16 05:45:01 +08:00
|
|
|
--------------------
|
2014-06-18 08:51:32 +08:00
|
|
|
|
2018-10-30 01:38:42 +08:00
|
|
|
- Clang now supports adding multiple `#pragma clang attribute` attributes into
|
|
|
|
a scope of pushed attributes.
|
2016-07-19 01:19:12 +08:00
|
|
|
|
|
|
|
Attribute Changes in Clang
|
|
|
|
--------------------------
|
|
|
|
|
2017-07-19 22:14:07 +08:00
|
|
|
- ...
|
2014-07-22 02:08:34 +08:00
|
|
|
|
2014-08-05 08:21:23 +08:00
|
|
|
Windows Support
|
|
|
|
---------------
|
|
|
|
|
2018-09-12 01:10:44 +08:00
|
|
|
- clang-cl now supports the use of the precompiled header options /Yc and /Yu
|
|
|
|
without the filename argument. When these options are used without the
|
|
|
|
filename, a `#pragma hdrstop` inside the source marks the end of the
|
|
|
|
precompiled code.
|
|
|
|
|
2018-07-18 19:55:03 +08:00
|
|
|
- ...
|
2014-08-05 08:21:23 +08:00
|
|
|
|
|
|
|
|
2013-12-13 17:27:34 +08:00
|
|
|
C Language Changes in Clang
|
|
|
|
---------------------------
|
|
|
|
|
2016-07-19 02:05:19 +08:00
|
|
|
- ...
|
2016-06-22 00:09:30 +08:00
|
|
|
|
2013-12-13 17:27:34 +08:00
|
|
|
...
|
|
|
|
|
docs: Convert ReleaseNotes to reST.
This is the last of the "regular" documents to convert to reST, and so
I'm declaring the initial clang reST conversion "done".
However,
- There are some documents in clang/www/ which probably should
be migrated into clang/docs/, such as www/OpenProjects.html
The primary thing blocking me from doing this right now is not knowing
how to set up a redirect so that the old URL's continue to work.
- LibASTMatchersReference.html is not reST. This page is auto-generated
by clang/docs/tools/dump_ast_matchers.py from the source and has some
collapse/expand logic that isn't expressible directly with Sphinx, so
just converting it to reST is not really a good strategy.
Manuel Klimek and I discussed this and the general agreed-upon
direction is making that page data-driven so that it, say, pulls in an
auto-generated blob of JSON which describes the matchers and builds up
the "matcher reference" part of the page with a small amount of JS.
- There are some rogue .txt files hanging around.
Also, I dropped the little dragon logo at the top because Sphinx was
warning about an external image reference (not sure why, but meh, I
didn't want to fight it). If anything, we would want such a logo
integrated into the site's overall theme, rather than hardcoded here.
llvm-svn: 170994
2012-12-23 09:19:35 +08:00
|
|
|
C11 Feature Support
|
|
|
|
^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
...
|
|
|
|
|
|
|
|
C++ Language Changes in Clang
|
|
|
|
-----------------------------
|
|
|
|
|
2018-01-03 23:49:39 +08:00
|
|
|
- ...
|
2016-05-06 02:40:37 +08:00
|
|
|
|
|
|
|
C++1z Feature Support
|
docs: Convert ReleaseNotes to reST.
This is the last of the "regular" documents to convert to reST, and so
I'm declaring the initial clang reST conversion "done".
However,
- There are some documents in clang/www/ which probably should
be migrated into clang/docs/, such as www/OpenProjects.html
The primary thing blocking me from doing this right now is not knowing
how to set up a redirect so that the old URL's continue to work.
- LibASTMatchersReference.html is not reST. This page is auto-generated
by clang/docs/tools/dump_ast_matchers.py from the source and has some
collapse/expand logic that isn't expressible directly with Sphinx, so
just converting it to reST is not really a good strategy.
Manuel Klimek and I discussed this and the general agreed-upon
direction is making that page data-driven so that it, say, pulls in an
auto-generated blob of JSON which describes the matchers and builds up
the "matcher reference" part of the page with a small amount of JS.
- There are some rogue .txt files hanging around.
Also, I dropped the little dragon logo at the top because Sphinx was
warning about an external image reference (not sure why, but meh, I
didn't want to fight it). If anything, we would want such a logo
integrated into the site's overall theme, rather than hardcoded here.
llvm-svn: 170994
2012-12-23 09:19:35 +08:00
|
|
|
^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
...
|
|
|
|
|
|
|
|
Objective-C Language Changes in Clang
|
|
|
|
-------------------------------------
|
|
|
|
|
|
|
|
...
|
|
|
|
|
2013-11-11 14:36:33 +08:00
|
|
|
OpenCL C Language Changes in Clang
|
|
|
|
----------------------------------
|
|
|
|
|
2013-11-20 18:13:37 +08:00
|
|
|
...
|
2013-11-11 14:36:33 +08:00
|
|
|
|
2018-10-27 03:26:45 +08:00
|
|
|
ABI Changes in Clang
|
|
|
|
--------------------
|
|
|
|
|
|
|
|
- `_Alignof` and `alignof` now return the ABI alignment of a type, as opposed
|
|
|
|
to the preferred alignment.
|
2018-11-01 01:00:50 +08:00
|
|
|
|
2018-10-27 03:26:45 +08:00
|
|
|
- This is more in keeping with the language of the standards, as well as
|
|
|
|
being compatible with gcc
|
|
|
|
- `__alignof` and `__alignof__` still return the preferred alignment of
|
|
|
|
a type
|
|
|
|
- This shouldn't break any ABI except for things that explicitly ask for
|
|
|
|
`alignas(alignof(T))`.
|
|
|
|
- If you have interfaces that break with this change, you may wish to switch
|
|
|
|
to `alignas(__alignof(T))`, instead of using the `-fclang-abi-compat`
|
|
|
|
switch.
|
|
|
|
|
2016-05-31 19:17:08 +08:00
|
|
|
OpenMP Support in Clang
|
|
|
|
----------------------------------
|
|
|
|
|
|
|
|
|
2018-04-20 21:04:54 +08:00
|
|
|
CUDA Support in Clang
|
|
|
|
---------------------
|
|
|
|
|
|
|
|
|
docs: Convert ReleaseNotes to reST.
This is the last of the "regular" documents to convert to reST, and so
I'm declaring the initial clang reST conversion "done".
However,
- There are some documents in clang/www/ which probably should
be migrated into clang/docs/, such as www/OpenProjects.html
The primary thing blocking me from doing this right now is not knowing
how to set up a redirect so that the old URL's continue to work.
- LibASTMatchersReference.html is not reST. This page is auto-generated
by clang/docs/tools/dump_ast_matchers.py from the source and has some
collapse/expand logic that isn't expressible directly with Sphinx, so
just converting it to reST is not really a good strategy.
Manuel Klimek and I discussed this and the general agreed-upon
direction is making that page data-driven so that it, say, pulls in an
auto-generated blob of JSON which describes the matchers and builds up
the "matcher reference" part of the page with a small amount of JS.
- There are some rogue .txt files hanging around.
Also, I dropped the little dragon logo at the top because Sphinx was
warning about an external image reference (not sure why, but meh, I
didn't want to fight it). If anything, we would want such a logo
integrated into the site's overall theme, rather than hardcoded here.
llvm-svn: 170994
2012-12-23 09:19:35 +08:00
|
|
|
Internal API Changes
|
|
|
|
--------------------
|
|
|
|
|
2018-08-01 22:01:27 +08:00
|
|
|
These are major API changes that have happened since the 7.0.0 release of
|
docs: Convert ReleaseNotes to reST.
This is the last of the "regular" documents to convert to reST, and so
I'm declaring the initial clang reST conversion "done".
However,
- There are some documents in clang/www/ which probably should
be migrated into clang/docs/, such as www/OpenProjects.html
The primary thing blocking me from doing this right now is not knowing
how to set up a redirect so that the old URL's continue to work.
- LibASTMatchersReference.html is not reST. This page is auto-generated
by clang/docs/tools/dump_ast_matchers.py from the source and has some
collapse/expand logic that isn't expressible directly with Sphinx, so
just converting it to reST is not really a good strategy.
Manuel Klimek and I discussed this and the general agreed-upon
direction is making that page data-driven so that it, say, pulls in an
auto-generated blob of JSON which describes the matchers and builds up
the "matcher reference" part of the page with a small amount of JS.
- There are some rogue .txt files hanging around.
Also, I dropped the little dragon logo at the top because Sphinx was
warning about an external image reference (not sure why, but meh, I
didn't want to fight it). If anything, we would want such a logo
integrated into the site's overall theme, rather than hardcoded here.
llvm-svn: 170994
2012-12-23 09:19:35 +08:00
|
|
|
Clang. If upgrading an external codebase that uses Clang as a library,
|
|
|
|
this section should help get you past the largest hurdles of upgrading.
|
|
|
|
|
2016-07-28 07:01:55 +08:00
|
|
|
- ...
|
2015-05-14 08:22:12 +08:00
|
|
|
|
2015-09-17 21:47:22 +08:00
|
|
|
AST Matchers
|
|
|
|
------------
|
|
|
|
|
2018-01-03 23:49:39 +08:00
|
|
|
- ...
|
2017-03-14 17:43:55 +08:00
|
|
|
|
|
|
|
clang-format
|
|
|
|
------------
|
|
|
|
|
2018-05-08 17:25:12 +08:00
|
|
|
|
2018-01-03 23:49:39 +08:00
|
|
|
- ...
|
2017-12-05 17:23:47 +08:00
|
|
|
|
2013-04-24 15:33:52 +08:00
|
|
|
libclang
|
|
|
|
--------
|
|
|
|
|
2013-06-04 14:17:46 +08:00
|
|
|
...
|
2013-04-24 15:33:52 +08:00
|
|
|
|
2016-08-07 04:23:54 +08:00
|
|
|
|
2013-04-26 07:14:38 +08:00
|
|
|
Static Analyzer
|
2013-04-26 08:01:34 +08:00
|
|
|
---------------
|
|
|
|
|
2018-01-03 23:49:39 +08:00
|
|
|
- ...
|
2017-11-30 17:18:35 +08:00
|
|
|
|
2013-11-20 18:13:37 +08:00
|
|
|
...
|
2013-04-26 08:01:34 +08:00
|
|
|
|
[clang][ubsan] Implicit Conversion Sanitizer - integer truncation - clang part
Summary:
C and C++ are interesting languages. They are statically typed, but weakly.
The implicit conversions are allowed. This is nice, allows to write code
while balancing between getting drowned in everything being convertible,
and nothing being convertible. As usual, this comes with a price:
```
unsigned char store = 0;
bool consume(unsigned int val);
void test(unsigned long val) {
if (consume(val)) {
// the 'val' is `unsigned long`, but `consume()` takes `unsigned int`.
// If their bit widths are different on this platform, the implicit
// truncation happens. And if that `unsigned long` had a value bigger
// than UINT_MAX, then you may or may not have a bug.
// Similarly, integer addition happens on `int`s, so `store` will
// be promoted to an `int`, the sum calculated (0+768=768),
// and the result demoted to `unsigned char`, and stored to `store`.
// In this case, the `store` will still be 0. Again, not always intended.
store = store + 768; // before addition, 'store' was promoted to int.
}
// But yes, sometimes this is intentional.
// You can either make the conversion explicit
(void)consume((unsigned int)val);
// or mask the value so no bits will be *implicitly* lost.
(void)consume((~((unsigned int)0)) & val);
}
```
Yes, there is a `-Wconversion`` diagnostic group, but first, it is kinda
noisy, since it warns on everything (unlike sanitizers, warning on an
actual issues), and second, there are cases where it does **not** warn.
So a Sanitizer is needed. I don't have any motivational numbers, but i know
i had this kind of problem 10-20 times, and it was never easy to track down.
The logic to detect whether an truncation has happened is pretty simple
if you think about it - https://godbolt.org/g/NEzXbb - basically, just
extend (using the new, not original!, signedness) the 'truncated' value
back to it's original width, and equality-compare it with the original value.
The most non-trivial thing here is the logic to detect whether this
`ImplicitCastExpr` AST node is **actually** an implicit conversion, //or//
part of an explicit cast. Because the explicit casts are modeled as an outer
`ExplicitCastExpr` with some `ImplicitCastExpr`'s as **direct** children.
https://godbolt.org/g/eE1GkJ
Nowadays, we can just use the new `part_of_explicit_cast` flag, which is set
on all the implicitly-added `ImplicitCastExpr`'s of an `ExplicitCastExpr`.
So if that flag is **not** set, then it is an actual implicit conversion.
As you may have noted, this isn't just named `-fsanitize=implicit-integer-truncation`.
There are potentially some more implicit conversions to be warned about.
Namely, implicit conversions that result in sign change; implicit conversion
between different floating point types, or between fp and an integer,
when again, that conversion is lossy.
One thing i know isn't handled is bitfields.
This is a clang part.
The compiler-rt part is D48959.
Fixes [[ https://bugs.llvm.org/show_bug.cgi?id=21530 | PR21530 ]], [[ https://bugs.llvm.org/show_bug.cgi?id=37552 | PR37552 ]], [[ https://bugs.llvm.org/show_bug.cgi?id=35409 | PR35409 ]].
Partially fixes [[ https://bugs.llvm.org/show_bug.cgi?id=9821 | PR9821 ]].
Fixes https://github.com/google/sanitizers/issues/940. (other than sign-changing implicit conversions)
Reviewers: rjmccall, rsmith, samsonov, pcc, vsk, eugenis, efriedma, kcc, erichkeane
Reviewed By: rsmith, vsk, erichkeane
Subscribers: erichkeane, klimek, #sanitizers, aaron.ballman, RKSimon, dtzWill, filcab, danielaustin, ygribov, dvyukov, milianw, mclow.lists, cfe-commits, regehr
Tags: #sanitizers
Differential Revision: https://reviews.llvm.org/D48958
llvm-svn: 338288
2018-07-31 02:58:30 +08:00
|
|
|
.. _release-notes-ubsan:
|
|
|
|
|
2017-06-13 10:52:31 +08:00
|
|
|
Undefined Behavior Sanitizer (UBSan)
|
|
|
|
------------------------------------
|
|
|
|
|
[clang][ubsan] Implicit Conversion Sanitizer - integer sign change - clang part
This is the second half of Implicit Integer Conversion Sanitizer.
It completes the first half, and finally makes the sanitizer
fully functional! Only the bitfield handling is missing.
Summary:
C and C++ are interesting languages. They are statically typed, but weakly.
The implicit conversions are allowed. This is nice, allows to write code
while balancing between getting drowned in everything being convertible,
and nothing being convertible. As usual, this comes with a price:
```
void consume(unsigned int val);
void test(int val) {
consume(val);
// The 'val' is `signed int`, but `consume()` takes `unsigned int`.
// If val is negative, then consume() will be operating on a large
// unsigned value, and you may or may not have a bug.
// But yes, sometimes this is intentional.
// Making the conversion explicit silences the sanitizer.
consume((unsigned int)val);
}
```
Yes, there is a `-Wsign-conversion`` diagnostic group, but first, it is kinda
noisy, since it warns on everything (unlike sanitizers, warning on an
actual issues), and second, likely there are cases where it does **not** warn.
The actual detection is pretty easy. We just need to check each of the values
whether it is negative, and equality-compare the results of those comparisons.
The unsigned value is obviously non-negative. Zero is non-negative too.
https://godbolt.org/g/w93oj2
We do not have to emit the check *always*, there are obvious situations
where we can avoid emitting it, since it would **always** get optimized-out.
But i do think the tautological IR (`icmp ult %x, 0`, which is always false)
should be emitted, and the middle-end should cleanup it.
This sanitizer is in the `-fsanitize=implicit-conversion` group,
and is a logical continuation of D48958 `-fsanitize=implicit-integer-truncation`.
As for the ordering, i'we opted to emit the check **after**
`-fsanitize=implicit-integer-truncation`. At least on these simple 16 test cases,
this results in 1 of the 12 emitted checks being optimized away,
as compared to 0 checks being optimized away if the order is reversed.
This is a clang part.
The compiler-rt part is D50251.
Finishes fixing [[ https://bugs.llvm.org/show_bug.cgi?id=21530 | PR21530 ]], [[ https://bugs.llvm.org/show_bug.cgi?id=37552 | PR37552 ]], [[ https://bugs.llvm.org/show_bug.cgi?id=35409 | PR35409 ]].
Finishes partially fixing [[ https://bugs.llvm.org/show_bug.cgi?id=9821 | PR9821 ]].
Finishes fixing https://github.com/google/sanitizers/issues/940.
Only the bitfield handling is missing.
Reviewers: vsk, rsmith, rjmccall, #sanitizers, erichkeane
Reviewed By: rsmith
Subscribers: chandlerc, filcab, cfe-commits, regehr
Tags: #sanitizers, #clang
Differential Revision: https://reviews.llvm.org/D50250
llvm-svn: 345660
2018-10-31 05:58:56 +08:00
|
|
|
* The Implicit Conversion Sanitizer (``-fsanitize=implicit-conversion``) group
|
|
|
|
was extended. One more type of issues is caught - implicit integer sign change.
|
|
|
|
(``-fsanitize=implicit-integer-sign-change``).
|
|
|
|
This makes the Implicit Conversion Sanitizer feature-complete,
|
|
|
|
with only missing piece being bitfield handling.
|
|
|
|
While there is a ``-Wsign-conversion`` diagnostic group that catches this kind
|
|
|
|
of issues, it is both noisy, and does not catch **all** the cases.
|
|
|
|
|
|
|
|
.. code-block:: c++
|
|
|
|
|
|
|
|
bool consume(unsigned int val);
|
|
|
|
|
|
|
|
void test(int val) {
|
|
|
|
(void)consume(val); // If the value was negative, it is now large positive.
|
|
|
|
(void)consume((unsigned int)val); // OK, the conversion is explicit.
|
|
|
|
}
|
|
|
|
|
|
|
|
Like some other ``-fsanitize=integer`` checks, these issues are **not**
|
|
|
|
undefined behaviour. But they are not *always* intentional, and are somewhat
|
|
|
|
hard to track down. This group is **not** enabled by ``-fsanitize=undefined``,
|
|
|
|
but the ``-fsanitize=implicit-integer-sign-change`` check
|
|
|
|
is enabled by ``-fsanitize=integer``.
|
|
|
|
(as is ``-fsanitize=implicit-integer-truncation`` check)
|
2017-06-13 10:52:31 +08:00
|
|
|
|
2013-04-26 08:01:34 +08:00
|
|
|
Core Analysis Improvements
|
|
|
|
==========================
|
2013-04-26 07:14:38 +08:00
|
|
|
|
2013-06-04 14:17:46 +08:00
|
|
|
- ...
|
2013-04-26 08:01:34 +08:00
|
|
|
|
|
|
|
New Issues Found
|
|
|
|
================
|
|
|
|
|
2013-06-04 14:17:46 +08:00
|
|
|
- ...
|
2013-04-26 07:14:38 +08:00
|
|
|
|
docs: Convert ReleaseNotes to reST.
This is the last of the "regular" documents to convert to reST, and so
I'm declaring the initial clang reST conversion "done".
However,
- There are some documents in clang/www/ which probably should
be migrated into clang/docs/, such as www/OpenProjects.html
The primary thing blocking me from doing this right now is not knowing
how to set up a redirect so that the old URL's continue to work.
- LibASTMatchersReference.html is not reST. This page is auto-generated
by clang/docs/tools/dump_ast_matchers.py from the source and has some
collapse/expand logic that isn't expressible directly with Sphinx, so
just converting it to reST is not really a good strategy.
Manuel Klimek and I discussed this and the general agreed-upon
direction is making that page data-driven so that it, say, pulls in an
auto-generated blob of JSON which describes the matchers and builds up
the "matcher reference" part of the page with a small amount of JS.
- There are some rogue .txt files hanging around.
Also, I dropped the little dragon logo at the top because Sphinx was
warning about an external image reference (not sure why, but meh, I
didn't want to fight it). If anything, we would want such a logo
integrated into the site's overall theme, rather than hardcoded here.
llvm-svn: 170994
2012-12-23 09:19:35 +08:00
|
|
|
Python Binding Changes
|
|
|
|
----------------------
|
|
|
|
|
|
|
|
The following methods have been added:
|
|
|
|
|
|
|
|
- ...
|
|
|
|
|
|
|
|
Significant Known Problems
|
|
|
|
==========================
|
|
|
|
|
|
|
|
Additional Information
|
|
|
|
======================
|
|
|
|
|
|
|
|
A wide variety of additional information is available on the `Clang web
|
2018-09-10 16:51:25 +08:00
|
|
|
page <https://clang.llvm.org/>`_. The web page contains versions of the
|
docs: Convert ReleaseNotes to reST.
This is the last of the "regular" documents to convert to reST, and so
I'm declaring the initial clang reST conversion "done".
However,
- There are some documents in clang/www/ which probably should
be migrated into clang/docs/, such as www/OpenProjects.html
The primary thing blocking me from doing this right now is not knowing
how to set up a redirect so that the old URL's continue to work.
- LibASTMatchersReference.html is not reST. This page is auto-generated
by clang/docs/tools/dump_ast_matchers.py from the source and has some
collapse/expand logic that isn't expressible directly with Sphinx, so
just converting it to reST is not really a good strategy.
Manuel Klimek and I discussed this and the general agreed-upon
direction is making that page data-driven so that it, say, pulls in an
auto-generated blob of JSON which describes the matchers and builds up
the "matcher reference" part of the page with a small amount of JS.
- There are some rogue .txt files hanging around.
Also, I dropped the little dragon logo at the top because Sphinx was
warning about an external image reference (not sure why, but meh, I
didn't want to fight it). If anything, we would want such a logo
integrated into the site's overall theme, rather than hardcoded here.
llvm-svn: 170994
2012-12-23 09:19:35 +08:00
|
|
|
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
|
2018-09-10 16:51:25 +08:00
|
|
|
list <https://lists.llvm.org/mailman/listinfo/cfe-dev>`_.
|