<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
          "http://www.w3.org/TR/html4/strict.dtd">
<!-- Material used from: HTML 4.01 specs: http://www.w3.org/TR/html401/ -->
<html>
<head>
  <META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
  <title>Hacking on clang</title>
  <link type="text/css" rel="stylesheet" href="menu.css">
  <link type="text/css" rel="stylesheet" href="content.css">
  <style type="text/css">
  pre { margin-left: 1.5em; }
  </style>
</head>
<body>
<!--#include virtual="menu.html.incl"-->
<div id="content">
  <!--*********************************************************************-->
  <h1>Hacking on Clang</h1>
  <!--*********************************************************************-->

  <p>This document provides some hints for how to get started hacking
  on Clang for developers who are new to the Clang and/or LLVM
  codebases.</p>
    <ul>
      <li><a href="#style">Coding Standards</a></li>
      <li><a href="#docs">Developer Documentation</a></li>
      <li><a href="#debugging">Debugging</a></li>
      <li><a href="#testing">Testing</a>
      <ul>
        <li><a href="#testingNonWindows">Testing on Unix-like Systems</a></li>
        <li><a href="#testingWindows">Testing using Visual Studio on Windows</a></li>
        <li><a href="#testingCommands">Testing on the Command Line</a></li>
        <li><a href="#testingLibc++">Testing changes affecting libc++</a></li>
      </ul>
      </li>
      <li><a href="#patches">Creating Patch Files</a></li>
      <li><a href="#irgen">LLVM IR Generation</a></li>
    </ul>

  <!--=====================================================================-->
  <h2 id="style">Coding Standards</h2>
  <!--=====================================================================-->

  <p>Clang follows the
  LLVM <a href="https://llvm.org/docs/CodingStandards.html">Coding
  Standards</a>. When submitting patches, please take care to follow these standards
  and to match the style of the code to that present in Clang (for example, in
  terms of indentation, bracing, and statement spacing).</p>

  <p>Clang has a few additional coding standards:</p>
  <ul>
    <li><i>cstdio is forbidden</i>: library code should not output diagnostics
      or other information using <tt>cstdio</tt>; debugging routines should
      use <tt>llvm::errs()</tt>. Other uses of <tt>cstdio</tt> impose behavior
      upon clients and block integrating Clang as a library. Libraries should
      support <tt>raw_ostream</tt> based interfaces for textual
      output. See <a href="https://llvm.org/docs/CodingStandards.html#use-raw-ostream">Coding
      Standards</a>.</li>
  </ul>

  <!--=====================================================================-->
  <h2 id="docs">Developer Documentation</h2>
  <!--=====================================================================-->

  <p>Both Clang and LLVM use doxygen to provide API documentation. Their
  respective web pages (generated nightly) are here:</p>
    <ul>
      <li><a href="https://clang.llvm.org/doxygen">Clang</a></li>
      <li><a href="https://llvm.org/doxygen">LLVM</a></li>
    </ul>

  <p>For work on the LLVM IR generation, the LLVM assembly language
  <a href="https://llvm.org/docs/LangRef.html">reference manual</a> is
  also useful.</p>

  <!--=====================================================================-->
  <h2 id="debugging">Debugging</h2>
  <!--=====================================================================-->

  <p>Inspecting data structures in a debugger:</p>
    <ul>
      <li>Many LLVM and Clang data structures provide
        a <tt>dump()</tt> method which will print a description of the
        data structure to <tt>stderr</tt>.</li>
      <li>The <a href="docs/InternalsManual.html#QualType"><tt>QualType</tt></a>
      structure is used pervasively. This is a simple value class for
      wrapping types with qualifiers; you can use
      the <tt>isConstQualified()</tt>, for example, to get one of the
      qualifiers, and the <tt>getTypePtr()</tt> method to get the
      wrapped <tt>Type*</tt> which you can then dump.</li>
      <li>For <a href="https://lldb.llvm.org"> <tt>LLDB</tt></a> users there are
      data formatters for clang data structures in
      <a href="https://github.com/llvm/llvm-project/blob/main/clang/utils/ClangDataFormat.py">
      <tt>clang/utils/ClangDataFormat.py</tt></a>.</li>
    </ul>

  <!--=====================================================================-->
  <h3 id="debuggingVisualStudio">Debugging using Visual Studio</h3>
  <!--=====================================================================-->

  <p>The files
    <a href="https://github.com/llvm/llvm-project/blob/main/llvm/utils/LLVMVisualizers/llvm.natvis">
      <tt>llvm/utils/LLVMVisualizers/llvm.natvis</tt></a> and
    <a href="https://github.com/llvm/llvm-project/blob/main/clang/utils/ClangVisualizers/clang.natvis">
      <tt>clang/utils/ClangVisualizers/clang.natvis</tt></a> provide debugger visualizers
      that make debugging of more complex data types much easier.</p>
  <p>For Visual Studio 2013 only, put the files into
    <tt>%USERPROFILE%\Documents\Visual Studio 2013\Visualizers</tt> or
    create a symbolic link so they update automatically.</p>
  <p>For later versions of Visual Studio, no installation is required.
    Note also that later versions of Visual Studio also display better visualizations.</p>

  <!--=====================================================================-->
  <h2 id="testing">Testing</h2>
  <!--=====================================================================-->

  <!--=====================================================================-->
  <h3 id="testingNonWindows">Testing on Unix-like Systems</h3>
  <!--=====================================================================-->

  <p>Clang includes a basic regression suite in the tree which can be
  run with <tt>make test</tt> from the top-level clang directory, or
  just <tt>make</tt> in the <em>test</em> sub-directory.
  <tt>make VERBOSE=1</tt> can be used to show more detail
  about what is being run.</p>

  <p>If you built LLVM and Clang using CMake, the test suite can be run
  with <tt>make clang-test</tt> from the top-level LLVM directory.</p>

  <p>The tests primarily consist of a test runner script running the compiler
  under test on individual test files grouped in the directories under the
  test directory.  The individual test files include comments at the
  beginning indicating the Clang compile options to use, to be read
  by the test runner. Embedded comments also can do things like telling
  the test runner that an error is expected at the current line.
  Any output files produced by the test will be placed under
  a created Output directory.</p>

  <p>During the run of <tt>make test</tt>, the terminal output will
  display a line similar to the following:</p>

  <pre>--- Running clang tests for i686-pc-linux-gnu ---</pre>

  <p>followed by a line continually overwritten with the current test
  file being compiled, and an overall completion percentage.</p>

  <p>After the <tt>make test</tt> run completes, the absence of any
  <tt>Failing Tests (count):</tt> message indicates that no tests
  failed unexpectedly.  If any tests did fail, the
  <tt>Failing Tests (count):</tt> message will be followed by a list
  of the test source file paths that failed.  For example:</p>

  <pre>
  Failing Tests (3):
      /home/john/llvm/tools/clang/test/SemaCXX/member-name-lookup.cpp
      /home/john/llvm/tools/clang/test/SemaCXX/namespace-alias.cpp
      /home/john/llvm/tools/clang/test/SemaCXX/using-directive.cpp
