forked from OSchip/llvm-project
				
			
		
			
				
	
	
		
			314 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			HTML
		
	
	
	
			
		
		
	
	
			314 lines
		
	
	
		
			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>
 |