summaryrefslogtreecommitdiffstats
path: root/www
diff options
context:
space:
mode:
Diffstat (limited to 'www')
-rw-r--r--www/CheckerNotes.html9
-rw-r--r--www/StaticAnalysis.html21
-rw-r--r--www/StaticAnalysisUsage.html21
-rw-r--r--www/analyzer/latest_checker.html.incl2
-rw-r--r--www/analyzer/release_notes.html15
-rw-r--r--www/clang-tutorial.html56
-rw-r--r--www/comparison.html17
-rw-r--r--www/compatibility.html24
-rw-r--r--www/cxx_status.html15
-rw-r--r--www/diagnostics.html122
-rw-r--r--www/distclang_status.html30
-rw-r--r--www/features.html1
-rw-r--r--www/libstdc++4.4-clang0x.patch239
13 files changed, 342 insertions, 230 deletions
diff --git a/www/CheckerNotes.html b/www/CheckerNotes.html
deleted file mode 100644
index 523048d..0000000
--- a/www/CheckerNotes.html
+++ /dev/null
@@ -1,9 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<title>Static Analysis</title>
-<meta http-equiv="REFRESH" content="0;url=http://clang.llvm.org/StaticAnalysis.html"></HEAD>
-<BODY>
-This page has relocated: <a href="http://clang.llvm.org/StaticAnalysis.html">http://clang.llvm.org/StaticAnalysis.html</a>.
-</BODY>
-</HTML>
diff --git a/www/StaticAnalysis.html b/www/StaticAnalysis.html
deleted file mode 100644
index a701c0ff0..0000000
--- a/www/StaticAnalysis.html
+++ /dev/null
@@ -1,21 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
- "http://www.w3.org/TR/html4/strict.dtd">
-<html>
-<head>
- <meta HTTP-EQUIV="REFRESH" content="0; url=http://clang-analyzer.llvm.org">
- <title>LLVM/Clang Static Analyzer</title>
- <link type="text/css" rel="stylesheet" href="menu.css" />
- <link type="text/css" rel="stylesheet" href="content.css" />
-</head>
-<body>
-
-<!--#include virtual="menu.html.incl"-->
-
-<div id="content">
-
-<p>This page has moved: <a href="http://clang-analyzer.llvm.org">clang.analyzer.llvm.org</a>.</p>
-
-</div>
-</body>
-</html>
-
diff --git a/www/StaticAnalysisUsage.html b/www/StaticAnalysisUsage.html
deleted file mode 100644
index a701c0ff0..0000000
--- a/www/StaticAnalysisUsage.html
+++ /dev/null
@@ -1,21 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
- "http://www.w3.org/TR/html4/strict.dtd">
-<html>
-<head>
- <meta HTTP-EQUIV="REFRESH" content="0; url=http://clang-analyzer.llvm.org">
- <title>LLVM/Clang Static Analyzer</title>
- <link type="text/css" rel="stylesheet" href="menu.css" />
- <link type="text/css" rel="stylesheet" href="content.css" />
-</head>
-<body>
-
-<!--#include virtual="menu.html.incl"-->
-
-<div id="content">
-
-<p>This page has moved: <a href="http://clang-analyzer.llvm.org">clang.analyzer.llvm.org</a>.</p>
-
-</div>
-</body>
-</html>
-
diff --git a/www/analyzer/latest_checker.html.incl b/www/analyzer/latest_checker.html.incl
index 99151a8..76b88dd 100644
--- a/www/analyzer/latest_checker.html.incl
+++ b/www/analyzer/latest_checker.html.incl
@@ -1 +1 @@
-<b><a href="/checker/checker-256.tar.bz2">checker-256.tar.bz2</a></b> (built April 13, 2011)
+<b><a href="/checker/checker-257.tar.bz2">checker-257.tar.bz2</a></b> (built May 25, 2011)
diff --git a/www/analyzer/release_notes.html b/www/analyzer/release_notes.html
index 163e84f..4a568f5 100644
--- a/www/analyzer/release_notes.html
+++ b/www/analyzer/release_notes.html
@@ -15,9 +15,22 @@
<h1>Release notes for <tt>checker-XXX</tt> builds</h1>
+<h4 id="checker_257">checker-257</h4>
+
+<p><b>built:</b>May 25, 2011<br>
+<b>download:</b> <a href="/checker/checker-257.tar.bz2">checker-257.tar.bz2</a></p>
+<p><b>highlights:</b></p>
+
+<ul>
+ <li>The analyzer is now far more aggressive with checking conformance with Core Foundation conventions. Any function that returns a CF type must now obey the Core Foundation naming conventions, or use the <a href="/annotations.html#attr_cf_returns_retained">cf_returns_retained</a> or <a href="/annotations.html#attr_cf_returns_not_retained">cf_returns_not_retained</a> annotations.</li>
+ <li>Fixed a serious regression where the analyzer would not analyze Objective-C methods in class extensions.</li>
+ <li>Misc. bug fixes to improve analyzer precision.
+ </li>
+</ul>
+
<h4 id="checker_256">checker-256</h4>
-<p><b>built:</b> April 13, 2011<br>
+<p><b>built:</b>April 13, 2011<br>
<b>download:</b> <a href="/checker/checker-256.tar.bz2">checker-256.tar.bz2</a></p>
<p><b>highlights:</b></p>
diff --git a/www/clang-tutorial.html b/www/clang-tutorial.html
deleted file mode 100644
index 0e17046..0000000
--- a/www/clang-tutorial.html
+++ /dev/null
@@ -1,56 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
- "http://www.w3.org/TR/html4/strict.dtd">
-<html>
-<head>
- <META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
- <title>Clang - Quick Tutorial</title>
- <link type="text/css" rel="stylesheet" href="menu.css" />
- <link type="text/css" rel="stylesheet" href="content.css" />
-</head>
-<body>
-
-<!--#include virtual="menu.html.incl"-->
-
-<div id="content">
-
-<h1>Tutorial</h1>
-
- <p>Invoking the BoostCon tool:</p>
- <pre>
-$ clang -cc1 -boostcon t.cpp
-</pre>
-
- <p>Teach the BoostCon action to identify and print C++ classes:</p>
- <pre>
-bool VisitCXXRecordDecl(CXXRecordDecl *D) {
- std::cout &lt;&lt; D-&gt;getNameAsString()
- &lt;&lt; '\n';
- return false;
-}
-</pre>
-
- <p>Walk and print base classes of a class:</p>
- <pre>
-for(CXXRecordDecl::base_class_iterator
- B = D-&gt;bases_begin(), BEnd = D-&gt;bases_end();
- B != BEnd; ++B) {
- QualType BaseType = B-&gt;getType();
- std::cout &lt;&lt; " " &lt;&lt; BaseType.getAsString()
- &lt;&lt; '\n';
-}
-</pre>
-
- <p>Retrieve the C++ class declaration from a base type:</p>
- <pre>
-if (const RecordType *RTy
- = BaseType-&gt;getAs&lt;RecordType&gt;()) {
- RecordDecl *Base = RTy-&gt;getDecl();
- if (CXXRecordDecl *BaseCXX
- = dyn_cast&lt;CXXRecordDecl&gt;(Base)) {
-
- }
-}
-</pre>
-</div>
-</body>
-</html>
diff --git a/www/comparison.html b/www/comparison.html
index dcf6220..a7d4d75 100644
--- a/www/comparison.html
+++ b/www/comparison.html
@@ -50,10 +50,8 @@
<ul>
<li>GCC supports languages that clang does not aim to, such as Java, Ada,
FORTRAN, etc.</li>
- <li><a href="cxx_status.html">Clang support for C++</a> is more compliant
- than GCC's in many ways, but is not as mature as GCC's. GCC has several
- C++'0x features that Clang does not yet support (e.g. variadic
- templates).</li>
+ <li>GCC has a few <a href="cxx_status.html">C++'0x 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>
<li>GCC does not require a C++ compiler to build it.</li>
@@ -114,6 +112,9 @@
including support for a bytecode representation for intermediate code,
pluggable optimizers, link-time optimization support, Just-In-Time
compilation, ability to link in multiple code generators, etc.</li>
+ <li><a href="compatibility.html#c++">Clang's support for C++</a> is more
+ compliant than GCC's in many ways (e.g. conformant two phase name
+ lookup).</li>
</ul>
<!--=====================================================================-->
@@ -131,6 +132,8 @@
<p>Pro's of clang vs Elsa:</p>
<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>
<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
@@ -157,12 +160,6 @@
<li>Elsa does not support native code generation.</li>
</ul>
- <p>Note that there is a fork of Elsa known as "Pork". It addresses some of
- these shortcomings by loosely integrating a preprocessor. This allows it
- to map from a source location in the AST to the original position before
- preprocessing, providing it better support for static analysis and
- refactoring. Note that Pork is in stasis now too.</p>
-
<!--=====================================================================-->
<h2><a name="pcc">Clang vs PCC (Portable C Compiler)</a></h2>
diff --git a/www/compatibility.html b/www/compatibility.html
index aa6a39d..b68a766 100644
--- a/www/compatibility.html
+++ b/www/compatibility.html
@@ -459,13 +459,15 @@ int main() {
<p>Clang complains:
-<pre> <b>my_file.cpp:2:10: <span class="error">error:</span> use of undeclared identifier 'Multiply'</b>
+<pre> <b>my_file.cpp:2:10: <span class="error">error:</span> call to function 'Multiply' that is neither visible in the template definition nor found by argument dependent lookup</b>
return Multiply(x, x);
<span class="caret"> ^</span>
-
<b>my_file.cpp:10:3: <span class="note">note:</span> in instantiation of function template specialization 'Squared&lt;int&gt;' requested here</b>
Squared(5);
<span class="caret"> ^</span>
+ <b>my_file.cpp:5:5: <span class="note">note:</span> 'Multiply' should be declared prior to the call site</b>
+ int Multiply(int x, int y) {
+ <span class="caret"> ^</span>
</pre>
<p>The C++ standard says that unqualified names like <q>Multiply</q>
@@ -516,15 +518,17 @@ void Use() {
Dump(ns::Data());
}</pre>
-<p>Again, Clang complains about not finding a matching function:</p>
+<p>Again, Clang complains:</p>
-<pre>
-<b>my_file.cpp:5:13: <span class="error">error:</span> invalid operands to binary expression ('ostream' (aka 'basic_ostream&lt;char&gt;') and 'ns::Data const')</b>
- std::cout &lt;&lt; value &lt;&lt; "\n";
- <span class="caret">~~~~~~~~~ ^ ~~~~~</span>
-<b>my_file.cpp:17:3: <span class="note">note:</span> in instantiation of function template specialization 'Dump&lt;ns::Data&gt;' requested here</b>
- Dump(ns::Data());
- <span class="caret">^</span>
+<pre> <b>my_file2.cpp:5:13: <span class="error">error:</span> call to function 'operator&lt;&lt;' that is neither visible in the template definition nor found by argument dependent lookup</b>
+ std::cout &lt;&lt; value &lt;&lt; "\n";
+ <span class="caret"> ^</span>
+ <b>my_file2.cpp:17:3: <span class="error">note:</span> in instantiation of function template specialization 'Dump&lt;ns::Data&gt;' requested here</b>
+ Dump(ns::Data());
+ <span class="caret"> ^</span>
+ <b>my_file2.cpp:12:15: <span class="error">note:</span> 'operator&lt;&lt;' should be declared prior to the call site or in namespace 'ns'</b>
+ std::ostream&amp; operator&lt;&lt;(std::ostream&amp; out, ns::Data data) {
+ <span class="caret"> ^</span>
</pre>
<p>Just like before, unqualified lookup didn't find any declarations
diff --git a/www/cxx_status.html b/www/cxx_status.html
index 5545a81..5998de8 100644
--- a/www/cxx_status.html
+++ b/www/cxx_status.html
@@ -25,7 +25,7 @@
<!--*************************************************************************-->
<h1>C++ and C++'0x Support in Clang</h1>
<!--*************************************************************************-->
-<p>Last updated: $Date: 2011-05-01 09:04:31 +0200 (Sun, 01 May 2011) $</p>
+<p>Last updated: $Date: 2011-05-06 00:07:51 +0200 (Fri, 06 May 2011) $</p>
<ul>
<li><a href="#projects">Projects Building with Clang</a></li>
@@ -213,7 +213,7 @@ welcome!</p>
<td class="complete" align="center">&#x2713;</td>
<td class="complete" align="center">&#x2713;</td>
<td class="advanced" align="center"></td>
- <td class="na">N/A</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>
@@ -460,14 +460,13 @@ welcome!</p>
</tr>
<tr>
<td>template aliases</td>
- <td class="basic"></td>
- <td class="basic"></td>
- <td class="basic"></td>
- <td></td>
+ <td class="complete" align="center">&#x2713;</td>
+ <td class="complete" align="center">&#x2713;</td>
+ <td class="complete" align="center">&#x2713;</td>
+ <td class="complete" align="center">&#x2713;</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>
- Only non-template type aliases implemented
</td>
</tr>
<tr>
@@ -589,7 +588,7 @@ welcome!</p>
<td class="complete" align="center">&#x2713;</td>
<td class="complete" align="center">&#x2713;</td>
<td class="complete" align="center">&#x2713;</td>
- <td class="basic"></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>
diff --git a/www/diagnostics.html b/www/diagnostics.html
index 4f7d025..48d222a 100644
--- a/www/diagnostics.html
+++ b/www/diagnostics.html
@@ -2,7 +2,7 @@
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
- <META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
<title>Clang - Expressive Diagnostics</title>
<link type="text/css" rel="stylesheet" href="menu.css" />
<link type="text/css" rel="stylesheet" href="content.css" />
@@ -34,10 +34,18 @@ that embed Clang and extract equivalent information through internal APIs.-->
<h2>Column Numbers and Caret Diagnostics</h2>
<p>First, all diagnostics produced by clang include full column number
-information, and use this to print "caret diagnostics". This is a feature
-provided by many commercial compilers, but is generally missing from open source
+information. The clang command-line compiler driver uses this information
+to print "caret diagnostics".
+(IDEs can use the information to display in-line error markup.)
+Precise error location in the source is a feature provided by many commercial
+compilers, but is generally missing from open source
compilers. This is nice because it makes it very easy to understand exactly
-what is wrong in a particular piece of code, an example is:</p>
+what is wrong in a particular piece of code</p>
+
+<p>The caret (the blue "^" character) exactly shows where the problem is, even
+inside of a string. This makes it really easy to jump to the problem and
+helps when multiple instances of the same character occur on a line. (We'll
+revisit this more in following examples.)</p>
<pre>
$ <b>gcc-4.2 -fsyntax-only -Wformat format-strings.c</b>
@@ -48,17 +56,18 @@ what is wrong in a particular piece of code, an example is:</p>
<font color="blue"> ^</font>
</pre>
-<p>The caret (the blue "^" character) exactly shows where the problem is, even
-inside of the string. This makes it really easy to jump to the problem and
-helps when multiple instances of the same character occur on a line. We'll
-revisit this more in following examples.</p>
-
<h2>Range Highlighting for Related Text</h2>
<p>Clang captures and accurately tracks range information for expressions,
statements, and other constructs in your program and uses this to make
-diagnostics highlight related information. For example, here's a somewhat
-nonsensical example to illustrate this:</p>
+diagnostics highlight related information. In the following somewhat
+nonsensical example you can see that you don't even need to see the original source code to
+understand what is wrong based on the Clang error. Because clang prints a
+caret, you know exactly <em>which</em> plus it is complaining about. The range
+information highlights the left and right side of the plus which makes it
+immediately obvious what the compiler is talking about.
+Range information is very useful for
+cases involving precedence issues and many other cases.</p>
<pre>
$ <b>gcc-4.2 -fsyntax-only t.c</b>
@@ -69,21 +78,19 @@ nonsensical example to illustrate this:</p>
<font color="blue"> ~~~~~~~~~~~~~~ ^ ~~~~~</font>
</pre>
-<p>Here you can see that you don't even need to see the original source code to
-understand what is wrong based on the Clang error: Because clang prints a
-caret, you know exactly <em>which</em> plus it is complaining about. The range
-information highlights the left and right side of the plus which makes it
-immediately obvious what the compiler is talking about, which is very useful for
-cases involving precedence issues and many other cases.</p>
-
<h2>Precision in Wording</h2>
<p>A detail is that we have tried really hard to make the diagnostics that come
out of clang contain exactly the pertinent information about what is wrong and
why. In the example above, we tell you what the inferred types are for
the left and right hand sides, and we don't repeat what is obvious from the
-caret (that this is a "binary +"). Many other examples abound, here is a simple
-one:</p>
+caret (e.g., that this is a "binary +").</p>
+
+<p>Many other examples abound. In the following example, not only do we tell you that there is a problem with the *
+and point to it, we say exactly why and tell you what the type is (in case it is
+a complicated subexpression, such as a call to an overloaded function). This
+sort of attention to detail makes it much easier to understand and fix problems
+quickly.</p>
<pre>
$ <b>gcc-4.2 -fsyntax-only t.c</b>
@@ -94,12 +101,6 @@ one:</p>
<font color="blue"> ^~~~~~~~</font>
</pre>
-<p>In this example, not only do we tell you that there is a problem with the *
-and point to it, we say exactly why and tell you what the type is (in case it is
-a complicated subexpression, such as a call to an overloaded function). This
-sort of attention to detail makes it much easier to understand and fix problems
-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
@@ -127,8 +128,10 @@ typename in diagnostics. However, sometimes very simple typedefs can wrap
trivial types and it is important to strip off the typedef to understand what
is going on. Clang aims to handle both cases well.<p>
-<p>For example, here is an example that shows where it is important to preserve
-a typedef in C:</p>
+<p>The following example shows where it is important to preserve
+a typedef in C. Here the type printed by GCC isn't even valid, but if the error
+were about a very long and complicated type (as often happens in C++) the error
+message would be ugly just because it was long and hard to read.</p>
<pre>
$ <b>gcc-4.2 -fsyntax-only t.c</b>
@@ -139,10 +142,9 @@ a typedef in C:</p>
<font color="blue"> ~~~~~~~~^~</font>
</pre>
-<p>Here the type printed by GCC isn't even valid, but if the error were about a
-very long and complicated type (as often happens in C++) the error message would
-be ugly just because it was long and hard to read. Here's an example where it
-is useful for the compiler to expose underlying details of a typedef:</p>
+<p>The following example shows where it is useful for the compiler to expose
+underlying details of a typedef. If the user was somehow confused about how the
+system "pid_t" typedef is defined, Clang helpfully displays it with "aka".</p>
<pre>
$ <b>gcc-4.2 -fsyntax-only t.c</b>
@@ -153,9 +155,6 @@ is useful for the compiler to expose underlying details of a typedef:</p>
<font color="blue"> ~~~~~ ^</font>
</pre>
-<p>If the user was somehow confused about how the system "pid_t" typedef is
-defined, Clang helpfully displays it with "aka".</p>
-
<p>In C++, type preservation includes retaining any qualification written into type names. For example, if we take a small snippet of code such as:
<blockquote>
@@ -205,8 +204,10 @@ in source code. When Clang produces a diagnostic about a particular
problem that it can work around (e.g., non-standard or redundant
syntax, missing keywords, common mistakes, etc.), it may also provide
specific guidance in the form of a code transformation to correct the
-problem. For example, here Clang warns about the use of a GCC
-extension that has been considered obsolete since 1993:</p>
+problem. In the following example, Clang warns about the use of a GCC
+extension that has been considered obsolete since 1993. The underlined
+code should be removed, then replaced with the code below the
+caret line (".x =" or ".y =", respectively).</p>
<pre>
$ <b>clang t.c</b>
@@ -220,11 +221,12 @@ extension that has been considered obsolete since 1993:</p>
<font color="darkgreen">.y = </font>
</pre>
-<p>The underlined code should be removed, then replaced with the code below the
-caret line (".x =" or ".y =", respectively). "Fix-it" hints are most useful for
+<p>"Fix-it" hints are most useful for
working around common user errors and misconceptions. For example, C++ users
commonly forget the syntax for explicit specialization of class templates,
-as in the following error:</p>
+as in the error in the following example. Again, after describing the problem,
+Clang provides the fix--add <code>template&lt;&gt;</code>--as part of the
+diagnostic.<p>
<pre>
$ <b>clang t.cpp</b>
@@ -234,14 +236,14 @@ as in the following error:</p>
<font color="darkgreen">template&lt;&gt; </font>
</pre>
-<p>Again, after describing the problem, Clang provides the fix--add <code>template&lt;&gt;</code>--as part of the diagnostic.<p>
-
<h2>Automatic Macro Expansion</h2>
<p>Many errors happen in macros that are sometimes deeply nested. With
traditional compilers, you need to dig deep into the definition of the macro to
-understand how you got into trouble. Here's a simple example that shows how
-Clang helps you out:</p>
+understand how you got into trouble. The following simple example shows how
+Clang helps you out by automatically printing instantiation information and
+nested range information for diagnostics as they are instantiated through macros
+and also shows how some of the other pieces work in a bigger example.</p>
<pre>
$ <b>gcc-4.2 -fsyntax-only t.c</b>
@@ -256,10 +258,7 @@ Clang helps you out:</p>
<font color="blue"> ~~~ ^ ~~~</font>
</pre>
-<p>This shows how clang automatically prints instantiation information and
-nested range information for diagnostics as they are instantiated through macros
-and also shows how some of the other pieces work in a bigger example. Here's
-another real world warning that occurs in the "window" Unix package (which
+<p>Here's another real world warning that occurs in the "window" Unix package (which
implements the "wwopen" class of APIs):</p>
<pre>
@@ -275,14 +274,19 @@ implements the "wwopen" class of APIs):</p>
<font color="blue"> ^</font>
</pre>
-<p>In practice, we've found that this is actually more useful in multiply nested
+<p>In practice, we've found that Clang's treatment of macros is actually more useful in multiply nested
macros that in simple ones.</p>
<h2>Quality of Implementation and Attention to Detail</h2>
<p>Finally, we have put a lot of work polishing the little things, because
-little things add up over time and contribute to a great user experience. Three
-examples are:</p>
+little things add up over time and contribute to a great user experience.</p>
+
+<p>The following example shows a trivial little tweak, where we tell you to put the semicolon at
+the end of the line that is missing it (line 4) instead of at the beginning of
+the following line (line 5). This is particularly important with fixit hints
+and caret diagnostics, because otherwise you don't get the important context.
+</p>
<pre>
$ <b>gcc-4.2 t.c</b>
@@ -295,11 +299,9 @@ examples are:</p>
<font color="blue"> ;</font>
</pre>
-<p>This shows a trivial little tweak, where we tell you to put the semicolon at
-the end of the line that is missing it (line 4) instead of at the beginning of
-the following line (line 5). This is particularly important with fixit hints
-and caret diagnostics, because otherwise you don't get the important context.
-</p>
+<p>The following example shows much better error recovery than GCC. The message coming out
+of GCC is completely useless for diagnosing the problem. Clang tries much harder
+and produces a much more useful diagnosis of the problem.</p>
<pre>
$ <b>gcc-4.2 t.c</b>
@@ -310,9 +312,8 @@ and caret diagnostics, because otherwise you don't get the important context.
<font color="blue">^</font>
</pre>
-<p>This shows an example of much better error recovery. The message coming out
-of GCC is completely useless for diagnosing the problem, Clang tries much harder
-and produces a much more useful diagnosis of the problem.</p>
+<p>The following example shows that we recover from the simple case of
+forgetting a ; after a struct definition much better than GCC.</p>
<pre>
$ <b>cat t.cc</b>
@@ -338,9 +339,6 @@ and produces a much more useful diagnosis of the problem.</p>
<font color="blue"> ;</font>
</pre>
-<p>This shows that we recover from the simple case of forgetting a ; after
-a struct definition much better than GCC.</p>
-
<p>While each of these details is minor, we feel that they all add up to provide
a much more polished experience.</p>
diff --git a/www/distclang_status.html b/www/distclang_status.html
deleted file mode 100644
index 26ba314..0000000
--- a/www/distclang_status.html
+++ /dev/null
@@ -1,30 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
- "http://www.w3.org/TR/html4/strict.dtd">
-<html>
-<head>
- <META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
- <title>Clang - Distributed Compilation Support</title>
- <link type="text/css" rel="stylesheet" href="menu.css" />
- <link type="text/css" rel="stylesheet" href="content.css" />
- <style type="text/css">
-</style>
-</head>
-<body>
-
-<!--#include virtual="menu.html.incl"-->
-
-<div id="content">
-
-<!--*************************************************************************-->
-<h1>Distributed Compilation Support in Clang</h1>
-<!--*************************************************************************-->
-
-<p>
-This page tracks the status of Distributed Compilation support in Clang.<br>
-Currently some basic features are working but the code is under heavy
-development. </p>
-
-
-</div>
-</body>
-</html>
diff --git a/www/features.html b/www/features.html
index 869d0d8..9e342ea 100644
--- a/www/features.html
+++ b/www/features.html
@@ -232,7 +232,6 @@ Currently, clang is divided into the following libraries and tool:
<li><b>librewrite</b> - Editing of text buffers (important for code rewriting
transformation, like refactoring).</li>
<li><b>libanalysis</b> - Static analysis support.</li>
-<li><b><a href="docs/libIndex.html">libindex</a></b> - Cross-translation-unit infrastructure and indexing support.</li>
<li><b>clang</b> - A driver program, client of the libraries at various
levels.</li>
</ul>
diff --git a/www/libstdc++4.4-clang0x.patch b/www/libstdc++4.4-clang0x.patch
index 8b9916d..db43583 100644
--- a/www/libstdc++4.4-clang0x.patch
+++ b/www/libstdc++4.4-clang0x.patch
@@ -6,6 +6,18 @@ standard headers.
This patch is offered under the same modified GPLv3 as libstdc++-4.4.
+diff -ur a/bits/forward_list.h b/bits/forward_list.h
+--- a/bits/forward_list.h 2011-03-15 14:49:05.000000000 -0700
++++ b/bits/forward_list.h 2011-05-02 23:51:33.000000000 -0700
+@@ -983,7 +983,7 @@
+ * function.
+ */
+ void
+- swap(forward_list&& __list)
++ swap(forward_list& __list)
+ { _Node_base::swap(this->_M_impl._M_head, __list._M_impl._M_head); }
+
+ /**
diff -ur a/bits/move.h b/bits/move.h
--- a/bits/move.h 2011-03-15 14:49:05.000000000 -0700
+++ b/bits/move.h 2011-03-29 10:33:39.000000000 -0700
@@ -46,6 +58,67 @@ diff -ur a/bits/move.h b/bits/move.h
_GLIBCXX_END_NAMESPACE
+diff -ur a/bits/shared_ptr.h b/bits/shared_ptr.h
+--- a/bits/shared_ptr.h 2011-03-15 14:49:05.000000000 -0700
++++ b/bits/shared_ptr.h 2011-03-31 16:40:45.000000000 -0700
+@@ -833,7 +833,7 @@
+ { return _M_refcount._M_get_use_count(); }
+
+ void
+- swap(__shared_ptr<_Tp, _Lp>&& __other) // never throws
++ swap(__shared_ptr<_Tp, _Lp>& __other) // never throws
+ {
+ std::swap(_M_ptr, __other._M_ptr);
+ _M_refcount._M_swap(__other._M_refcount);
+@@ -943,16 +943,6 @@
+ swap(__shared_ptr<_Tp, _Lp>& __a, __shared_ptr<_Tp, _Lp>& __b)
+ { __a.swap(__b); }
+
+- template<typename _Tp, _Lock_policy _Lp>
+- inline void
+- swap(__shared_ptr<_Tp, _Lp>&& __a, __shared_ptr<_Tp, _Lp>& __b)
+- { __a.swap(__b); }
+-
+- template<typename _Tp, _Lock_policy _Lp>
+- inline void
+- swap(__shared_ptr<_Tp, _Lp>& __a, __shared_ptr<_Tp, _Lp>&& __b)
+- { __a.swap(__b); }
+-
+ // 2.2.3.9 shared_ptr casts
+ /** @warning The seemingly equivalent
+ * <code>shared_ptr<_Tp, _Lp>(static_cast<_Tp*>(__r.get()))</code>
+@@ -1372,16 +1362,6 @@
+ swap(shared_ptr<_Tp>& __a, shared_ptr<_Tp>& __b)
+ { __a.swap(__b); }
+
+- template<typename _Tp>
+- inline void
+- swap(shared_ptr<_Tp>&& __a, shared_ptr<_Tp>& __b)
+- { __a.swap(__b); }
+-
+- template<typename _Tp>
+- inline void
+- swap(shared_ptr<_Tp>& __a, shared_ptr<_Tp>&& __b)
+- { __a.swap(__b); }
+-
+ // 20.8.13.2.10 shared_ptr casts.
+ template<typename _Tp, typename _Tp1>
+ inline shared_ptr<_Tp>
+diff -ur a/bits/stl_bvector.h b/bits/stl_bvector.h
+--- a/bits/stl_bvector.h 2011-03-15 14:49:05.000000000 -0700
++++ b/bits/stl_bvector.h 2011-05-02 23:34:46.000000000 -0700
+@@ -743,11 +743,7 @@
+ }
+
+ void
+-#ifdef __GXX_EXPERIMENTAL_CXX0X__
+- swap(vector&& __x)
+-#else
+ swap(vector& __x)
+-#endif
+ {
+ std::swap(this->_M_impl._M_start, __x._M_impl._M_start);
+ std::swap(this->_M_impl._M_finish, __x._M_impl._M_finish);
diff -ur a/bits/stl_deque.h b/bits/stl_deque.h
--- a/bits/stl_deque.h 2011-03-15 14:49:05.000000000 -0700
+++ b/bits/stl_deque.h 2011-03-29 10:33:39.000000000 -0700
@@ -253,6 +326,27 @@ diff -ur a/bits/stl_pair.h b/bits/stl_pair.h
{
using std::swap;
swap(first, __p.first);
+diff -ur a/bits/stl_queue.h b/bits/stl_queue.h
+--- a/bits/stl_queue.h 2011-03-15 14:49:05.000000000 -0700
++++ b/bits/stl_queue.h 2011-05-02 23:36:15.000000000 -0700
+@@ -249,7 +249,7 @@
+
+ #ifdef __GXX_EXPERIMENTAL_CXX0X__
+ void
+- swap(queue&& __q)
++ swap(queue& __q)
+ { c.swap(__q.c); }
+ #endif
+ };
+@@ -550,7 +550,7 @@
+
+ #ifdef __GXX_EXPERIMENTAL_CXX0X__
+ void
+- swap(priority_queue&& __pq)
++ swap(priority_queue& __pq)
+ {
+ using std::swap;
+ c.swap(__pq.c);
diff -ur a/bits/stl_set.h b/bits/stl_set.h
--- a/bits/stl_set.h 2011-03-15 14:49:05.000000000 -0700
+++ b/bits/stl_set.h 2011-03-29 10:33:39.000000000 -0700
@@ -268,6 +362,18 @@ diff -ur a/bits/stl_set.h b/bits/stl_set.h
{ _M_t.swap(__x._M_t); }
// insert/erase
+diff -ur a/bits/stl_stack.h b/bits/stl_stack.h
+--- a/bits/stl_stack.h 2011-03-15 14:49:05.000000000 -0700
++++ b/bits/stl_stack.h 2011-05-02 23:36:36.000000000 -0700
+@@ -213,7 +213,7 @@
+
+ #ifdef __GXX_EXPERIMENTAL_CXX0X__
+ void
+- swap(stack&& __s)
++ swap(stack& __s)
+ { c.swap(__s.c); }
+ #endif
+ };
diff -ur a/bits/stl_tree.h b/bits/stl_tree.h
--- a/bits/stl_tree.h 2011-03-15 14:49:05.000000000 -0700
+++ b/bits/stl_tree.h 2011-03-29 10:33:39.000000000 -0700
@@ -310,6 +416,46 @@ diff -ur a/bits/stl_vector.h b/bits/stl_vector.h
{
std::swap(this->_M_impl._M_start, __x._M_impl._M_start);
std::swap(this->_M_impl._M_finish, __x._M_impl._M_finish);
+diff -ur a/bits/unique_ptr.h b/bits/unique_ptr.h
+--- a/bits/unique_ptr.h 2011-03-15 14:49:05.000000000 -0700
++++ b/bits/unique_ptr.h 2011-03-31 16:40:45.000000000 -0700
+@@ -204,7 +204,7 @@
+ }
+
+ void
+- swap(unique_ptr&& __u)
++ swap(unique_ptr& __u)
+ {
+ using std::swap;
+ swap(_M_t, __u._M_t);
+@@ -350,7 +350,7 @@
+ void reset(_Up) = delete;
+
+ void
+- swap(unique_ptr&& __u)
++ swap(unique_ptr& __u)
+ {
+ using std::swap;
+ swap(_M_t, __u._M_t);
+@@ -389,18 +389,6 @@
+ unique_ptr<_Tp, _Tp_Deleter>& __y)
+ { __x.swap(__y); }
+
+- template<typename _Tp, typename _Tp_Deleter>
+- inline void
+- swap(unique_ptr<_Tp, _Tp_Deleter>&& __x,
+- unique_ptr<_Tp, _Tp_Deleter>& __y)
+- { __x.swap(__y); }
+-
+- template<typename _Tp, typename _Tp_Deleter>
+- inline void
+- swap(unique_ptr<_Tp, _Tp_Deleter>& __x,
+- unique_ptr<_Tp, _Tp_Deleter>&& __y)
+- { __x.swap(__y); }
+-
+ template<typename _Tp, typename _Tp_Deleter,
+ typename _Up, typename _Up_Deleter>
+ inline bool
diff -ur a/exception_ptr.h b/exception_ptr.h
--- a/exception_ptr.h 2011-03-15 14:49:08.000000000 -0700
+++ b/exception_ptr.h 2011-03-29 10:33:39.000000000 -0700
@@ -367,3 +513,96 @@ diff -ur a/ext/vstring.h b/ext/vstring.h
{ this->_M_swap(__s); }
// String operations:
+diff -ur a/tr1_impl/hashtable b/tr1_impl/hashtable
+--- a/tr1_impl/hashtable 2011-03-15 14:49:07.000000000 -0700
++++ b/tr1_impl/hashtable 2011-05-02 23:41:55.000000000 -0700
+@@ -225,11 +225,7 @@
+
+ ~_Hashtable();
+
+-#ifdef _GLIBCXX_INCLUDE_AS_CXX0X
+- void swap(_Hashtable&&);
+-#else
+ void swap(_Hashtable&);
+-#endif
+
+ // Basic container operations
+ iterator
+@@ -732,11 +728,7 @@
+ void
+ _Hashtable<_Key, _Value, _Allocator, _ExtractKey, _Equal,
+ _H1, _H2, _Hash, _RehashPolicy, __chc, __cit, __uk>::
+-#ifdef _GLIBCXX_INCLUDE_AS_CXX0X
+- swap(_Hashtable&& __x)
+-#else
+ swap(_Hashtable& __x)
+-#endif
+ {
+ // The only base class with member variables is hash_code_base. We
+ // define _Hash_code_base::_M_swap because different specializations
+diff -ur a/tuple b/tuple
+--- a/tuple 2011-03-15 14:49:07.000000000 -0700
++++ b/tuple 2011-05-02 23:33:23.000000000 -0700
+@@ -77,7 +77,7 @@
+ _Head& _M_head() { return *this; }
+ const _Head& _M_head() const { return *this; }
+
+- void _M_swap_impl(_Head&&) { /* no-op */ }
++ void _M_swap_impl(_Head&) { /* no-op */ }
+ };
+
+ template<std::size_t _Idx, typename _Head>
+@@ -97,7 +97,7 @@
+ const _Head& _M_head() const { return _M_head_impl; }
+
+ void
+- _M_swap_impl(_Head&& __h)
++ _M_swap_impl(_Head& __h)
+ {
+ using std::swap;
+ swap(__h, _M_head_impl);
+@@ -125,7 +125,7 @@
+ struct _Tuple_impl<_Idx>
+ {
+ protected:
+- void _M_swap_impl(_Tuple_impl&&) { /* no-op */ }
++ void _M_swap_impl(_Tuple_impl&) { /* no-op */ }
+ };
+
+ /**
+@@ -214,7 +214,7 @@
+
+ protected:
+ void
+- _M_swap_impl(_Tuple_impl&& __in)
++ _M_swap_impl(_Tuple_impl& __in)
+ {
+ _Base::_M_swap_impl(__in._M_head());
+ _Inherited::_M_swap_impl(__in._M_tail());
+@@ -292,7 +292,7 @@
+ }
+
+ void
+- swap(tuple&& __in)
++ swap(tuple& __in)
+ { _Inherited::_M_swap_impl(__in); }
+ };
+
+@@ -301,7 +301,7 @@
+ class tuple<>
+ {
+ public:
+- void swap(tuple&&) { /* no-op */ }
++ void swap(tuple&) { /* no-op */ }
+ };
+
+ /// tuple (2-element), with construction and assignment from a pair.
+@@ -394,7 +394,7 @@
+ }
+
+ void
+- swap(tuple&& __in)
++ swap(tuple& __in)
+ {
+ using std::swap;
+ swap(this->_M_head(), __in._M_head());
OpenPOWER on IntegriCloud