<!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>

<!-- ======================================================================= -->
<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&lt;map&lt;int, double&gt;&gt;);
int x = f(vector&lt;map&lt;int, float&gt;&gt;());
</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&lt;map&lt;int, float&gt;&gt;());
        <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&lt;map&lt;[...], <span class="template-highlight">float</span>&gt;&gt;' to 'vector&lt;map&lt;[...], <span class="template-highlight">double</span>&gt;&gt;' for 1st argument;
int f(vector&lt;map&lt;int, double&gt;&gt;);
    <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&lt;map&lt;int, <span class="template-highlight">float</span>&gt;&gt;' to 'vector&lt;map&lt;int, <span class="template-highlight">double</span>&gt;&gt;' for 1st argument;
int f(vector&lt;map&lt;int, double&gt;&gt;);
    <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&lt;
    map&lt;
      [...],
      [<span class="template-highlight">float</span> != <span class="template-highlight">double</span>]&gt;&gt;
int f(vector&lt;map&lt;int, double&gt;&gt;);
    <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&lt;
    map&lt;
      int,
      [<span class="template-highlight">float</span> != <span class="template-highlight">double</span>]&gt;&gt;
int f(vector&lt;map&lt;int, double&gt;&gt;);
    <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>Clang 3.2 adds support for the C11 <code>_Alignof</code> keyword, pedantic warning through option
       <code>-Wempty-translation-unit</code> (C11 6.9p1) </p>

<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<h3 id="cxxchanges">C++ Language Changes in Clang</h3>
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->

<h4 id="cxx11changes">C++11 Feature Support</h4>

<p>Clang 3.2 supports <a href="http://clang.llvm.org/cxx_status.html#cxx11">most of the language features</a> 
       added in the latest ISO C++ standard,<a href="http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=50372">C++ 2011</a>.
       Use <code>-std=c++11</code> or <code>-std=gnu++11</code> to enable support for these features. In addition to the features supported by Clang 3.1, the
       following features have been added:</p>

<ul>
 <li>Implemented the C++11 discarded value expression rules for volatile lvalues.</li>
 <li>Support for the C++11 enum forward declarations.</li>
 <li>Handling of C++11 attribute namespaces (automatically).</li>
 <li>Implemented C++11 [conv.prom]p4: an enumeration with a fixed underlying type has integral promotions 
         to both its underlying type and to its underlying type's promoted type.</li>
</ul>

<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<h3 id="objcchanges">Objective-C Language Changes in Clang</h3>
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->

<p>...</p>

<ul>
  <li> </li>
</ul>

<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<h3 id="pythonchanges">Python Binding Changes</h3>
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->

The following classes and methods have been added:
<ul>
   <li>class CompilationDatabaseError(Exception)</li>
   <li>class CompileCommand(object)</li>
   <li>class CompileCommands(object)</li>
   <li>class CompilationDatabase(ClangObject)</li>
  <li>Cursor.is_static_method</li>
  <li>Cursor.is_static_method</li>
  <li>SourceLocation.from_offset</li>
  <li>Cursor.is_static_method</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>


</div>
</body>
</html>
