blob: f30058ecb12dc965a8e6228e37267e3a45e29ed0 [file] [log] [blame]
Chandler Carruthc00c0c32011-11-28 07:16:19 +00001<html>
2<head>
3<title>Clang 3.0 Release Notes</title>
4<link type="text/css" rel="stylesheet" href="../menu.css" />
5<link type="text/css" rel="stylesheet" href="../content.css" />
6<style type="text/css">
7td {
8 vertical-align: top;
9}
10</style>
11</head>
12<body>
13
14<!--#include virtual="../menu.html.incl"-->
15
16<div id="content">
17
18<h1>Clang 3.0 Release Notes</h1>
19
20<img align=right src="http://llvm.org/img/DragonSmall.png"
21 width="136" height="136" alt="LLVM Dragon Logo">
22
23<ul>
24 <li><a href="#intro">Introduction</a></li>
25 <li><a href="#whatsnew">What's New in Clang 3.0?</a>
26 <ul>
27 <li><a href="#majorfeatures">Major New Features</a></li>
28 <li><a href="#cchanges">C Language Changes</a></li>
29 <li><a href="#cxxhanges">C++ Language Changes</a></li>
30 <li><a href="#objchanges">Objective-C Language Changes</a></li>
31 <li><a href="#apichanges">Internal API Changes</a></li>
Richard Smith855746b2011-11-28 20:02:05 +000032 </ul>
Chandler Carruthc00c0c32011-11-28 07:16:19 +000033 </li>
34 <li><a href="#knownproblems">Known Problems</a></li>
35 <li><a href="#additionalinfo">Additional Information</a></li>
36</ul>
37
38<div class="doc_author">
39 <p>Written by the <a href="http://llvm.org/">LLVM Team</a></p>
40</div>
41
42<!--
43<h1 style="color:red">These are in-progress notes for the upcoming LLVM 3.0
44release.<br>
45You may prefer the
46<a href="http://llvm.org/releases/2.9/docs/ReleaseNotes.html">LLVM 2.9
47Release Notes</a>.</h1>
48 -->
49
50<!-- ======================================================================= -->
51<h2 id="intro">Introduction</h2>
52<!-- ======================================================================= -->
53
54<p>This document contains the release notes for the Clang C/C++/Objective-C
55frontend, part of the LLVM Compiler Infrastructure, release 3.0. Here we
56describe the status of Clang in some detail, including major improvements from
57the previous release and new feature work. For the general LLVM release notes,
58see <a href ="http;//llvm.org/docs/ReleaseNotes.html">the LLVM
59 documentation</a>. All LLVM releases may be downloaded from the
60<a href="http://llvm.org/releases/">LLVM releases web site</a>.</p>
61
62<p>For more information about Clang or LLVM, including information about the
63latest release, please check out the main please see the
64<a href="http://clang.llvm.org">Clang Web Site</a> or the
65<a href="http://llvm.org">LLVM Web Site</a>.
66
67<p>Note that if you are reading this file from a Subversion checkout or the main
68Clang web page, this document applies to the <i>next</i> release, not the
69current one. To see the release notes for a specific release, please see the
70<a href="http://llvm.org/releases/">releases page</a>.</p>
71
72<!-- ======================================================================= -->
73<h2 id="whatsnew">What's New in Clang 3.0?</h2>
74<!-- ======================================================================= -->
75
76<p>Some of the major new features and improvements to Clang are listed here.
77Generic improvements to Clang as a whole or two its underlying infrastructure
78are described first, followed by language-specific sections with improvements to
79Clang's support for those languages.</p>
80
81<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
82<h3 id="majorfeatures">Major New Features</h3>
83<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
84
Chandler Carrutha3950cc2011-11-28 08:41:06 +000085<h4 id="notes">Unorganized Notes</h4>
86<p>These are completely random notes as I'm organizing my thoughts and reviewing
87the history. Anything still here needs to be distilled and turned into proper
88prose in a section of its own. When doing that, delete the notes.</p>
89<ul>
Chandler Carrutha3950cc2011-11-28 08:41:06 +000090 <li>OS Availability attribute -- r128127</li>
91 <li>GNU ObjectiveC Runtime support -- David Chisnall</li>
Chandler Carruth1af40222011-11-28 09:43:30 +000092 <li>Improved AST support for partially constructed nodes and incomplete
93 information for LLDB and other clients which dynamically build AST nodes.</li>
Chandler Carruth1af40222011-11-28 09:43:30 +000094 <li>Memory reduction -- initializers, macro expansions, source locations,
95 etc.</li>
Chandler Carruth7717ce42011-11-28 12:24:23 +000096 <li>Thread Safety attributes and correctness analysis added to Clang.</li>
Chandler Carruth7a1f1482011-11-28 13:02:29 +000097 <li>Major improvements to the interactions between serializing and
98 deserializing the AST and the preprocessor -- argiris</li>
Chandler Carrutha3950cc2011-11-28 08:41:06 +000099</ul>
100
Chandler Carruth58f2cbc2011-11-28 22:34:59 +0000101<h4 id="diagnostics">A multitude of improvements to Clang's diagnostics</h4>
102Clang's diagnostics are constantly being improved to catch more issues, explain
103them more clearly, and provide more accurate source information about them.
104A few improvements since the 2.9 release that have a particularly high impact:
105<ul>
106 <li>Substantially shorter messages due to better recovery, fewer include
107 stacks, and tuning verbose features such as 'a.k.a.' type printing.</li>
108 <li>
109 Able to recover and correct from misspelled type names at the begging of statements. For example, Clang now emits:
Richard Smithad5459a2011-11-28 23:16:15 +0000110 <pre><b>t.c:6:3: <span class="error">error:</span> use of undeclared identifier 'integer'; did you mean 'Integer'?</b>
Chandler Carruth58f2cbc2011-11-28 22:34:59 +0000111 integer *i = 0;
Richard Smithad5459a2011-11-28 23:16:15 +0000112 <span class="caret">^~~~~~~</span>
Chandler Carruth58f2cbc2011-11-28 22:34:59 +0000113 Integer
Richard Smithad5459a2011-11-28 23:16:15 +0000114<b>t.c:1:13: note:</b> 'Integer' declared here
Chandler Carruth58f2cbc2011-11-28 22:34:59 +0000115typedef int Integer;
Richard Smithad5459a2011-11-28 23:16:15 +0000116 <span class="caret">^</span></pre>
Chandler Carruth58f2cbc2011-11-28 22:34:59 +0000117 </li>
118 <li>Expanded typo correction to (among other improvements) look across
119 namespaces and suggest namespace qualifiers in addition to misspellings of the
120 identifier itself.</li>
121 <li>More rich macro expansion backtraces and some (limited) fix-it hints when
122 diagnostics stem from macro arguments.</li>
Chandler Carruth2f376852011-11-28 22:54:33 +0000123 <li>Many new warnings have been added to catch common, bug-prone code
124 patterns.</li>
125 <li>Uninitialized values Clang warning was rewritten to be more accurate,
126 faster, and able to differentiate between the <em>possibility</em> of an
127 uninitialized use and the <em>certainty</em> of an uninitialized use.</li>
Chandler Carruth58f2cbc2011-11-28 22:34:59 +0000128</ul>
129
Chandler Carruth9a167122011-11-28 22:43:32 +0000130<h4 id="libclang">This release saw significant improvements to <code>libclang</code></h4>
131<ul>
132 <li>A broader set of the <code>libclang</code> API is exposed in the Python
133 bindings.</li>
134 <li>Much more of the Clang AST is exposed through <code>libclang</code>'s APIs
135 and cursors.</li>
136 <li>Cursors can now walk more effectively through macros, especially arguments
137 to function-style macros, and resolve to the underlying AST.</li>
138 <li>Improved code completion surrounding macros, macro arguments, and
139 token pasting.</li>
140 <li>Improved code completion for in-class member functions.</li>
141 <li>Crash recovery for <code>libclang</code> clients.</li>
142 <!-- Doug or Ted may want to flesh this out if there are relevant details I'm
143 glossing over... -->
144</ul>
145
Chandler Carruthb882a1d2011-11-28 21:56:30 +0000146<h4 id="driver">The Clang GCC-compatible command-line driver improved dramatically</h4>
147A great deal of work went into the GCC-compatible driver for the 3.0 release
148making it support more operating systems, emulate GCC behavior more accurately,
149and support a much broader range of Linux distributions out of the box.
150<ul>
151 <li>More accurate support for hardware architecture pre-defined macros (e.g.,
152 __i686__).</li>
153 <li>Robust library and header search paths for the vast majority of x86 and
154 x86-64 Linux distributions.</li>
155 <li>Improved support for newer Darwin platforms.</li>
156 <li>Partial support for <code>--sysroot=...</code> based cross-compiling on
157 Linux (and similar) host systems.</li>
158 <li>Improved support for locating and using libcxx when installed, especially
159 on Darwin.</li>
160 <!-- There are likely more Darwin-specific improvements to mention here? -->
161 <!-- What support was added for FreeBSD? NetBSD? Anything noteworthy? -->
Chandler Carruth2f376852011-11-28 22:54:33 +0000162 <li>Automatic detection of Clang crashes in the driver and preparation of
163 reproduction steps for filing bug reports.</li><!-- Chad, feel free to add
164 more details here. -->
Chandler Carruthb882a1d2011-11-28 21:56:30 +0000165</ul>
166
Chandler Carruthc6f2af32011-11-28 19:17:25 +0000167<h4 id="ppcallbacks">Expanded support for instrumenting the preprocessor through
168 callbacks</h4>
Chandler Carruthf16d7252011-11-28 21:47:51 +0000169Several enhancements were made to the <code>PPCallbacks</code> interface to
170expand the information available to tools and library users of Clang that wish
171to introspect the preprocessing.
Chandler Carruthc6f2af32011-11-28 19:17:25 +0000172<ul>
173 <li>The exact text used between the <code>""</code>s or <code>&lt;&gt;</code>s is reported.</li>
174 <li>The header search path used to locate the header is reported.</li>
175 <li>Missing files during including headers reported.</li>
176 <li>The exact source range for expanded macros can be retrieved.</li>
177</ul>
178
Chandler Carruth185e9302011-11-28 23:11:27 +0000179<h4 id="windows">Clang is building and tested regularly on Windows and can
180 compile limited subsets of code on Windows</h4>
181Clang is regularly built and tested on a variety of Windows platforms including
182MinGW 32-bit and 64-bit, Cygwin, and natively with MSVC. In addition, Clang can
183be used as a compiler in a few Windows contexts.
184<ul>
185 <li>Normal compilation supported for the MinGW target platform, in both 32-bit
186 and 64-bit, and the Cygwin target platform.</li>
187 <li>Parsing and AST support for Windows Structured Exception Handling.</li>
Francois Pichet551988f2011-11-28 23:30:46 +0000188 <li>New -fms-compatibility flag to handle MSVC constructs that could change
189 the meaning of an otherwise well formed program</li>
190 <li>clang can now parse all the MSVC 2010 standard C++ header files
191 in the nominal case, (still need to specifiy -nobuiltininc for some headers).</li>
192 <li>Improved support for MFC code parsing, (still a work in progress).</li>
Francois Pichet0c2198a2011-11-28 23:46:15 +0000193 <li>Add support for function template specialization at class scope (-fms-extensions mode).</li>
194 <li>Add support for Microsoft __if_exists/__if_not_exists statements (-fms-extensions mode).</li>
Chandler Carruth185e9302011-11-28 23:11:27 +0000195</ul>
196
Chandler Carrutha0df07d2011-11-28 22:17:58 +0000197<!--
198Need Peter and/or Tanya to flesh this out if we want it in 3.0's notes.. The
199state isn't clear just from documentation or commit logs.
200
201<h4 id="opencl">Initial work to support compiling OpenCL with Clang</h4>
202Clang has some (limited) support for compiling OpenCL.
203-->
204
Chandler Carruthc00c0c32011-11-28 07:16:19 +0000205<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
206<h3 id="cchanges">C Language Changes in Clang</h3>
207<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
208
Richard Smith62d730f2011-11-28 22:48:25 +0000209<h4 id="c1xchanges">C1X Feature Support</h4>
210
211<p>Clang 3.0 adds support for the
212<a href="http://clang.llvm.org/docs/LanguageExtensions.html#c1x">
213<code>_Alignas</code>, <code>_Generic</code>, and <code>_Static_assert</code>
214keywords</a>, drafted for inclusion in the next C standard, which is
215provisionally known as C1X. Use <code>-std=c1x</code> or <code>-std=gnu1x</code>
216to enable support for the new language standard. These features are
217backwards-compatible and are available as an extension in all language
218modes.</p>
219
Chandler Carruthc00c0c32011-11-28 07:16:19 +0000220<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
221<h3 id="cxxchanges">C++ Language Changes in Clang</h3>
222<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
223
Richard Smith855746b2011-11-28 20:02:05 +0000224<h4 id="cxx11changes">C++11 Feature Support</h4>
Richard Smith855746b2011-11-28 20:02:05 +0000225<p>Clang 3.0 adds support for
226<a href="http://clang.llvm.org/cxx_status.html#cxx11">more of the language
Richard Smith47931382011-11-28 23:35:03 +0000227features</a> added in the latest ISO C++ standard,
228<a href="http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=50372">C++ 2011</a>.
229Use <code>-std=c++11</code> or <code>-std=gnu++11</code> to enable support for
230these features. The following are now considered to be of production quality:
Richard Smith855746b2011-11-28 20:02:05 +0000231<ul>
Chandler Carruthf16d7252011-11-28 21:47:51 +0000232 <li>Range-based <code>for</code> loops</li>
233 <li>Alias declarations (a new syntax for <code>typedef</code> declarations),
234 including their <code>template</code> forms</li>
Richard Smith855746b2011-11-28 20:02:05 +0000235 <li>Specifying default values for class data members within a class
236 definition</li>
237 <li>Constructors delegating to other constructors of the same class</li>
Chandler Carruthf16d7252011-11-28 21:47:51 +0000238 <li>The <code>override</code> context-sensitive keyword for virtual member
Richard Smith855746b2011-11-28 20:02:05 +0000239 function declarations</li>
Chandler Carruthf16d7252011-11-28 21:47:51 +0000240 <li>Explicitly generating default function definitions with
241 <code>= default</code></li>
242 <li>The <code>nullptr</code> keyword, and the corresponding type</li>
Richard Smith855746b2011-11-28 20:02:05 +0000243 <li>Raw string literals with arbitary delimiters (for instance,
Chandler Carruthf16d7252011-11-28 21:47:51 +0000244 <code>R"delim(str"ing)delim"</code>)</li>
245 <li>Unicode string literals (for instance, <code>U"\u1234"</code>) and the
246 <code>char16_t</code> and <code>char32_t</code> built-in types
247 <li><code>noexcept</code> expressions and the <code>noexcept</code> specifier
248 on function declarations</li>
249 <li><code>alignof</code> expressions and the <code>alignas</code> specifier on
Richard Smith855746b2011-11-28 20:02:05 +0000250 variable declarations</li>
251 <li>A full set of <a href="http://clang.llvm.org/docs/LanguageExtensions.html#checking_type_traits">type traits</a>,
252 sufficient to support C++11 standard libraries</li>
253</ul>
Chandler Carruthbc02a042011-11-28 21:55:34 +0000254All warning and language selection flags which previously accepted
255<code>c++0x</code> now accept <code>c++11</code>. The old <code>c++0x</code>
256form remains as an alias.
Richard Smith855746b2011-11-28 20:02:05 +0000257
Chandler Carruthc00c0c32011-11-28 07:16:19 +0000258<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
259<h3 id="objcchanges">Objective-C Language Changes in Clang</h3>
260<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
Chandler Carruth4d582122011-11-29 00:15:23 +0000261Clang 3.0 introduces several new Objective-C language features and improvements.
262
263<h4 id="objc_arc">Objective-C Automatic Reference Counting</h4>
264<!-- This is really just a stub for John to flesh out regarding ARC. -->
265ARC provides automated memory management for Objective-C programs that is
266compatible with existing retain/release code. ARC is carefully built to
267be a reliable programming model that errs on the side of producing a
268compiler error instead of silently producing a runtime memory problem.
269ARC automates Objective-C objects, not malloc data, file descriptors,
270CoreFoundation datatypes or anything else. For more details, see the
271<a href="http://clang.llvm.org/docs/AutomaticReferenceCounting.html">full specification</a>.
272
273<h4 id="objc_instancetype">Objective-C Related Result Types / Instance
274Types</h4>
275Allows declaring new methods which follow the Cocoa conventions for methods
276such as <code>init</code> which always return objects that are an instance of
277the receiving class's type. For more details, see the
278<a href="http://clang.llvm.org/docs/LanguageExtensions.html#objc_instancetype">language extension documentation</a>.
Chandler Carruthc00c0c32011-11-28 07:16:19 +0000279
280<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
281<h3 id="apichanges">Internal API Changes</h3>
282<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
283
Chandler Carruthc4dbffa2011-11-28 18:55:47 +0000284These are major API changes that have happened since the 2.9 release of Clang.
285If upgrading an external codebase that uses Clang as a library, this section
286should help get you past the largest hurdles of upgrading.
287
Chandler Carruth7d727b72011-11-28 19:06:34 +0000288<h4 id="macroexpansion">Switched terminology from "instantiation" to "expansion"
289 for macros</h4>
290A great deal of comments and code changes fell out of this, but also every API
291relating to macros with the word "instantiation" (or some variant thereof) was
292renamed. An incomplete list of the most note-worthy ones is here:
293<ul>
294 <li><code>MacroInstantiation</code> became <code>MacroExpansion</code></li>
295 <li><code>SourceManager::getInstantiationLoc</code> became
296 <code>SourceManager::getExpansionLoc</code></li>
297 <li><code>SourceManager::getInstantiationRange</code> became
298 <code>SourceManager::getExpansionRange</code></li>
299 <li><code>SourceManager::getImmediateInstantiationRange</code> became
300 <code>SourceManager::getImmediateExpansionRange</code></li>
301 <li><code>SourceManager::getDecomposedInstantiationLoc</code> became
302 <code>SourceManager::getDecomposedExpansionLoc</code></li>
303 <li><code>SourceManager::getInstantiationColumnNumber</code> became
304 <code>SourceManager::getExpansionColumnNumber</code></li>
305 <li><code>SourceManager::getInstantiationLineNumber</code> became
306 <code>SourceManager::getExpansionLineNumber</code></li>
307 <!-- TODO: Make this more complete! -->
308</ul>
309
Chandler Carruthc4dbffa2011-11-28 18:55:47 +0000310<h4 id="diagnosticrename">Diagnostic class names were shuffled</h4>
311<ul>
312 <li><code>Diagnostic</code> became <code>DiagnosticEngine</code></li>
313 <li><code>DiagnosticClient</code> became <code>DiagnosticConsumer</code></li>
314 <li><code>DiagnosticInfo</code> became <code>Diagnostic</code></li>
315</ul>
316Subclasses of <code>DiagnosticConsumer</code> were also then renamed to end with
317<code>Consumer</code>.
318
Chandler Carruthc00c0c32011-11-28 07:16:19 +0000319<!-- ======================================================================= -->
320<h2 id="knownproblems">Significant Known Problems</h2>
321<!-- ======================================================================= -->
322
323<!-- ======================================================================= -->
324<h2 id="additionalinfo">Additional Information</h2>
325<!-- ======================================================================= -->
326
327<p>A wide variety of additional information is available on the
328<a href="http://clang.llvm.org/">Clang web page</a>. The web page contains
329versions of the API documentation which are up-to-date with the Subversion
330version of the source code. You can access versions of these documents specific
331to this release by going into the "<tt>clang/doc/</tt>" directory in the Clang
332tree.</p>
333
334<p>If you have any questions or comments about Clang, please feel free to
335contact us via the <a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev">
336mailing list</a>.</p>
337
Chandler Carruth59abf062011-11-28 22:12:44 +0000338
339<!-- ======================================================================= -->
340<!-- Likely 3.1 release notes -->
341<!-- ======================================================================= -->
342<!--
343This is just a section to hold things that have already gotten started and
344should likely pick up proper release notes in 3.1.
345
346- C1X and C++11 atomics infrastructure and support
347- CUDA support?
348
349-->
350
Chandler Carruthc00c0c32011-11-28 07:16:19 +0000351</body>
352</html>