| <!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 compiler <a |
| href="http://clang.llvm.org/cxx_status.html">supports almost all of C++11</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 fairly basic.</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: |
| <ul> |
| <li>Model destructors for temporary objects</li> |
| <li>Model the implicit allocator call to <tt>operator new</tt></li> |
| </ul> |
| </li> |
| <li>Path-Sensitive Analysis Engine (ExprEngine): |
| <ul> |
| <li>Allow constructors to be inlined</li> |
| <li>Allow destructors to be inlined</li> |
| <li>Fully model <tt>new</tt> and <tt>delete</tt></li> |
| <li>Track type info through casts more precisely</li> |
| </ul> |
| </li> |
| <li>Checkers: |
| <ul> |
| <li>Check that <tt>new</tt> and <tt>delete</tt> are correctly paired</li> |
| <li>For more ideas, see the <a href="potential_checkers.html">list of potential checkers</a></li> |
| </ul> |
| </li> |
| </ul> |
| |
| </div> |
| </div> |
| </body> |
| </html> |
| |