diff options
Diffstat (limited to 'www')
-rw-r--r-- | www/analyzer/annotations.html | 34 | ||||
-rw-r--r-- | www/analyzer/available_checks.html | 3 | ||||
-rw-r--r-- | www/analyzer/content.css | 30 | ||||
-rw-r--r-- | www/analyzer/dev_cxx.html | 52 | ||||
-rw-r--r-- | www/analyzer/filing_bugs.html | 8 | ||||
-rw-r--r-- | www/analyzer/images/analyzer_html.png | bin | 0 -> 63091 bytes | |||
-rw-r--r-- | www/analyzer/images/analyzer_xcode.png | bin | 0 -> 87697 bytes | |||
-rw-r--r-- | www/analyzer/images/tree/bullet.gif | bin | 0 -> 64 bytes | |||
-rw-r--r-- | www/analyzer/images/tree/minus.gif | bin | 0 -> 79 bytes | |||
-rw-r--r-- | www/analyzer/images/tree/plus.gif | bin | 0 -> 83 bytes | |||
-rw-r--r-- | www/analyzer/index.html | 25 | ||||
-rw-r--r-- | www/analyzer/installation.html | 5 | ||||
-rw-r--r-- | www/analyzer/latest_checker.html.incl | 2 | ||||
-rw-r--r-- | www/analyzer/menu.css | 80 | ||||
-rw-r--r-- | www/analyzer/menu.html.incl | 74 | ||||
-rw-r--r-- | www/analyzer/menu.js | 17 | ||||
-rw-r--r-- | www/analyzer/scan-build.html | 42 | ||||
-rw-r--r-- | www/analyzer/scripts/dbtree.js | 1 | ||||
-rw-r--r-- | www/analyzer/scripts/menu.js | 17 | ||||
-rw-r--r-- | www/comparison.html | 3 | ||||
-rw-r--r-- | www/cxx_status.html | 92 | ||||
-rw-r--r-- | www/diagnostics.html | 29 | ||||
-rw-r--r-- | www/index.html | 16 |
23 files changed, 402 insertions, 128 deletions
diff --git a/www/analyzer/annotations.html b/www/analyzer/annotations.html index 819886e..6204713 100644 --- a/www/analyzer/annotations.html +++ b/www/analyzer/annotations.html @@ -5,9 +5,12 @@ <title>Source Annotations</title> <link type="text/css" rel="stylesheet" href="menu.css" /> <link type="text/css" rel="stylesheet" href="content.css" /> + <script type="text/javascript" src="scripts/menu.js"></script> + <script type="text/javascript" src="scripts/dbtree.js"></script> </head> <body> +<div id="page"> <!--#include virtual="menu.html.incl"--> <div id="content"> @@ -33,30 +36,34 @@ attributes</a>.</p> recognized by GCC. Their use can be conditioned using preprocessor macros (examples included on this page).</p> -<ul> -<li><a href="#generic">Annotations to Enhance Generic Checks</a></li> +<h4>Specific Topics</h4> + +<ul id="collapsetree" class="dbtree onclick multiple"> +<li><a href="#generic">Annotations to Enhance Generic Checks</a> <ul> - <li><a href="#null_checking">Null Pointer Checking</a></li> + <li><a href="#null_checking"><span>Null Pointer Checking</span></a> <ul> - <li><a href="#attr_nonnull">Attribute 'nonnull'</a></li> + <li><a href="#attr_nonnull"><span>Attribute 'nonnull'</span></a></li> </ul> + </li> </ul> -<li><a href="#macosx">Mac OS X API Annotations</a></li> +</li> +<li><a href="#macosx">Mac OS X API Annotations</a> <ul> - <li><a href="#cocoa_mem">Cocoa & Core Foundation Memory Management - Annotations</a></li> + <li><a href="#cocoa_mem">Cocoa & Core Foundation Memory Management Annotations</a> <ul> - <li><a href="#attr_ns_returns_retained">Attribute - 'ns_returns_retained'</a></li> - <li><a href="#attr_cf_returns_retained">Attribute - 'cf_returns_retained'</a></li> - </ul> + <li><a href="#attr_ns_returns_retained">Attribute 'ns_returns_retained'</a></li> + <li><a href="#attr_cf_returns_retained">Attribute 'cf_returns_retained'</a></li> + </ul> + </li> </ul> -<li><a href="#custom_assertions">Custom Assertion Handlers</a></li> +</li> +<li><a href="#custom_assertions">Custom Assertion Handlers</a> <ul> <li><a href="#attr_noreturn">Attribute 'noreturn'</a></li> <li><a href="#attr_analyzer_noreturn">Attribute 'analyzer_noreturn'</a></li> </ul> + </li> </ul> <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> @@ -383,6 +390,7 @@ void my_assert_rtn(const char *, const char *, int, const char *) <span class="c </pre> </div> +</div> </body> </html> diff --git a/www/analyzer/available_checks.html b/www/analyzer/available_checks.html index 5e74fd8..7af0865 100644 --- a/www/analyzer/available_checks.html +++ b/www/analyzer/available_checks.html @@ -5,9 +5,11 @@ <title>Available Checks</title> <link type="text/css" rel="stylesheet" href="menu.css" /> <link type="text/css" rel="stylesheet" href="content.css" /> + <script type="text/javascript" src="scripts/menu.js"></script> </head> <body> +<div id="page"> <!--#include virtual="menu.html.incl"--> <div id="content"> @@ -29,6 +31,7 @@ of some of the bugs that it finds:</p> </div> +</div> </body> </html> diff --git a/www/analyzer/content.css b/www/analyzer/content.css index 3f47e3b..823fae2 100644 --- a/www/analyzer/content.css +++ b/www/analyzer/content.css @@ -2,8 +2,11 @@ html { margin: 0px; } body { margin: 8px; } html, body { padding:0px; + margin:0px; font-size:small; font-family:"Lucida Grande", "Lucida Sans Unicode", Arial, Verdana, Helvetica, sans-serif; background-color: #fff; color: #222; line-height:1.5; + background-color: #808080; + } h1, h2, h3, tt { color: #000 } @@ -27,7 +30,34 @@ IMG.img_slide { margin-right: auto } +#page { width:930px; text-align: left; margin: 0 auto; padding:0; + background-color: white; height:100%; + border-left: 1px solid #EBF0FA; +} + +#content { + clear: left; + padding: 1em 2em 0 2em; + background-color: #ffffff; +} + .itemTitle { color:#2d58b7 } + /* Tables */ tr { vertical-align:top } + +/* Collapsing Trees: http://dbtree.megalingo.com/web/demo/simple-collapsible-tree.cfm */ +#collapsetree, #collapsetree a:link, #collapsetree li a:link, #collapsetree a:visited, #collapsetree li a:visited{color:#000;text-decoration:none} +#collapsetree,#collapsetree ul{list-style-type:none; width:auto; margin:0; padding:0} +#collapsetree ul{padding-left:20px;display:none;overflow:auto} +#collapsetree li ul{margin:0 auto} +#collapsetree li{display:block;width:100%;line-height:20px;white-space:nowrap} +#collapsetree li a{display:block;padding-left:20px;color:#000;text-decoration:none;background:url(images/tree/bullet.gif) center left no-repeat;white-space:nowrap} +#collapsetree li a:hover{text-decoration:underline;background-color:transparent;color:#000} +#collapsetree li ul.click{display:block} +#collapsetree li.click a{background:url(images/tree/bullet.gif) center left no-repeat} +#collapsetree ul li.click a{background:url(images/tree/bullet.gif) center left no-repeat} +#collapsetree li a.subMenu,#collapsetree ul li a.subMenu{background:url(images/tree/plus.gif) center left no-repeat} +#collapsetree li a.click{background:url(images/tree/minus.gif) center left no-repeat} +#collapsetree ul li a.click{background:url(images/tree/minus.gif) center left no-repeat}
\ No newline at end of file diff --git a/www/analyzer/dev_cxx.html b/www/analyzer/dev_cxx.html new file mode 100644 index 0000000..b5ef2b1 --- /dev/null +++ b/www/analyzer/dev_cxx.html @@ -0,0 +1,52 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" + "http://www.w3.org/TR/html4/strict.dtd"> +<html> +<head> + <title>Analyzer Development: C++ Support</title> + <link type="text/css" rel="stylesheet" href="menu.css" /> + <link type="text/css" rel="stylesheet" href="content.css" /> + <script type="text/javascript" src="scripts/menu.js"></script> +</head> +<body> + +<div id="page"> +<!--#include virtual="menu.html.incl"--> +<div id="content"> + +<h1>C++ Support</h1> + +<p>The Clang frontend +now <a href="http://clang.llvm.org/cxx_status.html">supports the +majority of C++</a>. Support in the frontend for C++ language +features, however, does not automatically translate into support for +those features in the static analyzer. Language features need to be +specifically modeled in the static analyzer so their semantics can be +properly analyzed. Support for analyzing C++ and Objective-C++ files +is currently extremely limited, and we are only encouraging those who +are interested in contributing to the development of the analyzer to +try this functionality out at this time.</p> + +<p>Listed here are a set of open tasks that are prerequisites for +decent analysis of C++. This list is also not complete; new tasks +will be added as deemed necessary.</p> + +<ul> + <li>Control-Flow Graph Enhancements:</li> + <ul> + <li>Model C++ destructors</li> + <li>Model C++ initializers (in constructors)</li> + </ul> + <li>Path-Sensitive Analysis Engine (GRExprEngine):</li> + <ul> + <li>Model C++ casts</li> + <li>Model C++ constructors</li> + <li>Model C++ destructors</li> + <li>Model <tt>new</tt> and <tt>delete</tt></li> + </ul> +</ul> + +</div> +</div> +</body> +</html> + diff --git a/www/analyzer/filing_bugs.html b/www/analyzer/filing_bugs.html index 1ce02be..746f1cb 100644 --- a/www/analyzer/filing_bugs.html +++ b/www/analyzer/filing_bugs.html @@ -5,11 +5,12 @@ <title>Filing Bugs and Feature Requests</title> <link type="text/css" rel="stylesheet" href="menu.css" /> <link type="text/css" rel="stylesheet" href="content.css" /> + <script type="text/javascript" src="scripts/menu.js"></script> </head> <body> +<div id="page"> <!--#include virtual="menu.html.incl"--> - <div id="content"> <h1>Filing Bugs and Feature Requests</h1> @@ -47,15 +48,14 @@ component.</p> reports to Apple's <a href="http://bugreporter.apple.com">Bug Reporter</a> web site.</p> -<p>You are free to always file bugs through this website, but this option less +<p>You are free to always file bugs through this website, but this option is less attractive than filing bug reports through Bugzilla as not everyone who works on the analyzer has access to that bug database.</p> <h2>Apple-internal Users</h2> <p>Please file bugs in Radar against the <b>llvm - checker</b> component.</p> - - +</div> </div> </body> </html> diff --git a/www/analyzer/images/analyzer_html.png b/www/analyzer/images/analyzer_html.png Binary files differnew file mode 100644 index 0000000..607ea18 --- /dev/null +++ b/www/analyzer/images/analyzer_html.png diff --git a/www/analyzer/images/analyzer_xcode.png b/www/analyzer/images/analyzer_xcode.png Binary files differnew file mode 100644 index 0000000..84c6980 --- /dev/null +++ b/www/analyzer/images/analyzer_xcode.png diff --git a/www/analyzer/images/tree/bullet.gif b/www/analyzer/images/tree/bullet.gif Binary files differnew file mode 100644 index 0000000..de15348 --- /dev/null +++ b/www/analyzer/images/tree/bullet.gif diff --git a/www/analyzer/images/tree/minus.gif b/www/analyzer/images/tree/minus.gif Binary files differnew file mode 100644 index 0000000..225f40d --- /dev/null +++ b/www/analyzer/images/tree/minus.gif diff --git a/www/analyzer/images/tree/plus.gif b/www/analyzer/images/tree/plus.gif Binary files differnew file mode 100644 index 0000000..5398c80 --- /dev/null +++ b/www/analyzer/images/tree/plus.gif diff --git a/www/analyzer/index.html b/www/analyzer/index.html index 2cb3186..006bc5c 100644 --- a/www/analyzer/index.html +++ b/www/analyzer/index.html @@ -3,19 +3,26 @@ <html> <head> <title>Clang Static Analyzer</title> - <link type="text/css" rel="stylesheet" href="menu.css" /> <link type="text/css" rel="stylesheet" href="content.css" /> + <link type="text/css" rel="stylesheet" href="menu.css" /> + <script type="text/javascript" src="scripts/menu.js"></script> </head> <body> +<div id="page"> <!--#include virtual="menu.html.incl"--> - <div id="content"> -<h1>Clang Static Analyzer</h1> + +<table style="margin-top:0px" width="100%" border="0" cellpadding="0px" cellspacing="0"> +<tr><td> + +<h1>Clang Static Analyzer</h1> <p>The Clang Static Analyzer consists of both a source code analysis framework -and a standalone tool that finds bugs in C and Objective-C programs. The +and a standalone tool that finds bugs in C and Objective-C programs.</p> + +<p>The standalone tool is invoked from the command-line, and is intended to run in tandem with a build of a project or code base.</p> @@ -75,7 +82,7 @@ href="http://clang.llvm.org">Clang</a> project.</p> #wrappedcontent { padding:15px;} </style> -<div style="padding:0px"> +<div style="padding:0px; font-size: 90%"> <b class="spiffy"> <b class="spiffy1"><b></b></b> <b class="spiffy2"><b></b></b> @@ -107,6 +114,13 @@ href="http://clang.llvm.org">Clang</a> project.</p> <b class="spiffy1"><b></b></b></b> </div> +</td><td style="padding-left:10px"> +<a href="images/analyzer_xcode.png"><img src="images/analyzer_xcode.png" width="450x" border=0></a> +<center><b>Viewing static analyzer results in Xcode 3.2</b></center> +<a href="images/analyzer_html.png"><img src="images/analyzer_html.png" width="450px" border=0></a> +<center><b>Viewing static analyzer results in a web browser</b></center> +</td></tr></table> + <h2 id="StaticAnalysis">What is Static Analysis?</h2> <p>The term "static analysis" is conflated, but here we use it to mean @@ -182,6 +196,7 @@ file <a href="filing_bugs.html">feature requests</a> or contribute your own patches.</p> </div> +</div> </body> </html> diff --git a/www/analyzer/installation.html b/www/analyzer/installation.html index d2be711..b84f263 100644 --- a/www/analyzer/installation.html +++ b/www/analyzer/installation.html @@ -5,11 +5,12 @@ <title>Obtaining the Static Analyzer</title> <link type="text/css" rel="stylesheet" href="menu.css" /> <link type="text/css" rel="stylesheet" href="content.css" /> + <script type="text/javascript" src="scripts/menu.js"></script> </head> <body> +<div id="page"> <!--#include virtual="menu.html.incl"--> - <div id="content"> <h1>Obtaining the Static Analyzer</h1> @@ -106,7 +107,7 @@ are located in <tt>$(SRCDIR)/tools/clang/tools/scan-build</tt> and are subject to change.</p></li> </ul> - +</div> </div> </body> </html> diff --git a/www/analyzer/latest_checker.html.incl b/www/analyzer/latest_checker.html.incl index cccedb5..87ef5fd 100644 --- a/www/analyzer/latest_checker.html.incl +++ b/www/analyzer/latest_checker.html.incl @@ -1 +1 @@ -<b><a href="http://files.me.com/tkremenek/pxfgyv">checker-232.tar.bz2</a></b> (built December 14, 2009) +<b><a href="http://checker.minormatter.com/checker-234.tar.bz2">checker-234.tar.bz2</a></b> (built February 9, 2010) diff --git a/www/analyzer/menu.css b/www/analyzer/menu.css index 0312f4c..05c1bbf 100644 --- a/www/analyzer/menu.css +++ b/www/analyzer/menu.css @@ -1,40 +1,52 @@ -/***************/ -/* page layout */ -/***************/ +/* From 'A list apart', 'dropdowns' */ -[id=menu] { - position:fixed; - width:35ex; +#nav { + clear: left; + margin:0; + padding:0; + font-weight: bold; + width:100%; + background-color: #EBF0FA; + border-bottom: 1px solid; + font-size: 80%; } -[id=content] { - /* ***** EDIT THIS VALUE IF CONTENT OVERLAPS MENU ***** */ - position:absolute; - left:39ex; - padding-right:4ex; +#nav a { + text-decoration: none; +} +#nav a:hover { + text-decoration: underline; } - -/**************/ -/* menu style */ -/**************/ - -#menu .submenu { - padding-top:1em; - display:block; +.menubar ul { + list-style: none inside; } - -#menu label { - display:block; - font-weight: bold; - text-align: center; - color: #ffffff; - background-color: #2d58b7; +.menubar li { + margin: 0; + padding: 5px; + text-align: left; + text-indent: 0px; + list-style-position: inside; + list-style:none; + float: left; + position: relative; + width: 13em; + cursor: default; + background-color: #EBF0FA; } -#menu a { - padding:0 .2em; - display:block; - text-align: center; - background-color: #EBF0FA; +.menubar li ul /* second level lists */ { + display: none; + position: absolute; + left: 0; } -#menu a:visited { - color:rgb(100,50,100); -}
\ No newline at end of file +.menubar li>ul { + border-left: 1px solid; + border-right: 1px solid; + border-bottom: 1px solid; + padding: 0; + margin: 5px 0; + left:auto; + font-weight: normal; +} +.menubar li:hover ul, li.over ul { /* lists nested under hovered list items */ + display: block; +} + diff --git a/www/analyzer/menu.html.incl b/www/analyzer/menu.html.incl index b7c95f1..8d465e4 100644 --- a/www/analyzer/menu.html.incl +++ b/www/analyzer/menu.html.incl @@ -1,35 +1,39 @@ -<div id="menu"> - <div> - <a href="http://llvm.org/">LLVM Home</a> - <a href="http://clang.llvm.org/">Clang Home</a> - </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> - </div> - - <div class="submenu"> - <label>User Manual</label> -<!-- <a href="/design_philosphy.html">Design Philosophy</a> --> - <a href="/installation.html">Obtaining the Analyzer</a> - <a href="/scan-build.html">Running the Analyzer</tt></a> - <a href="/available_checks.html">Available Checks</a> -<!-- <a href="/false_positives.html">False Positives</a> --> - <a href="/annotations.html">Source-level Annotations</a> - </div> - - <div class="submenu"> - <label>Clang Mailing Lists</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> - </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> +<table width="100%" id="nav" cellspacing=0 cellpadding=0> +<tr><td> +<ul style="margin:0; padding:0" class="menubar"> +<li style="padding-left:5em"> + <a href="/index.html">About</a> + <ul class="menubar"> + <li><a href="/index.html">About the Analyzer</a></li> + <li><a href="http://llvm.org/">LLVM Project</a></li> + <li><a href="http://clang.llvm.org/">Clang Project</a></li> + </ul> +</li> +<li> + <a href="/filing_bugs.html">Filing Bugs</a> +</li> +<li> + User Manual + <ul> + <li><a href="/installation.html">Obtaining the Analyzer</a></li> + <li><a href="/scan-build.html">Running the Analyzer</tt></a></li> + <li><a href="/available_checks.html">Available Checks</a></li> + <li><a href="/annotations.html">Source-level Annotations</a></li> + </ul> +</li> +<li> + Development + <ul> + <li><a href="/dev_cxx.html">Analysis support for C++</a></li> + </ul> +</li> +<li> + Mailing Lists + <ul> + <li><a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev">cfe-dev</a></li> + <li><a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits">cfe-commits</a></li> + </ul> +</li> +</ul> +</td></tr> +</table> diff --git a/www/analyzer/menu.js b/www/analyzer/menu.js new file mode 100644 index 0000000..6b393c0 --- /dev/null +++ b/www/analyzer/menu.js @@ -0,0 +1,17 @@ +startList = function() { + if (document.all&&document.getElementById) { + navRoot = document.getElementById("nav"); + for (i=0; i<navRoot.childNodes.length; i++) { + node = navRoot.childNodes[i]; + if (node.nodeName=="LI") { + node.onmouseover=function() { + this.className+=" over"; + } + node.onmouseout=function() { + this.className=this.className.replace(" over", ""); + } + } + } + } +} +window.onload=startList; diff --git a/www/analyzer/scan-build.html b/www/analyzer/scan-build.html index fd05af0..16bdbfd 100644 --- a/www/analyzer/scan-build.html +++ b/www/analyzer/scan-build.html @@ -3,32 +3,33 @@ <html> <head> <title>Running the Analyzer</title> - <link type="text/css" rel="stylesheet" href="menu.css" /> <link type="text/css" rel="stylesheet" href="content.css" /> - <style> - thead { - background-color:#eee; color:#666666; - font-weight: bold; cursor: default; - text-align:center; - border-top: 2px solid #cccccc; - border-bottom: 2px solid #cccccc; - font-weight: bold; font-family: Verdana - } - table { border: 1px #cccccc solid } - table { border-collapse: collapse; border-spacing: 0px } - table { margin-left:0px; margin-top:20px; margin-bottom:20px } - td { border-bottom: 1px #cccccc dotted } - td { padding:5px; padding-left:8px; padding-right:8px } - td { text-align:left; font-size:9pt } - td.View { padding-left: 10px } - </style> + <link type="text/css" rel="stylesheet" href="menu.css" /> + <script type="text/javascript" src="scripts/menu.js"></script> </head> <body> +<div id="page"> <!--#include virtual="menu.html.incl"--> - <div id="content"> +<style> +table.options thead { + background-color:#eee; color:#666666; + font-weight: bold; cursor: default; + text-align:left; + border-top: 2px solid #cccccc; + border-bottom: 2px solid #cccccc; + font-weight: bold; font-family: Verdana +} +table.options { border: 1px #cccccc solid } +table.options { border-collapse: collapse; border-spacing: 0px } +table.options { margin-left:0px; margin-top:20px; margin-bottom:20px } +table.options td { border-bottom: 1px #cccccc dotted } +table.options td { padding:5px; padding-left:8px; padding-right:8px } +table.options td { text-align:left; font-size:9pt } +</style> + <h1>Running the Analyzer</h1> <p>While the static analyzer engine can be used as a library, many users will @@ -116,7 +117,7 @@ options prefix the build command. For example:</p> <p>Here is a subset of useful options:</p> -<table> +<table class="options"> <thead><tr><td>Option</td><td>Description</td></tr></thead> <tr><td><b>-o</b></td><td>Target directory for HTML report files. Subdirectories @@ -245,6 +246,7 @@ report bugs of this kind). --> </div> +</div> </body> </html> diff --git a/www/analyzer/scripts/dbtree.js b/www/analyzer/scripts/dbtree.js new file mode 100644 index 0000000..5face5d --- /dev/null +++ b/www/analyzer/scripts/dbtree.js @@ -0,0 +1 @@ +eval(function(p,a,c,k,e,r){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('7 5,r,Q,u;7 17=[];5=H;1i();9(!1Z.1j.20){1Z.1j.20=k(a){C[C.D]=a}}7 19=\'35+/\';k 36(a){7 b,R=\'\',i=0;I(;i<a.D;i+=4){b=(19.1k(a.1l(i))&1a)<<18|(19.1k(a.1l(i+1))&1a)<<12|(19.1k(a.1l(i+2))&1a)<<6|19.1k(a.1l(i+3))&1a;R+=37.38((b&39)>>16,(b&3a)>>8,b&1a)}9(a.21(i-2)==22)1m=R.23(0,R.D-2);s 9(a.21(i-1)==22)1m=R.23(0,R.D-1);s 1m=R;z 3b(1m)}7 A={24:k(){7 a=l.E(\'X\');I(7 i=0;i<a.D;i++){9(a[i].h.F(/\\1n\\b/)==-1)3c;7 b=a[i];9(b.h.F(/\\1E\\b/)!=-1){7 c=b.E(\'a\');I(7 j=0;j<c.D;j++){m.B(c[j],\'25\',1F,o);m.B(c[j],\'26\',1G,o);m.B(c[j],\'1o\',1b,o);c[j].Y=\'1H:1I(0)\'}}7 d=b.E(\'X\');I(7 j=0;j<d.D;j++){7 e=d[j].p;e.27=J;9(b.h.F(/\\3d\\b/)!=-1){m.B(e,\'w\',A.w,o);9(b.h.F(/\\3e\\b/)==-1){e.E(\'a\')[0].Y=\'1H:1I(0)\'}}s{7 t=b.h.3f(/1J(.*)1J/);t=t?t[1]:H;m.B(e,\'3g\',A.28(e,t),o);m.B(e,\'3h\',A.29(e),o)}e.E(\'a\')[0].h+=\' 2a\'}9(b.h.F(/\\3i\\b/)!=-1)A.2b(b.v)}},2b:k(a){7 b=l.G(a+\'3j\');9(b){A.1p(b);b=b.p;1c(!!b&&(b.v!=a)){9((!b.h)||(b.h==\'\')){b.h=\'w\'}s{b.h+=\' w\'}9(b.1d.K.L()==\'a\')b.1d.h+=\' w\';b=b.p}}},29:k(a){z k(){A.1p(a)}},28:k(a,b){z k(){A.2c(a,b)}},1p:k(a){7 b=a;3k(b.2d);I(7 i=0;i<b.S.D;i++){7 c=b.S[i];9(c.K.L()==\'X\'){b.E(\'a\')[0].h+=\' w\';b.h+=\' w\';c.h+=\' w\'}}},2c:k(a,b){7 c=a;c.2d=3l(k(){A.1q(c)},b)},1q:k(a){I(7 i=0;i<a.S.D;i++){7 b=a.S[i];9(b.K.L()==\'X\'){a.E(\'a\')[0].h=a.E(\'a\')[0].h.1K(/w/g,\'\');b.h=b.h.1K(/w/g,\'\');a.h=a.h.1K(/w/g,\'\')}}},w:k(e){9(M.T){M.T.1L=J}9(e&&e.1r){e.1r()}7 a=(M.T)?M.T.2e:(e)?e.1M:H;9(!a||!(a=A.1N(a,\'2f\')))z;9(a.E(\'a\')[0].h.F(/\\2g\\b/)==-1){7 b=1e(a);9(2h(b)){9(l.G(b).h.F(/\\3m\\b/)==-1){I(n=0;n<a.p.S.D;n++){N=a.p.S[n];9(N.K.L()==\'2f\'){9(N.h.F(/\\2g\\b/)!=-1)A.1q(a.p.S[n])}}}}A.1p(a)}s{A.1q(a)}9(2h(1e(a))){z J}s{z o}},1N:k(a,b){9(a.K.L()!=b&&a.K.L()!=\'U\'){z A.1N(a.p,b)}s 9(a.K.L()==\'U\'){z H}s{z a}}};k 1i(){3n{u=M.2i?O 2i():O 3o(\'3p.3q\')}3r(e){2j(\'2k 2l: 3s 3t 3u 3v 3w-3x!\')}}k 1O(a,x){a.1f.3y=x+\'2m\'}k 1P(a,y){a.1f.3z=y+\'2m\'}k 1e(a){1c(a.h.F(/\\1n\\b/)==-1){a=a.p}9((a.h.F(/\\1n\\b/)!=-1)&&(a.h.F(/\\1E\\b/)!=-1)){I(i=0;i<17.D;i++){9(a.v==17[i].q)z i}}z a.v}k 1G(a){a=O m(a);r=a.P.p.p.v;7 b=r.1s(\'Z\');r=b[1];5=17[1e(a.P)];7 c=l.G(5.q+\'10\').3A(J);7 d=l.G(5.q+\'10\');d.p.2n(d);c.v=5.q+\'10\';l.U.2o(c);1O(c,a.x);1P(c,a.y);c.1f.1Q=\'2p\';a.1t();m.B(l,\'1u\',1R,o);z o}k 1R(c){c=O m(c);7 e;7 a=c.P;7 b=a;1c((b!=H)&&(b.K.L()!=\'U\')){9(b.v==5.q+\'10\')1g;b=b.p}9((b!=H)&&(b.v==5.q+\'10\')){3B(a.p.h){1S\'3C\':a.Y=5.V+\'11=1T&N=\'+5.13;1g;1S\'1T\':a.Y=5.V+\'11=1T&N=\'+r;1g;1S\'2q\':a.Y=5.V+\'11=2q&N=\'+r;1g;3D:e=5.2r+\'?q=\'+5.q;e+=\'&13=\'+5.13;9(a.p.h==\'3E\'){e+=\'&11=2s&N=\'+r+\'&2t=\'+5.13}s{e+=\'&11=\'+a.p.h+\'&N=\'+r}7 d=O 2u();7 f=d.2v();e+=\'&2w=\'+f;e+=\'&1v=\'+5.1v;e+=\'&1w=\'+5.1w;e+=\'&1x=\'+5.1x;e+=\'&1y=\'+5.1y;e+=\'&1z=\'+5.1z;e+=\'&1A=\'+5.1A;e+=\'&v=\'+5.v;e+=\'&1B=\'+5.1B;e+=\'&1C=\'+5.1C;e+=\'&V=\'+5.V;u.2x=1U;u.1V(\'2y\',e,J);u.14(\'2z\',\'2A-2B\');u.14(\'2C-2D\',\'2E-2F\');u.14(\'2G-2H-2I\',l.2J);u.2K(H)}}7 g=l.G(5.q+\'10\');9(g){g.1f.1Q=\'3F\'};m.1h(l,\'1u\',1R,o)}k 1F(a){a=O m(a);r=a.P.p.p.v;7 b=r.1s(\'Z\');r=b[1];5=17[1e(a.P)];9(!l.G(5.q+\'15\')){7 c=(!l.G(5.q+\'15\'))?l.3G(\'3H\'):l.G(5.q+\'15\');c.v=5.q+\'15\';c.2L=a.P.1d.3I;l.U.2o(c)}m.B(l,\'2M\',1W,o);m.B(l,\'1u\',1X,o);m.B(l,\'1o\',1b,o);a.1t();z o}k 1b(a){9(!a&&M.T)a=M.T;9(a!=H){9(3J(a.1Y)==\'k\')a.1Y();s a.2N=o}z o}k 1W(a){a=O m(a);7 b=l.G(5.q+\'15\');1O(b,a.x);1P(b,a.y);b.1f.1Q=\'2p\';a.1t();z o}k 1X(a){a=O m(a);7 b=a.P.p;9(b.K.L()==\'a\'){r=5.q+\'Z\'+r;9(r!=b.p.v){7 c=J;7 d=b.p;1c(!!d&&(d.v!=5.q)){9(d.v==r){c=o;1g}s{d=d.p}}9(c==J){7 e=r.1s(\'Z\');r=e[1];Q=b.p.v;7 f=Q.1s(\'Z\');Q=f[1];2O(a)}}}7 g=l.G(5.q+\'15\');9(g){g.p.2n(g)};m.1h(l,\'2M\',1W,o);m.1h(l,\'1u\',1X,o);m.1h(l,\'1o\',1b,o)}k 2O(a){7 d=O 2u();7 b=d.2v();7 c;c=5.2r+\'?q=\'+5.q+\'&11=2s&13=\'+5.13+\'&N=\'+r+\'&2t=\'+Q+\'&2w=\'+b;c+=\'&1v=\'+5.1v;c+=\'&1w=\'+5.1w;c+=\'&1x=\'+5.1x;c+=\'&1y=\'+5.1y;c+=\'&1z=\'+5.1z;c+=\'&1A=\'+5.1A;c+=\'&v=\'+5.v;c+=\'&1B=\'+5.1B;c+=\'&1C=\'+5.1C;c+=\'&V=\'+5.V;u.2x=1U;u.1V(\'2y\',c,J);u.14(\'2z\',\'2A-2B\');u.14(\'2C-2D\',\'2E-2F\');u.14(\'2G-2H-2I\',l.2J);u.2K(H)}k 2P(){7 a=(!!Q)?Q:r;a=5.q+\'Z\'+a;a=l.G(a);9(a){a=a.E(\'X\')[0];1c(!!a&&(a.h.F(/\\1n\\b/)==-1)&&(a.h.F(/\\1E\\b/)==-1)){9((!a.h)||(a.h==\'\')){a.h=\'w\'}s{a.h+=\' w\'}9(a.1d.K.L()==\'a\')a.1d.h+=\' w\';a=a.p}}}k 3K(a,b){9(a!=\'3L\'){3M(a+".3N=\'"+b.2Q[b.2R].2S+"\'")}s{M.1V(b.2Q[b.2R].2S)}}k 2T(a){7 b=l.G(a);7 c=b.E(\'X\');I(7 j=0;j<c.D;j++){7 d=c[j].p;d.27=J;m.B(d,\'w\',A.w,o);d.E(\'a\')[0].h+=\' 2a\'}7 e=b.E(\'a\');I(7 j=0;j<e.D;j++){m.B(e[j],\'25\',1F,o);m.B(e[j],\'26\',1G,o);m.B(e[j],\'1o\',1b,o);e[j].Y=\'1H:1I(0)\'}}k 1U(){9(u.3O==4){9(u.3P==3Q){l.G(5.q+\'3R\').2L=u.3S;2T(5.q);2P();1i()}s{2j(\'2k 2l: 3T, 3U 3V 1J 3W a 3X 3Y 3Z 40:\\n\'+u.41);1i()}}}k m(a){C.W=a?a:M.T;C.P=a.1M?a.1M:a.2e;C.x=a.2U?(a.2U):(a.42+2V.2W(l.U.2X,l.2Y.2X));C.y=a.2Z?(a.2Z):(a.43+2V.2W(l.U.30,l.2Y.30))}m.1j.44=k(){z\'m [ x = \'+C.x+\', y = \'+C.y+\' ]\'};m.1j.1t=k(){9(C.W.1r){C.W.1r();C.W.1Y()}s 9(C.W.1L){C.W.1L=J;C.W.2N=o}};m.B=k(a,b,c,d){9(l.31){a.31(b,c,d)}s 9(l.32){a.32(\'1D\'+b,c,d)}s{a[\'1D\'+b]=c}};m.1h=k(a,b,c,d){9(l.33){a.33(b,c,d)}s 9(l.34){a.34(\'1D\'+b,c,d)}s{a[\'1D\'+b]=H}};m.B(M,\'45\',A.24,o);',62,254,'|||||instance||var||if||||||||className|||function|document|Evt||false|parentNode|instanceName|nid|else||client|id|click|||return|dbTree|addEvent|this|length|getElementsByTagName|search|getElementById|null|for|true|nodeName|toLowerCase|window|node|new|source|nto|decOut|childNodes|event|body|editpage|evt|ul|href|_|_options|action||rootnode|setRequestHeader|_tip||dbtreeObj||b64s|0xff|PreventDefault|while|firstChild|getObj|style|break|removeEvent|createClient|prototype|indexOf|charAt|undecOut|bdbtree|selectstart|mOver|mOut|stopPropagation|split|consume|mouseup|type|query|datasource|username|password|table|parent|contentfield|on|bedit|dragPress|contextMenu|javascript|void|to|replace|cancelBubble|target|getTarget|setX|setY|display|contextAction|case|add|callback|open|dragMove|dragRelease|preventDefault|Array|push|charCodeAt|61|substring|init|mousedown|contextmenu|hasSubMenu|getMoutFor|getMoverFor|subMenu|mExp|mTimeout|timeout|srcElement|li|bclick|isNaN|XMLHttpRequest|alert|DBTree|Error|px|removeChild|appendChild|block|edit|tagpath|move|nodeto|Date|getTime|time|onreadystatechange|get|Pragma|no|cache|Cache|Control|must|revalidate|If|Modified|Since|lastModified|send|innerHTML|mousemove|returnValue|dragBoxDropped|expandtree|options|selectedIndex|value|reinit|pageX|Math|max|scrollLeft|documentElement|pageY|scrollTop|addEventListener|attachEvent|removeEventListener|detachEvent|ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789|decode|String|fromCharCode|0xff0000|0xff00|unescape|continue|bonclick|blinkparent|match|mouseout|mouseover|bexpand|_active|clearTimeout|setTimeout|bmultiple|try|ActiveXObject|Microsoft|XMLHTTP|catch|Your|browser|is|not|Ajax|enabled|left|top|cloneNode|switch|addroot|default|moveroot|none|createElement|div|nodeValue|typeof|jumpTo|blank|eval|location|readyState|status|200|_edit|responseText|Sorry|there|seems|be|problem|retrieving|the|response|statusText|clientX|clientY|toString|load'.split('|'),0,{})) diff --git a/www/analyzer/scripts/menu.js b/www/analyzer/scripts/menu.js new file mode 100644 index 0000000..6b393c0 --- /dev/null +++ b/www/analyzer/scripts/menu.js @@ -0,0 +1,17 @@ +startList = function() { + if (document.all&&document.getElementById) { + navRoot = document.getElementById("nav"); + for (i=0; i<navRoot.childNodes.length; i++) { + node = navRoot.childNodes[i]; + if (node.nodeName=="LI") { + node.onmouseover=function() { + this.className+=" over"; + } + node.onmouseout=function() { + this.className=this.className.replace(" over", ""); + } + } + } + } +} +window.onload=startList; diff --git a/www/comparison.html b/www/comparison.html index 2462b89..0a6a7c8 100644 --- a/www/comparison.html +++ b/www/comparison.html @@ -51,8 +51,7 @@ <li>GCC supports languages that clang does not aim to, such as Java, Ada, FORTRAN, etc.</li> <li>GCC front-ends are very mature and already support C++. - <a href="cxx_status.html">clang's support for C++</a> is nowhere near - what GCC supports.</li> + <a href="cxx_status.html">clang's support for C++</a> is further behind.</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> diff --git a/www/cxx_status.html b/www/cxx_status.html index fdddc22..0da84c2 100644 --- a/www/cxx_status.html +++ b/www/cxx_status.html @@ -24,11 +24,89 @@ <!--*************************************************************************--> <h1>C++ Support in Clang</h1> <!--*************************************************************************--> -<p>Last updated: $Date: 2009-12-19 21:59:13 +0100 (Sat, 19 Dec 2009) $</p> +<p>Last updated: $Date: 2010-02-09 17:50:54 +0100 (Tue, 09 Feb 2010) $</p> -<p> -This page tracks the status of C++ support in Clang.<br> -Clang implements the majority of C++ features, although there are many bugs remaining and Clang is not yet generally useful as a C++ compiler. If you are looking to <a href="get_involved.html">get involved with Clang development</a> to help work on support for C++, please also look at our <a href="OpenProjects.html">Open Projects</a> page and the <a href="http://llvm.org/bugs/">LLVM bug tracker</a> for some specific ideas.</p> +<h1>Clang C++ Status</h1> + + <ul> + <li><a href="#projects">Projects Building with Clang</a></li> + <li><a href="#specification">Implementation Status by Section</a></li> + <li><a href="#cxx0x">C++0x Status</a></li> + </ul> + +<p>Clang currently implements nearly all of the ISO C++ 1998 standard +(including the defects addressed in the ISO C++ 2003 standard), with +the few notable exceptions listed below. However, the implementation +of Clang C++ is still quite immature, with many remaining bugs that +are likely to cause compiler crashes, erroneous errors and warnings, +and miscompiled code. The <a href="http://llvm.org/bugs/">LLVM bug +tracker</a> contains a Clang C++ component that tracks known Clang C++ +bugs.</p> + +<p>Clang is currently missing implementations of the following C++98/03 features and common extensions:</p> + <ul> + + <li>Access control: Clang does not perform access-control checking + at this time, so it will fail to diagnose invalid accesses. Work + is underway to implement this feature.</li> + + <li>Friends and friend templates: Clang parses friends and friend + templates for the most part, but they are not used in access + control and there are a number of problems with friend templates + and friends within class templates.</li> + + <li>GNU <a href="http://gcc.gnu.org/onlinedocs/gcc-4.1.2/gcc/Strong-Using.html">strong using</a> extension.</li> + + <li>Qualified member accesses that disambiguate the base class in a diamond-shaped inheritance hierarchy.</li> + + </ul> + + <h2 id="projects">Projects Building with Clang</h2> + + <p>Clang is now capable of compiling some language C++ projects, or +large pieces of such projects. The following table describes various +projects that we have attempted to compile with Clang along with the results of that attempt.</p> + + <p> At this point in time, each new C++ project typically uncovers +new bugs. We keep track of these in the <a + href="http://llvm.org/bugs/">LLVM bug tracker</a> via tracking bugs, +which are used to relate all of the bugs known to affect that +particular project. Introducing a new project in this list typically requires a liason familiar with LLVM or Clang development, who is able to provide detailed bug reports and track progress for the particular project.</p> + +<table width="689" border="1" cellspacing="0"> + <tr> + <th>Project</th> + <th>Status</th> + <th>Last Tested</th> + <th>Tracking Bug</th> + </tr> + <tr> + <td><a href="http://clang.llvm.org">Clang</a> and <a href="http://llvm.org">LLVM</a></td> + <td>Successful self-hosting achieved</td> + <td>Continually</td> + <td></td> + </tr> + <tr> + <td><a href="http://www.cmake.org">CMake</a></td> + <td>Compiles, passes regression tests (debug build)</td> + <td>February 9, 2010</td> + <td></td> + </tr> + <tr> + <td><a href="http://qt.nokia.com">Qt</a></td> + <td>Partially compiles; miscompilation of uic prevents complete compilation, qmake works, some small examples also.</td> + <td>February 9, 2010</td> + <td><a href="http://llvm.org/bugs/show_bug.cgi?id=5881">PR5881</a></td> + </tr> + <tr> + <td><a href="http://www.boost.org">Boost</a></td> + <td>Some libraries (e.g., Boost.MPL) successfully build and pass regression tests, the majority still fail.</td> + <td>February 5, 2010</td> + <td><a href="http://llvm.org/bugs/show_bug.cgi?id=6023">PR6023</a></td> + </tr> +</table> + + <h2 id="specification">Implementation Status by Section</h2> <!-- Within this table: The colors we're using to color-code our level @@ -2297,6 +2375,12 @@ welcome!</p> <tr><td> D.5 [depr.c.headers]</td><td></td><td></td><td></td><td></td><td></td></tr> <tr><td>E [extendid]</td><td></td><td></td><td></td><td></td><td></td></tr> <tr> +</table> + + <h2 id="cxx0x">C++0x Implementation status</h2> +<p>Clang's development effort is focused primarily on supporting the current ISO C++ standard (1998/2003). This section tracks the status of various C++0x features. In general, the implementations of these features are far less developed than C++98/03 features.</p> + +<table width="689" border="1" cellspacing="0"> <td colspan="6" align="center" bgcolor="#ffffcc">C++0x Features</td> </tr> <tr> diff --git a/www/diagnostics.html b/www/diagnostics.html index 18f1bc7..4f7d025 100644 --- a/www/diagnostics.html +++ b/www/diagnostics.html @@ -281,7 +281,7 @@ 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 +little things add up over time and contribute to a great user experience. Three examples are:</p> <pre> @@ -314,6 +314,33 @@ and caret diagnostics, because otherwise you don't get the important context. 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>cat t.cc</b> + template<class T> + class a {} + class temp {}; + a<temp> b; + struct b { + } + $ <b>gcc-4.2 t.cc</b> + t.cc:3: error: multiple types in one declaration + t.cc:4: error: non-template type 'a' used as a template + t.cc:4: error: invalid type in declaration before ';' token + t.cc:6: error: expected unqualified-id at end of input + $ <b>clang t.cc</b> + t.cc:2:11: <font color="red">error:</font> expected ';' after class + <font color="darkgreen">class a {}</font> + <font color="blue"> ^</font> + <font color="blue"> ;</font> + t.cc:6:2: <font color="red">error:</font> expected ';' after struct + <font color="darkgreen">}</font> + <font color="blue"> ^</font> + <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/index.html b/www/index.html index 776c729..9adf640 100644 --- a/www/index.html +++ b/www/index.html @@ -89,13 +89,15 @@ <h2>Current Status</h2> <!--=====================================================================--> - <p>Clang is still under heavy development. Clang is considered to be - a production quality C and Objective-C compiler when targetting X86-32 and X86-64 - (other targets may have caveats, but are usually easy to fix). If you are - looking for source - analysis or source-to-source transformation tools, clang is probably - a great solution for you. If you are interested in C++, - <a href="cxx_status.html">full support</a> is still way off.</p> + <p>Clang is still under heavy development. Clang is considered to + be a production quality C and Objective-C compiler when targetting + X86-32 and X86-64 (other targets may have caveats, but are usually + easy to fix). If you are looking for source analysis or + source-to-source transformation tools, clang is probably a great + solution for you. Clang's C++ support is currently alpha quality + at best, but is evolving rapidly: see the <a + href="cxx_status.html">C++ status</a> page for more + information.</p> <!--=====================================================================--> <h2>Get it and get involved!</h2> |