diff options
author | dim <dim@FreeBSD.org> | 2011-10-20 21:14:49 +0000 |
---|---|---|
committer | dim <dim@FreeBSD.org> | 2011-10-20 21:14:49 +0000 |
commit | 3963a48221351c61c17fb3f382341ab04809a3d3 (patch) | |
tree | ee2483e98b09cac943dc93a6969d83ca737ff139 /www | |
parent | 611ba3ea3300b71eb95dc4e45f20eee5dddd32e1 (diff) | |
download | FreeBSD-src-3963a48221351c61c17fb3f382341ab04809a3d3.zip FreeBSD-src-3963a48221351c61c17fb3f382341ab04809a3d3.tar.gz |
Vendor import of clang release_30 branch r142614:
http://llvm.org/svn/llvm-project/cfe/branches/release_30@142614
Diffstat (limited to 'www')
-rw-r--r-- | www/OpenProjects.html | 4 | ||||
-rw-r--r-- | www/analyzer/latest_checker.html.incl | 2 | ||||
-rw-r--r-- | www/analyzer/release_notes.html | 13 | ||||
-rw-r--r-- | www/comparison.html | 4 | ||||
-rw-r--r-- | www/compatibility.html | 40 | ||||
-rw-r--r-- | www/cxx_status.html | 977 | ||||
-rw-r--r-- | www/demo/index.cgi | 2 | ||||
-rw-r--r-- | www/diagnostics.html | 33 | ||||
-rw-r--r-- | www/get_involved.html | 31 | ||||
-rw-r--r-- | www/get_started.html | 2 | ||||
-rw-r--r-- | www/hacking.html | 22 | ||||
-rw-r--r-- | www/index.html | 2 | ||||
-rw-r--r-- | www/menu.html.incl | 5 |
13 files changed, 472 insertions, 665 deletions
diff --git a/www/OpenProjects.html b/www/OpenProjects.html index b3e0841..fec23dc 100644 --- a/www/OpenProjects.html +++ b/www/OpenProjects.html @@ -78,8 +78,8 @@ improve the quality of clang by self-testing. Some examples: </ul> </li> -<li><b>Continue work on C++'0x support</b>: - C++'98 is feature complete, but there is still a lot of C++'0x featuers to +<li><b>Continue work on C++'11 support</b>: + C++'98 is feature complete, but there is still a lot of C++'11 features to implement. Please see the <a href="cxx_status.html">C++ status report page</a> to find out what is missing.</li> </ul> diff --git a/www/analyzer/latest_checker.html.incl b/www/analyzer/latest_checker.html.incl index 76b88dd..8d7b58d 100644 --- a/www/analyzer/latest_checker.html.incl +++ b/www/analyzer/latest_checker.html.incl @@ -1 +1 @@ -<b><a href="/checker/checker-257.tar.bz2">checker-257.tar.bz2</a></b> (built May 25, 2011) +<b><a href="/checker/checker-258.tar.bz2">checker-258.tar.bz2</a></b> (built October 13, 2011) diff --git a/www/analyzer/release_notes.html b/www/analyzer/release_notes.html index 4a568f5..311c5ae 100644 --- a/www/analyzer/release_notes.html +++ b/www/analyzer/release_notes.html @@ -15,6 +15,19 @@ <h1>Release notes for <tt>checker-XXX</tt> builds</h1> +<h4 id="checker_258">checker-258</h4> + +<p><b>built:</b>October 13, 2011<br> +<b>download:</b> <a href="/checker/checker-258.tar.bz2">checker-258.tar.bz2</a></p> +<p><b>highlights:</b></p> + +<ul> + <li>Contains a newer version of the analyzer than the one shipped in Xcode 4.2.</li> + <li>Adds a new security checker for looking at correct uses of the Mac OS KeyChain API.</li> + <li>Supports ARC (please file bugs where you see issues)</li> + <li>Major under-the-cover changes. This should result in more precise results in some cases, but this is laying the groundwork for major improvements. Please file bugs where you see regressions or issues.</li> +</ul> + <h4 id="checker_257">checker-257</h4> <p><b>built:</b>May 25, 2011<br> diff --git a/www/comparison.html b/www/comparison.html index a7d4d75..4b72a85 100644 --- a/www/comparison.html +++ b/www/comparison.html @@ -50,7 +50,7 @@ <ul> <li>GCC supports languages that clang does not aim to, such as Java, Ada, FORTRAN, etc.</li> - <li>GCC has a few <a href="cxx_status.html">C++'0x features</a> that Clang + <li>GCC has a few <a href="cxx_status.html">C++'11 features</a> that Clang does not yet support.</li> <li>GCC supports more targets than LLVM.</li> <li>GCC is popular and widely adopted.</li> @@ -133,7 +133,7 @@ <ul> <li>Clang's C and C++ support is far more mature and practically useful than - Elsa's, and includes many C++'0x features.</li> + Elsa's, and includes many C++'11 features.</li> <li>The Elsa community is extremely small and major development work seems to have ceased in 2005. Work continued to be used by other small projects (e.g. Oink), but Oink is apparently dead now too. Clang has a diff --git a/www/compatibility.html b/www/compatibility.html index 783758f..2102ccc 100644 --- a/www/compatibility.html +++ b/www/compatibility.html @@ -60,6 +60,12 @@ <li><a href="#param_name_lookup">Parameter name lookup</a></li> </ul> </li> + <li><a href="#c++11">C++11 compatibility</a> + <ul> + <li><a href="#deleted-special-func">Deleted special member + functions</a></li> + </ul> + </li> <li><a href="#objective-c++">Objective-C++ compatibility</a> <ul> <li><a href="#implicit-downcasts">Implicit downcasts</a></li> @@ -755,7 +761,39 @@ void f(int a, int a); <p>Clang diagnoses this error (where the parameter name has been redeclared). To fix this problem, rename one of the parameters.</p> <!-- ======================================================================= --> -<h2 id="objective-c++">Objective-C++ compatibility</h3> +<h2 id="c++11">C++11 compatibility</h2> +<!-- ======================================================================= --> + +<!-- ======================================================================= --> +<h3 id="deleted-special-func">Deleted special member functions</h3> +<!-- ======================================================================= --> + +<p>In C++11, the explicit declaration of a move constructor or a move +assignment operator within a class disables the implicit declaration +of the copy constructor and copy assignment operator. This change came +fairly late in the C++11 standardization process, so early +implementations of C++11 (including Clang before 3.0, GCC before 4.7, +and Visual Studio 2010) do not implement this rule, leading them to +accept this ill-formed code:</p> + +<pre> +struct X { + X(X&&); <i>// suppresses implicit copy constructor</i> +}; + +void f(X x); +void g(X x) { + f(x); <i>// error: X has no copy constructor</i> +} +</pre> + +<p>This affects some C++11 code, including Boost's popular <a +href="http://www.boost.org/doc/libs/release/libs/smart_ptr/shared_ptr.htm"><tt>shared_ptr</tt></a> +up to version 1.47.0. The fix for Boost's <tt>shared_ptr</tt> is +<a href="https://svn.boost.org/trac/boost/changeset/73202">available here</a>.</p> + +<!-- ======================================================================= --> +<h2 id="objective-c++">Objective-C++ compatibility</h2> <!-- ======================================================================= --> <!-- ======================================================================= --> diff --git a/www/cxx_status.html b/www/cxx_status.html index 5998de8..3fb1ef6 100644 --- a/www/cxx_status.html +++ b/www/cxx_status.html @@ -3,7 +3,7 @@ <html> <head> <META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> - <title>Clang - C++ and C++'0x Status</title> + <title>Clang - C++ and C++'11 Status</title> <link type="text/css" rel="stylesheet" href="menu.css"> <link type="text/css" rel="stylesheet" href="content.css"> <style type="text/css"> @@ -23,666 +23,347 @@ <div id="content"> <!--*************************************************************************--> -<h1>C++ and C++'0x Support in Clang</h1> +<h1>C++ and C++'11 Support in Clang</h1> <!--*************************************************************************--> -<p>Last updated: $Date: 2011-05-06 00:07:51 +0200 (Fri, 06 May 2011) $</p> +<p>Last updated: $Date: 2011-10-15 01:35:48 +0200 (Sat, 15 Oct 2011) $</p> - <ul> - <li><a href="#projects">Projects Building with Clang</a></li> - <li><a href="#specification">Implementation Status by Section</a></li> - <li><a href="#cxx0x">C++0x Status</a></li> - </ul> - -<p>Clang currently implements all of the ISO C++ 1998 standard (including - the defects addressed in the ISO C++ 2003 standard) except for 'export' - (which has been removed from the C++'0x draft). - The <a href="http://llvm.org/bugs/">LLVM bug tracker</a> - contains a Clang C++ component that tracks known Clang C++ bugs.</p> +<p>Clang currently implements all of the ISO C++ 1998 standard + (including the defects addressed in the ISO C++ 2003 standard) + except for 'export' (which has been removed in C++'11) + and is considered a production-quality C++ compiler. The <a + href="http://llvm.org/bugs/">LLVM bug tracker</a> contains a Clang + C++ component that tracks known Clang C++ bugs.</p> - <h2 id="projects">Projects Building with Clang</h2> +<h2 id="cxx11">C++11 Implementation status</h2> - <p>Clang is now capable of compiling large C++ projects, and the following - table describes various projects that we have attempted to compile with - Clang++.</p> + <p>Clang provides support for a number of features included in the new <a href="http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=50372">ISO C++ Standard, ISO/IEC 14882:2011</a>. The following table describes which C++11 features have been implemented in Clang and in which Clang versions they became available.</p> -<table width="689" border="1" cellspacing="0"> - <tr> - <th>Project</th> - <th>Status</th> - <th>Last Tested</th> - <th>Tracking Bug</th> - </tr> - <tr> - <td><a href="http://clang.llvm.org">Clang</a> and <a href="http://llvm.org">LLVM</a></td> - <td>Successful self-hosting achieved</td> - <td>Continually</td> - <td></td> - </tr> - <tr> - <td><a href="http://www.cmake.org">CMake</a></td> - <td>Compiles, passes regression tests (debug build)</td> - <td>February 9, 2010</td> - <td></td> - </tr> - <tr> - <td><a href="http://www.boost.org">Boost</a></td> - <td><a href="http://blog.llvm.org/2010/05/clang-builds-boost.html">Compiles - and passes regression tests</a> on Darwin/X86-64.</td> - <td>May 20, 2010</td> - <td><a href="http://llvm.org/bugs/show_bug.cgi?id=6023"><del>PR6023</del></a></td> - </tr> - <tr> - <td><a href="http://qt.nokia.com">Qt</a></td> - <td>Partially compiles; miscompilation of uic prevents complete compilation, qmake works, some small examples also.</td> - <td>February 9, 2010</td> - <td><a href="http://llvm.org/bugs/show_bug.cgi?id=5881">PR5881</a></td> - </tr> -</table> - -<h2 id="cxx0x">C++0x Implementation status</h2> - -<p>Clang's development effort is focused primarily on fixing bugs in the current -ISO C++ standard (1998/2003). This section tracks the status of various C++0x -features.</p> - -<p>You can use clang in C++0x mode either +<p>You can use Clang in C++11 mode either with <a href="http://libcxx.llvm.org/">libc++</a> or with gcc's libstdc++. libstdc++-4.4 requires <a href="libstdc++4.4-clang0x.patch">a patch</a> to work with clang; other versions have not been tested.</p> - -<h2 id="specification">Implementation Status by Feature</h2> - - -<!-- Within this table: The colors we're using to color-code our level -of support for a given section: - - White (no background): not considered/tested. - #C11B17: Broken. - #F88017: Some useful examples work - #FDD017: Many examples work - #347C17: Nearly everything works - #00FF00 + check mark: Implementation complete! - --> - -<p>The following table is used to help track our implementation - progress toward implementing the complete C++'0x standard. We use a - simple, somewhat arbitrary color-coding scheme to describe the - relative completeness of features:</p> - <table width="689" border="1" cellspacing="0"> - <tr> - <th>Not started/not evaluated</th> - <th>Not Applicable</th> - <th>Broken</th> - <th>Some examples work</th> - <th>Many examples work</th> - <th>Nearly everything works</th> - <th>Complete</th> -<!-- - <th>Complete (with tests for each paragraph)</th> ---> - </tr> - <tr> - <td></td> - <td class="na">N/A</td> - <td class="broken"></td> - <td class="basic"></td> - <td class="medium"></td> - <td class="advanced"></td> - <td class="complete">rXXXXXX</td> -<!-- - <td class="complete" align="center">✓</td> ---> - </tr> -</table> - -<p>In addition, boxes marked with ✓ have complete and passing tests. - Similarly, boxes marked with ✗ have complete tests, some of which - are failing, and a <b>?</b> indicates partial tests while not making any - statement about passing status.</p> - -<p>A feature is "complete" when the appropriate Clang component (Parse, AST, -Sema, CodeGen) implements the behavior described in all of the -paragraphs in the relevant C++'0x draft standard. The major -components are:</p> - -<dl> - <dt>Parse</dt> - <dd>Clang is able to parse the grammar of this feature (or the grammar - described by this section), but does not necessarily do anything with the - parsed result. Use Clang's <code>-fsyntax-only</code> option to parse C++ - programs.</dd> + <tr> + <th bgcolor="#ffddaa">Language Feature</th> + <th bgcolor="#ffddaa">C++0x Proposal</th> + <th bgcolor="#ffddaa">Available in Clang?</th> + </tr> + <tr> + <td>Rvalue references</td> + <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2118.html">N2118</a></td> + <td align="center">Clang 2.9</td> + </tr> + <tr> + <td> Rvalue references for <code>*this</code></td> + <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2439.htm">N2439</a></td> + <td align="center">Clang 2.9<br/></td> + </tr> + <tr> + <td>Initialization of class objects by rvalues</td> + <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1610.html">N1610</a></td> + <td align="center">Clang 2.9</td> + </tr> + <tr> + <td>Non-static data member initializers</td> + <td><a href="http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2008/n2756.htm">N2756</a></td> + <td align="center">Clang 3.0</a></td> + </tr> + <tr> + <td>Variadic templates</td> + <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2242.pdf">N2242</a></td> + <td align="center">Clang 2.9</td> + </tr> + <tr> + <td> Extending variadic template template parameters</td> + <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2555.pdf">N2555</a></td> + <td align="center">Clang 2.9</td> + </tr> + <tr> + <td>Initializer lists</td> + <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2672.htm">N2672</a></td> + <td align="center">No</td> + </tr> + <tr> + <td>Static assertions</td> + <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1720.html">N1720</a></td> + <td align="center">Clang 2.9</td> + </tr> + <tr> + <td><code>auto</code>-typed variables</td> + <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1984.pdf">N1984</a></td> + <td align="center">Clang 2.9</td> + </tr> + <tr> + <td> Multi-declarator <code>auto</code></td> + <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1737.pdf">N1737</a></td> + <td align="center">Clang 2.9</td> + </tr> + <tr> + <td> Removal of auto as a storage-class specifier</td> + <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2546.htm">N2546</a></td> + <td align="center">Clang 2.9</td> + </tr> + <tr> + <td> New function declarator syntax</td> + <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2541.htm">N2541</a></td> + <td align="center">Clang 2.9</td> + </tr> + <tr> + <td>New wording for C++0x lambdas</td> + <td><a href="http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2009/n2927.pdf">N2927</a></td> + <td align="center">No</td> + </tr> + <tr> + <td>Declared type of an expression</td> + <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2343.pdf">N2343</a></td> + <td align="center">Clang 2.9</td> + </tr> + <tr> + <td>Right angle brackets</td> + <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1757.html">N1757</a></td> + <td align="center">Clang 2.9</td> + </tr> + <tr> + <td>Default template arguments for function templates</td> + <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#226">DR226</a></td> + <td align="center">Clang 2.9</td> + </tr> + <tr> + <td>Solving the SFINAE problem for expressions</td> + <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2634.html">DR339</a></td> + <td align="center">Clang 2.9</td> + </tr> + <tr> + <td>Alias templates</td> + <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2258.pdf">N2258</a></td> + <td align="center">Clang 3.0</td> + </tr> + <tr> + <td>Extern templates</td> + <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1987.htm">N1987</a></td> + <td align="center">Clang 2.9</td> + </tr> + <tr> + <td>Null pointer constant</td> + <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2431.pdf">N2431</a></td> + <td align="center">Clang 3.0</td> + </tr> + <tr> + <td>Strongly-typed enums</td> + <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2347.pdf">N2347</a></td> + <td align="center">Clang 2.9</td> + </tr> + <tr> + <td>Forward declarations for enums</td> + <td> + <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2764.pdf">N2764 + </a></td> + <td align="center">No</td> + </tr> + <tr> + <td>Generalized attributes</td> + <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2761.pdf">N2761</a></td> + <td align="center">No</td> + </tr> + <tr> + <td>Generalized constant expressions</td> + <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2235.pdf">N2235</a></td> + <td align="center">No</td> + </tr> + <tr> + <td>Alignment support</td> + <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2341.pdf">N2341</a></td> + <td align="center">Clang 3.0</td> + </tr> + <!-- Skipped N1627: Conditionally-support behavior --> + <!-- Skipped N1727: Changing Undefined Behavior into Diagnosable Errors --> + <tr> + <td>Delegating constructors</td> + <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1986.pdf">N1986</a></td> + <td align="center">Clang 3.0<br/></td> + </tr> + <tr> + <td>Inheriting constructors</td> + <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2540.htm">N2540</a></td> + <td align="center">No</td> + </tr> + <tr> + <td>Explicit conversion operators</td> + <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2437.pdf">N2437</a></td> + <td align="center">Clang 3.0</td> + </tr> + <tr> + <td>New character types</td> + <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2249.html">N2249</a></td> + <td align="center">Clang 2.9</td> + </tr> + <tr> + <td>Unicode string literals</td> + <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2442.htm">N2442</a></td> + <td align="center">Clang 3.0</td> + </tr> + <tr> + <td>Raw string literals</td> + <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2442.htm">N2442</a></td> + <td align="center">Clang 3.0</td> + </tr> + <tr> + <td>Universal character name literals</td> + <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2170.html">N2170</a></td> + <td align="center">No</td> + </tr> + <tr> + <td>User-defined literals</td> + <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2765.pdf">N2765</a></td> + <td align="center">No</td> + </tr> + <tr> + <td>Standard Layout Types</td> + <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2342.htm">N2342</a></td> + <td align="center">Clang 3.0</td> + </tr> + <tr> + <td>Defaulted and deleted functions</td> + <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2346.htm">N2346</a></td> + <td align="center">Clang 2.9</td> + </tr> + <tr> + <td>Extended friend declarations</td> + <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1791.pdf">N1791</a></td> + <td align="center">Clang 2.9</td> + </tr> + <tr> + <td>Extending <code>sizeof</code></td> + <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2253.html">N2253</a></td> + <td align="center">No</td> + </tr> + <tr> + <td>Inline namespaces</td> + <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2535.htm">N2535</a></td> + <td align="center">Clang 2.9</td> + </tr> + <tr> + <td>Unrestricted unions</td> + <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2544.pdf">N2544</a></td> + <td align="center">No</td> + </tr> + <tr> + <td>Local and unnamed types as template arguments</td> + <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2657.htm">N2657</a></td> + <td align="center">Clang 2.9</td> + </tr> + <tr> + <td>Range-based for</td> + <td><a href="http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2009/n2930.html">N2930</a></td> + <td align="center">Clang 3.0</td> + </tr> + <tr> + <td>Explicit virtual overrides</td> + <td><a href="http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2009/n2928.htm">N2928</a> + <br/><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3206.htm">N3206</a> +<br/><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3272.htm">N3272</a></td> + <td align="center">Clang 3.0</td> + </tr> + <tr> + <td>Minimal support for garbage collection and reachability-based leak detection</td> + <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2670.htm">N2670</a></td> + <td align="center">No</td> + </tr> + <tr> + <td>Allowing move constructors to throw [noexcept]</td> + <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3050.htm">N3050</a></td> + <td align="center">Clang 3.0</td> + </tr> + <tr> + <td>Defining move special member functions</td> + <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3053.htm">N3053</a></td> + <td align="center">Clang 3.0</td> + </tr> - <dt>AST</dt> - <dd>Clang builds an abstract syntax tree (AST) for the feature, but does not - necessarily perform any type-checking. Use Clang's <code>-ast-print</code> - option to print the resulting ASTs.</dd> + <tr class="separator"> + <th align="center" colspan="3" bgcolor="#ffddaa">Concurrency</th> + </tr> + <tr> + <td>Sequence points</td> + <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2239.html">N2239</a></td> + <td align="center">No</td> + </tr> + <tr> + <td>Atomic operations</td> + <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2427.html">N2427</a></td> + <td align="center">No</td> + </tr> + <tr> + <td>Strong Compare and Exchange</td> + <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2748.html">N2748</a></td> + <td align="center">No</td> + </tr> + <tr> + <td>Bidirectional Fences</td> + <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2752.htm">N2752</a></td> + <td align="center">No</td> + </tr> - <dt>Sema</dt> - <dd>Clang parses and type-checks this feature and provides a well-formed AST - annotated with types. Use Clang's <code>-fsyntax-only</code> to type-check - code.</dd> - - <dt>CodeGen</dt> - <dd>Clang parses, type-checks, and generates code for this feature, allowing - one to compile and execute programs.</dd> -</dl> - -<p>Updates to this table are welcome! Tests for the various features are also -welcome!</p> - -<table width="689" border="1" cellspacing="0"> -<tr><td colspan="7" align="center" bgcolor="#ffddaa">C++0x Features (current draft report <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3291.pdf">here</a>)</td> -</tr> - <tr> - <th>Feature</th> - <th>Parse</th> - <th>AST</th> - <th>Sema</th> - <th>CodeGen</th> - <th>Standard Sections</th> - <th>Notes</th> - </tr> -<tr><td colspan="7" class="category">Control Flow Modifications</td></tr> -<tr> - <td>Range-based for loop</td> - <td class="complete" align="center">✓</td> - <td class="complete" align="center">✓</td> - <td class="complete" align="center">✓</td> - <td class="complete" align="center">✓</td> - <td>6.5.4</td> - <td><a href="http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2007/n2243.html">N2243</a> - <a href="http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2011/n3271.htm">N3271</a></td> -</tr> + <tr> + <td>Memory model</td> + <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2429.htm">N2429</a></td> + <td align="center">No</td> + </tr> + <tr> + <td>Data-dependency ordering: atomics and memory model</td> + <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2664.htm">N2664</a></td> + <td align="center">No</td> + </tr> + <tr> + <td>Propagating exceptions</td> + <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2179.html">N2179</a></td> + <td align="center">Clang 2.9</td> + </tr> + <tr> + <td>Abandoning a process and at_quick_exit</td> + <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2440.htm">N2440</a></td> + <td align="center">No</td> + </tr> + <tr> + <td>Allow atomics use in signal handlers</td> + <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2547.htm">N2547</a></td> + <td align="center"><span class="unsupported">No</span></td> + </tr> + <tr> + <td>Thread-local storage</td> + <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2659.htm">N2659</a></td> + <td align="center">No</td> + </tr> + <tr> + <td>Dynamic initialization and destruction with concurrency</td> + <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2660.htm">N2660</a></td> + <td align="center">No</td> + </tr> -<tr><td colspan="7" class="category">Type System Modifications</td></tr> -<tr> - <td>rvalue references</td> - <td class="complete" align="center"></td> - <td class="complete" align="center"></td> - <td class="complete" align="center"></td> - <td class="complete"></td> - <td>8.3.2</td> - <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2118.html">N2118</a>, - <a href="http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2009/n2831.html">N2831</a> <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2439.htm">N2439</a> - </td> -</tr> -<tr> - <td>decltype</td> - <td class="complete" align="center">✓</td> - <td class="complete" align="center">✓</td> - <td class="advanced" align="center"></td> - <td class="advanced" align="center"></td> - <td>7.1.6.2</td> - <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2343.pdf">N2343</a> - <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2003/n1478.pdf">N1478</a> - <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1978.pdf">N1978</a> - </td> -</tr> -<tr> - <td>auto type deduction</td> - <td class="complete" align="center">✓</td> - <td class="complete" align="center">✓</td> - <td class="complete" align="center">✓</td> - <td class="complete" align="center">✓</td> - <td>7.1.6.2, 7.1.6.4</td> - <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1984.pdf">N1984</a></td> -</tr> -<tr> - <td>nullptr</td> - <td class="complete" align="center"></td> - <td class="complete" align="center"></td> - <td class="medium" align="center"></td> - <td class="broken"></td> - <td>2.14.7, 4.10, 4.11</td> - <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2431.pdf">N2431</a> - <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2003/n1488.pdf">N1488</a> - <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2214.pdf">N2214</a> - </td> -</tr> -<tr> - <td>enum classes</td> - <td class="complete"></td> - <td class="advanced"></td> - <td class="advanced"></td> - <td></td> - <td>7.2</td> - <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2003/n1513.pdf">N1513</a> - <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2347.pdf">N2347</a> - <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2499.pdf">N2499</a> - Includes forward declaration capability - </td> -</tr> -<tr> - <td>long long</td> - <td class="complete"></td> - <td class="complete"></td> - <td class="complete"></td> - <td class="complete"></td> - <td>3.9.1</td> - <td>C99 - <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1811.pdf">N1811</a> - </td> -</tr> -<tr> - <td>constexpr</td> - <td></td> - <td></td> - <td></td> - <td></td> - <td>3.6.2, 3.9, 5.19, 7.1.5</td> - <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2003/n1521.pdf">N1521</a> - <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2235.pdf">N2235</a> - </td> -</tr> -<tr> - <td>char16_t/char32_t</td> - <td class="medium"></td> - <td class="medium"></td> - <td class="medium"></td> - <td class="medium"></td> - <td></td> - <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2249.html">N2249</a></td> -</tr> -<tr> - <td>Unicode string literal types</td> - <td></td> - <td></td> - <td></td> - <td></td> - <td>2.14.3, 2.14.5</td> - <td></td> -</tr> -<tr> - <td>Raw string literal types</td> - <td></td> - <td></td> - <td></td> - <td></td> - <td>2.14.5</td> - <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2053.html">N2053</a> - <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2442.html">N2442</a> - <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2378.pdf">N2378</a> - </td> -</tr> -<tr> - <td>user-defined literal types</td> - <td></td> - <td></td> - <td></td> - <td></td> - <td>2.14.8</td> - <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2378.pdf">N2378</a></td> -</tr> -<tr> - <td>POD definition changes</td> - <td></td> - <td></td> - <td></td> - <td></td> - <td>3.9, 9</td> - <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2294.html">N2294</a></td> -</tr> -<tr> - <td>Unrestricted unions</td> - <td></td> - <td></td> - <td></td> - <td></td> - <td>9.5</td> - <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2544.pdf">N2544</a></td> -</tr> -<tr> - <td>Tighter narrowing rules</td> - <td></td> - <td></td> - <td></td> - <td></td> - <td>8.5.4</td> - <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1890.pdf">N1890</a> - <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2215.pdf">N2215</a> - <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2640.pdf">N2640</a> - </td> -</tr> -<tr><td colspan="7" class="category">Class Modifications</td></tr> -<tr> - <td>delegating constructors</td> - <td class="complete"></td> - <td class="complete"></td> - <td class="complete"></td> - <td class="complete"></td> - <td>12.6.2</td> - <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1986">N1986</a></td> -</tr> -<tr> - <td>inheriting constructors</td> - <td></td> - <td></td> - <td></td> - <td></td> - <td>12.9</td> - <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1890.pdf">N1890</a> - <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1898.pdf">N1898</a> - <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2512.html">N2512</a> - </td> -</tr> -<tr> - <td>In-declaration member initialization</td> - <td></td> - <td></td> - <td></td> - <td></td> - <td></td> - <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2628.html">N2628</a></td> -</tr> -<tr> - <td>Changes to implicitly generated methods</td> - <td></td> - <td></td> - <td></td> - <td></td> - <td></td> - <td>Includes implicit generation of move operations</td> -</tr> -<tr> - <td>defaulted methods</td> - <td></td> - <td></td> - <td></td> - <td></td> - <td></td> - <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1717.pdf">N1717</a> - <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2326.html">N2326</a> - </td> -</tr> -<tr> - <td>destructor defaults to noexcept</td> - <td></td> - <td></td> - <td></td> - <td></td> - <td></td> - <td></td> -</tr> -<tr> - <td>sizeof on members without object instance</td> - <td></td> - <td></td> - <td></td> - <td></td> - <td></td> - <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2150.html">N2150</a></td> -</tr> -<tr> - <td>virtual function safety modifications</td> - <td></td> - <td></td> - <td></td> - <td></td> - <td></td> - <td></td> -</tr> -<tr> - <td>Explicit conversion operators</td> - <td class="complete" align="center"></td> - <td class="basic" align="center"></td> - <td class="basic" align="center"></td> - <td class="broken"></td> - <td>12.3</td> - <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2437.pdf">N2437</a> - <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2333.html">N2333</a> - No name mangling; ASTs don't contain calls to conversion operators</td> -</tr> -<tr><td colspan="7" class="category">Template Modifications</td></tr> -<tr> - <td>Right angle brackets</td> - <td class="complete" align="center"></td> - <td class="na" align="center">N/A</td> - <td class="na" align="center">N/A</td> - <td class="na">N/A</td> - <td></td> - <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1757.html">N1757</a></td> -</tr> -<tr> - <td>variadic templates</td> - <td class="complete" align="center"></td> - <td class="complete" align="center"></td> - <td class="complete" align="center"></td> - <td class="complete" align="center"></td> - <td>14.6.3</td> - <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2080.pdf">N2080</a> - <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2087.pdf">N2087</a> - <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2242.pdf">N2242</a> - <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2488.pdf">N2488</a> - <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2555.pdf">N2555</a> - </td> -</tr> -<tr> - <td>template aliases</td> - <td class="complete" align="center">✓</td> - <td class="complete" align="center">✓</td> - <td class="complete" align="center">✓</td> - <td class="complete" align="center">✓</td> - <td>7.1.3, 14.6.7</td> - <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2003/n1489.pdf">N1489</a> - <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2258.pdf">N2258</a> - </td> -</tr> -<tr> - <td>Removal of export</td> - <td class="complete"></td> - <td class="na">N/A</td> - <td class="na">N/A</td> - <td class="na">N/A</td> - <td></td> - <td>This was never implemented in C++03</td> -</tr> -<tr> - <td>extern templates</td> - <td class="complete"></td> - <td class="complete"></td> - <td class="complete"></td> - <td class="complete"></td> - <td>14.8.2</td> - <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1987.htm">N1987</a></td> -</tr> -<tr> - <td>Local classes as template parameters</td> - <td></td> - <td></td> - <td></td> - <td></td> - <td></td> - <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2402.pdf">N2402</a> - <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2657.htm">N2657</a> - </td> -</tr> -<tr><td colspan="7" class="category">Exception Modifications</td></tr> -<tr> - <td>Deprecation of exception specifications</td> - <td></td> - <td></td> - <td></td> - <td></td> - <td>15.4</td> - <td></td> -</tr> -<tr> - <td>noexcept</td> - <td class="complete" align="center">✓</td> - <td class="complete" align="center">✓</td> - <td class="complete" align="center">✓</td> - <td class="na">N/A</td> - <td>5.3.7, 15.4</td> - <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3050.html">N3050</a></td> -</tr> -<tr><td colspan="7" class="category">Preprocessor Modifications</td></tr> -<tr> - <td>__STDC_HOSTED__</td> - <td class="complete"></td> - <td class="na">N/A</td> - <td class="na">N/A</td> - <td class="na">N/A</td> - <td>16.8</td> - <td>C99 - <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1568.htm">N1568</a> - </td> -</tr> -<tr> - <td>_Pragma</td> - <td class="complete"></td> - <td class="na">N/A</td> - <td class="na">N/A</td> - <td class="na">N/A</td> - <td>16.9</td> - <td>C99 - <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1568.htm">N1568</a> - </td> -</tr> -<tr> - <td>Variable argument macros</td> - <td class="complete"></td> - <td class="na">N/A</td> - <td class="na">N/A</td> - <td class="na">N/A</td> - <td>16.3</td> - <td>C99 - <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1568.htm">N1568</a> - </td> -</tr> -<tr> - <td>Empty macro arguments</td> - <td class="complete"></td> - <td class="na">N/A</td> - <td class="na">N/A</td> - <td class="na">N/A</td> - <td>16.3</td> - <td>C99 - <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1568.htm">N1568</a> - </td> -</tr> -<tr> - <td>__func__</td> - <td class="complete"></td> - <td class="na">N/A</td> - <td class="na">N/A</td> - <td class="na">N/A</td> - <td>8.4.1</td> - <td>C99 - <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1568.htm">N1568</a> - </td> -</tr> -<tr> - <td>__cplusplus</td> - <td class="complete"></td> - <td class="na">N/A</td> - <td class="na">N/A</td> - <td class="na">N/A</td> - <td>16.8</td> - <td></td> -</tr> -<tr><td colspan="7" class="category">Things Completely New</td></tr> -<tr> - <td>Late-specified return type</td> - <td class="complete" align="center">✓</td> - <td class="complete" align="center">✓</td> - <td class="complete" align="center">✓</td> - <td class="na">N/A</td> - <td>8.3.5</td> - <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2445.html">N2445</a></td> -</tr> -<tr> - <td>lambda expressions</td> - <td></td> - <td></td> - <td></td> - <td></td> - <td>5.1.2</td> - <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1968.htm">N1968</a> - <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2550.pdf">N2550</a> - <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2009/n2859.pdf">N2859</a> - </td> -</tr> -<tr> - <td>Uniform initializers </td> - <td></td> - <td></td> - <td></td> - <td></td> - <td>12.6</td> - <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2215.pdf">N2215</a> - <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2640.pdf">N2640</a> - </td> -</tr> -<tr> - <td>Memory model</td> - <td></td> - <td></td> - <td></td> - <td></td> - <td>1.7</td> - <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2556.html">N2556</a></td> -</tr> -<tr><td colspan="7" class="category">Miscellania</td></tr> -<tr> - <td>Standard attribute syntax</td> - <td></td> - <td></td> - <td></td> - <td></td> - <td></td> - <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2418.pdf">N2418</a></td> -</tr> -<tr> - <td>alignment control</td> - <td></td> - <td></td> - <td></td> - <td></td> - <td></td> - <td></td> -</tr> -<tr> - <td>Deleted functions</td> - <td class="complete" align="center"></td> - <td class="complete" align="center"></td> - <td class="medium" align="center"></td> - <td class="na">N/A</td> - <td>8.4.3</td> - <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2326.htm">N2326</a></br> - This also includes class methods.</td> -</tr> -<tr> - <td>static_assert</td> - <td class="complete" align="center"></td> - <td class="complete" align="center"></td> - <td class="advanced" align="center"></td> - <td class="na">N/A</td> - <td>7</td> - <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2002/n1381.htm">N1381</a> - <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1720.pdf">N1720</a> - </td> -</tr> -<tr> - <td>Inline namespaces</td> - <td class="complete" align="center">✓</td> - <td class="complete" align="center">✓</td> - <td class="complete" align="center">✓</td> - <td class="complete" align="center">N/A</td> - <td>7.3.1</td> - <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2535.htm">N2535</a></td> -</tr> -<tr> - <td>thread_local storage</td> - <td></td> - <td></td> - <td></td> - <td></td> - <td>3.7.2, 7.1.1</td> - <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2660.htm">N2660</a></td> -</tr> -<tr><td colspan="7" class="category">Standard Library Modifications, see <a href="http://libcxx.llvm.org/index.html">libc++</a> or <a href="http://gcc.gnu.org/onlinedocs/libstdc++/manual/bk01pt01ch01.html#manual.intro.status.standard.200x">libstdc++</a> or <a href="http://blogs.msdn.com/b/vcblog/archive/2010/07/02/video-introduction-to-the-stl-part-1.aspx">VC++ 2010</a></td></tr> + <tr class="separator"> + <th align="center" colspan="3" bgcolor="#ffddaa">C99 Features in C++0x</th> + </tr> + <tr> + <td><code>__func__</code> predefined identifier</td> + <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2340.htm">N2340</a></td> + <td align="center">Clang 2.9</td> + </tr> + <tr> + <td>C99 preprocessor</td> + <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1653.htm">N1653</a></td> + <td align="center">Clang 2.9</td> + </tr> + <tr> + <td><code>long long</code></td> + <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1811.pdf">N1811</a></td> + <td align="center">Clang 2.9</td> + </tr> + <tr> + <td>Extended integral types</td> + <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1988.pdf">N1988</a></td> + <td align="center">No</td> + </tr> </table> <br /> </div> diff --git a/www/demo/index.cgi b/www/demo/index.cgi index b29efb6..901b009 100644 --- a/www/demo/index.cgi +++ b/www/demo/index.cgi @@ -269,7 +269,7 @@ sub try_run { alarm 0; }; if ( $@ and $@ =~ /timeout/ ) { - barf("Program $program took too long, compile time limited for the web script, sorry!.\n"); + barf("Program $program took too long, compile time limited for the web script, sorry!\n"); } if ( -s $outputFile ) { print scalar dumpFile( "Output from $program", $outputFile ); diff --git a/www/diagnostics.html b/www/diagnostics.html index 48d222a..b3b168b 100644 --- a/www/diagnostics.html +++ b/www/diagnostics.html @@ -104,10 +104,8 @@ quickly.</p> <h2>No Pretty Printing of Expressions in Diagnostics</h2> <p>Since Clang has range highlighting, it never needs to pretty print your code -back out to you. This is particularly bad in G++ (which often emits errors -containing lowered vtable references), but even GCC can produce -inscrutible error messages in some cases when it tries to do this. In this -example P and Q have type "int*":</p> +back out to you. GCC can produce inscrutible error messages in some cases when +it tries to do this. In this example P and Q have type "int*":</p> <pre> $ <b>gcc-4.2 -fsyntax-only t.c</b> @@ -118,6 +116,31 @@ example P and Q have type "int*":</p> <font color="blue"> ~~~~~^</font> </pre> +<p>This can be particularly bad in G++, which often emits errors + containing lowered vtable references. For example:</p> + +<pre> + $ <b>cat t.cc</b> + struct a { + virtual int bar(); + }; + + struct foo : public virtual a { + }; + + void test(foo *P) { + return P->bar() + *P; + } + $ <b>gcc-4.2 t.cc</b> + t.cc: In function 'void test(foo*)': + t.cc:9: error: no match for 'operator+' in '(((a*)P) + (*(long int*)(P->foo::<anonymous>.a::_vptr$a + -0x00000000000000020)))->a::bar() + * P' + t.cc:9: error: return-statement with a value, in function returning 'void' + $ <b>clang t.cc</b> + t.cc:9:18: <font color="red">error:</font> invalid operands to binary expression ('int' and 'foo') + <font color="darkgreen"> return P->bar() + *P;</font> + <font color="blue"> ~~~~~~~~ ^ ~~</font> +</pre> + <h2>Typedef Preservation and Selective Unwrapping</h2> @@ -169,7 +192,7 @@ namespace myapp { } using namespace myapp; -void addHTTPService(servers::Server const &server, ::services::WebService const *http) { +void addHTTPService(servers::Server const &server, ::services::WebService const *http) { server += http; } </pre> diff --git a/www/get_involved.html b/www/get_involved.html index a383d70..eb9a979 100644 --- a/www/get_involved.html +++ b/www/get_involved.html @@ -54,7 +54,36 @@ href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits">cfe-commits mailing list</a>. All of these lists have archives, so you can browse through previous discussions or follow the list development on the web if you prefer.</p> -<p>If you're looking for something to work on, check out our <a href="OpenProjects.html">Open Projects</a> page or go look through the <a href="http://llvm.org/bugs/">Bugzilla bug database.</p> +<p>If you're looking for something to work on, check out our <a href="OpenProjects.html">Open Projects</a> page or go look through the <a href="http://llvm.org/bugs/">Bugzilla bug database</a>.</p> + +<h2 name="criteria">Contributing Extensions to Clang</h2> + +<p>Clang has always been designed as a platform for experimentation, +allowing programmers to easily extend the compiler to support great +new language features and tools. At some point, the authors of these +extensions may propose that the extensions become a part of Clang +itself, to benefit the whole Clang community. But not every idea--not +even every great idea--should become part of Clang. Extensions +(particularly language extensions) pose a long-term maintenance burden +on Clang, and therefore the benefits of the extension must outweight +those costs. Hence, these are the seven criteria used to evaluate the +merits of a proposed extension:</p> + +<ol> + <li>Evidence of a significant user community: This is based on a number of factors, including an actual, existing user community, the perceived likelihood that users would adopt such a feature if it were available, and any "trickle-down" effects that come from, e.g., a library adopting the feature and providing benefits to its users.</li> + + <li>A specific need to reside within the Clang tree: There are some extensions that would be better expressed as a separate tool, and should remain as separate tools even if they end up being hosted as part of the LLVM umbrella project.</li> + + <li>A complete specification: The specification must be sufficient to understand the design of the feature as well as interpret the meaning of specific examples. The specification should be detailed enough that another compiler vendor could conceivably implement the feature.</li> + + <li>Representation within the appropriate governing organization: For extensions to a language governed by a standards committee (C, C++, OpenCL), the extension itself must have an active proposal and proponent within that committee and have a reasonable chance of acceptance. Clang should drive the standard, not diverge from it. This criterion does not apply to all extensions, since some extensions fall outside of the realm of the standards bodies.</li> + + <li>A long-term support plan: Contributing a non-trivial extension to Clang implies a commitment to supporting that extension, improving the implementation and specification as Clang evolves. The capacity of the contributor to make that commitment is as important as the commitment itself.</li> + + <li>A high-quality implementation: The implementation must fit well into Clang's architecture, follow LLVM's coding conventions, and meet Clang's quality standards, including high-quality diagnostics and rich AST representations. This is particularly important for language extensions, because users will learn how those extensions work through the behavior of the compiler.</li> + + <li>A proper test suite: Extensive testing is crucial to ensure that the language extension is not broken by ongoing maintenance in Clang. The test suite should be complete enough that another compiler vendor could conceivably validate their implementation of the feature against it.</li> +</ol> </div> </body> diff --git a/www/get_started.html b/www/get_started.html index f8745f96..515cd57 100644 --- a/www/get_started.html +++ b/www/get_started.html @@ -165,7 +165,7 @@ Visual Studio:</p> more information on other configuration options for cmake.</li> </li> <li>The above, if successful, will have created an LLVM.sln file in the - llvm directory. + <tt>build</tt> directory. </ul> <li>Build Clang:</li> <ul> diff --git a/www/hacking.html b/www/hacking.html index 969a39c..b65768c 100644 --- a/www/hacking.html +++ b/www/hacking.html @@ -86,6 +86,28 @@ </ul> <!--=====================================================================--> + <h3 id="debuggingVisualStudio">Debugging using Visual Studio</h3> + <!--=====================================================================--> + + <p>The file <tt>utils/clangVisualizers.txt</tt> provides debugger visualizers that make debugging + of more complex data types much easier.</p> + <p>There are two ways to install them:</p> + + <ul> + <li>Put the path to <tt>clangVisualizers.txt</tt> in the environment variable called + <tt>_vcee_autoexp</tt>. This method should work for Visual Studio 2008 and above. + </li> + <li>Edit your local <tt>autoexp.dat</tt> (make sure you make a backup first!), + located in <tt>Visual Studio Directory\Common7\Packages\Debugger</tt> and append + the contents of <tt>clangVisuailzers.txt</tt> to it. This method should work for + Visual Studio 2005 and above. + </li> + </ul> + + <p><i>[Note: To disable the visualizer for any specific variable, type + <tt>variable_name,!</tt> inside the watch window.]</i></p> + + <!--=====================================================================--> <h2 id="testing">Testing</h2> <!--=====================================================================--> diff --git a/www/index.html b/www/index.html index 623f719..095eed7 100644 --- a/www/index.html +++ b/www/index.html @@ -94,7 +94,7 @@ targeting X86-32, X86-64, and ARM (other targets may have caveats, but are usually easy to fix). If you are looking for source analysis or source-to-source transformation tools, clang is probably a great - solution for you. Clang does not support C++'0x yet, please see the <a + solution for you. Clang does not support C++'11 yet, please see the <a href="cxx_status.html">C++ status</a> page for more information.</p> diff --git a/www/menu.html.incl b/www/menu.html.incl index 4acfbe5..878e678 100644 --- a/www/menu.html.incl +++ b/www/menu.html.incl @@ -53,8 +53,9 @@ </div> <div class="submenu"> - <label>Events</label> - <a href="http://llvm.org/devmtg/2009-10/">October 2, 2009 - LLVM/Clang Developer Meeting</a> + <label>Clang Events</label> + <a href="http://llvm.org/devmtg/2009-10/">October 2009</a> + <a href="http://llvm.org/devmtg/2010-11/">November 2010</a> </div> </div> |