зеркало из https://github.com/microsoft/clang-1.git
314 строки
13 KiB
HTML
314 строки
13 KiB
HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
|
|
"http://www.w3.org/TR/html4/strict.dtd">
|
|
<html>
|
|
<head>
|
|
<title>Clang 3.2 Release Notes</title>
|
|
<link type="text/css" rel="stylesheet" href="../menu.css">
|
|
<link type="text/css" rel="stylesheet" href="../content.css">
|
|
<style type="text/css">
|
|
td {
|
|
vertical-align: top;
|
|
}
|
|
</style>
|
|
</head>
|
|
<body>
|
|
|
|
<!--#include virtual="../menu.html.incl"-->
|
|
|
|
<div id="content">
|
|
|
|
<h1>Clang 3.2 Release Notes</h1>
|
|
|
|
<img style="float:right" src="http://llvm.org/img/DragonSmall.png"
|
|
width="136" height="136" alt="LLVM Dragon Logo">
|
|
|
|
<ul>
|
|
<li><a href="#intro">Introduction</a></li>
|
|
<li><a href="#whatsnew">What's New in Clang 3.2?</a>
|
|
<ul>
|
|
<li><a href="#majorfeatures">Major New Features</a></li>
|
|
<li><a href="#newflags">New Compiler Flags</a></li>
|
|
<li><a href="#cchanges">C Language Changes</a></li>
|
|
<li><a href="#cxxchanges">C++ Language Changes</a></li>
|
|
<li><a href="#objcchanges">Objective-C Language Changes</a></li>
|
|
<li><a href="#apichanges">Internal API Changes</a></li>
|
|
<li><a href="#pythonchanges">Python Binding Changes</a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="#knownproblems">Known Problems</a></li>
|
|
<li><a href="#additionalinfo">Additional Information</a></li>
|
|
</ul>
|
|
|
|
<div class="doc_author">
|
|
<p>Written by the <a href="http://llvm.org/">LLVM Team</a></p>
|
|
</div>
|
|
|
|
<h1 style="color:red">These are in-progress notes for the upcoming Clang 3.2
|
|
release.<br>
|
|
You may prefer the
|
|
<a href="http://llvm.org/releases/3.1/docs/ClangReleaseNotes.html">Clang 3.1
|
|
Release Notes</a>.</h1>
|
|
|
|
<!-- ======================================================================= -->
|
|
<h2 id="intro">Introduction</h2>
|
|
<!-- ======================================================================= -->
|
|
|
|
<p>This document contains the release notes for the Clang C/C++/Objective-C
|
|
frontend, part of the LLVM Compiler Infrastructure, release 3.2. 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 <a href="http://llvm.org/docs/ReleaseNotes.html">the LLVM
|
|
documentation</a>. All LLVM releases may be downloaded from the
|
|
<a href="http://llvm.org/releases/">LLVM releases web site</a>.</p>
|
|
|
|
<p>For more information about Clang or LLVM, including information about the
|
|
latest release, please check out the main please see the
|
|
<a href="http://clang.llvm.org">Clang Web Site</a> or the
|
|
<a href="http://llvm.org">LLVM Web Site</a>.
|
|
|
|
<p>Note that if you are reading this file from a Subversion checkout or the main
|
|
Clang web page, this document applies to the <i>next</i> release, not the
|
|
current one. To see the release notes for a specific release, please see the
|
|
<a href="http://llvm.org/releases/">releases page</a>.</p>
|
|
|
|
<!-- ======================================================================= -->
|
|
<h2 id="whatsnew">What's New in Clang 3.2?</h2>
|
|
<!-- ======================================================================= -->
|
|
|
|
<p>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.</p>
|
|
|
|
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
|
|
<h3 id="majorfeatures">Major New Features</h3>
|
|
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
|
|
|
|
<h4 id="diagnostics">Improvements to Clang's diagnostics</h4>
|
|
|
|
<p>Clang's diagnostics are constantly being improved to catch more issues,
|
|
explain them more clearly, and provide more accurate source information about
|
|
them. The improvements since the 3.1 release include:</p>
|
|
|
|
<ul>
|
|
<li><tt>-Wuninitialized</tt> has been taught to recognise uninitialized uses
|
|
which always occur when an explicitly-written non-constant condition is either
|
|
<tt>true</tt> or <tt>false</tt>. For example:
|
|
|
|
<pre>
|
|
int f(bool b) {
|
|
int n;
|
|
if (b)
|
|
n = 1;
|
|
return n;
|
|
}
|
|
|
|
<b>sometimes-uninit.cpp:3:7: <span class="warning">warning:</span> variable 'n' is used uninitialized whenever 'if' condition is false [-Wsometimes-uninitialized]</b>
|
|
if (b)
|
|
<span class="caret">^</span>
|
|
<b>sometimes-uninit.cpp:5:10: <span class="note">note:</span></b> uninitialized use occurs here
|
|
return n;
|
|
<span class="caret">^</span>
|
|
<b>sometimes-uninit.cpp:3:3: <span class="note">note:</span></b> remove the 'if' if its condition is always true
|
|
if (b)
|
|
<span class="caret">^~~~~~</span>
|
|
<b>sometimes-uninit.cpp:2:8: <span class="note">note:</span></b> initialize the variable 'n' to silence this warning
|
|
int n;
|
|
<span class="caret">^</span>
|
|
<span class="caret"> = 0</span>
|
|
</pre>
|
|
|
|
This functionality can be enabled or disabled separately from
|
|
<tt>-Wuninitialized</tt> with the <tt>-Wsometimes-uninitialized</tt> warning
|
|
flag.</li>
|
|
|
|
<li>Template type diffing improves the display of diagnostics with templated
|
|
types in them.
|
|
|
|
<pre>
|
|
int f(vector<map<int, double>>);
|
|
int x = f(vector<map<int, float>>());
|
|
</pre>
|
|
The error message is the same, but the note is different based on the options selected.
|
|
<pre>
|
|
<b>template-diff.cpp:5:9: <span class="error">error:</span> no matching function for call to 'f'</b>
|
|
int x = f(vector<map<int, float>>());
|
|
<span class="caret">^</span>
|
|
</pre>
|
|
Templated type diffing with type elision (default):
|
|
<pre>
|
|
<b>template-diff.cpp:4:5: <span class="note">note:</span></b> candidate function not viable: no known conversion from 'vector<map<[...], <span class="template-highlight">float</span>>>' to 'vector<map<[...], <span class="template-highlight">double</span>>>' for 1st argument;
|
|
int f(vector<map<int, double>>);
|
|
<span class="caret">^</span>
|
|
</pre>
|
|
Templated type diffing without type elision (-fno-elide-type):
|
|
<pre>
|
|
<b>template-diff.cpp:4:5: <span class="note">note:</span></b> candidate function not viable: no known conversion from 'vector<map<int, <span class="template-highlight">float</span>>>' to 'vector<map<int, <span class="template-highlight">double</span>>>' for 1st argument;
|
|
int f(vector<map<int, double>>);
|
|
<span class="caret">^</span>
|
|
</pre>
|
|
Templated tree printing with type elision (-fdiagnostics-show-template-tree):
|
|
<pre>
|
|
<b>template-diff.cpp:4:5: <span class="note">note:</span></b> candidate function not viable: no known conversion for 1st argument;
|
|
vector<
|
|
map<
|
|
[...],
|
|
[<span class="template-highlight">float</span> != <span class="template-highlight">double</span>]>>
|
|
int f(vector<map<int, double>>);
|
|
<span class="caret">^</span>
|
|
</pre>
|
|
Templated tree printing without type elision (-fdiagnostics-show-template-tree -fno-elide-type):
|
|
<pre>
|
|
<b>template-diff.cpp:4:5: <span class="note">note:</span></b> candidate function not viable: no known conversion for 1st argument;
|
|
vector<
|
|
map<
|
|
int,
|
|
[<span class="template-highlight">float</span> != <span class="template-highlight">double</span>]>>
|
|
int f(vector<map<int, double>>);
|
|
<span class="caret">^</span>
|
|
</pre>
|
|
|
|
</li>
|
|
|
|
<li>Clang's <tt>-fcatch-undefined-behavior</tt> option has been renamed to
|
|
<tt>-fsanitize=undefined</tt> and has grown the ability to check for several
|
|
new types of undefined behavior. See the Users Manual for more information.
|
|
|
|
<!-- Flesh this out prior to release. -->
|
|
|
|
<!-- Document renaming of -faddress-sanitizer and -fthread-sanitizer. -->
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
|
|
<h4 id="tlsmodel">Support for <code>tls_model</code> attribute</h4>
|
|
|
|
<p>Clang now supports the <code>tls_model</code> attribute, allowing code that
|
|
uses thread-local storage to explicitly select which model to use. The available
|
|
models are <code>"global-dynamic"</code>, <code>"local-dynamic"</code>,
|
|
<code>"initial-exec"</code> and <code>"local-exec"</code>. See
|
|
<a href="http://www.akkadia.org/drepper/tls.pdf">ELF Handling For Thread-Local
|
|
Storage</a> for more information.</p>
|
|
|
|
<p>The compiler is free to choose a different model if the specified model is not
|
|
supported by the target, or if the compiler determines that a more specific
|
|
model can be used.
|
|
</p>
|
|
|
|
<h4>Type safety attributes</h4>
|
|
<p>Clang now supports type safety attributes that allow checking during compile
|
|
time that 'void *' function arguments and arguments for variadic functions are
|
|
of a particular type which is determined by some other argument to the same
|
|
function call.</p>
|
|
|
|
<p>Usecases include:</p>
|
|
<ul>
|
|
<li>MPI library implementations, where these attributes enable checking that
|
|
buffer type matches the passed <code>MPI_Datatype</code>;</li>
|
|
<li> HDF5 library -- similar usecase as for MPI;</li>
|
|
<li> checking types of variadic functions' arguments for functions like
|
|
<code>fcntl()</code> and <code>ioctl()</code>.</li>
|
|
</ul>
|
|
|
|
<p>See entries for <code>argument_with_type_tag</code>,
|
|
<code>pointer_with_type_tag</code> and <code>type_tag_for_datatype</code>
|
|
attributes in Clang language extensions documentation.</p>
|
|
|
|
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
|
|
<h3 id="newflags">New Compiler Flags</h3>
|
|
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
|
|
<ul>
|
|
<li><tt>-gline-tables-only</tt> controls the
|
|
<a href="http://clang.llvm.org/docs/UsersManual.html#debuginfosize">size of debug information</a>.
|
|
This flag tells Clang to emit debug info which is just enough to obtain stack traces with
|
|
function names, file names and line numbers (by such tools as gdb or addr2line).
|
|
Debug info for variables or function parameters is not produced, which reduces
|
|
the size of the resulting binary.
|
|
|
|
<li><tt>-ftls-model</tt> controls which TLS model to use for thread-local
|
|
variables. This can be overridden per variable using the
|
|
<a href="#tlsmodel"><tt>tls_model</tt> attribute</a> mentioned above.
|
|
For more details, see the <a href="UsersManual.html#opt_ftls-model">User's
|
|
Manual</a>.</li>
|
|
</ul>
|
|
|
|
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
|
|
<h3 id="cchanges">C Language Changes in Clang</h3>
|
|
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
|
|
|
|
<h4 id="c11changes">C11 Feature Support</h4>
|
|
|
|
<p>...</p>
|
|
|
|
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
|
|
<h3 id="cxxchanges">C++ Language Changes in Clang</h3>
|
|
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
|
|
|
|
<h4 id="cxx11changes">C++11 Feature Support</h4>
|
|
|
|
<p>...</p>
|
|
|
|
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
|
|
<h3 id="objcchanges">Objective-C Language Changes in Clang</h3>
|
|
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
|
|
|
|
<p>...</p>
|
|
|
|
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
|
|
<h3 id="apichanges">Internal API Changes</h3>
|
|
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
|
|
|
|
<p>These are major API changes that have happened since the 3.1 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.</p>
|
|
|
|
<h4 id="api1">API change 1</h4>
|
|
|
|
<p>...</p>
|
|
|
|
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
|
|
<h3 id="pythonchanges">Python Binding Changes</h3>
|
|
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
|
|
|
|
The following methods have been added:
|
|
<ul>
|
|
<li>...</li>
|
|
</ul>
|
|
|
|
<!-- ======================================================================= -->
|
|
<h2 id="knownproblems">Significant Known Problems</h2>
|
|
<!-- ======================================================================= -->
|
|
|
|
<!-- ======================================================================= -->
|
|
<h2 id="additionalinfo">Additional Information</h2>
|
|
<!-- ======================================================================= -->
|
|
|
|
<p>A wide variety of additional information is available on the
|
|
<a href="http://clang.llvm.org/">Clang web page</a>. 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 "<tt>clang/doc/</tt>" directory in
|
|
the Clang tree.</p>
|
|
|
|
<p>If you have any questions or comments about Clang, please feel free to
|
|
contact us via
|
|
the <a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev"> mailing
|
|
list</a>.</p>
|
|
|
|
<!-- ======================================================================= -->
|
|
<!-- Likely 3.1 release notes -->
|
|
<!-- ======================================================================= -->
|
|
<!--
|
|
This is just a section to hold things that have already gotten started and
|
|
should likely pick up proper release notes in 3.1.
|
|
|
|
- C1X and C++11 atomics infrastructure and support
|
|
- CUDA support?
|
|
|
|
-->
|
|
|
|
</div>
|
|
</body>
|
|
</html>
|