aboutsummaryrefslogtreecommitdiff
path: root/www
diff options
context:
space:
mode:
Diffstat (limited to 'www')
-rw-r--r--www/OpenProjects.html10
-rw-r--r--www/analyzer/annotations.html12
-rw-r--r--www/analyzer/content.css2
-rw-r--r--www/analyzer/latest_checker.html.incl2
-rw-r--r--www/analyzer/menu.css4
-rw-r--r--www/analyzer/menu.html.incl7
-rw-r--r--www/comparison.html3
-rw-r--r--www/content.css2
-rw-r--r--www/cxx_status.html587
-rw-r--r--www/diagnostics.html71
-rw-r--r--www/features.html1
-rw-r--r--www/get_started.html107
-rw-r--r--www/hacking.html104
-rw-r--r--www/menu.html.incl20
14 files changed, 595 insertions, 337 deletions
diff --git a/www/OpenProjects.html b/www/OpenProjects.html
index c0ee9989f2b2..cdf31218bbeb 100644
--- a/www/OpenProjects.html
+++ b/www/OpenProjects.html
@@ -82,12 +82,10 @@ job, but there are lots of little pieces that can be picked off and implemented.
<ul>
<li>Fix bugs: there are a number of XFAIL'd test cases in Clang's repository (particularly in the CXX subdirectory). Pick a test case and fix Clang to make it work!</li>
<li>Write tests: the CXX test subdirectory in Clang's repository has placeholders for tests of every paragraph in the C++ standard. Pick a paragraph, write a few tests, and see if they work! Even if they don't we'd still like the new tests (with XFAIL'd) so that we know what to fix.</li>
- <li>Type-checking for explicit conversions: currently follows C semantics, not C++ semantics.</li>
- <li>Qualified member references: C++ supports qualified member references such as <code>x-&gt;Base::foo</code>, but Clang has no parsing or semantic analysis for them.</li>
- <li>Parsing and AST representations of friend classes and functions</li>
- <li>Explicit calls to destructors and pseudo-destructor expressions (<code>x.~X()</code>).</li>
- <li>AST representation for implicit C++ conversions: implicit conversions that involve non-trivial operations (e.g., invoking a user-defined conversion function, performing a base-to-derived or derived-to-base conversion) need explicit representation in Clang's AST.</li>
- <li>Improved diagnostics for overload resolution failures: after an overload resolution failure, we currently print out the overload resolution candidates. We should also print out the reason that each candidate failed, e.g., "too few arguments", "too many arguments", "cannot initialize parameter with an lvalue of type 'foo'", etc.</li>
+ <li>Parsing and semantic analysis for using declarations in classes</li>
+ <li>Inherited conversion functions</li>
+ <li>Improved diagnostics for overloading failures and ambiguities</li>
+ <li>Improved template error messages, e.g., with more informative backtraces</li>
</ul>
Also, see the <a href="cxx_status.html">C++ status report page</a> to
diff --git a/www/analyzer/annotations.html b/www/analyzer/annotations.html
index e49c327edd28..819886e822cf 100644
--- a/www/analyzer/annotations.html
+++ b/www/analyzer/annotations.html
@@ -152,8 +152,12 @@ use 'cf_returns_retained'.</p>
<span class="command">$ cat test.m</span>
#import &lt;Foundation/Foundation.h&gt;
+#ifndef __has_feature // Optional.
+#define __has_feature(x) 0 // Compatibility with non-clang compilers.
+#endif
+
#ifndef NS_RETURNS_RETAINED
-#if __clang__
+#if __has_feature(attribute_ns_returns_retained)
<span class="code_highlight">#define NS_RETURNS_RETAINED __attribute__((ns_returns_retained))</span>
#else
#define NS_RETURNS_RETAINED
@@ -226,8 +230,12 @@ collection (<tt>-fobjc-gc-only</tt>).</p>
$ cat test.m
#import &lt;Cocoa/Cocoa.h&gt;
+#ifndef __has_feature // Optional.
+#define __has_feature(x) 0 // Compatibility with non-clang compilers.
+#endif
+
#ifndef CF_RETURNS_RETAINED
-#if __clang__
+#if __has_feature(attribute_cf_returns_retained)
<span class="code_highlight">#define CF_RETURNS_RETAINED __attribute__((cf_returns_retained))</span>
#else
#define CF_RETURNS_RETAINED
diff --git a/www/analyzer/content.css b/www/analyzer/content.css
index 01a3af2a6cb6..3f47e3bea7ad 100644
--- a/www/analyzer/content.css
+++ b/www/analyzer/content.css
@@ -1,3 +1,5 @@
+html { margin: 0px; } body { margin: 8px; }
+
html, body {
padding:0px;
font-size:small; font-family:"Lucida Grande", "Lucida Sans Unicode", Arial, Verdana, Helvetica, sans-serif; background-color: #fff; color: #222;
diff --git a/www/analyzer/latest_checker.html.incl b/www/analyzer/latest_checker.html.incl
index 4f030bbc2f8b..fa287b1ef4e2 100644
--- a/www/analyzer/latest_checker.html.incl
+++ b/www/analyzer/latest_checker.html.incl
@@ -1 +1 @@
-<b><a href="http://checker.minormatter.com/checker-0.212.tar.bz2">checker-0.212.tar.bz2</a></b> (built July 2, 2009)
+<b><a href="http://checker.minormatter.com/checker-224.tar.bz2">checker-224.tar.bz2</a></b> (built October 6, 2009)
diff --git a/www/analyzer/menu.css b/www/analyzer/menu.css
index 8249c14197e4..0312f4c8b1f1 100644
--- a/www/analyzer/menu.css
+++ b/www/analyzer/menu.css
@@ -4,12 +4,12 @@
[id=menu] {
position:fixed;
- width:25ex;
+ width:35ex;
}
[id=content] {
/* ***** EDIT THIS VALUE IF CONTENT OVERLAPS MENU ***** */
position:absolute;
- left:29ex;
+ left:39ex;
padding-right:4ex;
}
diff --git a/www/analyzer/menu.html.incl b/www/analyzer/menu.html.incl
index a5e7f31f6275..b7c95f10fb81 100644
--- a/www/analyzer/menu.html.incl
+++ b/www/analyzer/menu.html.incl
@@ -5,6 +5,11 @@
</div>
<div class="submenu">
+ <label>Events</label>
+ <a href="http://llvm.org/devmtg/2009-10">October 2, 2009 - LLVM/Clang Developers' Meeting</a>
+ </div>
+
+ <div class="submenu">
<label>Quick Links</label>
<a href="/index.html">About the Analyzer</a>
<a href="/filing_bugs.html">Filing Bugs</a>
@@ -25,4 +30,6 @@
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev">cfe-dev</a>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits">cfe-commits</a>
</div>
+
+ <center><a href="http://llvm.org"><img src="http://llvm.org/img/LLVM-Logo-Derivative-3.png" style="margin-top:10px"></a></center>
</div>
diff --git a/www/comparison.html b/www/comparison.html
index f86ea7fbbd4f..bba2a65d36e6 100644
--- a/www/comparison.html
+++ b/www/comparison.html
@@ -184,8 +184,7 @@
<ul>
<li>PCC dates from the 1970's and has been dormant for most of that time.
The clang + llvm communities are very active.</li>
- <li>PCC doesn't support C99, Objective-C, and doesn't aim to support
- C++.</li>
+ <li>PCC doesn't support Objective-C or C++ and doesn't aim to</li>
<li>PCC's code generation is very limited compared to LLVM. It produces very
inefficient code and does not support many important targets.</li>
<li>Like Elsa, PCC's does not have an integrated preprocessor, making it
diff --git a/www/content.css b/www/content.css
index ab6983b48491..dca6a3291436 100644
--- a/www/content.css
+++ b/www/content.css
@@ -1,3 +1,5 @@
+html { margin: 0px; } body { margin: 8px; }
+
html, body {
padding:0px;
font-size:small; font-family:"Lucida Grande", "Lucida Sans Unicode", Arial, Verdana, Helvetica, sans-serif; background-color: #fff; color: #222;
diff --git a/www/cxx_status.html b/www/cxx_status.html
index 2af2b3294623..2c1b79eae6a9 100644
--- a/www/cxx_status.html
+++ b/www/cxx_status.html
@@ -24,7 +24,7 @@
<!--*************************************************************************-->
<h1>C++ Support in Clang</h1>
<!--*************************************************************************-->
-<p>Last updated: $Date: 2009-06-27 21:33:58 +0200 (Sat, 27 Jun 2009) $</p>
+<p>Last updated: $Date: 2009-10-13 21:41:44 +0200 (Tue, 13 Oct 2009) $</p>
<p>
This page tracks the status of C++ support in Clang.<br>
@@ -321,8 +321,21 @@ welcome!</p>
<td class="na">N/A</td>
<td></td>
</tr>
-<tr><td>&nbsp;&nbsp;&nbsp;&nbsp;3.3.5 [basic.scope.namespace]</td><td></td><td></td><td></td><td></td><td></td></tr>
-<tr><td>&nbsp;&nbsp;&nbsp;&nbsp;3.3.6 [basic.scope.class]</td><td></td><td></td><td></td><td></td><td></td></tr>
+<tr>
+ <td>&nbsp;&nbsp;&nbsp;&nbsp;3.3.5 [basic.scope.namespace]</td>
+ <td class="na">N/A</td>
+ <td class="na">N/A</td>
+ <td class="complete"></td>
+ <td class="na">N/A</td>
+</tr>
+<tr>
+ <td>&nbsp;&nbsp;&nbsp;&nbsp;3.3.6 [basic.scope.class]</td>
+ <td class="na">N/A</td>
+ <td class="na">N/A</td>
+ <td class="advanced"></td>
+ <td class="na">N/A</td>
+ <td>Does not check that reordering the members of a class maintains semantics.</td>
+</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;&nbsp;3.3.7 [basic.scope.hiding]</td>
<td class="na">N/A</td>
@@ -343,17 +356,17 @@ welcome!</p>
<td>&nbsp;&nbsp;&nbsp;&nbsp;3.4.1 [basic.lookup.unqual]</td>
<td class="na">N/A</td>
<td class="na">N/A</td>
- <td class="medium"></td>
+ <td class="advanced"></td>
<td class="na">N/A</td>
- <td>Many cases beyond simple global and function-local lookup don't work</td>
+ <td></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;&nbsp;3.4.2 [basic.lookup.argdep]</td>
<td class="na">N/A</td>
- <td class="advanced" align="center"></td>
- <td class="advanced" align="center"></td>
<td class="na">N/A</td>
- <td>Missing support for templates, friend functions.</td>
+ <td class="complete"></td>
+ <td class="na">N/A</td>
+ <td></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;&nbsp;3.4.3 [basic.lookup.qual]</td>
@@ -380,8 +393,21 @@ welcome!</p>
<td></td>
</tr>
<tr><td>&nbsp;&nbsp;&nbsp;&nbsp;3.4.4 [basic.lookup.elab]</td><td></td><td></td><td></td><td></td><td></td></tr>
-<tr><td>&nbsp;&nbsp;&nbsp;&nbsp;3.4.5 [basic.lookup.classref]</td><td></td><td></td><td></td><td></td><td></td></tr>
-<tr><td>&nbsp;&nbsp;&nbsp;&nbsp;3.4.6 [basic.lookup.udir]</td><td></td><td></td><td></td><td></td><td></td></tr>
+<tr>
+ <td>&nbsp;&nbsp;&nbsp;&nbsp;3.4.5 [basic.lookup.classref]</td>
+ <td class="na">N/A</td>
+ <td class="na">N/A</td>
+ <td class="advanced"></td>
+ <td class="na">N/A</td>
+ <td>Missing ambiguity/consistency checks for paragraphs 3 (~type-name) and 7 (conversion-type-id)</td>
+</tr>
+<tr>
+ <td>&nbsp;&nbsp;&nbsp;&nbsp;3.4.6 [basic.lookup.udir]</td>
+ <td class="na">N/A</td>
+ <td class="na">N/A</td>
+ <td class="medium"></td>
+ <td class="na">N/A</td>
+</tr>
<tr><td>&nbsp;&nbsp;3.5 [basic.link]</td><td></td><td></td><td></td><td></td><td></td></tr>
<tr><td>&nbsp;&nbsp;3.6 [basic.start]</td><td></td><td></td><td></td><td></td><td></td></tr>
<tr><td>&nbsp;&nbsp;&nbsp;&nbsp;3.6.1 [basic.start.main]</td><td></td><td></td><td></td><td></td><td></td></tr>
@@ -508,17 +534,18 @@ welcome!</p>
<td>5 [expr]</td>
<td class="na">N/A</td>
<td class="na">N/A</td>
- <td class="complete" align="center"></td>
- <td></td>
+ <td class="complete" align="center">&#x2713;</td>
+ <td class="na">N/A</td>
<td></td>
</tr>
<tr>
<td>&nbsp;&nbsp;5.1 [expr.prim]</td>
- <td class="medium" align="center"></td>
- <td class="medium" align="center"></td>
- <td class="medium" align="center"></td>
+ <td class="advanced" align="center"></td>
+ <td class="advanced" align="center"></td>
+ <td class="advanced" align="center"></td>
<td></td>
- <td>template-ids are not supported, name lookup is not complete</td>
+ <td>cannot parse operator-function-ids that have explicit template argument
+ lists</td>
</tr>
<tr><td>&nbsp;&nbsp;5.2 [expr.post]</td><td></td><td></td><td></td><td></td><td></td></tr>
<tr>
@@ -540,26 +567,26 @@ welcome!</p>
<tr>
<td>&nbsp;&nbsp;&nbsp;&nbsp;5.2.3 [expr.type.conv]</td>
<td class="complete" align="center"></td>
- <td class="complete" align="center"></td>
- <td class="basic"></td>
+ <td class="advanced" align="center"></td>
+ <td class="advanced"></td>
+ <td></td>
<td></td>
- <td>Only between non-class types</td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;&nbsp;5.2.4 [expr.pseudo]</td>
- <td class="broken"></td>
- <td class="broken"></td>
- <td class="broken"></td>
- <td></td>
+ <td class="complete"></td>
+ <td class="complete"></td>
+ <td class="complete"></td>
+ <td class="complete"></td>
<td></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;&nbsp;5.2.5 [expr.ref]</td>
<td class="complete" align="center"></td>
- <td class="medium"></td>
- <td class="medium"></td>
+ <td class="complete"></td>
+ <td class="complete"></td>
+ <td></td>
<td></td>
- <td>Cannot look up operator names, qualified-ids, or names in base classes</td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;&nbsp;5.2.6 [expr.post.incr]</td>
@@ -588,10 +615,10 @@ welcome!</p>
<tr>
<td>&nbsp;&nbsp;&nbsp;&nbsp;5.2.9 [expr.static.cast]</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></td>
- <td>Some custom conversions don't work.</td>
+ <td></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;&nbsp;5.2.10 [expr.reinterpret.cast]</td>
@@ -694,10 +721,10 @@ welcome!</p>
<tr>
<td>&nbsp;&nbsp;5.4 [expr.cast]</td>
<td class="complete" align="center"></td>
- <td class="complete" align="center"></td>
- <td class="medium"></td>
+ <td class="advanced" align="center"></td>
+ <td class="advanced"></td>
+ <td></td>
<td></td>
- <td>Too lenient, and may not always have correct semantics</td>
</tr>
<tr>
<td>&nbsp;&nbsp;5.5 [expr.mptr.oper]</td>
@@ -953,7 +980,7 @@ welcome!</p>
<td class="complete" align="center"></td>
<td class="advanced" align="center"></td>
<td></td>
- <td>Skipping of initialization is not flagged. Existence and accessibility of destructors is not tested for.</td>
+ <td>Existence and accessibility of destructors is not tested for.</td>
</tr>
<tr>
<td>&nbsp;&nbsp;6.8 [stmt.ambig]</td>
@@ -970,7 +997,7 @@ welcome!</p>
<td class="advanced" align="center"></td>
<td class="advanced" align="center"></td>
<td></td>
- <td>No support for friend declarations.</td>
+ <td></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;&nbsp;7.1.1 [dcl.stc]</td>
@@ -998,9 +1025,9 @@ welcome!</p>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;&nbsp;7.1.4 [dcl.friend]</td>
- <td class="broken"></td>
- <td class="broken"></td>
- <td class="broken"></td>
+ <td class="medium"></td>
+ <td class="medium"></td>
+ <td class="medium"></td>
<td></td>
<td></td>
</tr>
@@ -1022,19 +1049,19 @@ welcome!</p>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;7.1.5.2 [dcl.type.simple]</td>
- <td class="medium"></td>
<td class="advanced"></td>
<td class="advanced"></td>
+ <td class="advanced"></td>
+ <td></td>
<td></td>
- <td>Cannot parse template IDs.</td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;7.1.5.3 [dcl.type.elab]</td>
- <td class="medium"></td>
+ <td class="advanced"></td>
<td class="advanced"></td>
<td class="advanced"></td>
<td></td>
- <td>Cannot parse template IDs.</td>
+ <td></td>
</tr>
<tr>
<td>&nbsp;&nbsp;7.2 [dcl.enum]</td>
@@ -1054,11 +1081,11 @@ welcome!</p>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;&nbsp;7.3.1 [namespace.def]</td>
- <td class="medium"></td>
- <td class="medium"></td>
- <td class="medium"></td>
+ <td class="advanced"></td>
+ <td class="advanced"></td>
+ <td class="advanced"></td>
+ <td></td>
<td></td>
- <td>Cannot parse namespace aliases.</td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;7.3.1.1 [namespace.unnamed]</td>
@@ -1074,7 +1101,7 @@ welcome!</p>
<td class="complete" align="center"></td>
<td class="advanced"></td>
<td></td>
- <td>The friend stuff is not supported.</td>
+ <td></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;&nbsp;7.3.2 [namespace.alias]</td>
@@ -1086,9 +1113,9 @@ welcome!</p>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;&nbsp;7.3.3 [namespace.udecl]</td>
- <td class="broken" align="center"></td>
- <td class="broken" align="center"></td>
- <td class="broken" align="center"></td>
+ <td class="medium" align="center"></td>
+ <td class="medium" align="center"></td>
+ <td class="basic" align="center"></td>
<td></td>
<td></td>
</tr>
@@ -1141,7 +1168,7 @@ welcome!</p>
<td class="complete" align="center"></td>
<td class="advanced" align="center"></td>
<td class="na">N/A</td>
- <td>Qualified declarator-ids are not fully implemented.</td>
+ <td></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;&nbsp;8.3.1 [dcl.ptr]</td>
@@ -1189,21 +1216,21 @@ welcome!</p>
<td class="advanced" align="center"></td>
<td class="advanced" align="center"></td>
<td class="na">N/A</td>
- <td>Missing default arguments for templates.</td>
+ <td>Partial support for default arguments of templates.</td>
</tr>
<tr>
<td>&nbsp;&nbsp;8.4 [dcl.fct.def]</td>
<td class="complete" align="center"></td>
<td class="complete" align="center"></td>
+ <td class="complete" align="center"></td>
<td class="medium" align="center"></td>
- <td class="basic" align="center"></td>
- <td>ctor-initializers are not fully type-checked.</td>
+ <td></td>
</tr>
<tr>
<td>&nbsp;&nbsp;8.5 [dcl.init]</td>
<td class="advanced" align="center"></td>
<td class="advanced" align="center"></td>
- <td class="medium" align="center"></td>
+ <td class="advanced" align="center"></td>
<td class="medium" align="center"></td>
<td></td>
</tr>
@@ -1213,7 +1240,7 @@ welcome!</p>
<td class="advanced" align="center"></td>
<td class="medium" align="center"></td>
<td class="basic" align="center"></td>
- <td>No CodeGen for initializing non-aggregates or dynamic initialization.</td>
+ <td>No CodeGen for dynamic initialization.</td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;&nbsp;8.5.2[dcl.init.string]</td>
@@ -1253,7 +1280,7 @@ welcome!</p>
<td class="medium" align="center"></td>
<td class="medium" align="center"></td>
<td class="basic" align="center"></td>
- <td>No parser support for using declarations or member templates.</td>
+ <td>Basic parser support for using declarations.</td>
</tr>
<tr>
<td>&nbsp;&nbsp;9.3 [class.mfct]</td>
@@ -1266,16 +1293,16 @@ welcome!</p>
<tr>
<td>&nbsp;&nbsp;&nbsp;&nbsp;9.3.1 [class.mfct.non-static]</td>
<td class="complete" align="center"></td>
- <td class="medium" align="center"></td>
- <td class="medium" align="center"></td>
+ <td class="advanced" align="center"></td>
+ <td class="advanced" align="center"></td>
<td class="basic" align="center"></td>
<td></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;&nbsp;9.3.2 [class.this]</td>
<td class="complete" align="center"></td>
- <td class="medium" align="center"></td>
- <td class="medium" align="center"></td>
+ <td class="advanced" align="center"></td>
+ <td class="advanced" align="center"></td>
<td class="basic"></td>
<td></td>
</tr>
@@ -1283,7 +1310,7 @@ welcome!</p>
<td>&nbsp;&nbsp;9.4 [class.static]</td>
<td class="complete" align="center"></td>
<td class="complete" align="center"></td>
- <td class="medium" align="center"></td>
+ <td class="advanced" align="center"></td>
<td class="basic"></td>
<td></td>
</tr>
@@ -1291,7 +1318,7 @@ welcome!</p>
<td>&nbsp;&nbsp;&nbsp;&nbsp;9.4.1 [class.static.mfct]</td>
<td class="complete" align="center"></td>
<td class="complete" align="center"></td>
- <td class="medium" align="center"></td>
+ <td class="advanced" align="center"></td>
<td class="basic"></td>
<td></td>
</tr>
@@ -1299,7 +1326,7 @@ welcome!</p>
<td>&nbsp;&nbsp;&nbsp;&nbsp;9.4.2 [class.static.data]</td>
<td class="complete" align="center"></td>
<td class="complete" align="center"></td>
- <td class="medium" align="center"></td>
+ <td class="advanced" align="center"></td>
<td class="basic"></td>
<td></td>
</tr>
@@ -1307,9 +1334,9 @@ welcome!</p>
<td>&nbsp;&nbsp;9.5 [class.union]</td>
<td class="complete" align="center"></td>
<td class="complete" align="center"></td>
- <td class="medium"></td>
- <td class="medium"></td>
- <td>Semantic analysis does not yet check all of the requirements placed on the members of unions.</td>
+ <td class="complete"></td>
+ <td class="complete"></td>
+ <td></td>
</tr>
<tr>
<td>&nbsp;&nbsp;9.6 [class.bit]</td>
@@ -1347,7 +1374,7 @@ welcome!</p>
<td>10 [class.derived]</td>
<td class="advanced" align="center"></td>
<td class="advanced" align="center"></td>
- <td class="medium" align="center"></td>
+ <td class="advanced" align="center"></td>
<td class="broken" align="center"></td>
<td></td>
</tr>
@@ -1356,8 +1383,8 @@ welcome!</p>
<td class="advanced" align="center"></td>
<td class="advanced" align="center"></td>
<td class="medium" align="center"></td>
- <td class="broken" align="center"></td>
- <td>No layout of base classes</td>
+ <td class="basic" align="center"></td>
+ <td></td>
</tr>
<tr>
<td>&nbsp;&nbsp;10.2 [class.member.lookup]</td>
@@ -1371,9 +1398,9 @@ welcome!</p>
<td>&nbsp;&nbsp;10.3 [class.virtual]</td>
<td class="advanced" align="center"></td>
<td class="medium" align="center"></td>
- <td class="basic" align="center"></td>
- <td class="broken" align="center"></td>
- <td>No semantic analysis for overriding virtual functions or inheriting a virtual function. No layout of classes with virtual functions.</td>
+ <td class="medium" align="center"></td>
+ <td class="basic" align="center"></td>
+ <td>Basic layout of classes with virtual functions.</td>
</tr>
<tr>
<td>&nbsp;&nbsp;10.4 [class.abstract]</td>
@@ -1417,9 +1444,9 @@ welcome!</p>
</tr>
<tr>
<td>&nbsp;&nbsp;11.4 [class.friend]</td>
- <td class="broken" align="center"></td>
- <td class="broken" align="center"></td>
- <td class="broken" align="center"></td>
+ <td class="medium" align="center"></td>
+ <td class="medium" align="center"></td>
+ <td class="medium" align="center"></td>
<td class="na" align="center">N/A</td>
<td></td>
</tr>
@@ -1460,9 +1487,9 @@ welcome!</p>
<td>&nbsp;&nbsp;12.1 [class.ctor]</td>
<td class="advanced" align="center"></td>
<td class="medium" align="center"></td>
- <td class="basic" align="center"></td>
- <td class="basic" align="center"></td>
- <td>Implicitly-declared constructors are never defined.</td>
+ <td class="advanced" align="center"></td>
+ <td class="advanced" align="center"></td>
+ <td>Most of the semantics of constructors are implemented.</td>
</tr>
<tr>
<td>&nbsp;&nbsp;12.2 [class.temporary]</td>
@@ -1476,8 +1503,8 @@ welcome!</p>
<td>&nbsp;&nbsp;12.3 [class.conv]</td>
<td class="advanced" align="center"></td>
<td class="advanced" align="center"></td>
- <td class="medium" align="center"></td>
- <td class="broken" align="center"></td>
+ <td class="advanced" align="center"></td>
+ <td class="advanced" align="center"></td>
<td></td>
</tr>
<tr>
@@ -1485,7 +1512,7 @@ welcome!</p>
<td class="complete" align="center"></td>
<td class="advanced" align="center"></td>
<td class="advanced" align="center"></td>
- <td class="broken" align="center"></td>
+ <td class="advanced" align="center"></td>
<td></td>
</tr>
<tr>
@@ -1493,16 +1520,15 @@ welcome!</p>
<td class="complete" align="center"></td>
<td class="advanced" align="center"></td>
<td class="advanced" align="center"></td>
- <td class="broken" align="center"></td>
- <td>No support for inheritance of conversion functions.</td>
+ <td class="advanced" align="center"></td>
</tr>
<tr>
<td>&nbsp;&nbsp;12.4 [class.dtor]</td>
<td class="advanced" align="center"></td>
<td class="medium" align="center"></td>
- <td class="basic" align="center"></td>
- <td class="broken" align="center"></td>
- <td>Most of the semantics of destructors are unimplemented.</td>
+ <td class="medium" align="center"></td>
+ <td class="medium" align="center"></td>
+ <td>Most of the semantics of destructors are implemented.</td>
</tr>
<tr><td>&nbsp;&nbsp;12.5 [class.free]</td><td></td><td></td><td></td><td></td><td></td></tr>
<tr><td>&nbsp;&nbsp;12.6 [class.init]</td><td></td><td></td><td></td><td></td><td></td></tr>
@@ -1511,205 +1537,202 @@ welcome!</p>
<td>&nbsp;&nbsp;&nbsp;&nbsp;12.6.2 [class.base.init]</td>
<td class="advanced" align="center"></td>
<td class="medium" align="center"></td>
- <td class="basic" align="center"></td>
- <td class="broken" align="center"></td>
- <td>No actual direct initialization; implicit initialization not checked.</td>
+ <td class="advanced" align="center"></td>
+ <td class="advanced" align="center"></td>
+ <td>Most of the semantics of base initializations are implemented.</td>
</tr>
<tr><td>&nbsp;&nbsp;12.7 [class.cdtor]</td><td></td><td></td><td></td><td></td><td></td></tr>
<tr>
<td>&nbsp;&nbsp;12.8 [class.copy]</td>
<td class="advanced" align="center"></td>
<td class="advanced" align="center"></td>
- <td class="medium" align="center"></td>
- <td class="broken" align="center"></td>
- <td>Copy assignment operators are mostly ignored by semantic analysis.</td>
+ <td class="advanced" align="center"></td>
+ <td class="advanced" align="center"></td>
+ <td>Most of the semantics of copy constructors are implemented.</td>
</tr>
<tr><td>13 [over]</td><td></td><td></td><td></td><td></td><td></td></tr>
<tr>
<td>&nbsp;&nbsp;13.1 [over.load]</td>
- <td class="complete" align="center"></td>
- <td class="basic" align="center"></td>
- <td class="basic" align="center"></td>
- <td class="broken" align="center"></td>
- <td>Missing name mangling.</td>
+ <td class="na" align="center">N/A</td>
+ <td class="advanced" align="center"></td>
+ <td class="advanced" align="center"></td>
+ <td class="medium" align="center"></td>
+ <td></td>
</tr>
<tr>
<td>&nbsp;&nbsp;13.2 [over.dcl]</td>
- <td class="complete" align="center"></td>
- <td class="basic" align="center"></td>
- <td class="basic" align="center"></td>
- <td class="broken" align="center"></td>
+ <td class="na" align="center">N/A</td>
+ <td class="advanced" align="center"></td>
+ <td class="advanced" align="center"></td>
+ <td class="na" align="center">N/A</td>
<td></td>
</tr>
<tr>
<td>&nbsp;&nbsp;13.3 [over.match]</td>
- <td class="complete" align="center"></td>
- <td class="basic" align="center"></td>
- <td class="basic" align="center"></td>
- <td class="broken" align="center"></td>
+ <td class="na" align="center">N/A</td>
+ <td class="advanced" align="center"></td>
+ <td class="advanced" align="center"></td>
+ <td class="na" align="center">N/A</td>
<td></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;&nbsp;13.3.1 [over.match.funcs]</td>
- <td class="complete" align="center"></td>
- <td class="basic" align="center"></td>
- <td class="basic" align="center"></td>
- <td class="broken" align="center"></td>
+ <td class="na" align="center">N/A</td>
+ <td class="advanced" align="center"></td>
+ <td class="advanced" align="center"></td>
+ <td class="na" align="center">N/A</td>
<td></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;13.3.1.1 [over.match.call]</td>
- <td class="complete" align="center"></td>
- <td class="basic" align="center"></td>
- <td class="basic" align="center"></td>
- <td class="broken" align="center"></td>
+ <td class="na" align="center">N/A</td>
+ <td class="advanced" align="center"></td>
+ <td class="advanced" align="center"></td>
+ <td class="na" align="center">N/A</td>
<td></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;13.3.1.1.1 [over.call.func]</td>
- <td class="complete" align="center"></td>
- <td class="basic" align="center"></td>
- <td class="basic" align="center"></td>
- <td class="broken" align="center"></td>
+ <td class="na" align="center">N/A</td>
+ <td class="advanced" align="center"></td>
+ <td class="advanced" align="center"></td>
+ <td class="na" align="center">N/A</td>
<td></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;13.3.1.1.2 [over.call.object]</td>
- <td class="complete" align="center"></td>
- <td class="medium" align="center"></td>
+ <td class="na" align="center">N/A</td>
<td class="advanced" align="center"></td>
- <td class="broken" align="center"></td>
- <td>Missing AST representation for the implicit conversion to a function reference/pointer</td>
+ <td class="advanced" align="center"></td>
+ <td class="na" align="center">N/A</td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;13.3.1.2 [over.match.oper]</td>
- <td class="complete" align="center"></td>
+ <td class="na" align="center">N/A</td>
<td class="advanced" align="center"></td>
<td class="advanced" align="center"></td>
- <td class="broken" align="center"></td>
+ <td class="na" align="center">N/A</td>
<td></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;13.3.1.3 [over.match.ctor]</td>
- <td class="complete" align="center"></td>
- <td class="basic" align="center"></td>
- <td class="basic" align="center"></td>
- <td class="broken" align="center"></td>
+ <td class="na" align="center">N/A</td>
+ <td class="advanced" align="center"></td>
+ <td class="advanced" align="center"></td>
+ <td class="na" align="center">N/A</td>
<td></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;13.3.1.4 [over.match.copy]</td>
- <td class="complete" align="center"></td>
- <td class="basic" align="center"></td>
- <td class="basic" align="center"></td>
- <td class="broken" align="center"></td>
+ <td class="na" align="center">N/A</td>
+ <td class="advanced" align="center"></td>
+ <td class="advanced" align="center"></td>
+ <td class="na" align="center">N/A</td>
<td></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;13.3.1.5 [over.match.conv]</td>
- <td class="complete" align="center"></td>
- <td class="broken" align="center"></td>
- <td class="broken" align="center"></td>
- <td class="broken" align="center"></td>
+ <td class="na" align="center">N/A</td>
+ <td class="advanced" align="center"></td>
+ <td class="advanced" align="center"></td>
+ <td class="na" align="center">N/A</td>
<td></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;13.3.1.6 [over.match.ref]</td>
- <td class="complete" align="center"></td>
- <td class="basic" align="center"></td>
- <td class="basic" align="center"></td>
- <td class="broken" align="center"></td>
+ <td class="na" align="center">N/A</td>
+ <td class="advanced" align="center"></td>
+ <td class="advanced" align="center"></td>
+ <td class="na" align="center">N/A</td>
<td></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;&nbsp;13.3.2 [over.match.viable]</td>
- <td class="complete" align="center"></td>
- <td class="medium" align="center"></td>
- <td class="medium" align="center"></td>
- <td class="broken" align="center"></td>
+ <td class="na" align="center">N/A</td>
+ <td class="advanced" align="center"></td>
+ <td class="advanced" align="center"></td>
+ <td class="na" align="center">N/A</td>
<td></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;&nbsp;13.3.3 [over.match.best]</td>
- <td class="complete" align="center"></td>
- <td class="basic" align="center"></td>
- <td class="basic" align="center"></td>
- <td class="broken" align="center"></td>
- <td></td>
+ <td class="na" align="center">N/A</td>
+ <td class="advanced" align="center"></td>
+ <td class="medium" align="center"></td>
+ <td class="na" align="center">N/A</td>
+ <td>Missing support for member pointers</td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;13.3.3.1 [over.best.ics]</td>
- <td class="complete" align="center"></td>
- <td class="medium" align="center"></td>
- <td class="medium" align="center"></td>
- <td class="broken" align="center"></td>
+ <td class="na" align="center">N/A</td>
+ <td class="advanced" align="center"></td>
+ <td class="advanced" align="center"></td>
+ <td class="na" align="center">N/A</td>
<td></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;13.3.3.1.1 [over.ics.scs]</td>
- <td class="complete" align="center"></td>
- <td class="medium" align="center"></td>
- <td class="medium" align="center"></td>
- <td class="broken" align="center"></td>
+ <td class="na" align="center">N/A</td>
+ <td class="advanced" align="center"></td>
+ <td class="advanced" align="center"></td>
+ <td class="na" align="center">N/A</td>
<td></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;13.3.3.1.2 [over.ics.user]</td>
- <td class="complete" align="center"></td>
- <td class="basic" align="center"></td>
- <td class="basic" align="center"></td>
- <td class="broken" align="center"></td>
+ <td class="na" align="center">N/A</td>
+ <td class="advanced" align="center"></td>
+ <td class="advanced" align="center"></td>
+ <td class="na" align="center">N/A</td>
<td></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;13.3.3.1.3 [over.ics.ellipsis]</td>
- <td class="complete" align="center"></td>
- <td class="medium" align="center"></td>
- <td class="medium" align="center"></td>
- <td class="broken" align="center"></td>
+ <td class="na" align="center">N/A</td>
+ <td class="advanced" align="center"></td>
+ <td class="advanced" align="center"></td>
+ <td class="na" align="center">N/A</td>
<td></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;13.3.3.1.4 [over.ics.ref]</td>
- <td class="complete" align="center"></td>
- <td class="medium" align="center"></td>
- <td class="medium" align="center"></td>
- <td class="broken" align="center"></td>
+ <td class="na" align="center">N/A</td>
+ <td class="advanced" align="center"></td>
+ <td class="advanced" align="center"></td>
+ <td class="na" align="center">N/A</td>
<td></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;13.3.3.2 [over.ics.rank]</td>
- <td class="complete" align="center"></td>
- <td class="medium" align="center"></td>
- <td class="medium" align="center"></td>
- <td class="broken" align="center"></td>
+ <td class="na" align="center">N/A</td>
+ <td class="advanced" align="center"></td>
+ <td class="advanced" align="center"></td>
+ <td class="na" align="center">N/A</td>
<td></td>
</tr>
<tr>
<td>&nbsp;&nbsp;13.4 [over.over]</td>
- <td class="advanced" align="center"></td>
- <td class="medium" align="center"></td>
- <td class="basic" align="center"></td>
- <td class="broken" align="center"></td>
- <td>Error messages need some work. Without templates or using
- declarations, we don't have any ambiguities, so the semantic
- analysis is incomplete.</td>
+ <td class="na" align="center">N/A</td>
+ <td class="advanced" align="center"></td>
+ <td class="advanced" align="center"></td>
+ <td class="na" align="center">N/A</td>
+ <td></td>
</tr>
<tr>
<td>&nbsp;&nbsp;13.5 [over.oper]</td>
<td class="advanced" align="center"></td>
<td class="advanced" align="center"></td>
- <td class="medium" align="center"></td>
- <td class="broken" align="center"></td>
- <td>Some overloaded operators can only be called with function syntax, e.g., <code>operator[](x)</code>.</td>
+ <td class="advanced" align="center"></td>
+ <td class="na" align="center">N/A</td>
+ <td></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;&nbsp;13.5.1 [over.unary]</td>
<td class="na" align="center">N/A</td>
<td class="advanced" align="center"></td>
<td class="advanced" align="center"></td>
- <td class="broken" align="center"></td>
+ <td class="na" align="center">N/A</td>
<td></td>
</tr>
<tr>
@@ -1717,7 +1740,7 @@ welcome!</p>
<td class="na" align="center">N/A</td>
<td class="advanced" align="center"></td>
<td class="advanced" align="center"></td>
- <td class="broken" align="center"></td>
+ <td class="na" align="center">N/A</td>
<td></td>
</tr>
<tr>
@@ -1725,7 +1748,7 @@ welcome!</p>
<td class="na" align="center">N/A</td>
<td class="advanced" align="center"></td>
<td class="advanced" align="center"></td>
- <td class="broken" align="center"></td>
+ <td class="na" align="center">N/A</td>
<td></td>
</tr>
<tr>
@@ -1733,7 +1756,7 @@ welcome!</p>
<td class="na" align="center">N/A</td>
<td class="advanced" align="center"></td>
<td class="advanced" align="center"></td>
- <td class="broken" align="center"></td>
+ <td class="na" align="center">N/A</td>
<td></td>
</tr>
<tr>
@@ -1741,7 +1764,7 @@ welcome!</p>
<td class="na" align="center">N/A</td>
<td class="advanced" align="center"></td>
<td class="advanced" align="center"></td>
- <td class="broken" align="center"></td>
+ <td class="na" align="center">N/A</td>
<td></td>
</tr>
<tr>
@@ -1749,7 +1772,7 @@ welcome!</p>
<td class="na" align="center">N/A</td>
<td class="advanced" align="center"></td>
<td class="advanced" align="center"></td>
- <td class="broken" align="center"></td>
+ <td class="na" align="center">N/A</td>
<td></td>
</tr>
<tr>
@@ -1757,7 +1780,7 @@ welcome!</p>
<td class="na" align="center">N/A</td>
<td class="advanced" align="center"></td>
<td class="advanced" align="center"></td>
- <td class="broken" align="center"></td>
+ <td class="na" align="center">N/A</td>
<td></td>
</tr>
<tr>
@@ -1765,15 +1788,15 @@ welcome!</p>
<td class="na" align="center">N/A</td>
<td class="advanced" align="center"></td>
<td class="medium" align="center"></td>
- <td class="broken" align="center"></td>
- <td>Missing pointer-to-member versions (p11, p16) and support for
+ <td class="na" align="center">N/A</td>
+ <td>Missing support for the ->* operator (p11, p16) and support for
the ternary operator (p24, p25).</td>
</tr>
<tr>
<td>14 [temp]</td>
<td class="basic" align="center">N/A</td>
<td class="basic" align="center"></td>
- <td class="broken" align="center"></td>
+ <td class="basic" align="center"></td>
<td class="broken" align="center"></td>
<td></td>
</tr>
@@ -1787,19 +1810,19 @@ welcome!</p>
</tr>
<tr>
<td>&nbsp;&nbsp;14.2 [temp.names]</td>
- <td class="medium" align="center"></td>
- <td class="basic" align="center"></td>
- <td class="basic" align="center"></td>
+ <td class="complete" align="center"></td>
+ <td class="complete" align="center"></td>
+ <td class="complete" align="center"></td>
<td class="na" align="center">N/A</td>
- <td>Cannot name function template specializations</td>
+ <td></td>
</tr>
<tr>
<td>&nbsp;&nbsp;14.3 [temp.arg]</td>
<td class="complete" align="center"></td>
- <td class="medium" align="center"></td>
- <td class="basic" align="center"></td>
+ <td class="complete" align="center"></td>
+ <td class="advanced" align="center"></td>
<td class="na" align="center">N/A</td>
- <td>Cannot name function template specializations</td>
+ <td></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;&nbsp;14.3.1 [temp.arg.type]</td>
@@ -1838,48 +1861,48 @@ welcome!</p>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;&nbsp;14.5.1 [temp.class]</td>
- <td class="medium" align="center"></td>
+ <td class="advanced" align="center"></td>
+ <td class="advanced" align="center"></td>
+ <td class="advanced" align="center"></td>
<td class="medium" align="center"></td>
- <td class="basic" align="center"></td>
- <td class="broken" align="center"></td>
- <td>No out-of-line definitions of the members of a template.</td>
+ <td></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;14.5.1.1 [temp.mem.func]</td>
- <td class="medium" align="center"></td>
+ <td class="advanced" align="center"></td>
+ <td class="advanced" align="center"></td>
+ <td class="advanced" align="center"></td>
<td class="medium" align="center"></td>
- <td class="basic" align="center"></td>
- <td class="broken" align="center"></td>
- <td>No out-of-line definitions of the member functions of a class template.</td>
+ <td></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;14.5.1.2 [temp.mem.class]</td>
- <td class="medium" align="center"></td>
+ <td class="advanced" align="center"></td>
+ <td class="advanced" align="center"></td>
+ <td class="advanced" align="center"></td>
<td class="medium" align="center"></td>
- <td class="basic" align="center"></td>
- <td class="broken" align="center"></td>
- <td>No out-of-line definitions of the member classes of a class template.</td>
+ <td></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;14.5.1.3 [temp.static]</td>
- <td class="medium" align="center"></td>
+ <td class="advanced" align="center"></td>
+ <td class="advanced" align="center"></td>
+ <td class="advanced" align="center"></td>
<td class="medium" align="center"></td>
- <td class="basic" align="center"></td>
- <td class="broken" align="center"></td>
- <td>No out-of-line definitions of the static data members of a class template.</td>
+ <td></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;&nbsp;14.5.2 [temp.mem]</td>
- <td class="broken" align="center"></td>
- <td class="broken" align="center"></td>
- <td class="broken" align="center"></td>
- <td class="broken" align="center"></td>
+ <td class="advanced" align="center"></td>
+ <td class="medium" align="center"></td>
+ <td class="medium" align="center"></td>
+ <td class="na" align="center"></td>
<td></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;&nbsp;14.5.3 [temp.friend]</td>
- <td class="broken" align="center"></td>
- <td class="broken" align="center"></td>
+ <td class="medium" align="center"></td>
+ <td class="medium" align="center"></td>
<td class="broken" align="center"></td>
<td class="na" align="center">N/A</td>
<td></td>
@@ -1902,49 +1925,49 @@ welcome!</p>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;14.5.4.2 [temp.class.order]</td>
- <td class="broken" align="center"></td>
- <td class="broken" align="center"></td>
- <td class="broken" align="center"></td>
+ <td class="na" align="center"></td>
+ <td class="advanced" align="center"></td>
+ <td class="advanced" align="center"></td>
<td class="na" align="center">N/A</td>
<td></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;14.5.5.3 [temp.class.spec.mfunc]</td>
- <td class="broken" align="center"></td>
- <td class="broken" align="center"></td>
- <td class="broken" align="center"></td>
+ <td class="advanced" align="center"></td>
+ <td class="advanced" align="center"></td>
+ <td class="advanced" align="center"></td>
<td class="na" align="center">N/A</td>
<td></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;&nbsp;14.5.5 [temp.fct]</td>
- <td class="medium" align="center"></td>
- <td class="medium" align="center"></td>
+ <td class="advanced" align="center"></td>
+ <td class="advanced" align="center"></td>
+ <td class="advanced" align="center"></td>
<td class="medium" align="center"></td>
- <td class="broken" align="center"></td>
<td></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;14.5.5.1 [temp.over.link]</td>
<td class="na" align="center"></td>
<td class="complete" align="center"></td>
- <td class="medium" align="center"></td>
+ <td class="advanced" align="center"></td>
<td class="na" align="center">N/A</td>
<td></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;14.5.5.2 [temp.func.order]</td>
- <td class="broken" align="center"></td>
- <td class="broken" align="center"></td>
- <td class="broken" align="center"></td>
+ <td class="na" align="center"></td>
+ <td class="advanced" align="center"></td>
+ <td class="advanced" align="center"></td>
<td class="na" align="center">N/A</td>
<td></td>
</tr>
<tr>
<td>&nbsp;&nbsp;14.6 [temp.res]</td>
- <td class="basic" align="center"></td>
- <td class="basic" align="center"></td>
- <td class="basic" align="center"></td>
+ <td class="medium" align="center"></td>
+ <td class="medium" align="center"></td>
+ <td class="medium" align="center"></td>
<td class="na" align="center"></td>
<td></td>
</tr>
@@ -2007,8 +2030,8 @@ welcome!</p>
<tr>
<td>&nbsp;&nbsp;&nbsp;&nbsp;14.6.4 [temp.dep.res]</td>
<td class="na" align="center">N/A</td>
- <td class="basic" align="center"></td>
- <td class="basic" align="center"></td>
+ <td class="medium" align="center"></td>
+ <td class="medium" align="center"></td>
<td class="na" align="center"></td>
<td></td>
</tr>
@@ -2031,105 +2054,105 @@ welcome!</p>
<tr>
<td>&nbsp;&nbsp;&nbsp;&nbsp;14.6.5 [temp.inject]</td>
<td class="na" align="center">N/A</td>
- <td class="broken" align="center"></td>
- <td class="broken" align="center"></td>
+ <td class="basic" align="center"></td>
+ <td class="basic" align="center"></td>
<td class="na" align="center"></td>
<td></td>
</tr>
<tr>
<td>&nbsp;&nbsp;14.7 [temp.spec]</td>
- <td class="basic" align="center"></td>
- <td class="basic" align="center"></td>
- <td class="basic" align="center"></td>
+ <td class="medium" align="center"></td>
+ <td class="medium" align="center"></td>
+ <td class="medium" align="center"></td>
<td class="broken" align="center"></td>
- <td>Function templates cannot be instantiated</td>
+ <td></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;&nbsp;14.7.1 [temp.inst]</td>
<td class="na" align="center">N/A</td>
+ <td class="na" align="center"></td>
+ <td class="medium" align="center"></td>
<td class="basic" align="center"></td>
- <td class="basic" align="center"></td>
- <td class="broken" align="center"></td>
- <td>Function templates cannot be instantiated</td>
+ <td></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;&nbsp;14.7.2 [temp.explicit]</td>
- <td class="basic" align="center"></td>
- <td class="basic" align="center"></td>
- <td class="basic" align="center"></td>
+ <td class="advanced" align="center"></td>
+ <td class="medium" align="center"></td>
+ <td class="medium" align="center"></td>
<td class="broken" align="center"></td>
- <td>Function templates cannot be instantiated</td>
+ <td></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;&nbsp;14.7.3 [temp.expl.spec]</td>
- <td class="basic" align="center"></td>
- <td class="basic" align="center"></td>
- <td class="basic" align="center"></td>
- <td class="broken" align="center"></td>
- <td>Only class template specialization is available</td>
+ <td class="complete" align="center">&#x2713;</td>
+ <td class="advanced" align="center"></td>
+ <td class="complete" align="center">&#x2713;</td>
+ <td class="complete" align="center"></td>
+ <td>ASTs do not carry enough information to reproduce source code accurately</td>
</tr>
<tr>
<td>&nbsp;&nbsp;14.8 [temp.fct.spec]</td>
- <td class="broken" align="center"></td>
- <td class="broken" align="center"></td>
- <td class="broken" align="center"></td>
+ <td class="medium" align="center"></td>
+ <td class="medium" align="center"></td>
+ <td class="medium" align="center"></td>
<td class="broken" align="center"></td>
<td></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;&nbsp;14.8.1 [temp.arg.explicit]</td>
- <td class="basic" align="center"></td>
- <td class="basic" align="center"></td>
- <td class="basic" align="center"></td>
- <td class="broken" align="center"></td>
+ <td class="advanced" align="center"></td>
+ <td class="advanced" align="center"></td>
+ <td class="advanced" align="center"></td>
+ <td class="na" align="center"></td>
<td></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;&nbsp;14.8.2 [temp.deduct]</td>
<td class="na" align="center">N/A</td>
<td class="na" align="center">N/A</td>
- <td class="medium" align="center"></td>
+ <td class="advanced" align="center"></td>
<td class="na" align="center">N/A</td>
<td></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;14.8.2.1 [temp.deduct.call]</td>
- <td class="broken" align="center"></td>
+ <td class="na" align="center"></td>
<td class="complete" align="center"></td>
- <td class="basic" align="center"></td>
+ <td class="advanced" align="center"></td>
<td class="na" align="center"></td>
<td></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;14.8.2.2 [temp.deduct.funcaddr]</td>
- <td class="broken" align="center"></td>
- <td class="broken" align="center"></td>
- <td class="broken" align="center"></td>
- <td class="broken" align="center"></td>
+ <td class="na" align="center">N/A</td>
+ <td class="advanced" align="center"></td>
+ <td class="advanced" align="center"></td>
+ <td class="na" align="center">N/A</td>
<td></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;14.8.2.3 [temp.deduct.conv]</td>
- <td class="broken" align="center"></td>
- <td class="broken" align="center"></td>
- <td class="broken" align="center"></td>
- <td class="broken" align="center"></td>
+ <td class="na" align="center"></td>
+ <td class="advanced" align="center"></td>
+ <td class="advanced" align="center"></td>
+ <td class="na" align="center"></td>
<td></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;14.8.2.4 [temp.deduct.type]</td>
<td class="na" align="center">N/A</td>
<td class="complete" align="center"></td>
- <td class="medium" align="center"></td>
+ <td class="advanced" align="center"></td>
<td class="na" align="center">N/A</td>
<td></td>
</tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;&nbsp;14.8.3 [temp.over]</td>
- <td class="broken" align="center"></td>
- <td class="broken" align="center"></td>
- <td class="broken" align="center"></td>
- <td class="broken" align="center"></td>
+ <td class="na" align="center"></td>
+ <td class="advanced" align="center"></td>
+ <td class="advanced" align="center"></td>
+ <td class="na" align="center"></td>
<td></td>
</tr>
<tr>
@@ -2167,9 +2190,9 @@ welcome!</p>
<tr>
<td>&nbsp;&nbsp;15.4 [except.spec]</td>
<td class="complete" align="center"></td>
- <td></td>
- <td></td>
- <td></td>
+ <td class="complete" align="center"></td>
+ <td class="complete" align="center"></td>
+ <td class="broken"></td>
<td></td>
</tr>
<tr>
diff --git a/www/diagnostics.html b/www/diagnostics.html
index 5be4db207409..18f1bc7ff0be 100644
--- a/www/diagnostics.html
+++ b/www/diagnostics.html
@@ -43,7 +43,7 @@ what is wrong in a particular piece of code, an example is:</p>
$ <b>gcc-4.2 -fsyntax-only -Wformat format-strings.c</b>
format-strings.c:91: warning: too few arguments for format
$ <b>clang -fsyntax-only format-strings.c</b>
- format-strings.c:91:13: warning: '.*' specified field precision is missing a matching 'int' argument
+ format-strings.c:91:13: <font color="magenta">warning:</font> '.*' specified field precision is missing a matching 'int' argument
<font color="darkgreen"> printf("%.*d");</font>
<font color="blue"> ^</font>
</pre>
@@ -64,7 +64,7 @@ nonsensical example to illustrate this:</p>
$ <b>gcc-4.2 -fsyntax-only t.c</b>
t.c:7: error: invalid operands to binary + (have 'int' and 'struct A')
$ <b>clang -fsyntax-only t.c</b>
- t.c:7:39: error: invalid operands to binary expression ('int' and 'struct A')
+ t.c:7:39: <font color="red">error:</font> invalid operands to binary expression ('int' and 'struct A')
<font color="darkgreen"> return y + func(y ? ((SomeA.X + 40) + SomeA) / 42 + SomeA.X : SomeA.X);</font>
<font color="blue"> ~~~~~~~~~~~~~~ ^ ~~~~~</font>
</pre>
@@ -89,7 +89,7 @@ one:</p>
$ <b>gcc-4.2 -fsyntax-only t.c</b>
t.c:5: error: invalid type argument of 'unary *'
$ <b>clang -fsyntax-only t.c</b>
- t.c:5:11: error: indirection requires pointer operand ('int' invalid)
+ t.c:5:11: <font color="red">error:</font> indirection requires pointer operand ('int' invalid)
<font color="darkgreen"> int y = *SomeA.X;</font>
<font color="blue"> ^~~~~~~~</font>
</pre>
@@ -112,7 +112,7 @@ example P and Q have type "int*":</p>
$ <b>gcc-4.2 -fsyntax-only t.c</b>
#'exact_div_expr' not supported by pp_c_expression#'t.c:12: error: called object is not a function
$ <b>clang -fsyntax-only t.c</b>
- t.c:12:8: error: called object type 'int' is not a function or function pointer
+ t.c:12:8: <font color="red">error:</font> called object type 'int' is not a function or function pointer
<font color="darkgreen"> (P-Q)();</font>
<font color="blue"> ~~~~~^</font>
</pre>
@@ -134,7 +134,7 @@ a typedef in C:</p>
$ <b>gcc-4.2 -fsyntax-only t.c</b>
t.c:15: error: invalid operands to binary / (have 'float __vector__' and 'const int *')
$ <b>clang -fsyntax-only t.c</b>
- t.c:15:11: error: can't convert between vector values of different size ('__m128' and 'int const *')
+ t.c:15:11: <font color="red">error:</font> can't convert between vector values of different size ('__m128' and 'int const *')
<font color="darkgreen"> myvec[1]/P;</font>
<font color="blue"> ~~~~~~~~^~</font>
</pre>
@@ -148,7 +148,7 @@ is useful for the compiler to expose underlying details of a typedef:</p>
$ <b>gcc-4.2 -fsyntax-only t.c</b>
t.c:13: error: request for member 'x' in something not a structure or union
$ <b>clang -fsyntax-only t.c</b>
- t.c:13:9: error: member reference base type 'pid_t' (aka 'int') is not a structure or union
+ t.c:13:9: <font color="red">error:</font> member reference base type 'pid_t' (aka 'int') is not a structure or union
<font color="darkgreen"> myvar = myvar.x;</font>
<font color="blue"> ~~~~~ ^</font>
</pre>
@@ -182,7 +182,7 @@ void addHTTPService(servers::Server const &server, ::services::WebService const
$ <b>g++-4.2 -fsyntax-only t.cpp</b>
t.cpp:9: error: no match for 'operator+=' in 'server += http'
$ <b>clang -fsyntax-only t.cpp</b>
- t.cpp:9:10: error: invalid operands to binary expression ('servers::Server const' and '::services::WebService const *')
+ t.cpp:9:10: <font color="red">error:</font> invalid operands to binary expression ('servers::Server const' and '::services::WebService const *')
<font color="darkgreen">server += http;</font>
<font color="blue">~~~~~~ ^ ~~~~</font>
</pre>
@@ -193,7 +193,7 @@ void addHTTPService(servers::Server const &server, ::services::WebService const
$ <b>g++-4.2 -fsyntax-only t.cpp</b>
t.cpp:12: error: no match for 'operator=' in 'str = vec'
$ <b>clang -fsyntax-only t.cpp</b>
- t.cpp:12:7: error: incompatible type assigning 'vector&lt;Real&gt;', expected 'std::string' (aka 'class std::basic_string&lt;char&gt;')
+ t.cpp:12:7: <font color="red">error:</font> incompatible type assigning 'vector&lt;Real&gt;', expected 'std::string' (aka 'class std::basic_string&lt;char&gt;')
<font color="darkgreen">str = vec</font>;
<font color="blue">^ ~~~</font>
</pre>
@@ -210,21 +210,25 @@ extension that has been considered obsolete since 1993:</p>
<pre>
$ <b>clang t.c</b>
- t.c:5:28: warning: use of GNU old-style field designator extension
+ t.c:5:28: <font color="magenta">warning:</font> use of GNU old-style field designator extension
<font color="darkgreen">struct point origin = { x: 0.0, y: 0.0 };</font>
<font color="red">~~</font> <font color="blue">^</font>
<font color="darkgreen">.x = </font>
- t.c:5:36: warning: use of GNU old-style field designator extension
+ t.c:5:36: <font color="magenta">warning:</font> use of GNU old-style field designator extension
<font color="darkgreen">struct point origin = { x: 0.0, y: 0.0 };</font>
<font color="red">~~</font> <font color="blue">^</font>
<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 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>
+<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
+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>
<pre>
$ <b>clang t.cpp</b>
- t.cpp:9:3: error: template specialization requires 'template&lt;&gt;'
+ t.cpp:9:3: <font color="red">error:</font> template specialization requires 'template&lt;&gt;'
struct iterator_traits&lt;file_iterator&gt; {
<font color="blue">^</font>
<font color="darkgreen">template&lt;&gt; </font>
@@ -244,7 +248,7 @@ Clang helps you out:</p>
t.c: In function 'test':
t.c:80: error: invalid operands to binary &lt; (have 'struct mystruct' and 'float')
$ <b>clang -fsyntax-only t.c</b>
- t.c:80:3: error: invalid operands to binary expression ('typeof(P)' (aka 'struct mystruct') and 'typeof(F)' (aka 'float'))
+ t.c:80:3: <font color="red">error:</font> invalid operands to binary expression ('typeof(P)' (aka 'struct mystruct') and 'typeof(F)' (aka 'float'))
<font color="darkgreen"> X = MYMAX(P, F);</font>
<font color="blue"> ^~~~~~~~~~~</font>
t.c:76:94: note: instantiated from:
@@ -260,7 +264,7 @@ implements the "wwopen" class of APIs):</p>
<pre>
$ <b>clang -fsyntax-only t.c</b>
- t.c:22:2: warning: type specifier missing, defaults to 'int'
+ t.c:22:2: <font color="magenta">warning:</font> type specifier missing, defaults to 'int'
<font color="darkgreen"> ILPAD();</font>
<font color="blue"> ^</font>
t.c:17:17: note: instantiated from:
@@ -274,6 +278,45 @@ implements the "wwopen" class of APIs):</p>
<p>In practice, we've found that this 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. Two
+examples are:</p>
+
+<pre>
+ $ <b>gcc-4.2 t.c</b>
+ t.c: In function 'foo':
+ t.c:5: error: expected ';' before '}' token
+ $ <b>clang t.c</b>
+ t.c:4:8: <font color="red">error:</font> expected ';' after expression
+ <font color="darkgreen"> bar()</font>
+ <font color="blue"> ^</font>
+ <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>
+
+<pre>
+ $ <b>gcc-4.2 t.c</b>
+ t.c:3: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
+ $ <b>clang t.c</b>
+ t.c:3:1: <font color="red">error:</font> unknown type name 'foo_t'
+ <font color="darkgreen">foo_t *P = 0;</font>
+ <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>While each of these details is minor, we feel that they all add up to provide
+a much more polished experience.</p>
+
</div>
</body>
</html>
diff --git a/www/features.html b/www/features.html
index 21382fd5b17f..6034ae783987 100644
--- a/www/features.html
+++ b/www/features.html
@@ -232,6 +232,7 @@ 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/get_started.html b/www/get_started.html
index 437cb38808f8..86f6cef35c05 100644
--- a/www/get_started.html
+++ b/www/get_started.html
@@ -43,30 +43,44 @@ mailing list</a>.</p>
<h2 id="build">Building Clang and Working with the Code</h2>
+<h3 id="buildNix">On Unix-like Systems</h3>
+
<p>If you would like to check out and build Clang, the current procedure is as
follows:</p>
<ol>
- <li><a href="http://www.llvm.org/docs/GettingStarted.html#checkout">Checkout
- and build LLVM</a> from SVN head:</li>
+ <li>Get the required tools.
+ <ul>
+ <li>See
+ <a href="http://llvm.org/docs/GettingStarted.html#requirements">
+ Getting Started with the LLVM System - Requirements</a>.</li>
+ <li>Note also that Python is needed for running the test suite.
+ Get it at: <a href="http://www.python.org/download">
+ http://www.python.org/download</a></li>
+ </ul>
+ <li>Checkout LLVM:</li>
<ul>
+ <li>Change directory to where you want the llvm directory placed.</li>
<li><tt>svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm</tt></li>
- <li><tt>cd llvm</tt></li>
- <li><tt>./configure; make</tt></li>
</ul>
<li>Checkout Clang:</li>
<ul>
- <li>From within the <tt>llvm</tt> directory (where you
- built llvm):</li>
- <li><tt>cd tools</tt>
- <li><tt>svn co http://llvm.org/svn/llvm-project/cfe/trunk clang</tt></li>
-
+ <li><tt>cd llvm/tools</tt>
+ <li><tt>svn co http://llvm.org/svn/llvm-project/cfe/trunk clang</tt></li>
+ </ul>
+ <li>Build LLVM and Clang:</li>
+ <ul>
+ <li><tt>cd ..</tt> (back to llvm)</li>
+ <li><tt>./configure</tt></li>
+ <li><tt>make</tt></li>
+ <li>This builds both LLVM and Clang for debug mode.</li>
+ <li>Note: For subsequent Clang development, you can just do make at the
+ clang directory level.</li>
</ul>
<li>If you intend to work on Clang C++ support, you may need to tell it how
to find your C++ standard library headers. If Clang cannot find your
system libstdc++ headers, please follow these instructions:</li>
-
<ul>
<li>'<tt>touch empty.cpp; gcc -v empty.cpp -fsyntax-only</tt>' to get the
path.</li>
@@ -74,13 +88,6 @@ follows:</p>
hard-coded paths" in <tt>clang/lib/Frontend/InitHeaderSearch.cpp</tt> and
change the lines below to include that path.</li>
</ul>
-
- <li>Build Clang:</li>
- <ul>
- <li><tt>cd clang</tt> (assuming that you are in <tt>llvm/tools</tt>)</li>
- <li><tt>make</tt> (this will give you a debug build)</li>
- </ul>
-
<li>Try it out (assuming you add llvm/Debug/bin to your path):</li>
<ul>
<li><tt>clang-cc --help</tt></li>
@@ -95,7 +102,6 @@ follows:</p>
<li><tt>clang-cc file.c -emit-llvm -o - | llvm-as | opt -std-compile-opts | llc
&gt; file.s</tt> (output native machine code)</li>
</ul>
-
<p><em>Note</em>: Here <tt>clang-cc</tt> is the "low-level" frontend
executable that is similar in purpose to <tt>cc1</tt>. Clang also has a <a
href="#driver">high-level compiler driver</a> that acts as a drop-in
@@ -120,6 +126,71 @@ and all (possibly unrelated) projects inside it with <tt><b>make
update</b></tt>. This will run <tt>svn update</tt> on all subdirectories related
to subversion. </p>
+<h3 id="buildWindows">Using Visual Studio</h3>
+
+<p>The following details setting up for and building Clang on Windows using
+Visual Studio:</p>
+
+<ol>
+ <li>Get the required tools:</li>
+ <ul>
+ <li><b>Subversion</b>. Source code control program. Get it from:
+ <a href="http://subversion.tigris.org/getting.html">
+ http://subversion.tigris.org/getting.html</a></li>
+ <li><b>cmake</b>. This is used for generating Visual Studio solution and
+ project files. Get it from:
+ <a href="http://www.cmake.org/cmake/resources/software.html">
+ http://www.cmake.org/cmake/resources/software.html</a></li>
+ <li><b>Visual Studio 2005 or 2008</b></li>
+ <li><b>Python</b>. This is needed only if you will be running the tests
+ (which is essential, if you will be developing for clang).
+ Get it from:
+ <a href="http://www.python.org/download">
+ http://www.python.org/download</a></li>
+ <li><b>GnuWin32 tools</b>
+ These are also necessary for running the tests.
+ (Note that the grep from MSYS or Cygwin doesn't work with the tests
+ because of embedded double-quotes in the search strings. The GNU
+ grep does work in this case.)
+ Get them from <a href="http://getgnuwin32.sourceforge.net">
+ http://getgnuwin32.sourceforge.net</a>.</li>
+ </ul>
+
+ <li>Checkout LLVM:</li>
+ <ul>
+ <li><tt>svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm</tt></li>
+ </ul>
+ <li>Checkout Clang:</li>
+ <ul>
+ <li><tt>cd llvm\tools</tt>
+ <li><tt>svn co http://llvm.org/svn/llvm-project/cfe/trunk clang</tt></li>
+ </ul>
+ <li>Run cmake to generate the Visual Studio solution and project files:</li>
+ <ul>
+ <li><tt>cd ..</tt> (Change directory back to the llvm top.)</li>
+ <li><tt>cmake .</tt></li>
+ <li>The above, if successful, will have created an LLVM.sln file in the
+ llvm directory.
+ </ul>
+ <li>Build Clang:</li>
+ <ul>
+ <li>Open LLVM.sln in Visual Studio.</li>
+ <li>Build the "clang-cc" project for just the compiler front end.
+ Alternatively, build the "clang" project for the compiler driver
+ (note that the driver is currently broken on Windows),
+ or the "ALL_BUILD" project to build everything, including tools.</li>
+ </ul>
+ <li>Try it out (assuming you added llvm/debug/bin to your path). (See the
+ running examples from above.)</li>
+ <li>See <a href="hacking.html#testingWindows">
+ Hacking on clang - Testing using Visual Studio on Windows</a> for information
+ on running regression tests on Windows.</li>
+</ol>
+
+<p>Note that once you have checked out both llvm and clang, to synchronize
+to the latest code base, use the <tt>svn update</tt> command in both the
+llvm and llvm\tools\clang directories, as they are separate repositories.</p>
+
<a name="driver"><h2>High-Level Compiler Driver (Drop-in Substitute for GCC)</h2></a>
<p>While the <tt>clang-cc</tt> executable is a low-level frontend executable
diff --git a/www/hacking.html b/www/hacking.html
index db83861502ba..a1833a2326c9 100644
--- a/www/hacking.html
+++ b/www/hacking.html
@@ -22,6 +22,11 @@
<li><a href="#docs">Developer Documentation</a></li>
<li><a href="#debugging">Debugging</a></li>
<li><a href="#testing">Testing</a></li>
+ <ul>
+ <li><a href="#testingNonWindows">Testing on Unix-like Systems</a></li>
+ <li><a href="#testingWindows">Testing using Visual Studio on Windows</a></li>
+ </ul>
+ <li><a href="#patches">Creating Patch Files</a></li>
<li><a href="#irgen">LLVM IR Generation</a></li>
</ul>
@@ -61,22 +66,111 @@
<h2 id="testing">Testing</h2>
<!--=====================================================================-->
+ <p><i>[Note: The test running mechanism is currently under revision, so the
+ following might change shortly.]</i></p>
+
+ <!--=====================================================================-->
+ <h3 id="testingNonWindows">Testing on Unix-like Systems</h3>
+ <!--=====================================================================-->
+
<p>Clang includes a basic regression suite in the tree which can be
run with <tt>make test</tt> from the top-level clang directory, or
- just <tt>make</tt> in the <em>test</em> sub-directory. <tt>make
- report</tt> can be used after running the tests to summarize the
- results, and <tt>make VERBOSE=1</tt> can be used to show more detail
+ just <tt>make</tt> in the <em>test</em> sub-directory.
+ <tt>make VERBOSE=1</tt> can be used to show more detail
about what is being run.</p>
+ <p>The tests primarily consist of a test runner script running the compiler
+ under test on individual test files grouped in the directories under the
+ test directory. The individual test files include comments at the
+ beginning indicating the Clang compile options to use, to be read
+ by the test runner. Embedded comments also can do things like telling
+ the test runner that an error is expected at the current line.
+ Any output files produced by the test will be placed under
+ a created Output directory.</p>
+
+ <p>During the run of <tt>make test</tt>, the terminal output will
+ display a line similar to the following:</p>
+
+ <ul><tt>--- Running clang tests for i686-pc-linux-gnu ---</tt></ul>
+
+ <p>followed by a line continually overwritten with the current test
+ file being compiled, and an overall completion percentage.</p>
+
+ <p>After the <tt>make test</tt> run completes, the absence of any
+ <tt>Failing Tests (count):</tt> message indicates that no tests
+ failed unexpectedly. If any tests did fail, the
+ <tt>Failing Tests (count):</tt> message will be followed by a list
+ of the test source file paths that failed. For example:</p>
+
+ <tt><pre>
+ Failing Tests (3):
+ /home/john/llvm/tools/clang/test/SemaCXX/member-name-lookup.cpp
+ /home/john/llvm/tools/clang/test/SemaCXX/namespace-alias.cpp
+ /home/john/llvm/tools/clang/test/SemaCXX/using-directive.cpp
+ </pre></tt>
+
+ <p>If you used the <tt>make VERBOSE=1</tt> option, the terminal
+ output will reflect the error messages from the compiler and
+ test runner.</p>
+
<p>The regression suite can also be run with Valgrind by running
<tt>make test VG=1</tt> in the top-level clang directory.</p>
<p>For more intensive changes, running
the <a href="http://llvm.org/docs/TestingGuide.html#testsuiterun">LLVM
Test Suite</a> with clang is recommended. Currently the best way to
- override LLVMGCC, as in: <tt>make LLVMGCC="ccc -std=gnu89"
- TEST=nightly report</tt> (make sure ccc is in your PATH or use the
+ override LLVMGCC, as in: <tt>make LLVMGCC="clang -std=gnu89"
+ TEST=nightly report</tt> (make sure <tt>clang</tt> is in your PATH or use the
full path).</p>
+
+ <!--=====================================================================-->
+ <h3 id="testingWindows">Testing using Visual Studio on Windows</h3>
+ <!--=====================================================================-->
+
+ <p>The cmake build tool is set up to create Visual Studio project files
+ for running the tests, "clang-test" being the root.
+ Unfortunately, the test runner scripts presently don't work on Windows.
+ This will be fixed during the test runner revision in progress.</p>
+
+ <p>Note that the current and coming revised test runner is based on
+ Python, which must be installed. Find Python at:
+ <a href="http://www.python.org/download">http://www.python.org/download</a>.
+ Download the latest stable version (2.6.2 at the time of this writing).</p>
+
+ <p>The GnuWin32 tools are also necessary for running the tests.
+ (Note that the grep from MSYS or Cygwin doesn't work with the tests
+ because of embedded double-quotes in the search strings. The GNU
+ grep does work in this case.)
+ Get them from <a href="http://getgnuwin32.sourceforge.net">
+ http://getgnuwin32.sourceforge.net</a>.</p>
+
+ <!--=====================================================================-->
+ <h2 id="patches">Creating Patch Files</h2>
+ <!--=====================================================================-->
+
+ <p>To return changes to the Clang team, unless you have checkin
+ privileges, the prefered way is to send patch files to the
+ cfe-commits mailing list, with an explanation of what the patch is for.
+ Or, if you have questions, or want to have a wider discussion of what
+ you are doing, such as if you are new to Clang development, you can use
+ the cfe-dev mailing list also.
+ </p>
+
+ <p>To create these patch files, change directory
+ to the llvm/tools/clang root and run:</p>
+
+ <ul><tt>svn diff (relative path) >(patch file name)</tt></ul>
+
+ <p>For example, for getting the diffs of all of clang:</p>
+
+ <ul><tt>svn diff . >~/mypatchfile.patch</tt></ul>
+
+ <p>For example, for getting the diffs of a single file:</p>
+
+ <ul><tt>svn diff lib/Parse/ParseDeclCXX.cpp >~/ParseDeclCXX.patch</tt></ul>
+
+ <p>Note that the paths embedded in the patch depend on where you run it,
+ so changing directory to the llvm/tools/clang directory is recommended.</p>
<!--=====================================================================-->
<h2 id="irgen">LLVM IR Generation</h2>
diff --git a/www/menu.html.incl b/www/menu.html.incl
index 561969b5d51c..29ed3a3db835 100644
--- a/www/menu.html.incl
+++ b/www/menu.html.incl
@@ -29,20 +29,30 @@
</div>
<div class="submenu">
- <label>Quick Links</label>
- <a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev">cfe-dev</a>
- <a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits">cfe-commits</a>
+ <label>Communication</label>
+ <a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev">cfe-dev List</a>
+ <a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits">cfe-commit List</a>
+ <a href="irc://irc.oftc.net/llvm">IRC: irc.oftc.net#llvm</a>
<a href="http://llvm.org/bugs/">Bug Reports</a>
+ </div>
+
+ <div class="submenu">
+ <label>The Code</label>
+ <a href="/get_started.html#build">Check Out SVN</a>
<a href="http://llvm.org/svn/llvm-project/cfe/trunk/">Browse SVN</a>
<a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/">Browse ViewVC</a>
<a href="http://clang.llvm.org/doxygen/">doxygen</a>
- <a href="http://t1.minormatter.com/~ddunbar/references.html">Spec. References</a>
+ </div>
+
+ <div class="submenu">
+ <label>Quick Links</label>
<a href="http://t1.minormatter.com/~ddunbar/clang-cov/">Testing Coverage</a>
+ <a href="http://t1.minormatter.com/~ddunbar/references.html">Spec. References</a>
</div>
<div class="submenu">
<label>Events</label>
- <a href="http://llvm.org/devmtg/">August 1, 2008 - LLVM/Clang Developer Meeting</a>
+ <a href="http://llvm.org/devmtg/2009-10/">October 2, 2009 - LLVM/Clang Developer Meeting</a>
</div>
</div>