</pre>

  <p>If you used the <tt>make VERBOSE=1</tt> option, the terminal
  output will reflect the error messages from the compiler and
  test runner.</p>

  <p>The regression suite can also be run with Valgrind by running
  <tt>make test VG=1</tt> in the top-level clang directory.</p>

  <p>For more intensive changes, running
  the <a href="https://llvm.org/docs/TestingGuide.html#quick-start">LLVM
  Test Suite</a> with clang is recommended. Currently the best way to
  override LLVMGCC, as in: <tt>make LLVMGCC="clang -std=gnu89"
  TEST=nightly report</tt> (make sure <tt>clang</tt> is in your PATH or use the
  full path).</p>

  <!--=====================================================================-->
  <h3 id="testingWindows">Testing using Visual Studio on Windows</h3>
  <!--=====================================================================-->

  <p>The Clang test suite can be run from either Visual Studio or
  the command line.</p>

  <p>Note that the test runner is based on
  Python, which must be installed.  Find Python at:
  <a href="https://www.python.org/downloads/">https://www.python.org/downloads/</a>.
  Download the latest stable version.</p>

  <p>The GnuWin32 tools are also necessary for running the tests.
  Get them from <a href="http://getgnuwin32.sourceforge.net/">
  http://getgnuwin32.sourceforge.net/</a>.
  If the environment variable <tt>%PATH%</tt> does not have GnuWin32,
  or if other grep(s) supercedes GnuWin32 on <tt>%PATH%,</tt>
  you should specify <tt>LLVM_LIT_TOOLS_DIR</tt>
  to CMake explicitly.</p>

  <p>The cmake build tool is set up to create Visual Studio project files
  for running the tests, "clang-test" being the root.  Therefore, to
  run the test from Visual Studio, right-click the clang-test project
  and select "Build".</p>

  <p>
    Please see also
    <a href="https://llvm.org/docs/GettingStartedVS.html">Getting Started
    with the LLVM System using Microsoft Visual Studio</a> and
    <a href="https://llvm.org/docs/CMake.html">Building LLVM with CMake</a>.
  </p>

  <!--=====================================================================-->
  <h3 id="testingCommands">Testing on the Command Line</h3>
  <!--=====================================================================-->

  <p>If you want more control over how the tests are run, it may
  be convenient to run the test harness on the command-line directly. Before
  running tests from the command line, you will need to ensure that
  <tt>lit.site.cfg</tt> files have been created for your build.  You can do
  this by running the tests as described in the previous sections. Once the
  tests have started running, you can stop them with control+C, as the
  files are generated before running any tests.</p>

  <p>Once that is done, to run all the tests from the command line,
  execute a command like the following:</p>

  <pre>
  python (path to llvm)\llvm\utils\lit\lit.py -sv
  --param=build_mode=Win32 --param=build_config=Debug
  --param=clang_site_config=(build dir)\tools\clang\test\lit.site.cfg
 (path to llvm)\llvm\tools\clang\test
