| <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" | 
 |           "http://www.w3.org/TR/html4/strict.dtd"> | 
 | <html> | 
 | <head> | 
 |   <META http-equiv="Content-Type" content="text/html; charset=utf-8"> | 
 |   <title>Clang - Open Projects</title> | 
 |   <link type="text/css" rel="stylesheet" href="menu.css"> | 
 |   <link type="text/css" rel="stylesheet" href="content.css"> | 
 | </head> | 
 | <body> | 
 |  | 
 | <!--#include virtual="menu.html.incl"--> | 
 |  | 
 | <div id="content"> | 
 |  | 
 | <h1>Open Clang Projects</h1> | 
 |  | 
 | <p>Here are a few tasks that are available for anyone to work on, depending | 
 | on what your interests are. This list is provided to generate ideas, it is not | 
 | intended to be comprehensive. Please ask on | 
 | <a href="https://discourse.llvm.org/c/clang">Discourse</a> for more specifics | 
 | or to verify that one of these isn't already completed.</p> | 
 |  | 
 | <ul> | 
 | <li><b>Refresh and improve Clang's documentation</b>: Clang is inconsistent | 
 | with documenting implementation-defined behaviors. We have significant | 
 | documentation in the <a href="https://clang.llvm.org/docs/LanguageExtensions.html"> | 
 | Language Extensions</a> page, but the information is incomplete and the page is | 
 | difficult to navigate. We would appreciate help with: | 
 | <ul> | 
 |   <li>improving the way this information is presented to users,</li> | 
 |   <li><a href="https://llvm.org/docs/TableGen/">table generating</a> | 
 |       documentation where possible, such as for implementation limits or other | 
 |       target-specific information,</li> | 
 |   <li>adding documentation for currently | 
 |      <a href="https://github.com/llvm/llvm-project/blob/main/clang/include/clang/Basic/AttrDocs.td"> | 
 |      undocumented attributes</a>,</li> | 
 |   <li>documenting <a href="https://github.com/llvm/llvm-project/blob/main/clang/include/clang/Basic/DiagnosticDocs.td"> | 
 |       diagnostic group flags</a> (adding code examples of what is diagnosed, or | 
 |       other relevant information), or</li> | 
 |   <li>documenting <a href="https://github.com/llvm/llvm-project/blob/main/clang/include/clang/Driver/Options.td"> | 
 |       command line options</a>, or</li> | 
 |   <li>help with completing other missing documentation.</li> | 
 | </ul> | 
 | These projects are independent of each other.</li> | 
 |  | 
 | <li><b>Complete the investigation into Clang's C conformance</b>: Clang's | 
 | <a href="c_status.html">C status page</a> contain a number of entries marked as | 
 | <code>Unknown</code>. Completing the investigation involves adding | 
 | <a href="https://github.com/llvm/llvm-project/tree/main/clang/test/C">test | 
 | coverage</a> for the various standards papers and updating the documentation | 
 | accordingly. | 
 | </li> | 
 |  | 
 | <li><b>Improve Clang's C and C++ standard conformance test coverage</b>: | 
 | Clang's test suite is structured such that most tests are written to provide | 
 | coverage for what part of the compiler the feature's implementation exists in; | 
 | we have parsing tests in <code>clang/test/Parser</code>, and semantic analysis | 
 | tests in <code>clang/test/Sema*</code>, etc. We also have tests written to | 
 | provide coverage for the standard requirements (<code>clang/test/CXX</code> and | 
 | <code>clang/test/C</code>). The standards coverage is not structured in a way | 
 | that makes it easy to maintain as the standards change over time. No commercial | 
 | conformance test suite has a license model suitable for open source projects, | 
 | so we would appreciate help in improving the existing coverage we have both in | 
 | terms of layout of the tests as well as in coverage of the various standard | 
 | modes.</li> | 
 |  | 
 | <li><b>Complete the investigation into Clang's C and C++ Defect Report | 
 | conformance</b>: Separate from (but related to) general conformance testing is | 
 | determining which <a href="c_dr_status.html">C defect reports</a> and | 
 | <a href="cxx_dr_status.html">C++ defect reports</a> Clang implements. These | 
 | lists currently have a number of entries marked as <code>Unknown</code>. | 
 | Completing the investigation involves adding test coverage for | 
 | <a href="https://github.com/llvm/llvm-project/tree/main/clang/test/C/drs">C</a> | 
 | and | 
 | <a href="https://github.com/llvm/llvm-project/tree/main/clang/test/CXX/drs">C++</a> | 
 | defect reports and updating the documentation accordingly.</li> | 
 |  | 
 | <li><b>Bug triage</b>: Clang's <a href="https://github.com/llvm/llvm-project/issues"> | 
 | issue tracker</a>currently has over 20,000 open issues, many of which are not | 
 | appropriately tagged, are no longer reproducible, could use a reduced test case, | 
 | or otherwise needs some manual interaction. We can always use help with | 
 | <a href="https://llvm.org/docs/BugLifeCycle.html#triaging-bugs">bug triage and | 
 | issue tracker maintenance</a>. | 
 | </li> | 
 |  | 
 | <li><b>Improve build times with Clang</b>: the time it takes Clang to process a | 
 | translation unit is very important to our users; the lower the build time, the | 
 | better the overall user experience. It would be good to improve Clang's | 
 | performance as well as to find ways to proactively alert us when we've | 
 | introduced a change that has significant negative impact on build times.</li> | 
 |  | 
 | <li><b>Complete support for the experimental constant expression interpreter | 
 | </b>: Clang's production constant expression interpreter computes a constant | 
 | expression result by walking over AST nodes, performing calculations as it | 
 | goes. This does not have good performance properties, and so we've begun work | 
 | on an <a href="https://clang.llvm.org/docs/ConstantInterpreter.html"> | 
 | experimental constant expression interpreter</a> that works by converting the | 
 | AST into bytecode that is interpreted. This effort has a long tail of work left | 
 | to complete because it requires implementing byte code for every kind of | 
 | expression and type that can be used in a constant expression for C++ and C. | 
 | </li> | 
 |  | 
 | <li><b>Improve clang-doc</b>: Clang's library-based design allows it to be used | 
 | by a variety of tools that reason about source code. | 
 | <a href="https://clang.llvm.org/extra/clang-doc.html">clang-doc</a> is one | 
 | great application of this functionality, which generates code documentation | 
 | from source code. The tool is in early stages of development and could use more | 
 | dedicated effort to complete the implementation.</li> | 
 |  | 
 | <li><b>Self-testing using clang</b>: There are several neat ways to | 
 | improve the quality of clang by self-testing. Some examples: | 
 | <ul> | 
 |   <li>Improve the reliability of AST printing and serialization by | 
 |   ensuring that the AST produced by clang on an input doesn't change | 
 |   when it is reparsed or unserialized. | 
 |  | 
 |   <li>Improve parser reliability and error generation by automatically | 
 |   or randomly changing the input checking that clang doesn't crash and | 
 |   that it doesn't generate excessive errors for small input | 
 |   changes. Manipulating the input at both the text and token levels is | 
 |   likely to produce interesting test cases. | 
 | </ul> | 
 | </li> | 
 |  | 
 | <li><b>Continue work on C++20, C++23, C++2c, and C23 support</b>: | 
 |   There are still several C++20 features to complete, and work has begun on | 
 |   supporting the latest language standards. Please see the | 
 |   <a href="cxx_status.html">C++ status report page</a> to find out what is | 
 |   missing.</li> | 
 |  | 
 | <li><b>StringRef'ize APIs</b>: A thankless but incredibly useful project is | 
 | StringRef'izing (converting to use <tt>llvm::StringRef</tt> instead of <tt>const | 
 | char *</tt> or <tt>std::string</tt>) various clang interfaces. This generally | 
 | simplifies the code and makes it more efficient.</li> | 
 |  | 
 | <li><b>Configuration Manager</b>: Clang/LLVM works on a large number of | 
 | architectures and operating systems and can cross-compile to a similarly large | 
 | number of configurations, but the pitfalls of choosing the command-line | 
 | options, making sure the right sub-architecture is chosen and that the correct | 
 | optional elements of your particular system can be a pain. | 
 |  | 
 | <p>A tool that would investigate hosts and targets, and store the configuration | 
 | in files that can later be used by Clang itself to avoid command-line options, | 
 | especially the ones regarding which target options to use, would greatly alleviate | 
 | this problem. A simple tool, with little or no dependency on LLVM itself, that | 
 | will investigate a target architecture by probing hardware, software, libraries | 
 | and compiling and executing code to identify all properties that would be relevant | 
 | to command-line options (VFP, SSE, NEON, ARM vs. Thumb etc), triple settings etc.</p> | 
 |  | 
 | <p>The first stage is to build a CFLAGS for Clang that would produce code on the | 
 | current Host to the identified Target.</p> | 
 |  | 
 | <p>The second stage would be to produce a configuration file (that can be used | 
 | independently of the Host) so that Clang can read it and not need a gazillion | 
 | of command-line options. Such file should be simple JSON / INI or anything that | 
 | a text editor could change.</p></li> | 
 | </ul> | 
 |  | 
 | <p>If you hit a bug with Clang, it is very useful for us if you reduce the code | 
 | that demonstrates the problem down to something small. There are many ways to | 
 | do this; ask on <a href="https://discourse.llvm.org/c/clang">Discourse</a>, | 
 | <a href="https://discord.com/channels/636084430946959380/636725486533345280">Discord</a>, | 
 | or <a href="https://llvm.org/docs/GettingInvolved.html#irc"IRC</a> for advice.</p> | 
 |  | 
 | </div> | 
 | </body> | 
 | </html> |