Home | History | Annotate | Download | only in docs
      1 <html>
      2 <head>
      3 <title>Clang Compiler User's Manual</title>
      4 <link type="text/css" rel="stylesheet" href="../menu.css" />
      5 <link type="text/css" rel="stylesheet" href="../content.css" />
      6 <style type="text/css">
      7 td {
      8 	vertical-align: top;
      9 }
     10 </style>
     11 </head>
     12 <body>
     13 
     14 <!--#include virtual="../menu.html.incl"-->
     15 
     16 <div id="content">
     17 
     18 <h1>Clang Compiler User's Manual</h1>
     19 
     20 <ul>
     21 <li><a href="#intro">Introduction</a>
     22   <ul>
     23   <li><a href="#terminology">Terminology</a></li>
     24   <li><a href="#basicusage">Basic Usage</a></li>
     25   </ul>
     26 </li>
     27 <li><a href="#commandline">Command Line Options</a>
     28   <ul>
     29   <li><a href="#cl_diagnostics">Options to Control Error and Warning
     30       Messages</a></li>
     31   </ul>
     32 </li>
     33 <li><a href="#general_features">Language and Target-Independent Features</a>
     34  <ul>
     35   <li><a href="#diagnostics">Controlling Errors and Warnings</a>
     36    <ul>
     37    <li><a href="#diagnostics_display">Controlling How Clang Displays Diagnostics</a></li>
     38    <li><a href="#diagnostics_mappings">Diagnostic Mappings</a></li>
     39    <li><a href="#diagnostics_categories">Diagnostic Categories</a></li>
     40    <li><a href="#diagnostics_commandline">Controlling Diagnostics via Command Line Flags</a></li>
     41    <li><a href="#diagnostics_pragmas">Controlling Diagnostics via Pragmas</a></li>
     42    <li><a href="#analyzer_diagnositics">Controlling Static Analyzer Diagnostics</a></li>
     43    </ul>
     44   </li>
     45   <li><a href="#precompiledheaders">Precompiled Headers</a></li>
     46   <li><a href="#codegen">Controlling Code Generation</a></li>
     47  </ul>
     48 </li>
     49 <li><a href="#c">C Language Features</a>
     50   <ul>
     51   <li><a href="#c_ext">Extensions supported by clang</a></li>
     52   <li><a href="#c_modes">Differences between various standard modes</a></li>
     53   <li><a href="#c_unimpl_gcc">GCC extensions not implemented yet</a></li>
     54   <li><a href="#c_unsupp_gcc">Intentionally unsupported GCC extensions</a></li>
     55   <li><a href="#c_ms">Microsoft extensions</a></li>
     56   </ul>
     57 </li>
     58 <li><a href="#target_features">Target-Specific Features and Limitations</a>
     59   <ul>
     60   <li><a href="#target_arch">CPU Architectures Features and Limitations</a>
     61     <ul>
     62     <li><a href="#target_arch_x86">X86</a></li>
     63     <li><a href="#target_arch_arm">ARM</a></li>
     64     <li><a href="#target_arch_other">Other platforms</a></li>
     65     </ul>
     66   </li>
     67   <li><a href="#target_os">Operating System Features and Limitations</a>
     68     <ul>
     69     <li><a href="#target_os_darwin">Darwin (Mac OS/X)</a></li>
     70     <li>Linux, etc.</li>
     71     <li><a href="#target_os_win32">Windows</a></li>
     72     </ul>
     73   </li>
     74   </ul>
     75 </li>
     76 </ul>
     77 
     78 
     79 <!-- ======================================================================= -->
     80 <h2 id="intro">Introduction</h2>
     81 <!-- ======================================================================= -->
     82 
     83 <p>The Clang Compiler is an open-source compiler for the C family of programming
     84 languages, aiming to be the best in class implementation of these languages.
     85 Clang builds on the LLVM optimizer and code generator, allowing it to provide
     86 high-quality optimization and code generation support for many targets.  For
     87 more general information, please see the <a href="http://clang.llvm.org">Clang
     88 Web Site</a> or the <a href="http://llvm.org">LLVM Web Site</a>.</p>
     89 
     90 <p>This document describes important notes about using Clang as a compiler for
     91 an end-user, documenting the supported features, command line options, etc.  If
     92 you are interested in using Clang to build a tool that processes code, please
     93 see <a href="InternalsManual.html">the Clang Internals Manual</a>.  If you are
     94 interested in the <a href="http://clang.llvm.org/StaticAnalysis.html">Clang
     95 Static Analyzer</a>, please see its web page.</p>
     96 
     97 <p>Clang is designed to support the C family of programming languages, which
     98 includes <a href="#c">C</a>, <a href="#objc">Objective-C</a>, <a
     99 href="#cxx">C++</a>, and <a href="#objcxx">Objective-C++</a> as well as many
    100 dialects of those.  For language-specific information, please see the
    101 corresponding language specific section:</p>
    102 
    103 <ul>
    104 <li><a href="#c">C Language</a>: K&amp;R C, ANSI C89, ISO C90, ISO C94
    105     (C89+AMD1), ISO C99 (+TC1, TC2, TC3). </li>
    106 <li><a href="#objc">Objective-C Language</a>: ObjC 1, ObjC 2, ObjC 2.1, plus
    107     variants depending on base language.</li>
    108 <li><a href="#cxx">C++ Language Features</a></li>
    109 <li><a href="#objcxx">Objective C++ Language</a></li>
    110 </ul>
    111 
    112 <p>In addition to these base languages and their dialects, Clang supports a
    113 broad variety of language extensions, which are documented in the corresponding
    114 language section.  These extensions are provided to be compatible with the GCC,
    115 Microsoft, and other popular compilers as well as to improve functionality
    116 through Clang-specific features.  The Clang driver and language features are
    117 intentionally designed to be as compatible with the GNU GCC compiler as
    118 reasonably possible, easing migration from GCC to Clang.  In most cases, code
    119 "just works".</p>
    120 
    121 <p>In addition to language specific features, Clang has a variety of features
    122 that depend on what CPU architecture or operating system is being compiled for.
    123 Please see the <a href="#target_features">Target-Specific Features and
    124 Limitations</a> section for more details.</p>
    125 
    126 <p>The rest of the introduction introduces some basic <a
    127 href="#terminology">compiler terminology</a> that is used throughout this manual
    128 and contains a basic <a href="#basicusage">introduction to using Clang</a>
    129 as a command line compiler.</p>
    130 
    131 <!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
    132 <h3 id="terminology">Terminology</h3>
    133 <!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
    134 
    135 <p>Front end, parser, backend, preprocessor, undefined behavior, diagnostic,
    136  optimizer</p>
    137 
    138 <!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
    139 <h3 id="basicusage">Basic Usage</h3>
    140 <!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
    141 
    142 <p>Intro to how to use a C compiler for newbies.</p>
    143 <p>
    144 compile + link
    145 
    146 compile then link
    147 
    148 debug info
    149 
    150 enabling optimizations
    151 
    152 picking a language to use, defaults to C99 by default.  Autosenses based on
    153 extension.
    154 
    155 using a makefile
    156 </p>
    157 
    158 
    159 <!-- ======================================================================= -->
    160 <h2 id="commandline">Command Line Options</h2>
    161 <!-- ======================================================================= -->
    162 
    163 <p>
    164 This section is generally an index into other sections.  It does not go into
    165 depth on the ones that are covered by other sections.  However, the first part
    166 introduces the language selection and other high level options like -c, -g, etc.
    167 </p>
    168 
    169 
    170 <!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
    171 <h3 id="cl_diagnostics">Options to Control Error and Warning Messages</h3>
    172 <!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
    173 
    174 <p><b>-Werror</b>: Turn warnings into errors.</p>
    175 <p><b>-Werror=foo</b>: Turn warning "foo" into an error.</p>
    176 <p><b>-Wno-error=foo</b>: Turn warning "foo" into an warning even if -Werror is
    177    specified.</p>
    178 <p><b>-Wfoo</b>: Enable warning foo</p>
    179 <p><b>-Wno-foo</b>: Disable warning foo</p>
    180 <p><b>-w</b>: Disable all warnings.</p>
    181 <p><b>-pedantic</b>: Warn on language extensions.</p>
    182 <p><b>-pedantic-errors</b>: Error on language extensions.</p>
    183 <p><b>-Wsystem-headers</b>: Enable warnings from system headers.</p>
    184 
    185 <p><b>-ferror-limit=123</b>: Stop emitting diagnostics after 123 errors have
    186    been produced.  The default is 20, and the error limit can be disabled with
    187    -ferror-limit=0.</p>
    188 
    189 <p><b>-ftemplate-backtrace-limit=123</b>: Only emit up to 123 template instantiation notes within the template instantiation backtrace for a single warning or error. The default is 10, and the limit can be disabled with -ftemplate-backtrace-limit=0.</p>
    190 
    191 <!-- ================================================= -->
    192 <h4 id="cl_diag_formatting">Formatting of Diagnostics</h4>
    193 <!-- ================================================= -->
    194 
    195 <p>Clang aims to produce beautiful diagnostics by default, particularly for new
    196 users that first come to Clang.  However, different people have different
    197 preferences, and sometimes Clang is driven by another program that wants to
    198 parse simple and consistent output, not a person. For these cases, Clang
    199 provides a wide range of options to control the exact output format of the
    200 diagnostics that it generates.</p>
    201 
    202 <dl>
    203 
    204 <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
    205 <dt id="opt_fshow-column"><b>-f[no-]show-column</b>: Print column number in
    206 diagnostic.</dt>
    207 <dd>This option, which defaults to on, controls whether or not Clang prints the
    208 column number of a diagnostic.  For example, when this is enabled, Clang will
    209 print something like:
    210 
    211 <pre>
    212   test.c:28:8: warning: extra tokens at end of #endif directive [-Wextra-tokens]
    213   #endif bad
    214          ^
    215          //
    216 </pre>
    217 
    218 <p>When this is disabled, Clang will print "test.c:28: warning..." with no
    219 column number.</p>
    220 </dd>
    221 
    222 <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
    223 <dt id="opt_fshow-source-location"><b>-f[no-]show-source-location</b>: Print
    224 source file/line/column information in diagnostic.</dt>
    225 <dd>This option, which defaults to on, controls whether or not Clang prints the
    226 filename, line number and column number of a diagnostic.  For example,
    227 when this is enabled, Clang will print something like:
    228 
    229 <pre>
    230   test.c:28:8: warning: extra tokens at end of #endif directive [-Wextra-tokens]
    231   #endif bad
    232          ^
    233          //
    234 </pre>
    235 
    236 <p>When this is disabled, Clang will not print the "test.c:28:8: " part.</p>
    237 </dd>
    238 
    239 <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
    240 <dt id="opt_fcaret-diagnostics"><b>-f[no-]caret-diagnostics</b>: Print source
    241 line and ranges from source code in diagnostic.</dt>
    242 <dd>This option, which defaults to on, controls whether or not Clang prints the
    243 source line, source ranges, and caret when emitting a diagnostic.  For example,
    244 when this is enabled, Clang will print something like:
    245 
    246 <pre>
    247   test.c:28:8: warning: extra tokens at end of #endif directive [-Wextra-tokens]
    248   #endif bad
    249          ^
    250          //
    251 </pre>
    252 </dd>
    253 <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
    254 <dt id="opt_fcolor_diagnostics"><b>-f[no-]color-diagnostics</b>: </dt>
    255 <dd>This option, which defaults to on when a color-capable terminal is
    256   detected, controls whether or not Clang prints diagnostics in color.
    257   When this option is enabled, Clang will use colors to highlight
    258   specific parts of the diagnostic, e.g.,
    259  <pre>
    260   <b><font color="black">test.c:28:8: <font color="magenta">warning</font>: extra tokens at end of #endif directive [-Wextra-tokens]</font></b>
    261   #endif bad
    262          <font color="green">^</font>
    263          <font color="green">//</font>
    264 </pre>
    265 
    266 <p>When this is disabled, Clang will just print:</p>
    267 
    268 <pre>
    269   test.c:2:8: warning: extra tokens at end of #endif directive [-Wextra-tokens]
    270   #endif bad
    271          ^
    272          //
    273 </pre>
    274 </dd>
    275 <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
    276 <dt id="opt_fdiagnostics-format"><b>-fdiagnostics-format=clang/msvc/vi</b>:
    277 Changes diagnostic output format to better match IDEs and command line tools.</dt>
    278 <dd>This option controls the output format of the filename, line number, and column printed in diagnostic messages. The options, and their affect on formatting a simple conversion diagnostic, follow:
    279 
    280   <dl>
    281     <dt><b>clang</b> (default)</dt>
    282     <dd>
    283       <pre>t.c:3:11: warning: conversion specifies type 'char *' but the argument has type 'int'</pre>
    284     </dd>
    285 
    286     <dt><b>msvc</b></dt>
    287     <dd>
    288       <pre>t.c(3,11) : warning: conversion specifies type 'char *' but the argument has type 'int'</pre>
    289     </dd>
    290 
    291     <dt><b>vi</b></dt>
    292     <dd>
    293       <pre>t.c +3:11: warning: conversion specifies type 'char *' but the argument has type 'int'</pre>
    294     </dd>
    295   </dl>
    296 </dd>
    297 
    298 <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
    299 <dt id="opt_fdiagnostics-show-name"><b>-f[no-]diagnostics-show-name</b>:
    300 Enable the display of the diagnostic name.</dt>
    301 <dd>This option, which defaults to off, controls whether or not
    302 Clang prints the associated name.</dd>
    303 <br>
    304 <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
    305 <dt id="opt_fdiagnostics-show-option"><b>-f[no-]diagnostics-show-option</b>:
    306 Enable <tt>[-Woption]</tt> information in diagnostic line.</dt>
    307 <dd>This option, which defaults to on,
    308 controls whether or not Clang prints the associated <A
    309 href="#cl_diag_warning_groups">warning group</a> option name when outputting
    310 a warning diagnostic.  For example, in this output:
    311 
    312 <pre>
    313   test.c:28:8: warning: extra tokens at end of #endif directive [-Wextra-tokens]
    314   #endif bad
    315          ^
    316          //
    317 </pre>
    318 
    319 <p>Passing <b>-fno-diagnostics-show-option</b> will prevent Clang from printing
    320 the [<a href="#opt_Wextra-tokens">-Wextra-tokens</a>] information in the
    321 diagnostic.  This information tells you the flag needed to enable or disable the
    322 diagnostic, either from the command line or through <a 
    323 href="#pragma_GCC_diagnostic">#pragma GCC diagnostic</a>.</dd>
    324 
    325 <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
    326 <dt id="opt_fdiagnostics-show-category"><b>-fdiagnostics-show-category=none/id/name</b>:
    327 Enable printing category information in diagnostic line.</dt>
    328 <dd>This option, which defaults to "none",
    329 controls whether or not Clang prints the category associated with a diagnostic
    330 when emitting it.  Each diagnostic may or many not have an associated category,
    331 if it has one, it is listed in the diagnostic categorization field of the
    332 diagnostic line (in the []'s).
    333 
    334 <p>For example, a format string warning will produce these three renditions
    335 based on the setting of this option:</p>
    336 
    337 <pre>
    338   t.c:3:11: warning: conversion specifies type 'char *' but the argument has type 'int' [-Wformat]
    339   t.c:3:11: warning: conversion specifies type 'char *' but the argument has type 'int' [-Wformat<b>,1</b>]
    340   t.c:3:11: warning: conversion specifies type 'char *' but the argument has type 'int' [-Wformat<b>,Format String</b>]
    341 </pre>
    342 
    343 <p>This category can be used by clients that want to group diagnostics by
    344 category, so it should be a high level category.  We want dozens of these, not
    345 hundreds or thousands of them.</p>
    346 </dd>
    347 
    348 
    349 
    350 <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
    351 <dt id="opt_fdiagnostics-fixit-info"><b>-f[no-]diagnostics-fixit-info</b>:
    352 Enable "FixIt" information in the diagnostics output.</dt>
    353 <dd>This option, which defaults to on, controls whether or not Clang prints the
    354 information on how to fix a specific diagnostic underneath it when it knows.
    355 For example, in this output:
    356 
    357 <pre>
    358   test.c:28:8: warning: extra tokens at end of #endif directive [-Wextra-tokens]
    359   #endif bad
    360          ^
    361          //
    362 </pre>
    363 
    364 <p>Passing <b>-fno-diagnostics-fixit-info</b> will prevent Clang from printing
    365 the "//" line at the end of the message.  This information is useful for users
    366 who may not understand what is wrong, but can be confusing for machine
    367 parsing.</p>
    368 </dd>
    369 
    370 <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
    371 <dt id="opt_fdiagnostics-print-source-range-info">
    372 <b>-f[no-]diagnostics-print-source-range-info</b>:
    373 Print machine parsable information about source ranges.</dt>
    374 <dd>This option, which defaults to off, controls whether or not Clang prints
    375 information about source ranges in a machine parsable format after the
    376 file/line/column number information.  The information is a simple sequence of
    377 brace enclosed ranges, where each range lists the start and end line/column
    378 locations.  For example, in this output:
    379 
    380 <pre>
    381 exprs.c:47:15:{47:8-47:14}{47:17-47:24}: error: invalid operands to binary expression ('int *' and '_Complex float')
    382    P = (P-42) + Gamma*4;
    383        ~~~~~~ ^ ~~~~~~~
    384 </pre>
    385 
    386 <p>The {}'s are generated by -fdiagnostics-print-source-range-info.</p>
    387 </dd>
    388 
    389 <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
    390 <dt id="opt_fdiagnostics-parseable-fixits">
    391 <b>-fdiagnostics-parseable-fixits</b>:
    392 Print Fix-Its in a machine parseable form.</dt>
    393 <dd><p>This option makes Clang print available Fix-Its in a machine parseable format at the end of diagnostics. The following example illustrates the format:</p>
    394 
    395 <pre>
    396  fix-it:"t.cpp":{7:25-7:29}:"Gamma"
    397 </pre>
    398 
    399 <p>The range printed is a half-open range, so in this example the characters at
    400 column 25 up to but not including column 29 on line 7 in t.cpp should be
    401 replaced with the string &quot;Gamma&quot;. Either the range or the replacement
    402 string may be empty (representing strict insertions and strict erasures,
    403 respectively). Both the file name and the insertion string escape backslash (as
    404 &quot;\\&quot;), tabs (as &quot;\t&quot;), newlines (as &quot;\n&quot;), double
    405 quotes(as &quot;\&quot;&quot;) and non-printable characters (as octal
    406 &quot;\xxx&quot;).</p>
    407 </dd>
    408 
    409 </dl>
    410 
    411  
    412 
    413 
    414 <!-- ===================================================== -->
    415 <h4 id="cl_diag_warning_groups">Individual Warning Groups</h4>
    416 <!-- ===================================================== -->
    417 
    418 <p>TODO: Generate this from tblgen.  Define one anchor per warning group.</p>
    419 
    420 
    421 <dl>
    422 
    423 
    424 <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
    425 <dt id="opt_Wextra-tokens"><b>-Wextra-tokens</b>: Warn about excess tokens at
    426     the end of a preprocessor directive.</dt>
    427 <dd>This option, which defaults to on, enables warnings about extra tokens at
    428 the end of preprocessor directives.  For example:
    429 
    430 <pre>
    431   test.c:28:8: warning: extra tokens at end of #endif directive [-Wextra-tokens]
    432   #endif bad
    433          ^
    434 </pre>
    435 
    436 <p>These extra tokens are not strictly conforming, and are usually best handled
    437 by commenting them out.</p>
    438 
    439 <p>This option is also enabled by <a href="">-Wfoo</a>, <a href="">-Wbar</a>,
    440  and <a href="">-Wbaz</a>.</p>
    441 </dd>
    442 
    443 <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
    444 <dt id="opt_Wambiguous-member-template"><b>-Wambiguous-member-template</b>:
    445 Warn about unqualified uses of a member template whose name resolves
    446 to another template at the location of the use.</dt>
    447 <dd>This option, which defaults to on, enables a warning in the
    448 following code:
    449 
    450 <pre>
    451 template&lt;typename T> struct set{};
    452 template&lt;typename T> struct trait { typedef const T& type; };
    453 struct Value {
    454   template&lt;typename T> void set(typename trait&lt;T>::type value) {}
    455 };
    456 void foo() {
    457   Value v;
    458   v.set&lt;double>(3.2);
    459 }
    460 </pre>
    461 
    462 <p>C++ [basic.lookup.classref] requires this to be an error, but,
    463 because it's hard to work around, Clang downgrades it to a warning as
    464 an extension.</p>
    465 </dd>
    466 
    467 <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
    468 <dt id="opt_Wbind-to-temporary-copy"><b>-Wbind-to-temporary-copy</b>: Warn about
    469 an unusable copy constructor when binding a reference to a temporary.</dt>
    470 <dd>This option, which defaults to on, enables warnings about binding a
    471 reference to a temporary when the temporary doesn't have a usable copy
    472 constructor.  For example:
    473 
    474 <pre>
    475   struct NonCopyable {
    476     NonCopyable();
    477   private:
    478     NonCopyable(const NonCopyable&);
    479   };
    480   void foo(const NonCopyable&);
    481   void bar() {
    482     foo(NonCopyable());  // Disallowed in C++98; allowed in C++0x.
    483   }
    484 </pre>
    485 <pre>
    486   struct NonCopyable2 {
    487     NonCopyable2();
    488     NonCopyable2(NonCopyable2&);
    489   };
    490   void foo(const NonCopyable2&);
    491   void bar() {
    492     foo(NonCopyable2());  // Disallowed in C++98; allowed in C++0x.
    493   }
    494 </pre>
    495 
    496 <p>Note that if <tt>NonCopyable2::NonCopyable2()</tt> has a default
    497 argument whose instantiation produces a compile error, that error will
    498 still be a hard error in C++98 mode even if this warning is turned
    499 off.</p>
    500 
    501 </dd>
    502 
    503 </dl>
    504 
    505 <!-- ======================================================================= -->
    506 <h2 id="general_features">Language and Target-Independent Features</h2>
    507 <!-- ======================================================================= -->
    508 
    509 
    510 <!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
    511 <h3 id="diagnostics">Controlling Errors and Warnings</h3>
    512 <!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
    513 
    514 <p>Clang provides a number of ways to control which code constructs cause it to
    515 emit errors and warning messages, and how they are displayed to the console.</p>
    516 
    517 <h4 id="diagnostics_display">Controlling How Clang Displays Diagnostics</h4>
    518 
    519 <p>When Clang emits a diagnostic, it includes rich information in the output,
    520 and gives you fine-grain control over which information is printed.  Clang has
    521 the ability to print this information, and these are the options that control
    522 it:</p>
    523 
    524 <ol>
    525 <li>A file/line/column indicator that shows exactly where the diagnostic occurs
    526     in your code [<a href="#opt_fshow-column">-fshow-column</a>, <a
    527     href="#opt_fshow-source-location">-fshow-source-location</a>].</li>
    528 <li>A categorization of the diagnostic as a note, warning, error, or fatal
    529     error.</li>
    530 <li>A text string that describes what the problem is.</li>
    531 <li>An option that indicates whether to print the diagnostic name [<a
    532     href="#opt_fdiagnostics-show-name">-fdiagnostics-show-name</a>].</li>
    533 <li>An option that indicates how to control the diagnostic (for diagnostics that
    534     support it) [<a 
    535    href="#opt_fdiagnostics-show-option">-fdiagnostics-show-option</a>].</li>
    536 <li>A <a href="#diagnostics_categories">high-level category</a> for the
    537     diagnostic for clients that want to group diagnostics by class (for
    538     diagnostics that support it) [<a 
    539    href="#opt_fdiagnostics-show-category">-fdiagnostics-show-category</a>].</li>
    540 <li>The line of source code that the issue occurs on, along with a caret and
    541     ranges that indicate the important locations [<a
    542     href="opt_fcaret-diagnostics">-fcaret-diagnostics</a>].</li>
    543 <li>"FixIt" information, which is a concise explanation of how to fix the
    544     problem (when Clang is certain it knows) [<a
    545     href="opt_fdiagnostics-fixit-info">-fdiagnostics-fixit-info</a>].</li>
    546 <li>A machine-parsable representation of the ranges involved (off by
    547     default) [<a
    548       href="opt_fdiagnostics-print-source-range-info">-fdiagnostics-print-source-range-info</a>].</li>
    549 </ol>
    550 
    551 <p>For more information please see <a href="#cl_diag_formatting">Formatting of
    552 Diagnostics</a>.</p>
    553 
    554 
    555 <h4 id="diagnostics_mappings">Diagnostic Mappings</h4>
    556 
    557 <p>All diagnostics are mapped into one of these 5 classes:</p>
    558 
    559 <ul>
    560 <li>Ignored</li>
    561 <li>Note</li>
    562 <li>Warning</li>
    563 <li>Error</li>
    564 <li>Fatal</li>
    565 </ul>
    566 
    567 <h4 id="diagnostics_categories">Diagnostic Categories</h4>
    568 
    569 <p>Though not shown by default, diagnostics may each be associated with a
    570    high-level category.  This category is intended to make it possible to triage
    571    builds that produce a large number of errors or warnings in a grouped way.
    572 </p>
    573 
    574 <p>Categories are not shown by default, but they can be turned on with the
    575 <a href="#opt_fdiagnostics-show-category">-fdiagnostics-show-category</a> option.
    576 When set to "<tt>name</tt>", the category is printed textually in the diagnostic
    577 output.  When it is set to "<tt>id</tt>", a category number is printed.  The
    578 mapping of category names to category id's can be obtained by running '<tt>clang
    579   --print-diagnostic-categories</tt>'.
    580 </p>
    581 
    582 <h4 id="diagnostics_commandline">Controlling Diagnostics via Command Line
    583  Flags</h4>
    584 
    585 <p>-W flags, -pedantic, etc</p>
    586 
    587 <h4 id="diagnostics_pragmas">Controlling Diagnostics via Pragmas</h4>
    588 
    589 <p>Clang can also control what diagnostics are enabled through the use of
    590 pragmas in the source code. This is useful for turning off specific warnings
    591 in a section of source code. Clang supports GCC's pragma for compatibility
    592 with existing source code, as well as several extensions. </p>
    593 
    594 <p>The pragma may control any warning that can be used from the command line.
    595 Warnings may be set to ignored, warning, error, or fatal. The following 
    596 example code will tell Clang or GCC to ignore the -Wall warnings:</p>
    597 
    598 <pre>
    599 #pragma GCC diagnostic ignored "-Wall"
    600 </pre>
    601 
    602 <p>In addition to all of the functionality provided by GCC's pragma, Clang 
    603 also allows you to push and pop the current warning state.  This is particularly
    604 useful when writing a header file that will be compiled by other people, because 
    605 you don't know what warning flags they build with.</p>
    606 
    607 <p>In the below example
    608 -Wmultichar is ignored for only a single line of code, after which the
    609 diagnostics return to whatever state had previously existed.</p>
    610 
    611 <pre>
    612 #pragma clang diagnostic push
    613 #pragma clang diagnostic ignored "-Wmultichar"
    614 
    615 char b = 'df'; // no warning.
    616 
    617 #pragma clang diagnostic pop
    618 </pre>
    619 
    620 <p>The push and pop pragmas will save and restore the full diagnostic state of
    621 the compiler, regardless of how it was set. That means that it is possible to
    622 use push and pop around GCC compatible diagnostics and Clang will push and pop
    623 them appropriately, while GCC will ignore the pushes and pops as unknown 
    624 pragmas. It should be noted that while Clang supports the GCC pragma, Clang and
    625 GCC do not support the exact same set of warnings, so even when using GCC
    626 compatible #pragmas there is no guarantee that they will have identical behaviour
    627 on both compilers. </p>
    628 
    629 <h4 id="analyzer_diagnositics">Controlling Static Analyzer Diagnostics</h4>
    630 
    631 <p>While not strictly part of the compiler, the diagnostics from Clang's <a
    632 href="http://clang-analyzer.llvm.org">static analyzer</a> can also be influenced
    633 by the user via changes to the source code.  This can be done in two ways:
    634 
    635 <ul>
    636 
    637 <li id="analyzer_annotations"><b>Annotations</b>: The static analyzer recognizes various GCC-style
    638 attributes (e.g., <tt>__attribute__((nonnull)))</tt>) that can either suppress
    639 static analyzer warnings or teach the analyzer about code invariants which
    640 enable it to find more bugs. While many of these attributes are standard GCC
    641 attributes, additional ones have been added to Clang to specifically support the
    642 static analyzer. Detailed information on these annotations can be found in the
    643 <a href="http://clang-analyzer.llvm.org/annotations.html">analyzer's
    644 documentation</a>.</li>
    645 
    646 <li><b><tt>__clang_analyzer__</tt></b>: When the static analyzer is using Clang
    647 to parse source files, it implicitly defines the preprocessor macro
    648 <tt>__clang_analyzer__</tt>. While discouraged, code can use this macro to
    649 selectively exclude code the analyzer examines.  Here is an example:
    650 
    651 <pre>
    652 #ifndef __clang_analyzer__
    653 // Code not to be analyzed
    654 #endif
    655 </pre>
    656 
    657 In general, this usage is discouraged. Instead, we prefer that users file bugs
    658 against the analyzer when it flags false positives. There is also active
    659 discussion of allowing users in the future to selectively silence specific
    660 analyzer warnings (some of which can already be done using <a
    661 href="analyzer_annotations">annotations</a>).</li>
    662 
    663 </ul>
    664 
    665 <!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
    666 <h3 id="precompiledheaders">Precompiled Headers</h3>
    667 <!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
    668 
    669 <p><a href="http://en.wikipedia.org/wiki/Precompiled_header">Precompiled
    670 headers</a> are a general approach employed by many compilers to reduce
    671 compilation time. The underlying motivation of the approach is that it is
    672 common for the same (and often large) header files to be included by
    673 multiple source files. Consequently, compile times can often be greatly improved
    674 by caching some of the (redundant) work done by a compiler to process headers.
    675 Precompiled header files, which represent one of many ways to implement
    676 this optimization, are literally files that represent an on-disk cache that
    677 contains the vital information necessary to reduce some of the work
    678 needed to process a corresponding header file. While details of precompiled
    679 headers vary between compilers, precompiled headers have been shown to be
    680 highly effective at speeding up program compilation on systems with very large
    681 system headers (e.g., Mac OS/X).</p>
    682 
    683 <h4>Generating a PCH File</h4>
    684 
    685 <p>To generate a PCH file using Clang, one invokes Clang with
    686 the <b><tt>-x <i>&lt;language&gt;</i>-header</tt></b> option. This mirrors the
    687 interface in GCC for generating PCH files:</p>
    688 
    689 <pre>
    690   $ gcc -x c-header test.h -o test.h.gch
    691   $ clang -x c-header test.h -o test.h.pch
    692 </pre>
    693 
    694 <h4>Using a PCH File</h4>
    695 
    696 <p>A PCH file can then be used as a prefix header when a
    697 <b><tt>-include</tt></b> option is passed to <tt>clang</tt>:</p>
    698 
    699 <pre>
    700   $ clang -include test.h test.c -o test
    701 </pre>
    702 
    703 <p>The <tt>clang</tt> driver will first check if a PCH file for <tt>test.h</tt>
    704 is available; if so, the contents of <tt>test.h</tt> (and the files it includes)
    705 will be processed from the PCH file. Otherwise, Clang falls back to
    706 directly processing the content of <tt>test.h</tt>. This mirrors the behavior of
    707 GCC.</p>
    708 
    709 <p><b>NOTE:</b> Clang does <em>not</em> automatically use PCH files
    710 for headers that are directly included within a source file. For example:</p>
    711 
    712 <pre>
    713   $ clang -x c-header test.h -o test.h.pch
    714   $ cat test.c
    715   #include "test.h"
    716   $ clang test.c -o test
    717 </pre>
    718 
    719 <p>In this example, <tt>clang</tt> will not automatically use the PCH file for
    720 <tt>test.h</tt> since <tt>test.h</tt> was included directly in the source file
    721 and not specified on the command line using <tt>-include</tt>.</p>
    722 
    723 <h4>Relocatable PCH Files</h4>
    724 <p>It is sometimes necessary to build a precompiled header from headers that
    725 are not yet in their final, installed locations. For example, one might build a
    726 precompiled header within the build tree that is then meant to be installed
    727 alongside the headers. Clang permits the creation of "relocatable" precompiled
    728 headers, which are built with a given path (into the build directory) and can 
    729 later be used from an installed location.</p>
    730 
    731 <p>To build a relocatable precompiled header, place your headers into a
    732 subdirectory whose structure mimics the installed location. For example, if you
    733 want to build a precompiled header for the header <code>mylib.h</code> that
    734 will be installed into <code>/usr/include</code>, create a subdirectory 
    735 <code>build/usr/include</code> and place the header <code>mylib.h</code> into
    736 that subdirectory. If <code>mylib.h</code> depends on other headers, then 
    737 they can be stored within <code>build/usr/include</code> in a way that mimics
    738 the installed location.</p>
    739 
    740 <p>Building a relocatable precompiled header requires two additional arguments.
    741 First, pass the <code>--relocatable-pch</code> flag to indicate that the
    742 resulting PCH file should be relocatable. Second, pass 
    743 <code>-isysroot /path/to/build</code>, which makes all includes for your
    744 library relative to the build directory. For example:</p>
    745 
    746 <pre>
    747   # clang -x c-header --relocatable-pch -isysroot /path/to/build /path/to/build/mylib.h mylib.h.pch
    748 </pre>
    749 
    750 <p>When loading the relocatable PCH file, the various headers used in the PCH
    751 file are found from the system header root. For example, <code>mylib.h</code>
    752 can be found in <code>/usr/include/mylib.h</code>. If the headers are installed
    753 in some other system root, the <code>-isysroot</code> option can be used provide
    754 a different system root from which the headers will be based. For example,
    755 <code>-isysroot /Developer/SDKs/MacOSX10.4u.sdk</code> will look for 
    756 <code>mylib.h</code> in 
    757 <code>/Developer/SDKs/MacOSX10.4u.sdk/usr/include/mylib.h</code>.</p>
    758 
    759 <p>Relocatable precompiled headers are intended to be used in a limited number
    760 of cases where the compilation environment is tightly controlled and the
    761 precompiled header cannot be generated after headers have been installed. 
    762 Relocatable precompiled headers also have some performance impact, because
    763 the difference in location between the header locations at PCH build time vs. 
    764 at the time of PCH use requires one of the PCH optimizations,
    765 <code>stat()</code> caching, to be disabled. However, this change is only 
    766 likely to affect PCH files that reference a large number of headers.</p>
    767 
    768 <!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
    769 <h3 id="codegen">Controlling Code Generation</h3>
    770 <!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
    771 
    772 <p>Clang provides a number of ways to control code generation.  The options are listed below.</p>
    773 
    774 <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
    775 <dl>
    776 <dt id="opt_fcatch-undefined-behavior"><b>-fcatch-undefined-behavior</b>: Turn
    777 on runtime code generation to check for undefined behavior.</dt>
    778 
    779 <dd>This option, which defaults to off, controls whether or not Clang
    780 adds runtime checks for undefined runtime behavior.  If a check fails,
    781 <tt>__builtin_trap()</tt> is used to indicate failure.
    782 The checks are:
    783 <ul>
    784 <li>Subscripting where the static type of one operand is a variable
    785     which is decayed from an array type and the other operand is
    786     greater than the size of the array or less than zero.</li>
    787 <li>Shift operators where the amount shifted is greater or equal to the
    788     promoted bit-width of the left-hand-side or less than zero.</li>
    789 <li>If control flow reaches __builtin_unreachable.
    790 <li>When llvm implements more __builtin_object_size support, reads and
    791     writes for objects that __builtin_object_size indicates we aren't
    792     accessing valid memory.  Bit-fields and vectors are not yet checked.
    793 </ul>
    794 </dd>
    795 
    796 <dt id="opt_fno-assume-sane-operator-new"><b>-fno-assume-sane-operator-new</b>:
    797 Don't assume that the C++'s new operator is sane.</dt>
    798 <dd>This option tells the compiler to do not assume that C++'s global new
    799 operator will always return a pointer that does not
    800 alias any other pointer when the function returns.</dd>
    801 
    802 <dt id="opt_ftrap-function"><b>-ftrap-function=[name]</b>: Instruct code
    803 generator to emit a function call to the specified function name for
    804 <tt>__builtin_trap()</tt>.</dt>
    805 
    806 <dd>LLVM code generator translates <tt>__builtin_trap()</tt> to a trap
    807 instruction if it is supported by the target ISA. Otherwise, the builtin is
    808 translated into a call to <tt>abort</tt>. If this option is set, then the code
    809 generator will always lower the builtin to a call to the specified function
    810 regardless of whether the target ISA has a trap instruction. This option is
    811 useful for environments (e.g. deeply embedded) where a trap cannot be properly
    812 handled, or when some custom behavior is desired.</dd>
    813 </dl>
    814 
    815 <!-- ======================================================================= -->
    816 <h2 id="c">C Language Features</h2>
    817 <!-- ======================================================================= -->
    818 
    819 <p>The support for standard C in clang is feature-complete except for the C99
    820 floating-point pragmas.</p>
    821 
    822 <!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
    823 <h3 id="c_ext">Extensions supported by clang</h3>
    824 <!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
    825 
    826 <p>See <a href="LanguageExtensions.html">clang language extensions</a>.</p>
    827 
    828 <!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
    829 <h3 id="c_modes">Differences between various standard modes</h3>
    830 <!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
    831 
    832 <p>clang supports the -std option, which changes what language mode clang uses.
    833 The supported modes for C are c89, gnu89, c94, c99, gnu99 and various aliases
    834 for those modes.  If no -std option is specified, clang defaults to gnu99 mode.
    835 </p>
    836 
    837 <p>Differences between all c* and gnu* modes:</p>
    838 <ul>
    839 <li>c* modes define "__STRICT_ANSI__".</li>
    840 <li>Target-specific defines not prefixed by underscores, like "linux", are
    841 defined in gnu* modes.</li>
    842 <li>Trigraphs default to being off in gnu* modes; they can be enabled by the
    843 -trigraphs option.</li>
    844 <li>The parser recognizes "asm" and "typeof" as keywords in gnu* modes; the
    845 variants "__asm__" and "__typeof__" are recognized in all modes.</li>
    846 <li>The Apple "blocks" extension is recognized by default in gnu* modes
    847 on some platforms; it can be enabled in any mode with the "-fblocks"
    848 option.</li>
    849 <li>Arrays that are VLA's according to the standard, but which can be constant
    850     folded by the frontend are treated as fixed size arrays.  This occurs for
    851     things like "int X[(1, 2)];", which is technically a VLA.  c* modes are
    852     strictly compliant and treat these as VLAs.</li>
    853 </ul>
    854 
    855 <p>Differences between *89 and *99 modes:</p>
    856 <ul>
    857 <li>The *99 modes default to implementing "inline" as specified in C99, while
    858 the *89 modes implement the GNU version.  This can be overridden for individual
    859 functions with the __gnu_inline__ attribute.</li>
    860 <li>Digraphs are not recognized in c89 mode.</li>
    861 <li>The scope of names defined inside a "for", "if", "switch", "while", or "do"
    862 statement is different. (example: "if ((struct x {int x;}*)0) {}".)</li>
    863 <li>__STDC_VERSION__ is not defined in *89 modes.</li>
    864 <li>"inline" is not recognized as a keyword in c89 mode.</li>
    865 <li>"restrict" is not recognized as a keyword in *89 modes.</li>
    866 <li>Commas are allowed in integer constant expressions in *99 modes.</li>
    867 <li>Arrays which are not lvalues are not implicitly promoted to pointers in
    868 *89 modes.</li>
    869 <li>Some warnings are different.</li>
    870 </ul>
    871 
    872 <p>c94 mode is identical to c89 mode except that digraphs are enabled in
    873 c94 mode (FIXME: And __STDC_VERSION__ should be defined!).</p>
    874 
    875 <!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
    876 <h3 id="c_unimpl_gcc">GCC extensions not implemented yet</h3>
    877 <!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
    878 
    879 <p>clang tries to be compatible with gcc as much as possible, but some gcc
    880 extensions are not implemented yet:</p>
    881 
    882 <ul>
    883 
    884 <li>clang does not support #pragma weak
    885 (<a href="http://llvm.org/bugs/show_bug.cgi?id=3679">bug 3679</a>). Due to
    886 the uses described in the bug, this is likely to be implemented at some
    887 point, at least partially.</li>
    888 
    889 <li>clang does not support decimal floating point types (_Decimal32 and
    890 friends) or fixed-point types (_Fract and friends); nobody has expressed
    891 interest in these features yet, so it's hard to say when they will be
    892 implemented.</li>
    893 
    894 <li>clang does not support nested functions; this is a complex feature which
    895 is infrequently used, so it is unlikely to be implemented anytime soon.</li>
    896 
    897 <li>clang does not support global register variables, this is unlikely
    898 to be implemented soon because it requires additional LLVM backend support.
    899 </li>
    900 
    901 <li>clang does not support static initialization of flexible array
    902 members. This appears to be a rarely used extension, but could be
    903 implemented pending user demand.</li>
    904 
    905 <li>clang does not support __builtin_va_arg_pack/__builtin_va_arg_pack_len. 
    906 This is used rarely, but in some potentially interesting places, like the
    907 glibc headers, so it may be implemented pending user demand.  Note that
    908 because clang pretends to be like GCC 4.2, and this extension was introduced
    909 in 4.3, the glibc headers will not try to use this extension with clang at
    910 the moment.</li>
    911 
    912 <li>clang does not support the gcc extension for forward-declaring function
    913 parameters; this has not showed up in any real-world code yet, though, so it
    914 might never be implemented.</li>
    915 
    916 </ul>
    917 
    918 <p>This is not a complete list; if you find an unsupported extension
    919 missing from this list, please send an e-mail to cfe-dev.  This list
    920 currently excludes C++; see <a href="#cxx">C++ Language Features</a>.
    921 Also, this list does not include bugs in mostly-implemented features; please
    922 see the <a href="http://llvm.org/bugs/buglist.cgi?quicksearch=product%3Aclang+component%3A-New%2BBugs%2CAST%2CBasic%2CDriver%2CHeaders%2CLLVM%2BCodeGen%2Cparser%2Cpreprocessor%2CSemantic%2BAnalyzer">
    923 bug tracker</a> for known existing bugs (FIXME: Is there a section for
    924 bug-reporting guidelines somewhere?).</p>
    925 
    926 <!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
    927 <h3 id="c_unsupp_gcc">Intentionally unsupported GCC extensions</h3>
    928 <!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
    929 
    930 <ul>
    931 
    932 <li>clang does not support the gcc extension that allows variable-length arrays
    933 in structures.  This is for a few reasons: one, it is tricky
    934 to implement, two, the extension is completely undocumented, and three, the
    935 extension appears to be rarely used.  Note that clang <em>does</em> support
    936 flexible array members (arrays with a zero or unspecified size at the end of
    937 a structure).</li>
    938 
    939 <li>clang does not have an equivalent to gcc's "fold"; this means that
    940 clang doesn't accept some constructs gcc might accept in contexts where a
    941 constant expression is required, like "x-x" where x is a variable.</li>
    942 
    943 <li>clang does not support multiple alternative constraints in inline asm; this
    944 is an extremely obscure feature which would be complicated to implement
    945 correctly.</li>
    946 
    947 <li>clang does not support __builtin_apply and friends; this extension is
    948 extremely obscure and difficult to implement reliably.</li>
    949 
    950 </ul>
    951 
    952 <!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
    953 <h3 id="c_ms">Microsoft extensions</h3>
    954 <!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
    955 
    956 <p>clang has some experimental support for extensions from
    957 Microsoft Visual C++; to enable it, use the -fms-extensions command-line
    958 option.  This is the default for Windows targets.  Note that the
    959 support is incomplete; enabling Microsoft extensions will silently drop
    960 certain constructs (including __declspec and Microsoft-style asm statements).
    961 </p>
    962 
    963 <ul>
    964 <li>clang allows setting _MSC_VER with -fmsc-version=. It defaults to 1300 which
    965 is the same as Visual C/C++ 2003. Any number is supported and can greatly affect
    966 what Windows SDK and c++stdlib headers clang can compile. This option will be
    967 removed when clang supports the full set of MS extensions required for these
    968 headers.</li>
    969 
    970 <li>clang does not support the Microsoft extension where anonymous
    971 record members can be declared using user defined typedefs.</li>
    972 
    973 <li>clang supports the Microsoft "#pragma pack" feature for
    974 controlling record layout. GCC also contains support for this feature,
    975 however where MSVC and GCC are incompatible clang follows the MSVC
    976 definition.</li>
    977 </ul>
    978 
    979 <!-- ======================================================================= -->
    980 <h2 id="target_features">Target-Specific Features and Limitations</h2>
    981 <!-- ======================================================================= -->
    982 
    983 
    984 <!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
    985 <h3 id="target_arch">CPU Architectures Features and Limitations</h3>
    986 <!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
    987 
    988 <!-- ======================== -->
    989 <h4 id="target_arch_x86">X86</h4>
    990 <!-- ======================== -->
    991 
    992 <p>The support for X86 (both 32-bit and 64-bit) is considered stable on Darwin
    993 (Mac OS/X), Linux, FreeBSD, and Dragonfly BSD: it has been tested to correctly
    994 compile many large C, C++, Objective-C, and Objective-C++ codebases.</p>
    995 
    996 <p>On x86_64-mingw32, passing i128(by value) is incompatible to Microsoft x64
    997 calling conversion. You might need to tweak WinX86_64ABIInfo::classify()
    998 in lib/CodeGen/TargetInfo.cpp.</p>
    999 
   1000 <!-- ======================== -->
   1001 <h4 id="target_arch_arm">ARM</h4>
   1002 <!-- ======================== -->
   1003 
   1004 <p>The support for ARM (specifically ARMv6 and ARMv7) is considered stable on
   1005 Darwin (iOS): it has been tested to correctly compile many large C, C++,
   1006 Objective-C, and Objective-C++ codebases.  Clang only supports a limited number
   1007 of ARM architectures. It does not yet fully support ARMv5, for example.</p>
   1008 
   1009 <!-- ======================== -->
   1010 <h4 id="target_arch_other">Other platforms</h4>
   1011 <!-- ======================== -->
   1012 clang currently contains some support for PPC and Sparc; however, significant
   1013 pieces of code generation are still missing, and they haven't undergone
   1014 significant testing.
   1015 
   1016 <p>clang contains limited support for the MSP430 embedded processor, but both
   1017 the clang support and the LLVM backend support are highly experimental.
   1018 
   1019 <p>Other platforms are completely unsupported at the moment.  Adding the
   1020 minimal support needed for parsing and semantic analysis on a new platform
   1021 is quite easy; see lib/Basic/Targets.cpp in the clang source tree. This level
   1022 of support is also sufficient for conversion to LLVM IR for simple programs.
   1023 Proper support for conversion to LLVM IR requires adding code to
   1024 lib/CodeGen/CGCall.cpp at the moment; this is likely to change soon, though.
   1025 Generating assembly requires a suitable LLVM backend. 
   1026 
   1027 <!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
   1028 <h3 id="target_os">Operating System Features and Limitations</h3>
   1029 <!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
   1030 
   1031 <!-- ======================================= -->
   1032 <h4 id="target_os_darwin">Darwin (Mac OS/X)</h4>
   1033 <!-- ======================================= -->
   1034 
   1035 <p>No __thread support, 64-bit ObjC support requires SL tools.</p>
   1036 
   1037 <!-- ======================================= -->
   1038 <h4 id="target_os_win32">Windows</h4>
   1039 <!-- ======================================= -->
   1040 
   1041 <p>Experimental supports are on Cygming.</p>
   1042 
   1043 <h5>Cygwin</h5>
   1044 
   1045 <p>Clang works on Cygwin-1.7.</p>
   1046 
   1047 <h5>MinGW32</h5>
   1048 
   1049 <p>Clang works on some mingw32 distributions.
   1050 Clang assumes directories as below;</p>
   1051 
   1052 <ul>
   1053 <li><tt>C:/mingw/include</tt></li>
   1054 <li><tt>C:/mingw/lib</tt></li>
   1055 <li><tt>C:/mingw/lib/gcc/mingw32/4.[3-5].0/include/c++</tt></li>
   1056 </ul>
   1057 
   1058 <p>On MSYS, a few tests might fail. It is due to <a href="http://llvm.org/bugs/show_bug.cgi?id=8520">Bug 8520</a> and is fixed in <a href="http://lists.cs.uiuc.edu/pipermail/llvm-commits/Week-of-Mon-20110314/118106.html">LLVM's r127724</a>.</p>
   1059 
   1060 <h5>MinGW-w64</h5>
   1061 
   1062 <p>For x32(i686-w64-mingw32), it is not supported yet.</p>
   1063 
   1064 <p>For x64(x86_64-w64-mingw32), <a href="http://lists.cs.uiuc.edu/pipermail/llvm-commits/Week-of-Mon-20110321/118499.html">an essential patch(LLVM's r128206)</a> would be needed. It is incompatible to <a href="http://tdm-gcc.tdragon.net/development">TDM-GCC</a> due to the definition of symbol &quot;<code>___chkstk</code>&quot;. Clang assumes as below;<p>
   1065 
   1066 <ul>
   1067 <li><tt>C:/mingw/x86_64-w64-mingw32/include</tt></li>
   1068 <li><tt>C:/mingw/x86_64-w64-mingw32/include/c++/4.5.[23]</tt></li>
   1069 <li>GCC driver &quot;gcc.exe&quot; to build x86_64-w64-mingw32 binary.</li>
   1070 </ul>
   1071 
   1072 <p><a href="http://llvm.org/bugs/show_bug.cgi?id=8833">Some tests might fail</a>
   1073 on x64.</p>
   1074 
   1075 </div>
   1076 </body>
   1077 </html>
   1078