blob: 4329cb62359ef506c41260b7d8d5b7b7cafa2c96 [file] [log] [blame]
Douglas Gregoref527382009-03-13 15:06:27 +00001<!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=ISO-8859-1" />
6 <title>Clang - Get Involved</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>
11
12<!--#include virtual="menu.html.incl"-->
13
14<div id="content">
15
16<h1>Open Clang Projects</h1>
17
18<p>Here are a few tasks that are available for newcomers to work on, depending
19on what your interests are. This list is provided to generate ideas, it is not
20intended to be comprehensive. Please ask on cfe-dev for more specifics or to
21verify that one of these isn't already completed. :)</p>
22
23<ul>
24<li><b>Compile your favorite C/ObjC project with Clang</b>:
25Clang's type-checking and code generation is very close to complete (but not bug free!) for C and Objective-C. We appreciate all reports of code that is
26rejected or miscompiled by the front-end. If you notice invalid code that is not rejected, or poor diagnostics when code is rejected, that is also very important to us. For make-based projects,
Douglas Gregor01cd4fb2009-06-11 14:59:18 +000027the <a href="get_started.html#driver"><code>clang</code></a> driver works as a drop-in replacement for GCC.</li>
Douglas Gregoref527382009-03-13 15:06:27 +000028
Douglas Gregor6ba70bf2009-06-11 14:53:37 +000029<li><b>Undefined behavior checking</b>: CodeGen could
Douglas Gregoref527382009-03-13 15:06:27 +000030insert runtime checks for all sorts of different undefined behaviors, from
31reading uninitialized variables, buffer overflows, and many other things. This
32checking would be expensive, but the optimizers could eliminate many of the
33checks in some cases, and it would be very interesting to test code in this mode
34for certain crowds of people. Because the inserted code is coming from clang,
35the "abort" message could be very detailed about exactly what went wrong.</li>
36
Douglas Gregoref527382009-03-13 15:06:27 +000037<li><b>Improve target support</b>: The current target interfaces are heavily
38stubbed out and need to be implemented fully. See the FIXME's in TargetInfo.
39Additionally, the actual target implementations (instances of TargetInfoImpl)
40also need to be completed.</li>
41
42<li><b>Implement an tool to generate code documentation</b>: Clang's
43library-based design allows it to be used by a variety of tools that reason
44about source code. One great application of Clang would be to build an
45auto-documentation system like doxygen that generates code documentation from
46source code. The advantage of using Clang for such a tool is that the tool would
47use the same preprocessor/parser/ASTs as the compiler itself, giving it a very
48rich understanding of the code.</li>
49
50<li><b>Use clang libraries to implement better versions of existing tools</b>:
51Clang is built as a set of libraries, which means that it is possible to
52implement capabilities similar to other source language tools, improving them
53in various ways. Two examples are <a href="http://distcc.samba.org/">distcc</a>
54and the <a href="http://delta.tigris.org/">delta testcase reduction tool</a>.
Douglas Gregor6ba70bf2009-06-11 14:53:37 +000055The former can be improved to scale better and be more efficient. The latter
Douglas Gregoref527382009-03-13 15:06:27 +000056could also be faster and more efficient at reducing C-family programs if built
57on the clang preprocessor.</li>
58
59<li><b>Use clang libraries to extend Ragel with a JIT</b>: <a
60href="http://research.cs.queensu.ca/~thurston/ragel/">Ragel</a> is a state
61machine compiler that lets you embed C code into state machines and generate
62C code. It would be relatively easy to turn this into a JIT compiler using
63LLVM.</li>
64
65<li><b>Self-testing using clang</b>: There are several neat ways to
66improve the quality of clang by self-testing. Some examples:
67<ul>
68 <li>Improve the reliability of AST printing and serialization by
69 ensuring that the AST produced by clang on an input doesn't change
70 when it is reparsed or unserialized.
71
72 <li>Improve parser reliability and error generation by automatically
73 or randomly changing the input checking that clang doesn't crash and
74 that it doesn't generate excessive errors for small input
75 changes. Manipulating the input at both the text and token levels is
76 likely to produce interesting test cases.
77</ul>
78</li>
79
Gabor Greif930673b2010-10-16 09:29:38 +000080<li><b>Continue work on C++ support</b>: Implementing all of C++ was a very big job, but there are still lots of
81 little pieces that can be improved. Here are some small- to mid-sized C++ implementation projects:
Douglas Gregor25235652009-03-20 20:37:36 +000082<ul>
Douglas Gregor742f2cd2009-06-15 19:53:21 +000083 <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>
84 <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>
Douglas Gregor25235652009-03-20 20:37:36 +000085</ul>
86
87Also, see the <a href="cxx_status.html">C++ status report page</a> to
88find out what is missing and what is already at least partially
89supported.</li>
Douglas Gregoref527382009-03-13 15:06:27 +000090</ul>
91
92<p>If you hit a bug with clang, it is very useful for us if you reduce the code
93that demonstrates the problem down to something small. There are many ways to
94do this; ask on cfe-dev for advice.</p>
95
Gabor Greif67f94b82010-10-16 09:40:21 +000096<ul>
Daniel Dunbar09becee2009-10-17 20:43:50 +000097<li><b>StringRef'ize APIs</b>: A thankless but incredibly useful project is
98StringRef'izing (converting to use <tt>llvm::StringRef</tt> instead of <tt>const
99char *</tt> or <tt>std::string</tt>) various clang interfaces. This generally
100simplifies the code and makes it more efficient.</li>
101
Daniel Dunbarb114d2e2009-10-17 21:50:11 +0000102<li><b>Universal Driver</b>: Clang is inherently a cross compiler. We would like
103to define a new model for cross compilation which provides a great user
104experience -- it should be easy to cross compile applications, install support
105for new architectures, access different compilers and tools, and be consistent
106across different platforms. See the <a href="UniversalDriver.html">Universal
107Driver</a> web page for more information.</li>
Gabor Greif67f94b82010-10-16 09:40:21 +0000108</ul>
Daniel Dunbarb114d2e2009-10-17 21:50:11 +0000109
Douglas Gregoref527382009-03-13 15:06:27 +0000110</div>
111</body>
112</html>