</pre>

  <p>For CMake builds e.g. on Windows with Visual Studio, you will need
  to specify your build configuration (Debug, Release, etc.) via
  <tt>--param=build_config=(build config)</tt>.  You may also need to specify
  the build mode (Win32, etc) via <tt>--param=build_mode=(build mode)</tt>.</p>

  <p>Additionally, you will need to specify the lit site configuration which
  lives in (build dir)\tools\clang\test, via
  <tt>--param=clang_site_config=(build dir)\tools\clang\test\lit.site.cfg</tt>.
  </p>

  <p>To run a single test:</p>

  <pre>
  python (path to llvm)\llvm\utils\lit\lit.py -sv
  --param=build_mode=Win32 --param=build_config=Debug
  --param=clang_site_config=(build dir)\tools\clang\test\lit.site.cfg
  (path to llvm)\llvm\tools\clang\test\(dir)\(test)
</pre>

  <p>For example:</p>

  <pre>
  python C:\Tools\llvm\utils\lit\lit.py -sv
  --param=build_mode=Win32 --param=build_config=Debug
  --param=clang_site_config=C:\Tools\build\tools\clang\test\lit.site.cfg
  C:\Tools\llvm\tools\clang\test\Sema\wchar.c
</pre>

  <p>The -sv option above tells the runner to show the test output if
  any tests failed, to help you determine the cause of failure.</p>

  <p>You can also pass in the --no-progress-bar option if you wish to disable
  progress indications while the tests are running.</p>

  <p>Your output might look something like this:</p>

  <pre>lit.py: lit.cfg:152: note: using clang: 'C:\Tools\llvm\bin\Release\clang.EXE'
-- Testing: Testing: 2534 tests, 4 threads --
Testing: 0 .. 10.. 20.. 30.. 40.. 50.. 60.. 70.. 80.. 90..
Testing Time: 81.52s
  Passed           : 2503
  Expectedly Failed:   28
  Unsupported      :    3
</pre>

  <p>The statistic, "Failed" (not shown if all tests pass), is the important one.</p>

  <!--=====================================================================-->
  <h3 id="testingLibc++">Testing changes affecting libc++</h3>
  <!--=====================================================================-->

  <p>Some changes in Clang affect <a href="https://libcxx.llvm.org">libc++</a>,
  for example:</p>
  <ul>
      <li>Changing the output of Clang's diagnostics.</li>
      <li>Changing compiler builtins, especially the builtins used for type traits
      or replacements of library functions like <tt>std::move</tt> or
      <tt>std::forward</tt>.</li>
  </ul>

  <p>After adjusting libc++ to work with the changes, the next revision will be
  tested by libc++'s
  <a href="https://buildkite.com/llvm-project/libcxx-ci">pre-commit CI</a>.

  <p>For most configurations, the pre-commit CI uses a recent
  <a href="https://apt.llvm.org/">nightly build</a> of Clang from LLVM's main
  branch. These configurations do <em>not</em> use the Clang changes in the
  patch. They only use the libc++ changes.</p>

  <p>The &quot;Bootstrapping build&quot; builds Clang and uses it to build and
  test libc++. This build <em>does</em> use the Clang changes in the patch.</p>

  <p>Libc++ supports multiple versions of Clang. Therefore when a patch changes
  the diagnostics it might be required to use a regex in the
  &quot;expected&quot; tests to make it pass the CI.</p>

  <p>Libc++ has more
  <a href="https://libcxx.llvm.org/Contributing.html#pre-commit-ci">
  documentation</a> about the pre-commit CI. For questions regarding
  libc++, the best place to ask is the <tt>#libcxx</tt> channel on
  <a href="https://discord.gg/jzUbyP26tQ">LLVM's Discord server</a>.</p>

  <!--=====================================================================-->
  <h2 id="patches">Creating Patch Files</h2>
  <!--=====================================================================-->

  <p>To contribute changes to Clang see
    <a href="https://llvm.org/docs/GettingStarted.html#sending-patches">LLVM's Getting Started page</a></p>

  <!--=====================================================================-->
  <h2 id="irgen">LLVM IR Generation</h2>
  <!--=====================================================================-->

  <p>The LLVM IR generation part of clang handles conversion of the
    AST nodes output by the Sema module to the LLVM Intermediate
    Representation (IR). Historically, this was referred to as
    "codegen", and the Clang code for this lives
    in <tt>lib/CodeGen</tt>.</p>

  <p>The output is most easily inspected using the <tt>-emit-llvm</tt>
    option to clang (possibly in conjunction with <tt>-o -</tt>). You
    can also use <tt>-emit-llvm-bc</tt> to write an LLVM bitcode file
    which can be processed by the suite of LLVM tools
    like <tt>llvm-dis</tt>, <tt>llvm-nm</tt>, etc. See the LLVM
    <a href="https://llvm.org/docs/CommandGuide/">Command Guide</a>
    for more information.</p>

</div>
</body>
</html>
