[X86] Use range-based for loops (NFC)
[llvm-project.git] / clang / www / OpenProjects.html
blob5d0b7aaccd89d20f34d262293adcaf5dc0bb0057
1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
2 "http://www.w3.org/TR/html4/strict.dtd">
3 <html>
4 <head>
5 <META http-equiv="Content-Type" content="text/html; charset=utf-8">
6 <title>Clang - Open Projects</title>
7 <link type="text/css" rel="stylesheet" href="menu.css">
8 <link type="text/css" rel="stylesheet" href="content.css">
9 </head>
10 <body>
12 <!--#include virtual="menu.html.incl"-->
14 <div id="content">
16 <h1>Open Clang Projects</h1>
18 <p>Here are a few tasks that are available for anyone to work on, depending
19 on what your interests are. This list is provided to generate ideas, it is not
20 intended to be comprehensive. Please ask on
21 <a href="https://discourse.llvm.org/c/clang">Discourse</a> for more specifics
22 or to verify that one of these isn't already completed.</p>
24 <ul>
25 <li><b>Refresh and improve Clang's documentation</b>: Clang is inconsistent
26 with documenting implementation-defined behaviors. We have significant
27 documentation in the <a href="https://clang.llvm.org/docs/LanguageExtensions.html">
28 Language Extensions</a> page, but the information is incomplete and the page is
29 difficult to navigate. We would appreciate help with:
30 <ul>
31 <li>improving the way this information is presented to users,</li>
32 <li><a href="https://llvm.org/docs/TableGen/">table generating</a>
33 documentation where possible, such as for implementation limits or other
34 target-specific information,</li>
35 <li>adding documentation for currently
36 <a href="https://github.com/llvm/llvm-project/blob/main/clang/include/clang/Basic/AttrDocs.td">
37 undocumented attributes</a>,</li>
38 <li>documenting <a href="https://github.com/llvm/llvm-project/blob/main/clang/include/clang/Basic/DiagnosticDocs.td">
39 diagnostic group flags</a> (adding code examples of what is diagnosed, or
40 other relevant information), or</li>
41 <li>documenting <a href="https://github.com/llvm/llvm-project/blob/main/clang/include/clang/Driver/Options.td">
42 command line options</a>, or</li>
43 <li>help with completing other missing documentation.</li>
44 </ul>
45 These projects are independent of each other.</li>
47 <li><b>Complete the investigation into Clang's C conformance</b>: Clang's
48 <a href="c_status.html">C status page</a> contain a number of entries marked as
49 <code>Unknown</code>. Completing the investigation involves adding
50 <a href="https://github.com/llvm/llvm-project/tree/main/clang/test/C">test
51 coverage</a> for the various standards papers and updating the documentation
52 accordingly.
53 </li>
55 <li><b>Improve Clang's C and C++ standard conformance test coverage</b>:
56 Clang's test suite is structured such that most tests are written to provide
57 coverage for what part of the compiler the feature's implementation exists in;
58 we have parsing tests in <code>clang/test/Parser</code>, and semantic analysis
59 tests in <code>clang/test/Sema*</code>, etc. We also have tests written to
60 provide coverage for the standard requirements (<code>clang/test/CXX</code> and
61 <code>clang/test/C</code>). The standards coverage is not structured in a way
62 that makes it easy to maintain as the standards change over time. No commercial
63 conformance test suite has a license model suitable for open source projects,
64 so we would appreciate help in improving the existing coverage we have both in
65 terms of layout of the tests as well as in coverage of the various standard
66 modes.</li>
68 <li><b>Complete the investigation into Clang's C and C++ Defect Report
69 conformance</b>: Separate from (but related to) general conformance testing is
70 determining which <a href="c_dr_status.html">C defect reports</a> and
71 <a href="cxx_dr_status.html">C++ defect reports</a> Clang implements. These
72 lists currently have a number of entries marked as <code>Unknown</code>.
73 Completing the investigation involves adding test coverage for
74 <a href="https://github.com/llvm/llvm-project/tree/main/clang/test/C/drs">C</a>
75 and
76 <a href="https://github.com/llvm/llvm-project/tree/main/clang/test/CXX/drs">C++</a>
77 defect reports and updating the documentation accordingly.</li>
79 <li><b>Bug triage</b>: Clang's <a href="https://github.com/llvm/llvm-project/issues">
80 issue tracker</a>currently has over 20,000 open issues, many of which are not
81 appropriately tagged, are no longer reproducible, could use a reduced test case,
82 or otherwise needs some manual interaction. We can always use help with
83 <a href="https://llvm.org/docs/BugLifeCycle.html#triaging-bugs">bug triage and
84 issue tracker maintenance</a>.
85 </li>
87 <li><b>Improve build times with Clang</b>: the time it takes Clang to process a
88 translation unit is very important to our users; the lower the build time, the
89 better the overall user experience. It would be good to improve Clang's
90 performance as well as to find ways to proactively alert us when we've
91 introduced a change that has significant negative impact on build times.</li>
93 <li><b>Complete support for the experimental constant expression interpreter
94 </b>: Clang's production constant expression interpreter computes a constant
95 expression result by walking over AST nodes, performing calculations as it
96 goes. This does not have good performance properties, and so we've begun work
97 on an <a href="https://clang.llvm.org/docs/ConstantInterpreter.html">
98 experimental constant expression interpreter</a> that works by converting the
99 AST into bytecode that is interpreted. This effort has a long tail of work left
100 to complete because it requires implementing byte code for every kind of
101 expression and type that can be used in a constant expression for C++ and C.
102 </li>
104 <li><b>Improve clang-doc</b>: Clang's library-based design allows it to be used
105 by a variety of tools that reason about source code.
106 <a href="https://clang.llvm.org/extra/clang-doc.html">clang-doc</a> is one
107 great application of this functionality, which generates code documentation
108 from source code. The tool is in early stages of development and could use more
109 dedicated effort to complete the implementation.</li>
111 <li><b>Self-testing using clang</b>: There are several neat ways to
112 improve the quality of clang by self-testing. Some examples:
113 <ul>
114 <li>Improve the reliability of AST printing and serialization by
115 ensuring that the AST produced by clang on an input doesn't change
116 when it is reparsed or unserialized.
118 <li>Improve parser reliability and error generation by automatically
119 or randomly changing the input checking that clang doesn't crash and
120 that it doesn't generate excessive errors for small input
121 changes. Manipulating the input at both the text and token levels is
122 likely to produce interesting test cases.
123 </ul>
124 </li>
126 <li><b>Continue work on C++20, C++23, C++2c, and C23 support</b>:
127 There are still several C++20 features to complete, and work has begun on
128 supporting the latest language standards. Please see the
129 <a href="cxx_status.html">C++ status report page</a> to find out what is
130 missing.</li>
132 <li><b>StringRef'ize APIs</b>: A thankless but incredibly useful project is
133 StringRef'izing (converting to use <tt>llvm::StringRef</tt> instead of <tt>const
134 char *</tt> or <tt>std::string</tt>) various clang interfaces. This generally
135 simplifies the code and makes it more efficient.</li>
137 <li><b>Configuration Manager</b>: Clang/LLVM works on a large number of
138 architectures and operating systems and can cross-compile to a similarly large
139 number of configurations, but the pitfalls of choosing the command-line
140 options, making sure the right sub-architecture is chosen and that the correct
141 optional elements of your particular system can be a pain.
143 <p>A tool that would investigate hosts and targets, and store the configuration
144 in files that can later be used by Clang itself to avoid command-line options,
145 especially the ones regarding which target options to use, would greatly alleviate
146 this problem. A simple tool, with little or no dependency on LLVM itself, that
147 will investigate a target architecture by probing hardware, software, libraries
148 and compiling and executing code to identify all properties that would be relevant
149 to command-line options (VFP, SSE, NEON, ARM vs. Thumb etc), triple settings etc.</p>
151 <p>The first stage is to build a CFLAGS for Clang that would produce code on the
152 current Host to the identified Target.</p>
154 <p>The second stage would be to produce a configuration file (that can be used
155 independently of the Host) so that Clang can read it and not need a gazillion
156 of command-line options. Such file should be simple JSON / INI or anything that
157 a text editor could change.</p></li>
158 </ul>
160 <p>If you hit a bug with Clang, it is very useful for us if you reduce the code
161 that demonstrates the problem down to something small. There are many ways to
162 do this; ask on <a href="https://discourse.llvm.org/c/clang">Discourse</a>,
163 <a href="https://discord.com/channels/636084430946959380/636725486533345280">Discord</a>,
164 or <a href="https://llvm.org/docs/GettingInvolved.html#irc"IRC</a> for advice.</p>
166 </div>
167 </body>
168 </html>