<div dir="ltr">Thank you so much! With this and the warning documentation you added, we now no longer need to do the "go look at the GCC docs" dance :)<div><div><br></div><div>-- Sean Silva</div></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Jan 24, 2017 at 11:39 AM, Richard Smith via cfe-commits <span dir="ltr"><<a href="mailto:cfe-commits@lists.llvm.org" target="_blank">cfe-commits@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: rsmith<br>
Date: Tue Jan 24 13:39:46 2017<br>
New Revision: 292968<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=292968&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project?rev=292968&view=rev</a><br>
Log:<br>
[docs] Add TableGen-based generator for command line argument documentation,<br>
and generate documentation for all (non-hidden) options supported by the<br>
'clang' driver.<br>
<br>
Added:<br>
    cfe/trunk/docs/<wbr>ClangCommandLineReference.rst<br>
    cfe/trunk/include/clang/<wbr>Driver/ClangOptionDocs.td<br>
    cfe/trunk/utils/TableGen/<wbr>ClangOptionDocEmitter.cpp<br>
Modified:<br>
    cfe/trunk/docs/index.rst<br>
    cfe/trunk/include/clang/<wbr>Driver/CLCompatOptions.td<br>
    cfe/trunk/include/clang/<wbr>Driver/Options.h<br>
    cfe/trunk/include/clang/<wbr>Driver/Options.td<br>
    cfe/trunk/utils/TableGen/<wbr>CMakeLists.txt<br>
    cfe/trunk/utils/TableGen/<wbr>TableGen.cpp<br>
    cfe/trunk/utils/TableGen/<wbr>TableGenBackends.h<br>
<br>
Added: cfe/trunk/docs/<wbr>ClangCommandLineReference.rst<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/docs/ClangCommandLineReference.rst?rev=292968&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/cfe/trunk/docs/<wbr>ClangCommandLineReference.rst?<wbr>rev=292968&view=auto</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- cfe/trunk/docs/<wbr>ClangCommandLineReference.rst (added)<br>
+++ cfe/trunk/docs/<wbr>ClangCommandLineReference.rst Tue Jan 24 13:39:46 2017<br>
@@ -0,0 +1,3286 @@<br>
+..<br>
+  ------------------------------<wbr>------------------------------<wbr>-------<br>
+  NOTE: This file is automatically generated by running clang-tblgen<br>
+  -gen-opt-docs. Do not edit this file by hand!!<br>
+  ------------------------------<wbr>------------------------------<wbr>-------<br>
+<br>
+=============================<wbr>========<br>
+Clang command line argument reference<br>
+=============================<wbr>========<br>
+.. contents::<br>
+   :local:<br>
+<br>
+Introduction<br>
+============<br>
+<br>
+This page lists the command line arguments currently supported by the<br>
+GCC-compatible ``clang`` and ``clang++`` drivers.<br>
+<br>
+<br>
+.. program:: clang<br>
+.. program:: clang0<br>
+.. option:: -A<arg>, --assert <arg>, --assert=<arg><br>
+<br>
+.. program:: clang1<br>
+.. option:: -B<arg>, --prefix <arg>, --prefix=<arg><br>
+<br>
+.. program:: clang2<br>
+.. option:: -C, --comments<br>
+<br>
+.. program:: clang3<br>
+.. option:: -CC, --comments-in-macros<br>
+<br>
+.. program:: clang4<br>
+.. option:: -F<arg><br>
+<br>
+Add directory to framework include search path<br>
+<br>
+.. program:: clang5<br>
+.. option:: -G<arg><br>
+<br>
+.. program:: clang6<br>
+.. option:: -G=<arg><br>
+<br>
+.. program:: clang7<br>
+.. option:: -H, --trace-includes<br>
+<br>
+Show header includes and nesting depth<br>
+<br>
+.. program:: clang8<br>
+.. option:: -Mach<br>
+<br>
+.. program:: clang9<br>
+.. option:: -ObjC<br>
+<br>
+Treat source input files as Objective-C inputs<br>
+<br>
+.. program:: clang10<br>
+.. option:: -ObjC++<br>
+<br>
+Treat source input files as Objective-C++ inputs<br>
+<br>
+.. program:: clang11<br>
+.. option:: -P, --no-line-commands<br>
+<br>
+Disable linemarker output in -E mode<br>
+<br>
+.. program:: clang12<br>
+.. option:: -Q<br>
+<br>
+.. program:: clang13<br>
+.. option:: -Qn<br>
+<br>
+.. program:: clang14<br>
+.. option:: -Qunused-arguments<br>
+<br>
+Don't emit warning for unused driver arguments<br>
+<br>
+.. program:: clang15<br>
+.. option:: -Wa,<arg>,<arg2>...<br>
+<br>
+Pass the comma separated arguments in <arg> to the assembler<br>
+<br>
+.. program:: clang16<br>
+.. option:: -Wlarge-by-value-copy=<arg><br>
+<br>
+.. program:: clang17<br>
+.. option:: -Wp,<arg>,<arg2>...<br>
+<br>
+Pass the comma separated arguments in <arg> to the preprocessor<br>
+<br>
+.. program:: clang18<br>
+.. option:: -X<arg><br>
+<br>
+.. program:: clang19<br>
+.. option:: -X<br>
+<br>
+.. program:: clang20<br>
+.. option:: -Xanalyzer <arg><br>
+<br>
+Pass <arg> to the static analyzer<br>
+<br>
+.. program:: clang21<br>
+.. option:: -Xarch\_<arg1> <arg2><br>
+<br>
+.. program:: clang22<br>
+.. option:: -Xassembler <arg><br>
+<br>
+Pass <arg> to the assembler<br>
+<br>
+.. program:: clang23<br>
+.. option:: -Xcuda-fatbinary <arg><br>
+<br>
+Pass <arg> to fatbinary invocation<br>
+<br>
+.. program:: clang24<br>
+.. option:: -Xcuda-ptxas <arg><br>
+<br>
+Pass <arg> to the ptxas assembler<br>
+<br>
+.. program:: clang25<br>
+.. option:: -Xpreprocessor <arg><br>
+<br>
+Pass <arg> to the preprocessor<br>
+<br>
+.. program:: clang26<br>
+.. option:: -Z<arg><br>
+<br>
+.. program:: clang27<br>
+.. option:: -a<arg>, --profile-blocks<br>
+<br>
+.. program:: clang28<br>
+.. option:: -all\_load<br>
+<br>
+.. program:: clang29<br>
+.. option:: -allowable\_client <arg><br>
+<br>
+.. program:: clang30<br>
+.. option:: --analyze<br>
+<br>
+Run the static analyzer<br>
+<br>
+.. program:: clang31<br>
+.. option:: --analyze-auto<br>
+<br>
+.. program:: clang32<br>
+.. option:: --analyzer-no-default-checks<br>
+<br>
+.. program:: clang33<br>
+.. option:: --analyzer-output<arg><br>
+<br>
+Static analyzer report output format (html\|plist\|plist-multi-<wbr>file\|plist-html\|text).<br>
+<br>
+.. program:: clang34<br>
+.. option:: -ansi, --ansi<br>
+<br>
+.. program:: clang35<br>
+.. option:: -arch <arg><br>
+<br>
+.. program:: clang36<br>
+.. option:: -arch\_errors\_fatal<br>
+<br>
+.. program:: clang37<br>
+.. option:: -arch\_only <arg><br>
+<br>
+.. program:: clang38<br>
+.. option:: -arcmt-migrate-emit-errors<br>
+<br>
+Emit ARC errors even if the migrator can fix them<br>
+<br>
+.. program:: clang39<br>
+.. option:: -arcmt-migrate-report-output <arg><br>
+<br>
+Output path for the plist report<br>
+<br>
+.. program:: clang40<br>
+.. option:: -bind\_at\_load<br>
+<br>
+.. program:: clang41<br>
+.. option:: -bundle<br>
+<br>
+.. program:: clang42<br>
+.. option:: -bundle\_loader <arg><br>
+<br>
+.. program:: clang43<br>
+.. option:: -c, --compile<br>
+<br>
+Only run preprocess, compile, and assemble steps<br>
+<br>
+.. program:: clang44<br>
+.. option:: -client\_name<arg><br>
+<br>
+.. program:: clang45<br>
+.. option:: -compatibility\_version<arg><br>
+<br>
+.. program:: clang46<br>
+.. option:: --constant-cfstrings<br>
+<br>
+.. program:: clang47<br>
+.. option:: -coverage, --coverage<br>
+<br>
+.. program:: clang48<br>
+.. option:: --cuda-compile-host-device<br>
+<br>
+Compile CUDA code for both host and device (default).  Has no effect on non-CUDA compilations.<br>
+<br>
+.. program:: clang49<br>
+.. option:: --cuda-device-only<br>
+<br>
+Compile CUDA code for device only<br>
+<br>
+.. program:: clang50<br>
+.. option:: --cuda-gpu-arch=<arg>, --no-cuda-gpu-arch=<arg><br>
+<br>
+CUDA GPU architecture (e.g. sm\_35).  May be specified more than once.<br>
+<br>
+.. program:: clang51<br>
+.. option:: --cuda-host-only<br>
+<br>
+Compile CUDA code for host only.  Has no effect on non-CUDA compilations.<br>
+<br>
+.. program:: clang52<br>
+.. option:: --cuda-noopt-device-debug, --no-cuda-noopt-device-debug<br>
+<br>
+Enable device-side debug info generation. Disables ptxas optimizations.<br>
+<br>
+.. program:: clang53<br>
+.. option:: -current\_version<arg><br>
+<br>
+.. program:: clang54<br>
+.. option:: -dead\_strip<br>
+<br>
+.. program:: clang55<br>
+.. option:: -dependency-dot <arg><br>
+<br>
+Filename to write DOT-formatted header dependencies to<br>
+<br>
+.. program:: clang56<br>
+.. option:: -dependency-file <arg><br>
+<br>
+Filename (or -) to write dependency output to<br>
+<br>
+.. program:: clang57<br>
+.. option:: -dumpmachine<br>
+<br>
+.. program:: clang58<br>
+.. option:: -dumpversion<br>
+<br>
+.. program:: clang59<br>
+.. option:: --dyld-prefix=<arg>, --dyld-prefix <arg><br>
+<br>
+.. program:: clang60<br>
+.. option:: -dylib\_file <arg><br>
+<br>
+.. program:: clang61<br>
+.. option:: -dylinker<br>
+<br>
+.. program:: clang62<br>
+.. option:: -dylinker\_install\_name<arg><br>
+<br>
+.. program:: clang63<br>
+.. option:: -dynamic<br>
+<br>
+.. program:: clang64<br>
+.. option:: -dynamiclib<br>
+<br>
+.. program:: clang65<br>
+.. option:: -emit-ast<br>
+<br>
+Emit Clang AST files for source inputs<br>
+<br>
+.. program:: clang66<br>
+.. option:: -exported\_symbols\_list <arg><br>
+<br>
+.. program:: clang67<br>
+.. option:: -faligned-new=<arg><br>
+<br>
+.. program:: clang68<br>
+.. option:: -fcuda-approx-transcendentals, -fno-cuda-approx-<wbr>transcendentals<br>
+<br>
+Use approximate transcendental functions<br>
+<br>
+.. program:: clang69<br>
+.. option:: -fcuda-flush-denormals-to-<wbr>zero, -fno-cuda-flush-denormals-to-<wbr>zero<br>
+<br>
+Flush denormal floating point values to zero in CUDA device mode.<br>
+<br>
+.. program:: clang70<br>
+.. option:: -fheinous-gnu-extensions<br>
+<br>
+.. program:: clang71<br>
+.. option:: -flat\_namespace<br>
+<br>
+.. program:: clang72<br>
+.. option:: -fopenmp-targets=<arg1>,<arg2><wbr>...<br>
+<br>
+Specify comma-separated list of triples OpenMP offloading targets to be supported<br>
+<br>
+.. program:: clang73<br>
+.. option:: -force\_cpusubtype\_ALL<br>
+<br>
+.. program:: clang74<br>
+.. option:: -force\_flat\_namespace<br>
+<br>
+.. program:: clang75<br>
+.. option:: -force\_load <arg><br>
+<br>
+.. program:: clang76<br>
+.. option:: -framework <arg><br>
+<br>
+.. program:: clang77<br>
+.. option:: --gcc-toolchain=<arg>, -gcc-toolchain <arg><br>
+<br>
+Use the gcc toolchain at the given directory<br>
+<br>
+.. program:: clang78<br>
+.. option:: -gcodeview<br>
+<br>
+Generate CodeView debug information<br>
+<br>
+.. program:: clang79<br>
+.. option:: -headerpad\_max\_install\_<wbr>names<arg><br>
+<br>
+.. program:: clang80<br>
+.. option:: -help, --help<br>
+<br>
+Display available options<br>
+<br>
+.. program:: clang81<br>
+.. option:: --help-hidden<br>
+<br>
+.. program:: clang82<br>
+.. option:: -image\_base <arg><br>
+<br>
+.. program:: clang83<br>
+.. option:: -index-header-map<br>
+<br>
+Make the next included directory (-I or -F) an indexer header map<br>
+<br>
+.. program:: clang84<br>
+.. option:: -init <arg><br>
+<br>
+.. program:: clang85<br>
+.. option:: -install\_name <arg><br>
+<br>
+.. program:: clang86<br>
+.. option:: -keep\_private\_externs<br>
+<br>
+.. program:: clang87<br>
+.. option:: -lazy\_framework <arg><br>
+<br>
+.. program:: clang88<br>
+.. option:: -lazy\_library <arg><br>
+<br>
+.. program:: clang89<br>
+.. option:: -mbig-endian, -EB<br>
+<br>
+.. program:: clang90<br>
+.. option:: --migrate<br>
+<br>
+Run the migrator<br>
+<br>
+.. program:: clang91<br>
+.. option:: -mlinker-version=<arg><br>
+<br>
+.. program:: clang92<br>
+.. option:: -mlittle-endian, -EL<br>
+<br>
+.. program:: clang93<br>
+.. option:: -mllvm <arg><br>
+<br>
+Additional arguments to forward to LLVM's option processing<br>
+<br>
+.. program:: clang94<br>
+.. option:: -module-dependency-dir <arg><br>
+<br>
+Directory to dump module dependencies to<br>
+<br>
+.. program:: clang95<br>
+.. option:: -multi\_module<br>
+<br>
+.. program:: clang96<br>
+.. option:: -multiply\_defined <arg><br>
+<br>
+.. program:: clang97<br>
+.. option:: -multiply\_defined\_unused <arg><br>
+<br>
+.. program:: clang98<br>
+.. option:: --no-cuda-version-check<br>
+<br>
+Don't error out if the detected version of the CUDA install is too low for the requested CUDA gpu architecture.<br>
+<br>
+.. program:: clang99<br>
+.. option:: -no-integrated-cpp, --no-integrated-cpp<br>
+<br>
+.. program:: clang100<br>
+.. option:: -no\_dead\_strip\_inits\_and\_<wbr>terms<br>
+<br>
+.. program:: clang101<br>
+.. option:: -nobuiltininc<br>
+<br>
+Disable builtin #include directories<br>
+<br>
+.. program:: clang102<br>
+.. option:: -nocudainc<br>
+<br>
+.. program:: clang103<br>
+.. option:: -nocudalib<br>
+<br>
+.. program:: clang104<br>
+.. option:: -nodefaultlibs<br>
+<br>
+.. program:: clang105<br>
+.. option:: -nofixprebinding<br>
+<br>
+.. program:: clang106<br>
+.. option:: -nolibc<br>
+<br>
+.. program:: clang107<br>
+.. option:: -nomultidefs<br>
+<br>
+.. program:: clang108<br>
+.. option:: -nopie<br>
+<br>
+.. program:: clang109<br>
+.. option:: -noprebind<br>
+<br>
+.. program:: clang110<br>
+.. option:: -noseglinkedit<br>
+<br>
+.. program:: clang111<br>
+.. option:: -nostartfiles<br>
+<br>
+.. program:: clang112<br>
+.. option:: -nostdinc, --no-standard-includes<br>
+<br>
+.. program:: clang113<br>
+.. option:: -nostdinc++<br>
+<br>
+Disable standard #include directories for the C++ standard library<br>
+<br>
+.. program:: clang114<br>
+.. option:: -nostdlib, --no-standard-libraries<br>
+<br>
+.. program:: clang115<br>
+.. option:: -nostdlibinc<br>
+<br>
+.. program:: clang116<br>
+.. option:: -o<file>, --output <arg>, --output=<arg><br>
+<br>
+Write output to <file><br>
+<br>
+.. program:: clang117<br>
+.. option:: -objcmt-atomic-property<br>
+<br>
+Make migration to 'atomic' properties<br>
+<br>
+.. program:: clang118<br>
+.. option:: -objcmt-migrate-all<br>
+<br>
+Enable migration to modern ObjC<br>
+<br>
+.. program:: clang119<br>
+.. option:: -objcmt-migrate-annotation<br>
+<br>
+Enable migration to property and method annotations<br>
+<br>
+.. program:: clang120<br>
+.. option:: -objcmt-migrate-designated-<wbr>init<br>
+<br>
+Enable migration to infer NS\_DESIGNATED\_INITIALIZER for initializer methods<br>
+<br>
+.. program:: clang121<br>
+.. option:: -objcmt-migrate-instancetype<br>
+<br>
+Enable migration to infer instancetype for method result type<br>
+<br>
+.. program:: clang122<br>
+.. option:: -objcmt-migrate-literals<br>
+<br>
+Enable migration to modern ObjC literals<br>
+<br>
+.. program:: clang123<br>
+.. option:: -objcmt-migrate-ns-macros<br>
+<br>
+Enable migration to NS\_ENUM/NS\_OPTIONS macros<br>
+<br>
+.. program:: clang124<br>
+.. option:: -objcmt-migrate-property<br>
+<br>
+Enable migration to modern ObjC property<br>
+<br>
+.. program:: clang125<br>
+.. option:: -objcmt-migrate-property-dot-<wbr>syntax<br>
+<br>
+Enable migration of setter/getter messages to property-dot syntax<br>
+<br>
+.. program:: clang126<br>
+.. option:: -objcmt-migrate-protocol-<wbr>conformance<br>
+<br>
+Enable migration to add protocol conformance on classes<br>
+<br>
+.. program:: clang127<br>
+.. option:: -objcmt-migrate-readonly-<wbr>property<br>
+<br>
+Enable migration to modern ObjC readonly property<br>
+<br>
+.. program:: clang128<br>
+.. option:: -objcmt-migrate-readwrite-<wbr>property<br>
+<br>
+Enable migration to modern ObjC readwrite property<br>
+<br>
+.. program:: clang129<br>
+.. option:: -objcmt-migrate-subscripting<br>
+<br>
+Enable migration to modern ObjC subscripting<br>
+<br>
+.. program:: clang130<br>
+.. option:: -objcmt-ns-nonatomic-iosonly<br>
+<br>
+Enable migration to use NS\_NONATOMIC\_IOSONLY macro for setting property's 'atomic' attribute<br>
+<br>
+.. program:: clang131<br>
+.. option:: -objcmt-returns-innerpointer-<wbr>property<br>
+<br>
+Enable migration to annotate property with NS\_RETURNS\_INNER\_POINTER<br>
+<br>
+.. program:: clang132<br>
+.. option:: -objcmt-whitelist-dir-path=<<wbr>arg>, -objcmt-white-list-dir-path=<<wbr>arg><br>
+<br>
+Only modify files with a filename contained in the provided directory path<br>
+<br>
+.. program:: clang133<br>
+.. option:: -object<br>
+<br>
+.. program:: clang134<br>
+.. option:: -p, --profile<br>
+<br>
+.. program:: clang135<br>
+.. option:: -pagezero\_size<arg><br>
+<br>
+.. program:: clang136<br>
+.. option:: -pg<br>
+<br>
+Enable mcount instrumentation<br>
+<br>
+.. program:: clang137<br>
+.. option:: -pie<br>
+<br>
+.. program:: clang138<br>
+.. option:: -pipe, --pipe<br>
+<br>
+Use pipes between commands, when possible<br>
+<br>
+.. program:: clang139<br>
+.. option:: -prebind<br>
+<br>
+.. program:: clang140<br>
+.. option:: -prebind\_all\_twolevel\_<wbr>modules<br>
+<br>
+.. program:: clang141<br>
+.. option:: -preload<br>
+<br>
+.. program:: clang142<br>
+.. option:: --print-diagnostic-categories<br>
+<br>
+.. program:: clang143<br>
+.. option:: -print-file-name=<file>, --print-file-name=<file>, --print-file-name <arg><br>
+<br>
+Print the full library path of <file><br>
+<br>
+.. program:: clang144<br>
+.. option:: -print-ivar-layout<br>
+<br>
+Enable Objective-C Ivar layout bitmap print trace<br>
+<br>
+.. program:: clang145<br>
+.. option:: -print-libgcc-file-name, --print-libgcc-file-name<br>
+<br>
+Print the library path for the currently used compiler runtime library ("libgcc.a" or "libclang\_rt.builtins.\*.a")<br>
+<br>
+.. program:: clang146<br>
+.. option:: -print-multi-directory, --print-multi-directory<br>
+<br>
+.. program:: clang147<br>
+.. option:: -print-multi-lib, --print-multi-lib<br>
+<br>
+.. program:: clang148<br>
+.. option:: -print-prog-name=<name>, --print-prog-name=<name>, --print-prog-name <arg><br>
+<br>
+Print the full program path of <name><br>
+<br>
+.. program:: clang149<br>
+.. option:: -print-search-dirs, --print-search-dirs<br>
+<br>
+Print the paths used for finding libraries and programs<br>
+<br>
+.. program:: clang150<br>
+.. option:: -private\_bundle<br>
+<br>
+.. program:: clang151<br>
+.. option:: -pthread, -no-pthread<br>
+<br>
+Support POSIX threads in generated code<br>
+<br>
+.. program:: clang152<br>
+.. option:: -pthreads<br>
+<br>
+.. program:: clang153<br>
+.. option:: -rdynamic<br>
+<br>
+.. program:: clang154<br>
+.. option:: -read\_only\_relocs <arg><br>
+<br>
+.. program:: clang155<br>
+.. option:: -relocatable-pch, --relocatable-pch<br>
+<br>
+Whether to build a relocatable precompiled header<br>
+<br>
+.. program:: clang156<br>
+.. option:: -remap<br>
+<br>
+.. program:: clang157<br>
+.. option:: -rewrite-legacy-objc<br>
+<br>
+Rewrite Legacy Objective-C source to C++<br>
+<br>
+.. program:: clang158<br>
+.. option:: -rtlib=<arg>, --rtlib=<arg>, --rtlib <arg><br>
+<br>
+Compiler runtime library to use<br>
+<br>
+.. program:: clang159<br>
+.. option:: -save-stats=<arg>, --save-stats=<arg>, -save-stats (equivalent to -save-stats=cwd), --save-stats (equivalent to -save-stats=cwd)<br>
+<br>
+Save llvm statistics.<br>
+<br>
+.. program:: clang160<br>
+.. option:: -save-temps=<arg>, --save-temps=<arg>, -save-temps (equivalent to -save-temps=cwd), --save-temps (equivalent to -save-temps=cwd)<br>
+<br>
+Save intermediate compilation results.<br>
+<br>
+.. program:: clang161<br>
+.. option:: -sectalign <arg1> <arg2> <arg3><br>
+<br>
+.. program:: clang162<br>
+.. option:: -sectcreate <arg1> <arg2> <arg3><br>
+<br>
+.. program:: clang163<br>
+.. option:: -sectobjectsymbols <arg1> <arg2><br>
+<br>
+.. program:: clang164<br>
+.. option:: -sectorder <arg1> <arg2> <arg3><br>
+<br>
+.. program:: clang165<br>
+.. option:: -seg1addr<arg><br>
+<br>
+.. program:: clang166<br>
+.. option:: -seg\_addr\_table <arg><br>
+<br>
+.. program:: clang167<br>
+.. option:: -seg\_addr\_table\_filename <arg><br>
+<br>
+.. program:: clang168<br>
+.. option:: -segaddr <arg1> <arg2><br>
+<br>
+.. program:: clang169<br>
+.. option:: -segcreate <arg1> <arg2> <arg3><br>
+<br>
+.. program:: clang170<br>
+.. option:: -seglinkedit<br>
+<br>
+.. program:: clang171<br>
+.. option:: -segprot <arg1> <arg2> <arg3><br>
+<br>
+.. program:: clang172<br>
+.. option:: -segs\_read\_<arg><br>
+<br>
+.. program:: clang173<br>
+.. option:: -segs\_read\_only\_addr <arg><br>
+<br>
+.. program:: clang174<br>
+.. option:: -segs\_read\_write\_addr <arg><br>
+<br>
+.. program:: clang175<br>
+.. option:: -serialize-diagnostics <arg>, --serialize-diagnostics <arg><br>
+<br>
+Serialize compiler diagnostics to a file<br>
+<br>
+.. program:: clang176<br>
+.. option:: -shared, --shared<br>
+<br>
+.. program:: clang177<br>
+.. option:: -shared-libasan<br>
+<br>
+.. program:: clang178<br>
+.. option:: -shared-libgcc<br>
+<br>
+.. program:: clang179<br>
+.. option:: -single\_module<br>
+<br>
+.. program:: clang180<br>
+.. option:: -specs=<arg>, --specs=<arg><br>
+<br>
+.. program:: clang181<br>
+.. option:: -static, --static<br>
+<br>
+.. program:: clang182<br>
+.. option:: -static-libgcc<br>
+<br>
+.. program:: clang183<br>
+.. option:: -static-libstdc++<br>
+<br>
+.. program:: clang184<br>
+.. option:: -std-default=<arg><br>
+<br>
+.. program:: clang185<br>
+.. option:: -stdlib=<arg>, --stdlib=<arg>, --stdlib <arg><br>
+<br>
+C++ standard library to use<br>
+<br>
+.. program:: clang186<br>
+.. option:: -sub\_library<arg><br>
+<br>
+.. program:: clang187<br>
+.. option:: -sub\_umbrella<arg><br>
+<br>
+.. program:: clang188<br>
+.. option:: --sysroot=<arg>, --sysroot <arg><br>
+<br>
+.. program:: clang189<br>
+.. option:: --target-help<br>
+<br>
+.. program:: clang190<br>
+.. option:: --target=<arg>, -target <arg><br>
+<br>
+Generate code for the given target<br>
+<br>
+.. program:: clang191<br>
+.. option:: -time<br>
+<br>
+Time individual commands<br>
+<br>
+.. program:: clang192<br>
+.. option:: -traditional, --traditional<br>
+<br>
+.. program:: clang193<br>
+.. option:: -traditional-cpp, --traditional-cpp<br>
+<br>
+Enable some traditional CPP emulation<br>
+<br>
+.. program:: clang194<br>
+.. option:: -twolevel\_namespace<br>
+<br>
+.. program:: clang195<br>
+.. option:: -twolevel\_namespace\_hints<br>
+<br>
+.. program:: clang196<br>
+.. option:: -umbrella <arg><br>
+<br>
+.. program:: clang197<br>
+.. option:: -unexported\_symbols\_list <arg><br>
+<br>
+.. program:: clang198<br>
+.. option:: -v, --verbose<br>
+<br>
+Show commands to run and use verbose output<br>
+<br>
+.. program:: clang199<br>
+.. option:: --verify-debug-info<br>
+<br>
+Verify the binary representation of debug output<br>
+<br>
+.. program:: clang200<br>
+.. option:: --version<br>
+<br>
+.. program:: clang201<br>
+.. option:: -w, --no-warnings<br>
+<br>
+Suppress all warnings<br>
+<br>
+.. program:: clang202<br>
+.. option:: -weak-l<arg><br>
+<br>
+.. program:: clang203<br>
+.. option:: -weak\_framework <arg><br>
+<br>
+.. program:: clang204<br>
+.. option:: -weak\_library <arg><br>
+<br>
+.. program:: clang205<br>
+.. option:: -weak\_reference\_mismatches <arg><br>
+<br>
+.. program:: clang206<br>
+.. option:: -whatsloaded<br>
+<br>
+.. program:: clang207<br>
+.. option:: -whyload<br>
+<br>
+.. program:: clang208<br>
+.. option:: -working-directory<arg>, -working-directory=<arg><br>
+<br>
+Resolve file paths relative to the specified directory<br>
+<br>
+.. program:: clang209<br>
+.. option:: -x<language>, --language <arg>, --language=<arg><br>
+<br>
+Treat subsequent input files as having type <language><br>
+<br>
+.. program:: clang210<br>
+.. option:: -y<arg><br>
+<br>
+Actions<br>
+=======<br>
+The action to perform on the input.<br>
+<br>
+.. program:: clang211<br>
+.. option:: -E, --preprocess<br>
+<br>
+Only run the preprocessor<br>
+<br>
+.. program:: clang212<br>
+.. option:: -S, --assemble<br>
+<br>
+Only run preprocess and compilation steps<br>
+<br>
+.. program:: clang213<br>
+.. option:: -emit-llvm<br>
+<br>
+Use the LLVM representation for assembler and object files<br>
+<br>
+.. program:: clang214<br>
+.. option:: -fsyntax-only<br>
+<br>
+.. program:: clang215<br>
+.. option:: -module-file-info<br>
+<br>
+Provide information about a particular module file<br>
+<br>
+.. program:: clang216<br>
+.. option:: --precompile<br>
+<br>
+Only precompile the input<br>
+<br>
+.. program:: clang217<br>
+.. option:: -rewrite-objc<br>
+<br>
+Rewrite Objective-C source to C++<br>
+<br>
+.. program:: clang218<br>
+.. option:: -verify-pch<br>
+<br>
+Load and verify that a pre-compiled header file is not stale<br>
+<br>
+Compilation flags<br>
+=================<br>
+<br>
+Flags controlling the behavior of Clang during compilation. These flags have<br>
+no effect during actions that do not perform compilation.<br>
+<br>
+.. program:: clang219<br>
+.. option:: -D<arg>, --define-macro <arg>, --define-macro=<arg><br>
+<br>
+.. program:: clang220<br>
+.. option:: -U<arg>, --undefine-macro <arg>, --undefine-macro=<arg><br>
+<br>
+.. program:: clang221<br>
+.. option:: -Xclang <arg><br>
+<br>
+Pass <arg> to the clang compiler<br>
+<br>
+.. program:: clang222<br>
+.. option:: -fcomment-block-commands=<arg><wbr>,<arg2>...<br>
+<br>
+Treat each comma separated argument in <arg> as a documentation comment block command<br>
+<br>
+.. program:: clang223<br>
+.. option:: -fdeclspec, -fno-declspec<br>
+<br>
+Allow \_\_declspec as a keyword<br>
+<br>
+.. program:: clang224<br>
+.. option:: -fdepfile-entry=<arg><br>
+<br>
+.. program:: clang225<br>
+.. option:: -fdiagnostics-fixit-info, -fno-diagnostics-fixit-info<br>
+<br>
+.. program:: clang226<br>
+.. option:: -fdiagnostics-format=<arg><br>
+<br>
+.. program:: clang227<br>
+.. option:: -fdiagnostics-parseable-fixits<br>
+<br>
+Print fix-its in machine parseable form<br>
+<br>
+.. program:: clang228<br>
+.. option:: -fdiagnostics-print-source-<wbr>range-info<br>
+<br>
+Print source range spans in numeric form<br>
+<br>
+.. program:: clang229<br>
+.. option:: -fdiagnostics-show-category=<<wbr>arg><br>
+<br>
+.. program:: clang230<br>
+.. option:: -fexperimental-new-pass-<wbr>manager, -fno-experimental-new-pass-<wbr>manager<br>
+<br>
+Enables an experimental new pass manager in LLVM.<br>
+<br>
+.. program:: clang231<br>
+.. option:: -finline-functions, -fno-inline-functions<br>
+<br>
+Inline suitable functions<br>
+<br>
+.. program:: clang232<br>
+.. option:: -finline-hint-functions<br>
+<br>
+Inline functions which are (explicitly or implicitly) marked inline<br>
+<br>
+.. program:: clang233<br>
+.. option:: -fno-crash-diagnostics<br>
+<br>
+.. program:: clang234<br>
+.. option:: -fno-sanitize-blacklist<br>
+<br>
+Don't use blacklist file for sanitizers<br>
+<br>
+.. program:: clang235<br>
+.. option:: -fparse-all-comments<br>
+<br>
+.. program:: clang236<br>
+.. option:: -fsanitize-address-field-<wbr>padding=<arg><br>
+<br>
+Level of field padding for AddressSanitizer<br>
+<br>
+.. program:: clang237<br>
+.. option:: -fsanitize-address-use-after-<wbr>scope, -fno-sanitize-address-use-<wbr>after-scope<br>
+<br>
+Enable use-after-scope detection in AddressSanitizer<br>
+<br>
+.. program:: clang238<br>
+.. option:: -fsanitize-blacklist=<arg><br>
+<br>
+Path to blacklist file for sanitizers<br>
+<br>
+.. program:: clang239<br>
+.. option:: -fsanitize-cfi-cross-dso, -fno-sanitize-cfi-cross-dso<br>
+<br>
+Enable control flow integrity (CFI) checks for cross-DSO calls.<br>
+<br>
+.. program:: clang240<br>
+.. option:: -fsanitize-coverage=<arg1>,<<wbr>arg2>..., -fno-sanitize-coverage=<arg1>,<wbr><arg2>...<br>
+<br>
+Specify the type of coverage instrumentation for Sanitizers<br>
+<br>
+.. program:: clang241<br>
+.. option:: -fsanitize-link-c++-runtime<br>
+<br>
+.. program:: clang242<br>
+.. option:: -fsanitize-memory-track-<wbr>origins, -fno-sanitize-memory-track-<wbr>origins<br>
+<br>
+Enable origins tracking in MemorySanitizer<br>
+<br>
+.. program:: clang243<br>
+.. option:: -fsanitize-memory-track-<wbr>origins=<arg><br>
+<br>
+Enable origins tracking in MemorySanitizer<br>
+<br>
+.. program:: clang244<br>
+.. option:: -fsanitize-memory-use-after-<wbr>dtor<br>
+<br>
+Enable use-after-destroy detection in MemorySanitizer<br>
+<br>
+.. program:: clang245<br>
+.. option:: -fsanitize-recover, -fno-sanitize-recover<br>
+<br>
+.. program:: clang246<br>
+.. option:: -fsanitize-recover=<arg1>,<<wbr>arg2>..., -fno-sanitize-recover=<arg1>,<<wbr>arg2>...<br>
+<br>
+Enable recovery for specified sanitizers<br>
+<br>
+.. program:: clang247<br>
+.. option:: -fsanitize-stats, -fno-sanitize-stats<br>
+<br>
+Enable sanitizer statistics gathering.<br>
+<br>
+.. program:: clang248<br>
+.. option:: -fsanitize-thread-atomics, -fno-sanitize-thread-atomics<br>
+<br>
+Enable atomic operations instrumentation in ThreadSanitizer (default)<br>
+<br>
+.. program:: clang249<br>
+.. option:: -fsanitize-thread-func-entry-<wbr>exit, -fno-sanitize-thread-func-<wbr>entry-exit<br>
+<br>
+Enable function entry/exit instrumentation in ThreadSanitizer (default)<br>
+<br>
+.. program:: clang250<br>
+.. option:: -fsanitize-thread-memory-<wbr>access, -fno-sanitize-thread-memory-<wbr>access<br>
+<br>
+Enable memory access instrumentation in ThreadSanitizer (default)<br>
+<br>
+.. program:: clang251<br>
+.. option:: -fsanitize-trap=<arg1>,<arg2>.<wbr>.., -fno-sanitize-trap=<arg1>,<<wbr>arg2>...<br>
+<br>
+Enable trapping for specified sanitizers<br>
+<br>
+.. program:: clang252<br>
+.. option:: -fsanitize-undefined-strip-<wbr>path-components=<number><br>
+<br>
+Strip (or keep only, if negative) a given number of path components when emitting check metadata.<br>
+<br>
+.. program:: clang253<br>
+.. option:: -fsanitize-undefined-trap-on-<wbr>error, -fno-sanitize-undefined-trap-<wbr>on-error<br>
+<br>
+.. program:: clang254<br>
+.. option:: -fsanitize=<check>,<arg2>..., -fno-sanitize=<arg1>,<arg2>...<br>
+<br>
+Turn on runtime checks for various forms of undefined or suspicious behavior. See user manual for available checks<br>
+<br>
+.. program:: clang255<br>
+.. option:: --param <arg>, --param=<arg><br>
+<br>
+.. program:: clang256<br>
+.. option:: -std=<arg>, --std=<arg>, --std <arg><br>
+<br>
+Language standard to compile for<br>
+<br>
+Include path management<br>
+~~~~~~~~~~~~~~~~~~~~~~~<br>
+<br>
+Flags controlling how ``#include``\s are resolved to files.<br>
+<br>
+.. program:: clang257<br>
+.. option:: -I<arg>, --include-directory <arg>, --include-directory=<arg><br>
+<br>
+Add directory to include search path<br>
+<br>
+.. program:: clang258<br>
+.. option:: -I-, --include-barrier<br>
+<br>
+.. program:: clang259<br>
+.. option:: --cuda-path=<arg><br>
+<br>
+CUDA installation path<br>
+<br>
+.. program:: clang260<br>
+.. option:: -cxx-isystem<directory><br>
+<br>
+Add directory to the C++ SYSTEM include search path<br>
+<br>
+.. program:: clang261<br>
+.. option:: -fbuild-session-file=<file><br>
+<br>
+Use the last modification time of <file> as the build session timestamp<br>
+<br>
+.. program:: clang262<br>
+.. option:: -fbuild-session-timestamp=<<wbr>time since Epoch in seconds><br>
+<br>
+Time when the current build session started<br>
+<br>
+.. program:: clang263<br>
+.. option:: -fmodules-cache-path=<<wbr>directory><br>
+<br>
+Specify the module cache path<br>
+<br>
+.. program:: clang264<br>
+.. option:: -fmodules-disable-diagnostic-<wbr>validation<br>
+<br>
+Disable validation of the diagnostic options when loading the module<br>
+<br>
+.. program:: clang265<br>
+.. option:: -fmodules-prune-after=<<wbr>seconds><br>
+<br>
+Specify the interval (in seconds) after which a module file will be considered unused<br>
+<br>
+.. program:: clang266<br>
+.. option:: -fmodules-prune-interval=<<wbr>seconds><br>
+<br>
+Specify the interval (in seconds) between attempts to prune the module cache<br>
+<br>
+.. program:: clang267<br>
+.. option:: -fmodules-user-build-path <directory><br>
+<br>
+Specify the module user build path<br>
+<br>
+.. program:: clang268<br>
+.. option:: -fmodules-validate-once-per-<wbr>build-session<br>
+<br>
+Don't verify input files for the modules if the module has been successfully validated or loaded during this build session<br>
+<br>
+.. program:: clang269<br>
+.. option:: -fmodules-validate-system-<wbr>headers<br>
+<br>
+Validate the system headers that a module depends on when loading the module<br>
+<br>
+.. program:: clang270<br>
+.. option:: -fprebuilt-module-path=<<wbr>directory><br>
+<br>
+Specify the prebuilt module path<br>
+<br>
+.. program:: clang271<br>
+.. option:: -i<arg><br>
+<br>
+.. program:: clang272<br>
+.. option:: -idirafter<arg>, --include-directory-after <arg>, --include-directory-after=<<wbr>arg><br>
+<br>
+Add directory to AFTER include search path<br>
+<br>
+.. program:: clang273<br>
+.. option:: -iframework<arg><br>
+<br>
+Add directory to SYSTEM framework search path<br>
+<br>
+.. program:: clang274<br>
+.. option:: -imacros<file>, --imacros<file>, --imacros=<arg><br>
+<br>
+Include macros from file before parsing<br>
+<br>
+.. program:: clang275<br>
+.. option:: -include<file>, --include<file>, --include=<arg><br>
+<br>
+Include file before parsing<br>
+<br>
+.. program:: clang276<br>
+.. option:: -include-pch <file><br>
+<br>
+Include precompiled header file<br>
+<br>
+.. program:: clang277<br>
+.. option:: -iprefix<dir>, --include-prefix <arg>, --include-prefix=<arg><br>
+<br>
+Set the -iwithprefix/-<wbr>iwithprefixbefore prefix<br>
+<br>
+.. program:: clang278<br>
+.. option:: -iquote<directory><br>
+<br>
+Add directory to QUOTE include search path<br>
+<br>
+.. program:: clang279<br>
+.. option:: -isysroot<dir><br>
+<br>
+Set the system root directory (usually /)<br>
+<br>
+.. program:: clang280<br>
+.. option:: -isystem<directory><br>
+<br>
+Add directory to SYSTEM include search path<br>
+<br>
+.. program:: clang281<br>
+.. option:: -isystem-after<directory><br>
+<br>
+Add directory to end of the SYSTEM include search path<br>
+<br>
+.. program:: clang282<br>
+.. option:: -ivfsoverlay<arg><br>
+<br>
+Overlay the virtual filesystem described by file over the real file system<br>
+<br>
+.. program:: clang283<br>
+.. option:: -iwithprefix<dir>, --include-with-prefix <arg>, --include-with-prefix-after <arg>, --include-with-prefix-after=<<wbr>arg>, --include-with-prefix=<arg><br>
+<br>
+Set directory to SYSTEM include search path with prefix<br>
+<br>
+.. program:: clang284<br>
+.. option:: -iwithprefixbefore<dir>, --include-with-prefix-before <arg>, --include-with-prefix-before=<<wbr>arg><br>
+<br>
+Set directory to include search path with prefix<br>
+<br>
+.. program:: clang285<br>
+.. option:: -iwithsysroot<directory><br>
+<br>
+Add directory to SYSTEM include search path, absolute paths are relative to -isysroot<br>
+<br>
+.. program:: clang286<br>
+.. option:: --ptxas-path=<arg><br>
+<br>
+Path to ptxas (used for compiling CUDA code)<br>
+<br>
+.. program:: clang287<br>
+.. option:: --system-header-prefix=<<wbr>prefix>, --no-system-header-prefix=<<wbr>prefix>, --system-header-prefix <arg><br>
+<br>
+Treat all #include paths starting with <prefix> as including a system header.<br>
+<br>
+Dependency file generation<br>
+~~~~~~~~~~~~~~~~~~~~~~~~~~<br>
+<br>
+Flags controlling generation of a dependency file for ``make``-like build<br>
+systems.<br>
+<br>
+.. program:: clang288<br>
+.. option:: -M, --dependencies<br>
+<br>
+Like -MD, but also implies -E and writes to stdout by default<br>
+<br>
+.. program:: clang289<br>
+.. option:: -MD, --write-dependencies<br>
+<br>
+Write a depfile containing user and system headers<br>
+<br>
+.. program:: clang290<br>
+.. option:: -MF<file><br>
+<br>
+Write depfile output from -MMD, -MD, -MM, or -M to <file><br>
+<br>
+.. program:: clang291<br>
+.. option:: -MG, --print-missing-file-<wbr>dependencies<br>
+<br>
+Add missing headers to depfile<br>
+<br>
+.. program:: clang292<br>
+.. option:: -MJ<arg><br>
+<br>
+Write a compilation database entry per input<br>
+<br>
+.. program:: clang293<br>
+.. option:: -MM, --user-dependencies<br>
+<br>
+Like -MMD, but also implies -E and writes to stdout by default<br>
+<br>
+.. program:: clang294<br>
+.. option:: -MMD, --write-user-dependencies<br>
+<br>
+Write a depfile containing user headers<br>
+<br>
+.. program:: clang295<br>
+.. option:: -MP<br>
+<br>
+Create phony target for each dependency (other than main file)<br>
+<br>
+.. program:: clang296<br>
+.. option:: -MQ<arg><br>
+<br>
+Specify name of main file output to quote in depfile<br>
+<br>
+.. program:: clang297<br>
+.. option:: -MT<arg><br>
+<br>
+Specify name of main file output in depfile<br>
+<br>
+.. program:: clang298<br>
+.. option:: -MV<br>
+<br>
+Use NMake/Jom format for the depfile<br>
+<br>
+Dumping preprocessor state<br>
+~~~~~~~~~~~~~~~~~~~~~~~~~~<br>
+<br>
+Flags allowing the state of the preprocessor to be dumped in various ways.<br>
+<br>
+.. program:: clang299<br>
+.. option:: -d<br>
+<br>
+.. program:: clang300<br>
+.. option:: -d<arg><br>
+<br>
+.. program:: clang301<br>
+.. option:: -dA<br>
+<br>
+.. program:: clang302<br>
+.. option:: -dD<br>
+<br>
+Print macro definitions in -E mode in addition to normal output<br>
+<br>
+.. program:: clang303<br>
+.. option:: -dI<br>
+<br>
+Print include directives in -E mode in addition to normal output<br>
+<br>
+.. program:: clang304<br>
+.. option:: -dM<br>
+<br>
+Print macro definitions in -E mode instead of normal output<br>
+<br>
+Diagnostic flags<br>
+~~~~~~~~~~~~~~~~<br>
+<br>
+Flags controlling which warnings, errors, and remarks Clang will generate.<br>
+See the :doc:`full list of warning and remark flags <DiagnosticsReference>`.<br>
+<br>
+.. program:: clang305<br>
+.. option:: -R<remark><br>
+<br>
+Enable the specified remark<br>
+<br>
+.. program:: clang306<br>
+.. option:: -Rpass-analysis=<arg><br>
+<br>
+Report transformation analysis from optimization passes whose name matches the given POSIX regular expression<br>
+<br>
+.. program:: clang307<br>
+.. option:: -Rpass-missed=<arg><br>
+<br>
+Report missed transformations by optimization passes whose name matches the given POSIX regular expression<br>
+<br>
+.. program:: clang308<br>
+.. option:: -Rpass=<arg><br>
+<br>
+Report transformations performed by optimization passes whose name matches the given POSIX regular expression<br>
+<br>
+.. program:: clang309<br>
+.. option:: -W<warning>, --extra-warnings, --warn-<arg>, --warn-=<arg><br>
+<br>
+Enable the specified warning<br>
+<br>
+.. program:: clang310<br>
+.. option:: -WCL4<br>
+<br>
+.. program:: clang311<br>
+.. option:: -Wall, --all-warnings<br>
+<br>
+.. program:: clang312<br>
+.. option:: -Wdeprecated, -Wno-deprecated<br>
+<br>
+.. program:: clang313<br>
+.. option:: -Wextra<br>
+<br>
+.. program:: clang314<br>
+.. option:: -Wnonportable-cfstrings<arg>, -Wno-nonportable-cfstrings<<wbr>arg><br>
+<br>
+.. program:: clang315<br>
+.. option:: -Wwrite-strings, -Wno-write-strings<br>
+<br>
+Target-independent compilation options<br>
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<wbr>~~~~~~~~~<br>
+.. program:: clang316<br>
+.. option:: -Wframe-larger-than=<arg><br>
+<br>
+.. program:: clang317<br>
+.. option:: -fPIC, -fno-PIC<br>
+<br>
+.. program:: clang318<br>
+.. option:: -fPIE, -fno-PIE<br>
+<br>
+.. program:: clang319<br>
+.. option:: -faccess-control, -fno-access-control<br>
+<br>
+.. program:: clang320<br>
+.. option:: -faligned-allocation, -faligned-new, -fno-aligned-allocation<br>
+<br>
+Enable C++17 aligned allocation functions<br>
+<br>
+.. program:: clang321<br>
+.. option:: -fallow-unsupported<br>
+<br>
+.. program:: clang322<br>
+.. option:: -faltivec, -fno-altivec, -maltivec<br>
+<br>
+Enable AltiVec vector initializer syntax<br>
+<br>
+.. program:: clang323<br>
+.. option:: -fansi-escape-codes<br>
+<br>
+Use ANSI escape codes for diagnostics<br>
+<br>
+.. program:: clang324<br>
+.. option:: -fapple-kext, -findirect-virtual-calls, -fterminated-vtables<br>
+<br>
+Use Apple's kernel extensions ABI<br>
+<br>
+.. program:: clang325<br>
+.. option:: -fapple-pragma-pack, -fno-apple-pragma-pack<br>
+<br>
+Enable Apple gcc-compatible #pragma pack handling<br>
+<br>
+.. program:: clang326<br>
+.. option:: -fapplication-extension, -fno-application-extension<br>
+<br>
+Restrict code to those available for App Extensions<br>
+<br>
+.. program:: clang327<br>
+.. option:: -fasm, -fno-asm<br>
+<br>
+.. program:: clang328<br>
+.. option:: -fasm-blocks, -fno-asm-blocks<br>
+<br>
+.. program:: clang329<br>
+.. option:: -fassociative-math, -fno-associative-math<br>
+<br>
+.. program:: clang330<br>
+.. option:: -fassume-sane-operator-new, -fno-assume-sane-operator-new<br>
+<br>
+.. program:: clang331<br>
+.. option:: -fast<br>
+<br>
+.. program:: clang332<br>
+.. option:: -fastcp<br>
+<br>
+.. program:: clang333<br>
+.. option:: -fastf<br>
+<br>
+.. program:: clang334<br>
+.. option:: -fasynchronous-unwind-tables, -fno-asynchronous-unwind-<wbr>tables<br>
+<br>
+.. program:: clang335<br>
+.. option:: -fautolink, -fno-autolink<br>
+<br>
+.. program:: clang336<br>
+.. option:: -fblocks, -fno-blocks<br>
+<br>
+Enable the 'blocks' language feature<br>
+<br>
+.. program:: clang337<br>
+.. option:: -fbootclasspath=<arg>, --bootclasspath <arg>, --bootclasspath=<arg><br>
+<br>
+.. program:: clang338<br>
+.. option:: -fborland-extensions, -fno-borland-extensions<br>
+<br>
+Accept non-standard constructs supported by the Borland compiler<br>
+<br>
+.. program:: clang339<br>
+.. option:: -fbracket-depth=<arg><br>
+<br>
+.. program:: clang340<br>
+.. option:: -fbuiltin, -fno-builtin<br>
+<br>
+.. program:: clang341<br>
+.. option:: -fbuiltin-module-map<br>
+<br>
+Load the clang builtins module map file.<br>
+<br>
+.. program:: clang342<br>
+.. option:: -fcaret-diagnostics, -fno-caret-diagnostics<br>
+<br>
+.. program:: clang343<br>
+.. option:: -fclasspath=<arg>, --CLASSPATH <arg>, --CLASSPATH=<arg>, --classpath <arg>, --classpath=<arg><br>
+<br>
+.. program:: clang344<br>
+.. option:: -fcolor-diagnostics, -fno-color-diagnostics<br>
+<br>
+Use colors in diagnostics<br>
+<br>
+.. program:: clang345<br>
+.. option:: -fcommon, -fno-common<br>
+<br>
+.. program:: clang346<br>
+.. option:: -fcompile-resource=<arg>, --resource <arg>, --resource=<arg><br>
+<br>
+.. program:: clang347<br>
+.. option:: -fconstant-cfstrings, -fno-constant-cfstrings<br>
+<br>
+.. program:: clang348<br>
+.. option:: -fconstant-string-class=<arg><br>
+<br>
+.. program:: clang349<br>
+.. option:: -fconstexpr-backtrace-limit=<<wbr>arg><br>
+<br>
+.. program:: clang350<br>
+.. option:: -fconstexpr-depth=<arg><br>
+<br>
+.. program:: clang351<br>
+.. option:: -fconstexpr-steps=<arg><br>
+<br>
+.. program:: clang352<br>
+.. option:: -fcoroutines-ts, -fno-coroutines-ts<br>
+<br>
+Enable support for the C++ Coroutines TS<br>
+<br>
+.. program:: clang353<br>
+.. option:: -fcoverage-mapping, -fno-coverage-mapping<br>
+<br>
+Generate coverage mapping to enable code coverage analysis<br>
+<br>
+.. program:: clang354<br>
+.. option:: -fcreate-profile<br>
+<br>
+.. program:: clang355<br>
+.. option:: -fcxx-exceptions, -fno-cxx-exceptions<br>
+<br>
+Enable C++ exceptions<br>
+<br>
+.. program:: clang356<br>
+.. option:: -fcxx-modules, -fno-cxx-modules<br>
+<br>
+.. program:: clang357<br>
+.. option:: -fdata-sections, -fno-data-sections<br>
+<br>
+Place each data in its own section (ELF Only)<br>
+<br>
+.. program:: clang358<br>
+.. option:: -fdebug-info-for-profiling, -fno-debug-info-for-profiling<br>
+<br>
+Emit extra debug info to make sample profile more accurate.<br>
+<br>
+.. program:: clang359<br>
+.. option:: -fdebug-pass-arguments<br>
+<br>
+.. program:: clang360<br>
+.. option:: -fdebug-pass-structure<br>
+<br>
+.. program:: clang361<br>
+.. option:: -fdebug-prefix-map=<arg><br>
+<br>
+remap file source paths in debug info<br>
+<br>
+.. program:: clang362<br>
+.. option:: -fdebug-types-section, -fno-debug-types-section<br>
+<br>
+Place debug types in their own section (ELF Only)<br>
+<br>
+.. program:: clang363<br>
+.. option:: -fdelayed-template-parsing, -fno-delayed-template-parsing<br>
+<br>
+Parse templated function definitions at the end of the translation unit<br>
+<br>
+.. program:: clang364<br>
+.. option:: -fdenormal-fp-math=<arg><br>
+<br>
+.. program:: clang365<br>
+.. option:: -fdiagnostics-absolute-paths<br>
+<br>
+Print absolute paths in diagnostics<br>
+<br>
+.. program:: clang366<br>
+.. option:: -fdiagnostics-color, -fno-diagnostics-color<br>
+<br>
+.. program:: clang367<br>
+.. option:: -fdiagnostics-color=<arg><br>
+<br>
+.. program:: clang368<br>
+.. option:: -fdiagnostics-show-hotness, -fno-diagnostics-show-hotness<br>
+<br>
+Enable profile hotness information in diagnostic line<br>
+<br>
+.. program:: clang369<br>
+.. option:: -fdiagnostics-show-note-<wbr>include-stack, -fno-diagnostics-show-note-<wbr>include-stack<br>
+<br>
+Display include stacks for diagnostic notes<br>
+<br>
+.. program:: clang370<br>
+.. option:: -fdiagnostics-show-option, -fno-diagnostics-show-option<br>
+<br>
+Print option name with mappable diagnostics<br>
+<br>
+.. program:: clang371<br>
+.. option:: -fdiagnostics-show-template-<wbr>tree<br>
+<br>
+Print a template comparison tree for differing templates<br>
+<br>
+.. program:: clang372<br>
+.. option:: -fdollars-in-identifiers, -fno-dollars-in-identifiers<br>
+<br>
+Allow '$' in identifiers<br>
+<br>
+.. program:: clang373<br>
+.. option:: -fdwarf-directory-asm, -fno-dwarf-directory-asm<br>
+<br>
+.. program:: clang374<br>
+.. option:: -felide-constructors, -fno-elide-constructors<br>
+<br>
+.. program:: clang375<br>
+.. option:: -feliminate-unused-debug-<wbr>symbols, -fno-eliminate-unused-debug-<wbr>symbols<br>
+<br>
+.. program:: clang376<br>
+.. option:: -fembed-bitcode=<option>, -fembed-bitcode (equivalent to -fembed-bitcode=all), -fembed-bitcode-marker (equivalent to -fembed-bitcode=marker)<br>
+<br>
+Embed LLVM bitcode (option: off, all, bitcode, marker)<br>
+<br>
+.. program:: clang377<br>
+.. option:: -femit-all-decls<br>
+<br>
+Emit all declarations, even if unused<br>
+<br>
+.. program:: clang378<br>
+.. option:: -femulated-tls, -fno-emulated-tls<br>
+<br>
+Use emutls functions to access thread\_local variables<br>
+<br>
+.. program:: clang379<br>
+.. option:: -fencoding=<arg>, --encoding <arg>, --encoding=<arg><br>
+<br>
+.. program:: clang380<br>
+.. option:: -ferror-limit=<arg><br>
+<br>
+.. program:: clang381<br>
+.. option:: -fexceptions, -fno-exceptions<br>
+<br>
+Enable support for exception handling<br>
+<br>
+.. program:: clang382<br>
+.. option:: -fexec-charset=<arg><br>
+<br>
+.. program:: clang383<br>
+.. option:: -fextdirs=<arg>, --extdirs <arg>, --extdirs=<arg><br>
+<br>
+.. program:: clang384<br>
+.. option:: -ffast-math, -fno-fast-math<br>
+<br>
+Allow aggressive, lossy floating-point optimizations<br>
+<br>
+.. program:: clang385<br>
+.. option:: -ffinite-math-only, -fno-finite-math-only<br>
+<br>
+.. program:: clang386<br>
+.. option:: -ffor-scope, -fno-for-scope<br>
+<br>
+.. program:: clang387<br>
+.. option:: -ffp-contract=<arg><br>
+<br>
+Form fused FP ops (e.g. FMAs): fast (everywhere) \| on (according to FP\_CONTRACT pragma, default) \| off (never fuse)<br>
+<br>
+.. program:: clang388<br>
+.. option:: -ffreestanding<br>
+<br>
+Assert that the compilation takes place in a freestanding environment<br>
+<br>
+.. program:: clang389<br>
+.. option:: -ffunction-sections, -fno-function-sections<br>
+<br>
+Place each function in its own section (ELF Only)<br>
+<br>
+.. program:: clang390<br>
+.. option:: -fgnu-inline-asm, -fno-gnu-inline-asm<br>
+<br>
+.. program:: clang391<br>
+.. option:: -fgnu-keywords, -fno-gnu-keywords<br>
+<br>
+Allow GNU-extension keywords regardless of language standard<br>
+<br>
+.. program:: clang392<br>
+.. option:: -fgnu-runtime<br>
+<br>
+Generate output compatible with the standard GNU Objective-C runtime<br>
+<br>
+.. program:: clang393<br>
+.. option:: -fgnu89-inline, -fno-gnu89-inline<br>
+<br>
+Use the gnu89 inline semantics<br>
+<br>
+.. program:: clang394<br>
+.. option:: -fhonor-infinities, -fhonor-infinites, -fno-honor-infinities<br>
+<br>
+.. program:: clang395<br>
+.. option:: -fhonor-nans, -fno-honor-nans<br>
+<br>
+.. program:: clang396<br>
+.. option:: -fhosted<br>
+<br>
+.. program:: clang397<br>
+.. option:: -fimplicit-module-maps, -fmodule-maps, -fno-implicit-module-maps<br>
+<br>
+Implicitly search the file system for module map files.<br>
+<br>
+.. program:: clang398<br>
+.. option:: -fimplicit-modules, -fno-implicit-modules<br>
+<br>
+.. program:: clang399<br>
+.. option:: -finput-charset=<arg><br>
+<br>
+.. program:: clang400<br>
+.. option:: -finstrument-functions<br>
+<br>
+Generate calls to instrument function entry and exit<br>
+<br>
+.. program:: clang401<br>
+.. option:: -fintegrated-as, -fno-integrated-as, -integrated-as<br>
+<br>
+Enable the integrated assembler<br>
+<br>
+.. program:: clang402<br>
+.. option:: -fjump-tables, -fno-jump-tables<br>
+<br>
+.. program:: clang403<br>
+.. option:: -flax-vector-conversions, -fno-lax-vector-conversions<br>
+<br>
+.. program:: clang404<br>
+.. option:: -flimited-precision=<arg><br>
+<br>
+.. program:: clang405<br>
+.. option:: -flto, -fno-lto<br>
+<br>
+Enable LTO in 'full' mode<br>
+<br>
+.. program:: clang406<br>
+.. option:: -flto-jobs=<arg><br>
+<br>
+Controls the backend parallelism of -flto=thin (default of 0 means the number of threads will be derived from the number of CPUs detected)<br>
+<br>
+.. program:: clang407<br>
+.. option:: -flto=<arg><br>
+<br>
+Set LTO mode to either 'full' or 'thin'<br>
+<br>
+.. program:: clang408<br>
+.. option:: -fmacro-backtrace-limit=<arg><br>
+<br>
+.. program:: clang409<br>
+.. option:: -fmath-errno, -fno-math-errno<br>
+<br>
+Require math functions to indicate errors by setting errno<br>
+<br>
+.. program:: clang410<br>
+.. option:: -fmax-type-align=<arg><br>
+<br>
+Specify the maximum alignment to enforce on pointers lacking an explicit alignment<br>
+<br>
+.. program:: clang411<br>
+.. option:: -fmerge-all-constants, -fno-merge-all-constants<br>
+<br>
+.. program:: clang412<br>
+.. option:: -fmessage-length=<arg><br>
+<br>
+.. program:: clang413<br>
+.. option:: -fmodule-file-deps, -fno-module-file-deps<br>
+<br>
+.. program:: clang414<br>
+.. option:: -fmodule-file=<file><br>
+<br>
+Load this precompiled module file<br>
+<br>
+.. program:: clang415<br>
+.. option:: -fmodule-map-file=<file><br>
+<br>
+Load this module map file<br>
+<br>
+.. program:: clang416<br>
+.. option:: -fmodule-name=<name>, -fmodule-implementation-of <arg>, -fmodule-name <arg><br>
+<br>
+Specify the name of the module to build<br>
+<br>
+.. program:: clang417<br>
+.. option:: -fmodules, -fno-modules<br>
+<br>
+Enable the 'modules' language feature<br>
+<br>
+.. program:: clang418<br>
+.. option:: -fmodules-decluse, -fno-modules-decluse<br>
+<br>
+Require declaration of modules used within a module<br>
+<br>
+.. program:: clang419<br>
+.. option:: -fmodules-ignore-macro=<arg><br>
+<br>
+Ignore the definition of the given macro when building and loading modules<br>
+<br>
+.. program:: clang420<br>
+.. option:: -fmodules-search-all, -fno-modules-search-all<br>
+<br>
+Search even non-imported modules to resolve references<br>
+<br>
+.. program:: clang421<br>
+.. option:: -fmodules-strict-decluse<br>
+<br>
+Like -fmodules-decluse but requires all headers to be in modules<br>
+<br>
+.. program:: clang422<br>
+.. option:: -fmodules-ts<br>
+<br>
+Enable support for the C++ Modules TS<br>
+<br>
+.. program:: clang423<br>
+.. option:: -fms-compatibility, -fno-ms-compatibility<br>
+<br>
+Enable full Microsoft Visual C++ compatibility<br>
+<br>
+.. program:: clang424<br>
+.. option:: -fms-compatibility-version=<<wbr>arg><br>
+<br>
+Dot-separated value representing the Microsoft compiler version number to report in \_MSC\_VER (0 = don't define it (default))<br>
+<br>
+.. program:: clang425<br>
+.. option:: -fms-extensions, -fno-ms-extensions<br>
+<br>
+Accept some non-standard constructs supported by the Microsoft compiler<br>
+<br>
+.. program:: clang426<br>
+.. option:: -fms-memptr-rep=<arg><br>
+<br>
+.. program:: clang427<br>
+.. option:: -fms-volatile<arg><br>
+<br>
+.. program:: clang428<br>
+.. option:: -fmsc-version=<arg><br>
+<br>
+Microsoft compiler version number to report in \_MSC\_VER (0 = don't define it (default))<br>
+<br>
+.. program:: clang429<br>
+.. option:: -fmudflap<br>
+<br>
+.. program:: clang430<br>
+.. option:: -fmudflapth<br>
+<br>
+.. program:: clang431<br>
+.. option:: -fnested-functions<br>
+<br>
+.. program:: clang432<br>
+.. option:: -fnew-alignment=<align>, -fnew-alignment <arg><br>
+<br>
+Specifies the largest alignment guaranteed by '::operator new(size\_t)'<br>
+<br>
+.. program:: clang433<br>
+.. option:: -fnext-runtime<br>
+<br>
+.. program:: clang434<br>
+.. option:: -fno-builtin-<arg><br>
+<br>
+Disable implicit builtin knowledge of a specific function<br>
+<br>
+.. program:: clang435<br>
+.. option:: -fno-elide-type<br>
+<br>
+Do not elide types when printing diagnostics<br>
+<br>
+.. program:: clang436<br>
+.. option:: -fno-max-type-align<br>
+<br>
+.. program:: clang437<br>
+.. option:: -fno-operator-names<br>
+<br>
+Do not treat C++ operator name keywords as synonyms for operators<br>
+<br>
+.. program:: clang438<br>
+.. option:: -fno-strict-modules-decluse<br>
+<br>
+.. program:: clang439<br>
+.. option:: -fno-working-directory<br>
+<br>
+.. program:: clang440<br>
+.. option:: -fnoopenmp-use-tls<br>
+<br>
+.. program:: clang441<br>
+.. option:: -fobjc-abi-version=<arg><br>
+<br>
+.. program:: clang442<br>
+.. option:: -fobjc-arc, -fno-objc-arc<br>
+<br>
+Synthesize retain and release calls for Objective-C pointers<br>
+<br>
+.. program:: clang443<br>
+.. option:: -fobjc-arc-exceptions, -fno-objc-arc-exceptions<br>
+<br>
+Use EH-safe code when synthesizing retains and releases in -fobjc-arc<br>
+<br>
+.. program:: clang444<br>
+.. option:: -fobjc-exceptions, -fno-objc-exceptions<br>
+<br>
+Enable Objective-C exceptions<br>
+<br>
+.. program:: clang445<br>
+.. option:: -fobjc-infer-related-result-<wbr>type, -fno-objc-infer-related-<wbr>result-type<br>
+<br>
+.. program:: clang446<br>
+.. option:: -fobjc-legacy-dispatch, -fno-objc-legacy-dispatch<br>
+<br>
+.. program:: clang447<br>
+.. option:: -fobjc-link-runtime<br>
+<br>
+.. program:: clang448<br>
+.. option:: -fobjc-nonfragile-abi, -fno-objc-nonfragile-abi<br>
+<br>
+.. program:: clang449<br>
+.. option:: -fobjc-nonfragile-abi-version=<wbr><arg><br>
+<br>
+.. program:: clang450<br>
+.. option:: -fobjc-runtime=<arg><br>
+<br>
+Specify the target Objective-C runtime kind and version<br>
+<br>
+.. program:: clang451<br>
+.. option:: -fobjc-sender-dependent-<wbr>dispatch<br>
+<br>
+.. program:: clang452<br>
+.. option:: -fobjc-weak, -fno-objc-weak<br>
+<br>
+Enable ARC-style weak references in Objective-C<br>
+<br>
+.. program:: clang453<br>
+.. option:: -fomit-frame-pointer, -fno-omit-frame-pointer<br>
+<br>
+.. program:: clang454<br>
+.. option:: -fopenmp, -fno-openmp<br>
+<br>
+.. program:: clang455<br>
+.. option:: -fopenmp-dump-offload-linker-<wbr>script<br>
+<br>
+.. program:: clang456<br>
+.. option:: -fopenmp-use-tls<br>
+<br>
+.. program:: clang457<br>
+.. option:: -fopenmp-version=<arg><br>
+<br>
+.. program:: clang458<br>
+.. option:: -fopenmp=<arg><br>
+<br>
+.. program:: clang459<br>
+.. option:: -foperator-arrow-depth=<arg><br>
+<br>
+.. program:: clang460<br>
+.. option:: -foptimization-record-file=<<wbr>arg><br>
+<br>
+Specify the file name of any generated YAML optimization record<br>
+<br>
+.. program:: clang461<br>
+.. option:: -foptimize-sibling-calls, -fno-optimize-sibling-calls<br>
+<br>
+.. program:: clang462<br>
+.. option:: -foutput-class-dir=<arg>, --output-class-directory <arg>, --output-class-directory=<arg><br>
+<br>
+.. program:: clang463<br>
+.. option:: -fpack-struct, -fno-pack-struct<br>
+<br>
+.. program:: clang464<br>
+.. option:: -fpack-struct=<arg><br>
+<br>
+Specify the default maximum struct packing alignment<br>
+<br>
+.. program:: clang465<br>
+.. option:: -fpascal-strings, -fno-pascal-strings, -mpascal-strings<br>
+<br>
+Recognize and construct Pascal-style string literals<br>
+<br>
+.. program:: clang466<br>
+.. option:: -fpcc-struct-return<br>
+<br>
+Override the default ABI to return all structs on the stack<br>
+<br>
+.. program:: clang467<br>
+.. option:: -fpch-preprocess<br>
+<br>
+.. program:: clang468<br>
+.. option:: -fpic, -fno-pic<br>
+<br>
+.. program:: clang469<br>
+.. option:: -fpie, -fno-pie<br>
+<br>
+.. program:: clang470<br>
+.. option:: -fplugin=<dsopath><br>
+<br>
+Load the named plugin (dynamic shared object)<br>
+<br>
+.. program:: clang471<br>
+.. option:: -fpreserve-as-comments, -fno-preserve-as-comments<br>
+<br>
+.. program:: clang472<br>
+.. option:: -fprofile-arcs, -fno-profile-arcs<br>
+<br>
+.. program:: clang473<br>
+.. option:: -fprofile-dir=<arg><br>
+<br>
+.. program:: clang474<br>
+.. option:: -fprofile-generate, -fno-profile-generate<br>
+<br>
+Generate instrumented code to collect execution counts into default.profraw (overridden by LLVM\_PROFILE\_FILE env var)<br>
+<br>
+.. program:: clang475<br>
+.. option:: -fprofile-generate=<directory><br>
+<br>
+Generate instrumented code to collect execution counts into <directory>/default.profraw (overridden by LLVM\_PROFILE\_FILE env var)<br>
+<br>
+.. program:: clang476<br>
+.. option:: -fprofile-instr-generate, -fno-profile-instr-generate<br>
+<br>
+Generate instrumented code to collect execution counts into default.profraw file (overridden by '=' form of option or LLVM\_PROFILE\_FILE env var)<br>
+<br>
+.. program:: clang477<br>
+.. option:: -fprofile-instr-generate=<<wbr>file><br>
+<br>
+Generate instrumented code to collect execution counts into <file> (overridden by LLVM\_PROFILE\_FILE env var)<br>
+<br>
+.. program:: clang478<br>
+.. option:: -fprofile-instr-use, -fno-profile-instr-use, -fprofile-use<br>
+<br>
+.. program:: clang479<br>
+.. option:: -fprofile-instr-use=<arg><br>
+<br>
+Use instrumentation data for profile-guided optimization<br>
+<br>
+.. program:: clang480<br>
+.. option:: -fprofile-sample-use=<arg>, -fauto-profile=<arg><br>
+<br>
+Enable sample-based profile guided optimizations<br>
+<br>
+.. program:: clang481<br>
+.. option:: -fprofile-use=<pathname><br>
+<br>
+Use instrumentation data for profile-guided optimization. If pathname is a directory, it reads from <pathname>/default.profdata. Otherwise, it reads from file <pathname>.<br>
+<br>
+.. program:: clang482<br>
+.. option:: -freciprocal-math, -fno-reciprocal-math<br>
+<br>
+Allow division operations to be reassociated<br>
+<br>
+.. program:: clang483<br>
+.. option:: -freg-struct-return<br>
+<br>
+Override the default ABI to return small structs in registers<br>
+<br>
+.. program:: clang484<br>
+.. option:: -frelaxed-template-template-<wbr>args, -fno-relaxed-template-<wbr>template-args<br>
+<br>
+Enable C++17 relaxed template template argument matching<br>
+<br>
+.. program:: clang485<br>
+.. option:: -freroll-loops, -fno-reroll-loops<br>
+<br>
+Turn on loop reroller<br>
+<br>
+.. program:: clang486<br>
+.. option:: -fretain-comments-from-system-<wbr>headers<br>
+<br>
+.. program:: clang487<br>
+.. option:: -frewrite-includes, -fno-rewrite-includes<br>
+<br>
+.. program:: clang488<br>
+.. option:: -frewrite-map-file <arg><br>
+<br>
+.. program:: clang489<br>
+.. option:: -frewrite-map-file=<arg><br>
+<br>
+.. program:: clang490<br>
+.. option:: -fropi, -fno-ropi<br>
+<br>
+.. program:: clang491<br>
+.. option:: -frtti, -fno-rtti<br>
+<br>
+.. program:: clang492<br>
+.. option:: -frwpi, -fno-rwpi<br>
+<br>
+.. program:: clang493<br>
+.. option:: -fsave-optimization-record, -fno-save-optimization-record<br>
+<br>
+Generate a YAML optimization record file<br>
+<br>
+.. program:: clang494<br>
+.. option:: -fshort-enums, -fno-short-enums<br>
+<br>
+Allocate to an enum type only as many bytes as it needs for the declared range of possible values<br>
+<br>
+.. program:: clang495<br>
+.. option:: -fshort-wchar, -fno-short-wchar<br>
+<br>
+Force wchar\_t to be a short unsigned int<br>
+<br>
+.. program:: clang496<br>
+.. option:: -fshow-column, -fno-show-column<br>
+<br>
+.. program:: clang497<br>
+.. option:: -fshow-overloads=<arg><br>
+<br>
+Which overload candidates to show when overload resolution fails: best\|all; defaults to all<br>
+<br>
+.. program:: clang498<br>
+.. option:: -fshow-source-location, -fno-show-source-location<br>
+<br>
+.. program:: clang499<br>
+.. option:: -fsignaling-math, -fno-signaling-math<br>
+<br>
+.. program:: clang500<br>
+.. option:: -fsigned-bitfields<br>
+<br>
+.. program:: clang501<br>
+.. option:: -fsigned-char, -fno-signed-char, --signed-char<br>
+<br>
+.. program:: clang502<br>
+.. option:: -fsigned-zeros, -fno-signed-zeros<br>
+<br>
+.. program:: clang503<br>
+.. option:: -fsized-deallocation, -fno-sized-deallocation<br>
+<br>
+Enable C++14 sized global deallocation functions<br>
+<br>
+.. program:: clang504<br>
+.. option:: -fsjlj-exceptions<br>
+<br>
+Use SjLj style exceptions<br>
+<br>
+.. program:: clang505<br>
+.. option:: -fslp-vectorize, -fno-slp-vectorize, -ftree-slp-vectorize<br>
+<br>
+Enable the superword-level parallelism vectorization passes<br>
+<br>
+.. program:: clang506<br>
+.. option:: -fslp-vectorize-aggressive, -fno-slp-vectorize-aggressive<br>
+<br>
+Enable the BB vectorization passes<br>
+<br>
+.. program:: clang507<br>
+.. option:: -fspell-checking, -fno-spell-checking<br>
+<br>
+.. program:: clang508<br>
+.. option:: -fspell-checking-limit=<arg><br>
+<br>
+.. program:: clang509<br>
+.. option:: -fsplit-dwarf-inlining, -fno-split-dwarf-inlining<br>
+<br>
+Place debug types in their own section (ELF Only)<br>
+<br>
+.. program:: clang510<br>
+.. option:: -fsplit-stack<br>
+<br>
+.. program:: clang511<br>
+.. option:: -fstack-protector, -fno-stack-protector<br>
+<br>
+Enable stack protectors for functions potentially vulnerable to stack smashing<br>
+<br>
+.. program:: clang512<br>
+.. option:: -fstack-protector-all<br>
+<br>
+Force the usage of stack protectors for all functions<br>
+<br>
+.. program:: clang513<br>
+.. option:: -fstack-protector-strong<br>
+<br>
+Use a strong heuristic to apply stack protectors to functions<br>
+<br>
+.. program:: clang514<br>
+.. option:: -fstandalone-debug, -fno-limit-debug-info, -fno-standalone-debug<br>
+<br>
+Emit full debug info for all types used by the program<br>
+<br>
+.. program:: clang515<br>
+.. option:: -fstrict-aliasing, -fno-strict-aliasing<br>
+<br>
+.. program:: clang516<br>
+.. option:: -fstrict-enums, -fno-strict-enums<br>
+<br>
+Enable optimizations based on the strict definition of an enum's value range<br>
+<br>
+.. program:: clang517<br>
+.. option:: -fstrict-overflow, -fno-strict-overflow<br>
+<br>
+.. program:: clang518<br>
+.. option:: -fstrict-return, -fno-strict-return<br>
+<br>
+Always treat control flow paths that fall off the end of a non-voidfunction as unreachable<br>
+<br>
+.. program:: clang519<br>
+.. option:: -fstrict-vtable-pointers, -fno-strict-vtable-pointers<br>
+<br>
+Enable optimizations based on the strict rules for overwriting polymorphic C++ objects<br>
+<br>
+.. program:: clang520<br>
+.. option:: -fstruct-path-tbaa, -fno-struct-path-tbaa<br>
+<br>
+.. program:: clang521<br>
+.. option:: -ftabstop=<arg><br>
+<br>
+.. program:: clang522<br>
+.. option:: -ftemplate-backtrace-limit=<<wbr>arg><br>
+<br>
+.. program:: clang523<br>
+.. option:: -ftemplate-depth-<arg><br>
+<br>
+.. program:: clang524<br>
+.. option:: -ftemplate-depth=<arg><br>
+<br>
+.. program:: clang525<br>
+.. option:: -ftest-coverage<br>
+<br>
+.. program:: clang526<br>
+.. option:: -fthinlto-index=<arg><br>
+<br>
+Perform ThinLTO importing using provided function summary index<br>
+<br>
+.. program:: clang527<br>
+.. option:: -fthreadsafe-statics, -fno-threadsafe-statics<br>
+<br>
+.. program:: clang528<br>
+.. option:: -ftime-report<br>
+<br>
+.. program:: clang529<br>
+.. option:: -ftls-model=<arg><br>
+<br>
+.. program:: clang530<br>
+.. option:: -ftrap-function=<arg><br>
+<br>
+Issue call to specified function rather than a trap instruction<br>
+<br>
+.. program:: clang531<br>
+.. option:: -ftrapping-math, -fno-trapping-math<br>
+<br>
+.. program:: clang532<br>
+.. option:: -ftrapv<br>
+<br>
+Trap on integer overflow<br>
+<br>
+.. program:: clang533<br>
+.. option:: -ftrapv-handler <arg><br>
+<br>
+.. program:: clang534<br>
+.. option:: -ftrapv-handler=<function name><br>
+<br>
+Specify the function to be called on overflow<br>
+<br>
+.. program:: clang535<br>
+.. option:: -ftrigraphs, -fno-trigraphs, -trigraphs, --trigraphs<br>
+<br>
+Process trigraph sequences<br>
+<br>
+.. program:: clang536<br>
+.. option:: -funique-section-names, -fno-unique-section-names<br>
+<br>
+Use unique names for text and data sections (ELF Only)<br>
+<br>
+.. program:: clang537<br>
+.. option:: -funit-at-a-time, -fno-unit-at-a-time<br>
+<br>
+.. program:: clang538<br>
+.. option:: -funroll-loops, -fno-unroll-loops<br>
+<br>
+Turn on loop unroller<br>
+<br>
+.. program:: clang539<br>
+.. option:: -funsafe-math-optimizations, -fno-unsafe-math-optimizations<br>
+<br>
+.. program:: clang540<br>
+.. option:: -funsigned-bitfields<br>
+<br>
+.. program:: clang541<br>
+.. option:: -funsigned-char, -fno-unsigned-char, --unsigned-char<br>
+<br>
+.. program:: clang542<br>
+.. option:: -funwind-tables, -fno-unwind-tables<br>
+<br>
+.. program:: clang543<br>
+.. option:: -fuse-cxa-atexit, -fno-use-cxa-atexit<br>
+<br>
+.. program:: clang544<br>
+.. option:: -fuse-init-array, -fno-use-init-array<br>
+<br>
+Use .init\_array instead of .ctors<br>
+<br>
+.. program:: clang545<br>
+.. option:: -fuse-ld=<arg><br>
+<br>
+.. program:: clang546<br>
+.. option:: -fuse-line-directives, -fno-use-line-directives<br>
+<br>
+.. program:: clang547<br>
+.. option:: -fveclib=<arg><br>
+<br>
+Use the given vector functions library<br>
+<br>
+.. program:: clang548<br>
+.. option:: -fvectorize, -fno-vectorize, -ftree-vectorize<br>
+<br>
+Enable the loop vectorization passes<br>
+<br>
+.. program:: clang549<br>
+.. option:: -fverbose-asm, -fno-verbose-asm<br>
+<br>
+.. program:: clang550<br>
+.. option:: -fvisibility-inlines-hidden<br>
+<br>
+Give inline C++ member functions default visibility by default<br>
+<br>
+.. program:: clang551<br>
+.. option:: -fvisibility-ms-compat<br>
+<br>
+Give global types 'default' visibility and global functions and variables 'hidden' visibility by default<br>
+<br>
+.. program:: clang552<br>
+.. option:: -fvisibility=<arg><br>
+<br>
+Set the default symbol visibility for all global declarations<br>
+<br>
+.. program:: clang553<br>
+.. option:: -fwhole-program-vtables, -fno-whole-program-vtables<br>
+<br>
+Enables whole-program vtable optimization. Requires -flto<br>
+<br>
+.. program:: clang554<br>
+.. option:: -fwrapv, -fno-wrapv<br>
+<br>
+Treat signed integer overflow as two's complement<br>
+<br>
+.. program:: clang555<br>
+.. option:: -fwritable-strings<br>
+<br>
+Store string literals as writable data<br>
+<br>
+.. program:: clang556<br>
+.. option:: -fxray-instruction-threshold<<wbr>arg><br>
+<br>
+.. program:: clang557<br>
+.. option:: -fxray-instruction-threshold=<<wbr>arg><br>
+<br>
+Sets the minimum function size to instrument with XRay<br>
+<br>
+.. program:: clang558<br>
+.. option:: -fxray-instrument, -fno-xray-instrument<br>
+<br>
+Generate XRay instrumentation sleds on function entry and exit<br>
+<br>
+.. program:: clang559<br>
+.. option:: -fzero-initialized-in-bss, -fno-zero-initialized-in-bss<br>
+<br>
+.. program:: clang560<br>
+.. option:: -fzvector, -fno-zvector, -mzvector<br>
+<br>
+Enable System z vector language extension<br>
+<br>
+.. program:: clang561<br>
+.. option:: -pedantic, --pedantic, -no-pedantic, --no-pedantic<br>
+<br>
+.. program:: clang562<br>
+.. option:: -pedantic-errors, --pedantic-errors<br>
+<br>
+OpenCL flags<br>
+------------<br>
+.. program:: clang563<br>
+.. option:: -cl-denorms-are-zero<br>
+<br>
+OpenCL only. Allow denormals to be flushed to zero.<br>
+<br>
+.. program:: clang564<br>
+.. option:: -cl-fast-relaxed-math<br>
+<br>
+OpenCL only. Sets -cl-finite-math-only and -cl-unsafe-math-optimizations, and defines \_\_FAST\_RELAXED\_MATH\_\_.<br>
+<br>
+.. program:: clang565<br>
+.. option:: -cl-finite-math-only<br>
+<br>
+OpenCL only. Allow floating-point optimizations that assume arguments and results are not NaNs or +-Inf.<br>
+<br>
+.. program:: clang566<br>
+.. option:: -cl-fp32-correctly-rounded-<wbr>divide-sqrt<br>
+<br>
+OpenCL only. Specify that single precision floating-point divide and sqrt used in the program source are correctly rounded.<br>
+<br>
+.. program:: clang567<br>
+.. option:: -cl-kernel-arg-info<br>
+<br>
+OpenCL only. Generate kernel argument metadata.<br>
+<br>
+.. program:: clang568<br>
+.. option:: -cl-mad-enable<br>
+<br>
+OpenCL only. Allow use of less precise MAD computations in the generated binary.<br>
+<br>
+.. program:: clang569<br>
+.. option:: -cl-no-signed-zeros<br>
+<br>
+OpenCL only. Allow use of less precise no signed zeros computations in the generated binary.<br>
+<br>
+.. program:: clang570<br>
+.. option:: -cl-opt-disable<br>
+<br>
+OpenCL only. This option disables all optimizations. By default optimizations are enabled.<br>
+<br>
+.. program:: clang571<br>
+.. option:: -cl-single-precision-constant<br>
+<br>
+OpenCL only. Treat double precision floating-point constant as single precision constant.<br>
+<br>
+.. program:: clang572<br>
+.. option:: -cl-std=<arg><br>
+<br>
+OpenCL language standard to compile for.<br>
+<br>
+.. program:: clang573<br>
+.. option:: -cl-strict-aliasing<br>
+<br>
+OpenCL only. This option is added for compatibility with OpenCL 1.0.<br>
+<br>
+.. program:: clang574<br>
+.. option:: -cl-unsafe-math-optimizations<br>
+<br>
+OpenCL only. Allow unsafe floating-point optimizations.  Also implies -cl-no-signed-zeros and -cl-mad-enable.<br>
+<br>
+Target-dependent compilation options<br>
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<wbr>~~~~~~~<br>
+.. program:: clang575<br>
+.. option:: -m16<br>
+<br>
+.. program:: clang576<br>
+.. option:: -m32<br>
+<br>
+.. program:: clang577<br>
+.. option:: -m64<br>
+<br>
+.. program:: clang578<br>
+.. option:: -mabi=<arg><br>
+<br>
+.. program:: clang579<br>
+.. option:: -mabicalls, -mno-abicalls<br>
+<br>
+Enable SVR4-style position-independent code (Mips only)<br>
+<br>
+.. program:: clang580<br>
+.. option:: -malign-double<br>
+<br>
+Align doubles to two words in structs (x86 only)<br>
+<br>
+.. program:: clang581<br>
+.. option:: -march=<arg><br>
+<br>
+.. program:: clang582<br>
+.. option:: -masm=<arg><br>
+<br>
+.. program:: clang583<br>
+.. option:: -mbackchain, -mno-backchain<br>
+<br>
+Link stack frames through backchain on System Z<br>
+<br>
+.. program:: clang584<br>
+.. option:: -mcheck-zero-division, -mno-check-zero-division<br>
+<br>
+.. program:: clang585<br>
+.. option:: -mcmodel=<arg><br>
+<br>
+.. program:: clang586<br>
+.. option:: -mcompact-branches=<arg><br>
+<br>
+.. program:: clang587<br>
+.. option:: -mconsole<arg><br>
+<br>
+.. program:: clang588<br>
+.. option:: -mcpu=<arg>, -mv4 (equivalent to -mcpu=hexagonv4), -mv5 (equivalent to -mcpu=hexagonv5), -mv55 (equivalent to -mcpu=hexagonv55), -mv60 (equivalent to -mcpu=hexagonv60)<br>
+<br>
+.. program:: clang589<br>
+.. option:: -mdll<arg><br>
+<br>
+.. program:: clang590<br>
+.. option:: -mdouble-float<br>
+<br>
+.. program:: clang591<br>
+.. option:: -mdsp, -mno-dsp<br>
+<br>
+.. program:: clang592<br>
+.. option:: -mdspr2, -mno-dspr2<br>
+<br>
+.. program:: clang593<br>
+.. option:: -mdynamic-no-pic<arg><br>
+<br>
+.. program:: clang594<br>
+.. option:: -meabi <arg><br>
+<br>
+Set EABI type, e.g. 4, 5 or gnu (default depends on triple)<br>
+<br>
+.. program:: clang595<br>
+.. option:: -mfloat-abi=<arg><br>
+<br>
+.. program:: clang596<br>
+.. option:: -mfp32<br>
+<br>
+Use 32-bit floating point registers (MIPS only)<br>
+<br>
+.. program:: clang597<br>
+.. option:: -mfp64<br>
+<br>
+Use 64-bit floating point registers (MIPS only)<br>
+<br>
+.. program:: clang598<br>
+.. option:: -mfpmath=<arg><br>
+<br>
+.. program:: clang599<br>
+.. option:: -mfpu=<arg><br>
+<br>
+.. program:: clang600<br>
+.. option:: -mglobal-merge, -mno-global-merge<br>
+<br>
+Enable merging of globals<br>
+<br>
+.. program:: clang601<br>
+.. option:: -mhard-float<br>
+<br>
+.. program:: clang602<br>
+.. option:: -mhwdiv=<arg>, --mhwdiv <arg>, --mhwdiv=<arg><br>
+<br>
+.. program:: clang603<br>
+.. option:: -miamcu, -mno-iamcu<br>
+<br>
+Use Intel MCU ABI<br>
+<br>
+.. program:: clang604<br>
+.. option:: -mimplicit-float, -mno-implicit-float<br>
+<br>
+.. program:: clang605<br>
+.. option:: -mimplicit-it=<arg><br>
+<br>
+.. program:: clang606<br>
+.. option:: -mincremental-linker-<wbr>compatible, -mno-incremental-linker-<wbr>compatible<br>
+<br>
+(integrated-as) Emit an object file which can be used with an incremental linker<br>
+<br>
+.. program:: clang607<br>
+.. option:: -miphoneos-version-min=<arg>, -mios-simulator-version-min=<<wbr>arg>, -mios-version-min=<arg>, -miphonesimulator-version-min=<wbr><arg><br>
+<br>
+.. program:: clang608<br>
+.. option:: -mips16<br>
+<br>
+.. program:: clang609<br>
+.. option:: -mkernel<br>
+<br>
+.. program:: clang610<br>
+.. option:: -mldc1-sdc1, -mno-ldc1-sdc1<br>
+<br>
+.. program:: clang611<br>
+.. option:: -mlong-calls, -mno-long-calls<br>
+<br>
+Generate branches with extended addressability, usually via indirect jumps.<br>
+<br>
+.. program:: clang612<br>
+.. option:: -mmacosx-version-min=<arg><br>
+<br>
+Set Mac OS X deployment target<br>
+<br>
+.. program:: clang613<br>
+.. option:: -mmicromips, -mno-micromips<br>
+<br>
+.. program:: clang614<br>
+.. option:: -mms-bitfields, -mno-ms-bitfields<br>
+<br>
+Set the default structure layout to be compatible with the Microsoft compiler standard<br>
+<br>
+.. program:: clang615<br>
+.. option:: -mmsa, -mno-msa<br>
+<br>
+Enable MSA ASE (MIPS only)<br>
+<br>
+.. program:: clang616<br>
+.. option:: -mnan=<arg><br>
+<br>
+.. program:: clang617<br>
+.. option:: -mno-mips16<br>
+<br>
+.. program:: clang618<br>
+.. option:: -momit-leaf-frame-pointer, -mno-omit-leaf-frame-pointer<br>
+<br>
+Omit frame pointer setup for leaf functions<br>
+<br>
+.. program:: clang619<br>
+.. option:: -moslib=<arg><br>
+<br>
+.. program:: clang620<br>
+.. option:: -mpie-copy-relocations, -mno-pie-copy-relocations<br>
+<br>
+Use copy relocations support for PIE builds<br>
+<br>
+.. program:: clang621<br>
+.. option:: -mqdsp6-compat<br>
+<br>
+Enable hexagon-qdsp6 backward compatibility<br>
+<br>
+.. program:: clang622<br>
+.. option:: -mrecip<br>
+<br>
+.. program:: clang623<br>
+.. option:: -mrecip=<arg1>,<arg2>...<br>
+<br>
+.. program:: clang624<br>
+.. option:: -mred-zone, -mno-red-zone<br>
+<br>
+.. program:: clang625<br>
+.. option:: -mregparm=<arg><br>
+<br>
+.. program:: clang626<br>
+.. option:: -mrelax-all, -mno-relax-all<br>
+<br>
+(integrated-as) Relax all machine instructions<br>
+<br>
+.. program:: clang627<br>
+.. option:: -mrtd, -mno-rtd<br>
+<br>
+Make StdCall calling convention the default<br>
+<br>
+.. program:: clang628<br>
+.. option:: -msingle-float<br>
+<br>
+.. program:: clang629<br>
+.. option:: -msmall-data-threshold=<arg><br>
+<br>
+.. program:: clang630<br>
+.. option:: -msoft-float, -mno-soft-float<br>
+<br>
+Use software floating point<br>
+<br>
+.. program:: clang631<br>
+.. option:: -mstack-alignment=<arg><br>
+<br>
+Set the stack alignment<br>
+<br>
+.. program:: clang632<br>
+.. option:: -mstack-probe-size=<arg><br>
+<br>
+Set the stack probe size<br>
+<br>
+.. program:: clang633<br>
+.. option:: -mstackrealign, -mno-stackrealign<br>
+<br>
+Force realign the stack at entry to every function<br>
+<br>
+.. program:: clang634<br>
+.. option:: -mthread-model <arg><br>
+<br>
+The thread model to use, e.g. posix, single (posix by default)<br>
+<br>
+.. program:: clang635<br>
+.. option:: -mthreads<arg><br>
+<br>
+.. program:: clang636<br>
+.. option:: -mthumb, -mno-thumb<br>
+<br>
+.. program:: clang637<br>
+.. option:: -mtune=<arg><br>
+<br>
+.. program:: clang638<br>
+.. option:: -mtvos-version-min=<arg>, -mappletvos-version-min=<arg>, -mappletvsimulator-version-<wbr>min=<arg>, -mtvos-simulator-version-min=<<wbr>arg><br>
+<br>
+.. program:: clang639<br>
+.. option:: -municode<arg><br>
+<br>
+.. program:: clang640<br>
+.. option:: -mvx, -mno-vx<br>
+<br>
+.. program:: clang641<br>
+.. option:: -mwarn-nonportable-cfstrings, -mno-warn-nonportable-<wbr>cfstrings<br>
+<br>
+.. program:: clang642<br>
+.. option:: -mwatchos-version-min=<arg>, -mwatchos-simulator-version-<wbr>min=<arg>, -mwatchsimulator-version-min=<<wbr>arg><br>
+<br>
+.. program:: clang643<br>
+.. option:: -mwindows<arg><br>
+<br>
+.. program:: clang644<br>
+.. option:: -mx32<br>
+<br>
+.. program:: clang645<br>
+.. option:: -mxgot, -mno-xgot<br>
+<br>
+AARCH64<br>
+-------<br>
+.. program:: clang646<br>
+.. option:: -ffixed-x18<br>
+<br>
+Reserve the x18 register (AArch64 only)<br>
+<br>
+.. program:: clang647<br>
+.. option:: -mfix-cortex-a53-835769, -mno-fix-cortex-a53-835769<br>
+<br>
+Workaround Cortex-A53 erratum 835769 (AArch64 only)<br>
+<br>
+.. program:: clang648<br>
+.. option:: -mgeneral-regs-only<br>
+<br>
+Generate code which only uses the general purpose registers (AArch64 only)<br>
+<br>
+AMDGPU<br>
+------<br>
+ARM<br>
+---<br>
+.. program:: clang649<br>
+.. option:: -ffixed-r9<br>
+<br>
+Reserve the r9 register (ARM only)<br>
+<br>
+.. program:: clang650<br>
+.. option:: -mcrc<br>
+<br>
+Allow use of CRC instructions (ARM only)<br>
+<br>
+.. program:: clang651<br>
+.. option:: -mexecute-only, -mno-execute-only, -mpure-code<br>
+<br>
+Disallow generation of data access to code sections (ARM only)<br>
+<br>
+.. program:: clang652<br>
+.. option:: -mno-movt<br>
+<br>
+Disallow use of movt/movw pairs (ARM only)<br>
+<br>
+.. program:: clang653<br>
+.. option:: -mnocrc<br>
+<br>
+Disallow use of CRC instructions (ARM only)<br>
+<br>
+.. program:: clang654<br>
+.. option:: -mrestrict-it, -mno-restrict-it<br>
+<br>
+Disallow generation of deprecated IT blocks for ARMv8. It is on by default for ARMv8 Thumb mode.<br>
+<br>
+.. program:: clang655<br>
+.. option:: -munaligned-access, -mno-unaligned-access<br>
+<br>
+Allow memory accesses to be unaligned (AArch32/AArch64 only)<br>
+<br>
+Hexagon<br>
+-------<br>
+.. program:: clang656<br>
+.. option:: -mhvx, -mno-hvx<br>
+<br>
+Enable Hexagon Vector eXtensions<br>
+<br>
+.. program:: clang657<br>
+.. option:: -mhvx-double, -mno-hvx-double<br>
+<br>
+Enable Hexagon Double Vector eXtensions<br>
+<br>
+.. program:: clang658<br>
+.. option:: -mieee-rnd-near<br>
+<br>
+PowerPC<br>
+-------<br>
+.. program:: clang659<br>
+.. option:: -mcmpb, -mno-cmpb<br>
+<br>
+.. program:: clang660<br>
+.. option:: -mcrbits, -mno-crbits<br>
+<br>
+.. program:: clang661<br>
+.. option:: -mcrypto, -mno-crypto<br>
+<br>
+.. program:: clang662<br>
+.. option:: -mdirect-move, -mno-direct-move<br>
+<br>
+.. program:: clang663<br>
+.. option:: -mfloat128, -mno-float128<br>
+<br>
+.. program:: clang664<br>
+.. option:: -mfprnd, -mno-fprnd<br>
+<br>
+.. program:: clang665<br>
+.. option:: -mhtm, -mno-htm<br>
+<br>
+.. program:: clang666<br>
+.. option:: -minvariant-function-<wbr>descriptors, -mno-invariant-function-<wbr>descriptors<br>
+<br>
+.. program:: clang667<br>
+.. option:: -misel, -mno-isel<br>
+<br>
+.. program:: clang668<br>
+.. option:: -mlongcall, -mno-longcall<br>
+<br>
+.. program:: clang669<br>
+.. option:: -mmfocrf, -mmfcrf, -mno-mfocrf<br>
+<br>
+.. program:: clang670<br>
+.. option:: -mpopcntd, -mno-popcntd<br>
+<br>
+.. program:: clang671<br>
+.. option:: -mpower8-vector, -mno-power8-vector<br>
+<br>
+.. program:: clang672<br>
+.. option:: -mpower9-vector, -mno-power9-vector<br>
+<br>
+.. program:: clang673<br>
+.. option:: -mqpx, -mno-qpx<br>
+<br>
+.. program:: clang674<br>
+.. option:: -mvsx, -mno-vsx<br>
+<br>
+WebAssembly<br>
+-----------<br>
+.. program:: clang675<br>
+.. option:: -msimd128, -mno-simd128<br>
+<br>
+X86<br>
+---<br>
+.. program:: clang676<br>
+.. option:: -m3dnow, -mno-3dnow<br>
+<br>
+.. program:: clang677<br>
+.. option:: -m3dnowa, -mno-3dnowa<br>
+<br>
+.. program:: clang678<br>
+.. option:: -madx, -mno-adx<br>
+<br>
+.. program:: clang679<br>
+.. option:: -maes, -mno-aes<br>
+<br>
+.. program:: clang680<br>
+.. option:: -mavx, -mno-avx<br>
+<br>
+.. program:: clang681<br>
+.. option:: -mavx2, -mno-avx2<br>
+<br>
+.. program:: clang682<br>
+.. option:: -mavx512bw, -mno-avx512bw<br>
+<br>
+.. program:: clang683<br>
+.. option:: -mavx512cd, -mno-avx512cd<br>
+<br>
+.. program:: clang684<br>
+.. option:: -mavx512dq, -mno-avx512dq<br>
+<br>
+.. program:: clang685<br>
+.. option:: -mavx512er, -mno-avx512er<br>
+<br>
+.. program:: clang686<br>
+.. option:: -mavx512f, -mno-avx512f<br>
+<br>
+.. program:: clang687<br>
+.. option:: -mavx512ifma, -mno-avx512ifma<br>
+<br>
+.. program:: clang688<br>
+.. option:: -mavx512pf, -mno-avx512pf<br>
+<br>
+.. program:: clang689<br>
+.. option:: -mavx512vbmi, -mno-avx512vbmi<br>
+<br>
+.. program:: clang690<br>
+.. option:: -mavx512vl, -mno-avx512vl<br>
+<br>
+.. program:: clang691<br>
+.. option:: -mbmi, -mno-bmi<br>
+<br>
+.. program:: clang692<br>
+.. option:: -mbmi2, -mno-bmi2<br>
+<br>
+.. program:: clang693<br>
+.. option:: -mcx16, -mno-cx16<br>
+<br>
+.. program:: clang694<br>
+.. option:: -mf16c, -mno-f16c<br>
+<br>
+.. program:: clang695<br>
+.. option:: -mfma, -mno-fma<br>
+<br>
+.. program:: clang696<br>
+.. option:: -mfma4, -mno-fma4<br>
+<br>
+.. program:: clang697<br>
+.. option:: -mfsgsbase, -mno-fsgsbase<br>
+<br>
+.. program:: clang698<br>
+.. option:: -mfxsr, -mno-fxsr<br>
+<br>
+.. program:: clang699<br>
+.. option:: -mlzcnt, -mno-lzcnt<br>
+<br>
+.. program:: clang700<br>
+.. option:: -mmmx, -mno-mmx<br>
+<br>
+.. program:: clang701<br>
+.. option:: -mmwaitx, -mno-mwaitx<br>
+<br>
+.. program:: clang702<br>
+.. option:: -mpclmul, -mno-pclmul<br>
+<br>
+.. program:: clang703<br>
+.. option:: -mpku, -mno-pku<br>
+<br>
+.. program:: clang704<br>
+.. option:: -mpopcnt, -mno-popcnt<br>
+<br>
+.. program:: clang705<br>
+.. option:: -mprfchw, -mno-prfchw<br>
+<br>
+.. program:: clang706<br>
+.. option:: -mrdrnd, -mno-rdrnd<br>
+<br>
+.. program:: clang707<br>
+.. option:: -mrdseed, -mno-rdseed<br>
+<br>
+.. program:: clang708<br>
+.. option:: -mrtm, -mno-rtm<br>
+<br>
+.. program:: clang709<br>
+.. option:: -msha, -mno-sha<br>
+<br>
+.. program:: clang710<br>
+.. option:: -msse, -mno-sse<br>
+<br>
+.. program:: clang711<br>
+.. option:: -msse2, -mno-sse2<br>
+<br>
+.. program:: clang712<br>
+.. option:: -msse3, -mno-sse3<br>
+<br>
+.. program:: clang713<br>
+.. option:: -msse4.1, -mno-sse4.1<br>
+<br>
+.. program:: clang714<br>
+.. option:: -msse4.2, -mno-sse4.2, -msse4<br>
+<br>
+.. program:: clang715<br>
+.. option:: -msse4a, -mno-sse4a<br>
+<br>
+.. program:: clang716<br>
+.. option:: -mssse3, -mno-ssse3<br>
+<br>
+.. program:: clang717<br>
+.. option:: -mtbm, -mno-tbm<br>
+<br>
+.. program:: clang718<br>
+.. option:: -mx87, -m80387, -mno-x87<br>
+<br>
+.. program:: clang719<br>
+.. option:: -mxop, -mno-xop<br>
+<br>
+.. program:: clang720<br>
+.. option:: -mxsave, -mno-xsave<br>
+<br>
+.. program:: clang721<br>
+.. option:: -mxsavec, -mno-xsavec<br>
+<br>
+.. program:: clang722<br>
+.. option:: -mxsaveopt, -mno-xsaveopt<br>
+<br>
+.. program:: clang723<br>
+.. option:: -mxsaves, -mno-xsaves<br>
+<br>
+Optimization level<br>
+~~~~~~~~~~~~~~~~~~<br>
+<br>
+Flags controlling how much optimization should be performed.<br>
+<br>
+.. program:: clang724<br>
+.. option:: -O<arg>, -O (equivalent to -O2), --optimize, --optimize=<arg><br>
+<br>
+.. program:: clang725<br>
+.. option:: -O0<br>
+<br>
+.. program:: clang726<br>
+.. option:: -O4<br>
+<br>
+.. program:: clang727<br>
+.. option:: -Ofast<arg><br>
+<br>
+Debug information generation<br>
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~<br>
+<br>
+Flags controlling how much and what kind of debug information should be<br>
+generated.<br>
+<br>
+Kind and level of debug information<br>
+-----------------------------<wbr>------<br>
+.. program:: clang728<br>
+.. option:: -g, --debug, --debug=<arg><br>
+<br>
+Generate source-level debug information<br>
+<br>
+.. program:: clang729<br>
+.. option:: -gdwarf-2<br>
+<br>
+Generate source-level debug information with dwarf version 2<br>
+<br>
+.. program:: clang730<br>
+.. option:: -gdwarf-3<br>
+<br>
+Generate source-level debug information with dwarf version 3<br>
+<br>
+.. program:: clang731<br>
+.. option:: -gdwarf-4, -gdwarf<br>
+<br>
+Generate source-level debug information with dwarf version 4<br>
+<br>
+.. program:: clang732<br>
+.. option:: -gdwarf-5<br>
+<br>
+Generate source-level debug information with dwarf version 5<br>
+<br>
+.. program:: clang733<br>
+.. option:: -gfull<br>
+<br>
+.. program:: clang734<br>
+.. option:: -gused<br>
+<br>
+Debug level<br>
+___________<br>
+.. program:: clang735<br>
+.. option:: -g0<br>
+<br>
+.. program:: clang736<br>
+.. option:: -g2<br>
+<br>
+.. program:: clang737<br>
+.. option:: -g3<br>
+<br>
+.. program:: clang738<br>
+.. option:: -ggdb0<br>
+<br>
+.. program:: clang739<br>
+.. option:: -ggdb1<br>
+<br>
+.. program:: clang740<br>
+.. option:: -ggdb2<br>
+<br>
+.. program:: clang741<br>
+.. option:: -ggdb3<br>
+<br>
+.. program:: clang742<br>
+.. option:: -gline-tables-only, -g1, -gmlt<br>
+<br>
+Emit debug line number tables only<br>
+<br>
+.. program:: clang743<br>
+.. option:: -gmodules<br>
+<br>
+Generate debug info with external references to clang modules or precompiled headers<br>
+<br>
+Debugger to tune debug information for<br>
+_____________________________<wbr>_________<br>
+.. program:: clang744<br>
+.. option:: -ggdb<br>
+<br>
+.. program:: clang745<br>
+.. option:: -glldb<br>
+<br>
+.. program:: clang746<br>
+.. option:: -gsce<br>
+<br>
+Debug information flags<br>
+-----------------------<br>
+.. program:: clang747<br>
+.. option:: -gcolumn-info, -gno-column-info<br>
+<br>
+.. program:: clang748<br>
+.. option:: -gdwarf-aranges<br>
+<br>
+.. program:: clang749<br>
+.. option:: -ggnu-pubnames<br>
+<br>
+.. program:: clang750<br>
+.. option:: -grecord-gcc-switches, -gno-record-gcc-switches<br>
+<br>
+.. program:: clang751<br>
+.. option:: -gsplit-dwarf<br>
+<br>
+.. program:: clang752<br>
+.. option:: -gstrict-dwarf, -gno-strict-dwarf<br>
+<br>
+Linker flags<br>
+============<br>
+Flags that are passed on to the linker<br>
+<br>
+.. program:: clang753<br>
+.. option:: -L<arg>, --library-directory <arg>, --library-directory=<arg><br>
+<br>
+.. program:: clang754<br>
+.. option:: -T<arg><br>
+<br>
+.. program:: clang755<br>
+.. option:: -Tbss<arg><br>
+<br>
+.. program:: clang756<br>
+.. option:: -Tdata<arg><br>
+<br>
+.. program:: clang757<br>
+.. option:: -Ttext<arg><br>
+<br>
+.. program:: clang758<br>
+.. option:: -Wl,<arg>,<arg2>...<br>
+<br>
+Pass the comma separated arguments in <arg> to the linker<br>
+<br>
+.. program:: clang759<br>
+.. option:: -Xlinker <arg>, --for-linker <arg>, --for-linker=<arg><br>
+<br>
+Pass <arg> to the linker<br>
+<br>
+.. program:: clang760<br>
+.. option:: -Z<br>
+<br>
+.. program:: clang761<br>
+.. option:: -e<arg>, --entry<br>
+<br>
+.. program:: clang762<br>
+.. option:: -filelist <arg><br>
+<br>
+.. program:: clang763<br>
+.. option:: -l<arg><br>
+<br>
+.. program:: clang764<br>
+.. option:: -r<br>
+<br>
+.. program:: clang765<br>
+.. option:: -rpath <arg><br>
+<br>
+.. program:: clang766<br>
+.. option:: -s<br>
+<br>
+.. program:: clang767<br>
+.. option:: -t<br>
+<br>
+.. program:: clang768<br>
+.. option:: -u<arg>, --force-link <arg>, --force-link=<arg><br>
+<br>
+.. program:: clang769<br>
+.. option:: -undef<br>
+<br>
+undef all system defines<br>
+<br>
+.. program:: clang770<br>
+.. option:: -undefined<arg>, --no-undefined<br>
+<br>
+.. program:: clang771<br>
+.. option:: -z <arg><br>
+<br>
+Pass -z <arg> to the linker<br>
+<br>
+Fortran compilation flags<br>
+=========================<br>
+<br>
+Flags that will be passed onto the ``gfortran`` compiler when Clang is given<br>
+a Fortran input.<br>
+<br>
+.. program:: clang772<br>
+.. option:: -A-<arg><br>
+<br>
+.. program:: clang773<br>
+.. option:: -J<arg><br>
+<br>
+.. program:: clang774<br>
+.. option:: -cpp<br>
+<br>
+.. program:: clang775<br>
+.. option:: -faggressive-function-<wbr>elimination, -fno-aggressive-function-<wbr>elimination<br>
+<br>
+.. program:: clang776<br>
+.. option:: -falign-commons, -fno-align-commons<br>
+<br>
+.. program:: clang777<br>
+.. option:: -fall-intrinsics, -fno-all-intrinsics<br>
+<br>
+.. program:: clang778<br>
+.. option:: -fautomatic, -fno-automatic<br>
+<br>
+.. program:: clang779<br>
+.. option:: -fbackslash, -fno-backslash<br>
+<br>
+.. program:: clang780<br>
+.. option:: -fbacktrace, -fno-backtrace<br>
+<br>
+.. program:: clang781<br>
+.. option:: -fblas-matmul-limit=<arg><br>
+<br>
+.. program:: clang782<br>
+.. option:: -fbounds-check, -fno-bounds-check<br>
+<br>
+.. program:: clang783<br>
+.. option:: -fcheck-array-temporaries, -fno-check-array-temporaries<br>
+<br>
+.. program:: clang784<br>
+.. option:: -fcheck=<arg><br>
+<br>
+.. program:: clang785<br>
+.. option:: -fcoarray=<arg><br>
+<br>
+.. program:: clang786<br>
+.. option:: -fconvert=<arg><br>
+<br>
+.. program:: clang787<br>
+.. option:: -fcray-pointer, -fno-cray-pointer<br>
+<br>
+.. program:: clang788<br>
+.. option:: -fd-lines-as-code, -fno-d-lines-as-code<br>
+<br>
+.. program:: clang789<br>
+.. option:: -fd-lines-as-comments, -fno-d-lines-as-comments<br>
+<br>
+.. program:: clang790<br>
+.. option:: -fdefault-double-8, -fno-default-double-8<br>
+<br>
+.. program:: clang791<br>
+.. option:: -fdefault-integer-8, -fno-default-integer-8<br>
+<br>
+.. program:: clang792<br>
+.. option:: -fdefault-real-8, -fno-default-real-8<br>
+<br>
+.. program:: clang793<br>
+.. option:: -fdollar-ok, -fno-dollar-ok<br>
+<br>
+.. program:: clang794<br>
+.. option:: -fdump-fortran-optimized, -fno-dump-fortran-optimized<br>
+<br>
+.. program:: clang795<br>
+.. option:: -fdump-fortran-original, -fno-dump-fortran-original<br>
+<br>
+.. program:: clang796<br>
+.. option:: -fdump-parse-tree, -fno-dump-parse-tree<br>
+<br>
+.. program:: clang797<br>
+.. option:: -fexternal-blas, -fno-external-blas<br>
+<br>
+.. program:: clang798<br>
+.. option:: -ff2c, -fno-f2c<br>
+<br>
+.. program:: clang799<br>
+.. option:: -ffixed-form, -fno-fixed-form<br>
+<br>
+.. program:: clang800<br>
+.. option:: -ffixed-line-length-<arg><br>
+<br>
+.. program:: clang801<br>
+.. option:: -ffpe-trap=<arg><br>
+<br>
+.. program:: clang802<br>
+.. option:: -ffree-form, -fno-free-form<br>
+<br>
+.. program:: clang803<br>
+.. option:: -ffree-line-length-<arg><br>
+<br>
+.. program:: clang804<br>
+.. option:: -ffrontend-optimize, -fno-frontend-optimize<br>
+<br>
+.. program:: clang805<br>
+.. option:: -fimplicit-none, -fno-implicit-none<br>
+<br>
+.. program:: clang806<br>
+.. option:: -finit-character=<arg><br>
+<br>
+.. program:: clang807<br>
+.. option:: -finit-integer=<arg><br>
+<br>
+.. program:: clang808<br>
+.. option:: -finit-local-zero, -fno-init-local-zero<br>
+<br>
+.. program:: clang809<br>
+.. option:: -finit-logical=<arg><br>
+<br>
+.. program:: clang810<br>
+.. option:: -finit-real=<arg><br>
+<br>
+.. program:: clang811<br>
+.. option:: -finteger-4-integer-8, -fno-integer-4-integer-8<br>
+<br>
+.. program:: clang812<br>
+.. option:: -fintrinsic-modules-path, -fno-intrinsic-modules-path<br>
+<br>
+.. program:: clang813<br>
+.. option:: -fmax-array-constructor=<arg><br>
+<br>
+.. program:: clang814<br>
+.. option:: -fmax-errors=<arg><br>
+<br>
+.. program:: clang815<br>
+.. option:: -fmax-identifier-length, -fno-max-identifier-length<br>
+<br>
+.. program:: clang816<br>
+.. option:: -fmax-stack-var-size=<arg><br>
+<br>
+.. program:: clang817<br>
+.. option:: -fmax-subrecord-length=<arg><br>
+<br>
+.. program:: clang818<br>
+.. option:: -fmodule-private, -fno-module-private<br>
+<br>
+.. program:: clang819<br>
+.. option:: -fpack-derived, -fno-pack-derived<br>
+<br>
+.. program:: clang820<br>
+.. option:: -fprotect-parens, -fno-protect-parens<br>
+<br>
+.. program:: clang821<br>
+.. option:: -frange-check, -fno-range-check<br>
+<br>
+.. program:: clang822<br>
+.. option:: -freal-4-real-10, -fno-real-4-real-10<br>
+<br>
+.. program:: clang823<br>
+.. option:: -freal-4-real-16, -fno-real-4-real-16<br>
+<br>
+.. program:: clang824<br>
+.. option:: -freal-4-real-8, -fno-real-4-real-8<br>
+<br>
+.. program:: clang825<br>
+.. option:: -freal-8-real-10, -fno-real-8-real-10<br>
+<br>
+.. program:: clang826<br>
+.. option:: -freal-8-real-16, -fno-real-8-real-16<br>
+<br>
+.. program:: clang827<br>
+.. option:: -freal-8-real-4, -fno-real-8-real-4<br>
+<br>
+.. program:: clang828<br>
+.. option:: -frealloc-lhs, -fno-realloc-lhs<br>
+<br>
+.. program:: clang829<br>
+.. option:: -frecord-marker=<arg><br>
+<br>
+.. program:: clang830<br>
+.. option:: -frecursive, -fno-recursive<br>
+<br>
+.. program:: clang831<br>
+.. option:: -frepack-arrays, -fno-repack-arrays<br>
+<br>
+.. program:: clang832<br>
+.. option:: -fsecond-underscore, -fno-second-underscore<br>
+<br>
+.. program:: clang833<br>
+.. option:: -fsign-zero, -fno-sign-zero<br>
+<br>
+.. program:: clang834<br>
+.. option:: -fstack-arrays, -fno-stack-arrays<br>
+<br>
+.. program:: clang835<br>
+.. option:: -funderscoring, -fno-underscoring<br>
+<br>
+.. program:: clang836<br>
+.. option:: -fwhole-file, -fno-whole-file<br>
+<br>
+.. program:: clang837<br>
+.. option:: -nocpp<br>
+<br>
+.. program:: clang838<br>
+.. option:: -static-libgfortran<br>
+<br>
<br>
Modified: cfe/trunk/docs/index.rst<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/docs/index.rst?rev=292968&r1=292967&r2=292968&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/cfe/trunk/docs/index.<wbr>rst?rev=292968&r1=292967&r2=<wbr>292968&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- cfe/trunk/docs/index.rst (original)<br>
+++ cfe/trunk/docs/index.rst Tue Jan 24 13:39:46 2017<br>
@@ -19,6 +19,7 @@ Using Clang as a Compiler<br>
    UsersManual<br>
    Toolchain<br>
    LanguageExtensions<br>
+   ClangCommandLineReference<br>
    AttributeReference<br>
    DiagnosticsReference<br>
    CrossCompilation<br>
<br>
Modified: cfe/trunk/include/clang/<wbr>Driver/CLCompatOptions.td<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/CLCompatOptions.td?rev=292968&r1=292967&r2=292968&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/cfe/trunk/include/<wbr>clang/Driver/CLCompatOptions.<wbr>td?rev=292968&r1=292967&r2=<wbr>292968&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- cfe/trunk/include/clang/<wbr>Driver/CLCompatOptions.td (original)<br>
+++ cfe/trunk/include/clang/<wbr>Driver/CLCompatOptions.td Tue Jan 24 13:39:46 2017<br>
@@ -11,7 +11,7 @@<br>
 //<br>
 //===-------------------------<wbr>------------------------------<wbr>---------------===//<br>
<br>
-def cl_Group : OptionGroup<"<clang-cl options>">,<br>
+def cl_Group : OptionGroup<"<clang-cl options>">, Flags<[CLOption]>,<br>
   HelpText<"CL.EXE COMPATIBILITY OPTIONS">;<br>
<br>
 def cl_compile_Group : OptionGroup<"<clang-cl compile-only options>">,<br>
<br>
Added: cfe/trunk/include/clang/<wbr>Driver/ClangOptionDocs.td<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/ClangOptionDocs.td?rev=292968&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/cfe/trunk/include/<wbr>clang/Driver/ClangOptionDocs.<wbr>td?rev=292968&view=auto</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- cfe/trunk/include/clang/<wbr>Driver/ClangOptionDocs.td (added)<br>
+++ cfe/trunk/include/clang/<wbr>Driver/ClangOptionDocs.td Tue Jan 24 13:39:46 2017<br>
@@ -0,0 +1,36 @@<br>
+//==--- ClangOptionDocs.td - Option documentation -------------------------===//<br>
+//<br>
+//                     The LLVM Compiler Infrastructure<br>
+//<br>
+// This file is distributed under the University of Illinois Open Source<br>
+// License. See LICENSE.TXT for details.<br>
+//<br>
+//===------------------------<wbr>------------------------------<wbr>----------------===//<br>
+<br>
+def GlobalDocumentation {<br>
+  code Intro =[{..<br>
+  ------------------------------<wbr>------------------------------<wbr>-------<br>
+  NOTE: This file is automatically generated by running clang-tblgen<br>
+  -gen-opt-docs. Do not edit this file by hand!!<br>
+  ------------------------------<wbr>------------------------------<wbr>-------<br>
+<br>
+=============================<wbr>========<br>
+Clang command line argument reference<br>
+=============================<wbr>========<br>
+.. contents::<br>
+   :local:<br>
+<br>
+Introduction<br>
+============<br>
+<br>
+This page lists the command line arguments currently supported by the<br>
+GCC-compatible ``clang`` and ``clang++`` drivers.<br>
+<br>
+}];<br>
+<br>
+  string Program = "clang";<br>
+  list<string> ExcludedFlags = ["HelpHidden", "NoDriverOption",<br>
+                                "CLOption", "Unsupported", "Ignored"];<br>
+}<br>
+<br>
+include "Options.td"<br>
<br>
Modified: cfe/trunk/include/clang/<wbr>Driver/Options.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/Options.h?rev=292968&r1=292967&r2=292968&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/cfe/trunk/include/<wbr>clang/Driver/Options.h?rev=<wbr>292968&r1=292967&r2=292968&<wbr>view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- cfe/trunk/include/clang/<wbr>Driver/Options.h (original)<br>
+++ cfe/trunk/include/clang/<wbr>Driver/Options.h Tue Jan 24 13:39:46 2017<br>
@@ -33,7 +33,8 @@ enum ClangFlags {<br>
   CLOption = (1 << 9),<br>
   CC1Option = (1 << 10),<br>
   CC1AsOption = (1 << 11),<br>
-  NoDriverOption = (1 << 12)<br>
+  NoDriverOption = (1 << 12),<br>
+  Ignored = (1 << 13)<br>
 };<br>
<br>
 enum ID {<br>
<br>
Modified: cfe/trunk/include/clang/<wbr>Driver/Options.td<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/Options.td?rev=292968&r1=292967&r2=292968&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/cfe/trunk/include/<wbr>clang/Driver/Options.td?rev=<wbr>292968&r1=292967&r2=292968&<wbr>view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- cfe/trunk/include/clang/<wbr>Driver/Options.td (original)<br>
+++ cfe/trunk/include/clang/<wbr>Driver/Options.td Tue Jan 24 13:39:46 2017<br>
@@ -33,6 +33,9 @@ def NoArgumentUnused : OptionFlag;<br>
 // lines that use it.<br>
 def Unsupported : OptionFlag;<br>
<br>
+// Ignored - The option is unsupported, and the driver will silently ignore it.<br>
+def Ignored : OptionFlag;<br>
+<br>
 // CoreOption - This is considered a "core" Clang option, available in both<br>
 // clang and clang-cl modes.<br>
 def CoreOption : OptionFlag;<br>
@@ -50,72 +53,130 @@ def CC1AsOption : OptionFlag;<br>
 // NoDriverOption - This option should not be accepted by the driver.<br>
 def NoDriverOption : OptionFlag;<br>
<br>
+// A short name to show in documentation. The name will be interpreted as rST.<br>
+class DocName<string name> { string DocName = name; }<br>
+<br>
+// A brief description to show in documentation, interpreted as rST.<br>
+class DocBrief<code descr> { code DocBrief = descr; }<br>
+<br>
+// Indicates that this group should be flattened into its parent when generating<br>
+// documentation.<br>
+class DocFlatten { bit DocFlatten = 1; }<br>
+<br>
 /////////<br>
 // Groups<br>
<br>
+def Action_Group : OptionGroup<"<action group>">, DocName<"Actions">,<br>
+                   DocBrief<[{The action to perform on the input.}]>;<br>
+<br>
 // Meta-group for options which are only used for compilation,<br>
 // and not linking etc.<br>
-def CompileOnly_Group     : OptionGroup<"<CompileOnly group>">;<br>
+def CompileOnly_Group : OptionGroup<"<CompileOnly group>">,<br>
+                        DocName<"Compilation flags">, DocBrief<[{<br>
+Flags controlling the behavior of Clang during compilation. These flags have<br>
+no effect during actions that do not perform compilation.}]>;<br>
+<br>
+def IncludePath_Group : OptionGroup<"<I/i group>">, Group<CompileOnly_Group>,<br>
+                        DocName<"Include path management">,<br>
+                        DocBrief<[{<br>
+Flags controlling how ``#include``\s are resolved to files.}]>;<br>
+<br>
+def I_Group : OptionGroup<"<I group>">, Group<IncludePath_Group>, DocFlatten;<br>
+def i_Group : OptionGroup<"<i group>">, Group<IncludePath_Group>, DocFlatten;<br>
+def clang_i_Group : OptionGroup<"<clang i group>">, Group<i_Group>, DocFlatten;<br>
+<br>
+def M_Group : OptionGroup<"<M group>">, Group<CompileOnly_Group>,<br>
+              DocName<"Dependency file generation">, DocBrief<[{<br>
+Flags controlling generation of a dependency file for ``make``-like build<br>
+systems.}]>;<br>
+<br>
+def d_Group : OptionGroup<"<d group>">, Group<CompileOnly_Group>,<br>
+              DocName<"Dumping preprocessor state">, DocBrief<[{<br>
+Flags allowing the state of the preprocessor to be dumped in various ways.}]>;<br>
+<br>
+def Diag_Group : OptionGroup<"<W/R group>">, Group<CompileOnly_Group>,<br>
+                 DocName<"Diagnostic flags">, DocBrief<[{<br>
+Flags controlling which warnings, errors, and remarks Clang will generate.<br>
+See the :doc:`full list of warning and remark flags <DiagnosticsReference>`.}]>;<br>
+<br>
+def R_Group : OptionGroup<"<R group>">, Group<Diag_Group>, DocFlatten;<br>
+def R_value_Group : OptionGroup<"<R (with value) group>">, Group<R_Group>,<br>
+                    DocFlatten;<br>
+def W_Group : OptionGroup<"<W group>">, Group<Diag_Group>, DocFlatten;<br>
+def W_value_Group : OptionGroup<"<W (with value) group>">, Group<W_Group>,<br>
+                    DocFlatten;<br>
+<br>
+def f_Group : OptionGroup<"<f group>">, Group<CompileOnly_Group>,<br>
+              DocName<"Target-independent compilation options">;<br>
+<br>
+def f_clang_Group : OptionGroup<"<f (clang-only) group>">,<br>
+                    Group<CompileOnly_Group>, DocFlatten;<br>
+def pedantic_Group : OptionGroup<"<pedantic group>">, Group<f_Group>,<br>
+                     DocFlatten;<br>
+def opencl_Group : OptionGroup<"<opencl group>">, Group<f_Group>,<br>
+                   DocName<"OpenCL flags">;<br>
<br>
-def Action_Group          : OptionGroup<"<action group>">;<br>
-<br>
-def I_Group               : OptionGroup<"<I group>">, Group<CompileOnly_Group>;<br>
-def M_Group               : OptionGroup<"<M group>">, Group<CompileOnly_Group>;<br>
-def T_Group               : OptionGroup<"<T group>">;<br>
-def O_Group               : OptionGroup<"<O group>">, Group<CompileOnly_Group>;<br>
-def R_Group               : OptionGroup<"<R group>">, Group<CompileOnly_Group>;<br>
-def R_value_Group         : OptionGroup<"<R (with value) group>">, Group<R_Group>;<br>
-def W_Group               : OptionGroup<"<W group>">, Group<CompileOnly_Group>;<br>
-def W_value_Group         : OptionGroup<"<W (with value) group>">, Group<W_Group>;<br>
-def d_Group               : OptionGroup<"<d group>">;<br>
-def f_Group               : OptionGroup<"<f group>">, Group<CompileOnly_Group>;<br>
-def f_clang_Group         : OptionGroup<"<f (clang-only) group>">, Group<CompileOnly_Group>;<br>
-def g_Group               : OptionGroup<"<g group>">;<br>
-def gN_Group              : OptionGroup<"<gN group>">, Group<g_Group>;<br>
-def ggdbN_Group           : OptionGroup<"<ggdbN group>">, Group<gN_Group>;<br>
-def gTune_Group           : OptionGroup<"<gTune group>">, Group<g_Group>;<br>
-def g_flags_Group         : OptionGroup<"<g flags group>">;<br>
-def i_Group               : OptionGroup<"<i group>">, Group<CompileOnly_Group>;<br>
-def clang_i_Group         : OptionGroup<"<clang i group>">, Group<i_Group>;<br>
-def m_Group               : OptionGroup<"<m group>">, Group<CompileOnly_Group>;<br>
-def opencl_Group          : OptionGroup<"<opencl group>">, Group<CompileOnly_Group>;<br>
+def m_Group : OptionGroup<"<m group>">, Group<CompileOnly_Group>,<br>
+              DocName<"Target-dependent compilation options">;<br>
<br>
 // Feature groups - these take command line options that correspond directly to<br>
 // target specific features and can be translated directly from command line<br>
 // options.<br>
-def m_x86_Features_Group : OptionGroup<"<x86 features group>">,<br>
-                           Group<m_Group>,<br>
-                           Flags<[CoreOption]>;<br>
-def m_hexagon_Features_Group : OptionGroup<"<hexagon features group>">,<br>
-                               Group<m_Group>;<br>
-def m_arm_Features_Group : OptionGroup<"<arm features group>">,<br>
-                           Group<m_Group>;<br>
 def m_aarch64_Features_Group : OptionGroup<"<aarch64 features group>">,<br>
-                               Group<m_Group>;<br>
+                               Group<m_Group>, DocName<"AARCH64">;<br>
+def m_amdgpu_Features_Group : OptionGroup<"<amdgpu features group>">,<br>
+                              Group<m_Group>, DocName<"AMDGPU">;<br>
+def m_arm_Features_Group : OptionGroup<"<arm features group>">,<br>
+                           Group<m_Group>, DocName<"ARM">;<br>
+def m_hexagon_Features_Group : OptionGroup<"<hexagon features group>">,<br>
+                               Group<m_Group>, DocName<"Hexagon">;<br>
 def m_ppc_Features_Group : OptionGroup<"<ppc features group>">,<br>
-                           Group<m_Group>;<br>
+                           Group<m_Group>, DocName<"PowerPC">;<br>
 def m_wasm_Features_Group : OptionGroup<"<wasm features group>">,<br>
-                            Group<m_Group>;<br>
-def m_amdgpu_Features_Group : OptionGroup<"<amdgpu features group>">,<br>
-                              Group<m_Group>;<br>
+                            Group<m_Group>, DocName<"WebAssembly">;<br>
+def m_x86_Features_Group : OptionGroup<"<x86 features group>">,<br>
+                           Group<m_Group>, Flags<[CoreOption]>, DocName<"X86">;<br>
+<br>
+def m_libc_Group : OptionGroup<"<m libc group>">, Group<m_Group>,<br>
+                   Flags<[HelpHidden]>;<br>
<br>
-def m_libc_Group          : OptionGroup<"<m libc group>">, Group<m_Group>;<br>
-def u_Group               : OptionGroup<"<u group>">;<br>
+def O_Group : OptionGroup<"<O group>">, Group<CompileOnly_Group>,<br>
+              DocName<"Optimization level">, DocBrief<[{<br>
+Flags controlling how much optimization should be performed.}]>;<br>
+<br>
+def DebugInfo_Group : OptionGroup<"<g group>">, Group<CompileOnly_Group>,<br>
+                      DocName<"Debug information generation">, DocBrief<[{<br>
+Flags controlling how much and what kind of debug information should be<br>
+generated.}]>;<br>
+<br>
+def g_Group : OptionGroup<"<g group>">, Group<DebugInfo_Group>,<br>
+              DocName<"Kind and level of debug information">;<br>
+def gN_Group : OptionGroup<"<gN group>">, Group<g_Group>,<br>
+               DocName<"Debug level">;<br>
+def ggdbN_Group : OptionGroup<"<ggdbN group>">, Group<gN_Group>, DocFlatten;<br>
+def gTune_Group : OptionGroup<"<gTune group>">, Group<g_Group>,<br>
+                  DocName<"Debugger to tune debug information for">;<br>
+def g_flags_Group : OptionGroup<"<g flags group>">, Group<DebugInfo_Group>,<br>
+                    DocName<"Debug information flags">;<br>
+<br>
+def Link_Group : OptionGroup<"<T/e/s/t/u group>">, DocName<"Linker flags">,<br>
+                 DocBrief<[{Flags that are passed on to the linker}]>;<br>
+def T_Group : OptionGroup<"<T group>">, Group<Link_Group>, DocFlatten;<br>
+def u_Group : OptionGroup<"<u group>">, Group<Link_Group>, DocFlatten;<br>
<br>
-def pedantic_Group        : OptionGroup<"<pedantic group>">,<br>
-  Group<CompileOnly_Group>;<br>
-def reserved_lib_Group   : OptionGroup<"<reserved libs group>">;<br>
+def reserved_lib_Group : OptionGroup<"<reserved libs group>">,<br>
+                         Flags<[Unsupported]>;<br>
<br>
 // Temporary groups for clang options which we know we don't support,<br>
 // but don't want to verbosely warn the user about.<br>
 def clang_ignored_f_Group : OptionGroup<"<clang ignored f group>">,<br>
-  Group<f_Group>;<br>
+  Group<f_Group>, Flags<[Ignored]>;<br>
 def clang_ignored_m_Group : OptionGroup<"<clang ignored m group>">,<br>
-  Group<m_Group>;<br>
+  Group<m_Group>, Flags<[Ignored]>;<br>
<br>
 // Group that ignores all gcc optimizations that won't be implemented<br>
 def clang_ignored_gcc_<wbr>optimization_f_Group : OptionGroup<<br>
-  "<clang_ignored_gcc_<wbr>optimization_f_Group>">, Group<f_Group>;<br>
+  "<clang_ignored_gcc_<wbr>optimization_f_Group>">, Group<f_Group>, Flags<[Ignored]>;<br>
<br>
 /////////<br>
 // Options<br>
@@ -141,7 +202,7 @@ def clang_ignored_gcc_<wbr>optimization_f_Gro<br>
<br>
 // Developer Driver Options<br>
<br>
-def internal_Group : OptionGroup<"<clang internal options>">;<br>
+def internal_Group : OptionGroup<"<clang internal options>">, Flags<[HelpHidden]>;<br>
 def internal_driver_Group : OptionGroup<"<clang driver internal options>">,<br>
   Group<internal_Group>, HelpText<"DRIVER OPTIONS">;<br>
 def internal_debug_Group :<br>
@@ -252,7 +313,7 @@ def H : Flag<["-"], "H">, Flags<[CC1Opti<br>
 def I_ : Flag<["-"], "I-">, Group<I_Group>;<br>
 def I : JoinedOrSeparate<["-"], "I">, Group<I_Group>, Flags<[CC1Option,CC1AsOption]><wbr>,<br>
     HelpText<"Add directory to include search path">;<br>
-def L : JoinedOrSeparate<["-"], "L">, Flags<[RenderJoined]>;<br>
+def L : JoinedOrSeparate<["-"], "L">, Flags<[RenderJoined]>, Group<Link_Group>;<br>
 def MD : Flag<["-"], "MD">, Group<M_Group>,<br>
     HelpText<"Write a depfile containing user and system headers">;<br>
 def MMD : Flag<["-"], "MMD">, Group<M_Group>,<br>
@@ -323,7 +384,7 @@ def Wno_deprecated : Flag<["-"], "Wno-de<br>
 def Wextra : Flag<["-"], "Wextra">, Group<W_Group>, Flags<[CC1Option]>;<br>
 def Wl_COMMA : CommaJoined<["-"], "Wl,">, Flags<[LinkerInput, RenderAsInput]>,<br>
   HelpText<"Pass the comma separated arguments in <arg> to the linker">,<br>
-  MetaVarName<"<arg>">;<br>
+  MetaVarName<"<arg>">, Group<Link_Group>;<br>
 // FIXME: This is broken; these should not be Joined arguments.<br>
 def Wno_nonportable_cfstrings : Joined<["-"], "Wno-nonportable-cfstrings">, Group<W_Group>,<br>
   Flags<[CC1Option]>;<br>
@@ -349,14 +410,16 @@ def Xcuda_fatbinary : Separate<["-"], "X<br>
 def Xcuda_ptxas : Separate<["-"], "Xcuda-ptxas">,<br>
   HelpText<"Pass <arg> to the ptxas assembler">, MetaVarName<"<arg>">;<br>
 def z : Separate<["-"], "z">, Flags<[LinkerInput, RenderAsInput]>,<br>
-  HelpText<"Pass -z <arg> to the linker">, MetaVarName<"<arg>">;<br>
+  HelpText<"Pass -z <arg> to the linker">, MetaVarName<"<arg>">,<br>
+  Group<Link_Group>;<br>
 def Xlinker : Separate<["-"], "Xlinker">, Flags<[LinkerInput, RenderAsInput]>,<br>
-  HelpText<"Pass <arg> to the linker">, MetaVarName<"<arg>">;<br>
+  HelpText<"Pass <arg> to the linker">, MetaVarName<"<arg>">,<br>
+  Group<Link_Group>;<br>
 def Xpreprocessor : Separate<["-"], "Xpreprocessor">,<br>
   HelpText<"Pass <arg> to the preprocessor">, MetaVarName<"<arg>">;<br>
 def X_Flag : Flag<["-"], "X">;<br>
 def X_Joined : Joined<["-"], "X">;<br>
-def Z_Flag : Flag<["-"], "Z">;<br>
+def Z_Flag : Flag<["-"], "Z">, Group<Link_Group>;<br>
 def Z_Joined : Joined<["-"], "Z">;<br>
 def all__load : Flag<["-"], "all_load">;<br>
 def allowable__client : Separate<["-"], "allowable_client">;<br>
@@ -462,7 +525,7 @@ def emit_ast : Flag<["-"], "emit-ast">,<br>
 def emit_llvm : Flag<["-"], "emit-llvm">, Flags<[CC1Option]>, Group<Action_Group>,<br>
   HelpText<"Use the LLVM representation for assembler and object files">;<br>
 def exported__symbols__list : Separate<["-"], "exported_symbols_list">;<br>
-def e : JoinedOrSeparate<["-"], "e">;<br>
+def e : JoinedOrSeparate<["-"], "e">, Group<Link_Group>;<br>
 def fPIC : Flag<["-"], "fPIC">, Group<f_Group>;<br>
 def fno_PIC : Flag<["-"], "fno-PIC">, Group<f_Group>;<br>
 def fPIE : Flag<["-"], "fPIE">, Group<f_Group>;<br>
@@ -822,7 +885,8 @@ def fno_gnu89_inline : Flag<["-"], "fno-<br>
 def fgnu_runtime : Flag<["-"], "fgnu-runtime">, Group<f_Group>,<br>
   HelpText<"Generate output compatible with the standard GNU Objective-C runtime">;<br>
 def fheinous_gnu_extensions : Flag<["-"], "fheinous-gnu-extensions">, Flags<[CC1Option]>;<br>
-def filelist : Separate<["-"], "filelist">, Flags<[LinkerInput]>;<br>
+def filelist : Separate<["-"], "filelist">, Flags<[LinkerInput]>,<br>
+               Group<Link_Group>;<br>
 def : Flag<["-"], "findirect-virtual-calls">, Alias<fapple_kext>;<br>
 def finline_functions : Flag<["-"], "finline-functions">, Group<f_clang_Group>, Flags<[CC1Option]>,<br>
   HelpText<"Inline suitable functions">;<br>
@@ -1455,7 +1519,8 @@ def ivfsoverlay : JoinedOrSeparate<["-"]<br>
   HelpText<"Overlay the virtual filesystem described by file over the real file system">;<br>
 def i : Joined<["-"], "i">, Group<i_Group>;<br>
 def keep__private__externs : Flag<["-"], "keep_private_externs">;<br>
-def l : JoinedOrSeparate<["-"], "l">, Flags<[LinkerInput, RenderJoined]>;<br>
+def l : JoinedOrSeparate<["-"], "l">, Flags<[LinkerInput, RenderJoined]>,<br>
+        Group<Link_Group>;<br>
 def lazy__framework : Separate<["-"], "lazy_framework">, Flags<[LinkerInput]>;<br>
 def lazy__library : Separate<["-"], "lazy_library">, Flags<[LinkerInput]>;<br>
 def mlittle_endian : Flag<["-"], "mlittle-endian">, Flags<[DriverOption]>;<br>
@@ -1965,10 +2030,11 @@ def resource_dir : Separate<["-"], "reso<br>
   HelpText<"The directory which holds the compiler resource files">;<br>
 def resource_dir_EQ : Joined<["-"], "resource-dir=">, Flags<[DriverOption, CoreOption]>,<br>
   Alias<resource_dir>;<br>
-def rpath : Separate<["-"], "rpath">, Flags<[LinkerInput]>;<br>
+def rpath : Separate<["-"], "rpath">, Flags<[LinkerInput]>, Group<Link_Group>;<br>
 def rtlib_EQ : Joined<["-", "--"], "rtlib=">,<br>
   HelpText<"Compiler runtime library to use">;<br>
-def r : Flag<["-"], "r">, Flags<[LinkerInput,<wbr>NoArgumentUnused]>;<br>
+def r : Flag<["-"], "r">, Flags<[LinkerInput,<wbr>NoArgumentUnused]>,<br>
+        Group<Link_Group>;<br>
 def save_temps_EQ : Joined<["-", "--"], "save-temps=">, Flags<[DriverOption]>,<br>
   HelpText<"Save intermediate compilation results.">;<br>
 def save_temps : Flag<["-", "--"], "save-temps">, Flags<[DriverOption]>,<br>
@@ -2020,7 +2086,7 @@ def no_system_header_prefix : Joined<["-<br>
   HelpText<"Treat all #include paths starting with <prefix> as not including a "<br>
            "system header.">;<br>
 def : Separate<["--"], "no-system-header-prefix">, Alias<no_system_header_prefix><wbr>;<br>
-def s : Flag<["-"], "s">;<br>
+def s : Flag<["-"], "s">, Group<Link_Group>;<br>
 def target : Joined<["--"], "target=">, Flags<[DriverOption, CoreOption]>,<br>
   HelpText<"Generate code for the given target">;<br>
 def gcc_toolchain : Joined<["--"], "gcc-toolchain=">, Flags<[DriverOption]>,<br>
@@ -2034,7 +2100,7 @@ def trigraphs : Flag<["-", "--"], "trigr<br>
   HelpText<"Process trigraph sequences">;<br>
 def twolevel__namespace__hints : Flag<["-"], "twolevel_namespace_hints">;<br>
 def twolevel__namespace : Flag<["-"], "twolevel_namespace">;<br>
-def t : Flag<["-"], "t">;<br>
+def t : Flag<["-"], "t">, Group<Link_Group>;<br>
 def umbrella : Separate<["-"], "umbrella">;<br>
 def undefined : JoinedOrSeparate<["-"], "undefined">, Group<u_Group>;<br>
 def undef : Flag<["-"], "undef">, Group<u_Group>, Flags<[CC1Option]>,<br>
@@ -2330,7 +2396,10 @@ defm devirtualize_speculatively : Boolea<br>
<br>
 // gfortran options that we recognize in the driver and pass along when<br>
 // invoking GCC to compile Fortran code.<br>
-def gfortran_Group : OptionGroup<"gfortran Group">;<br>
+def gfortran_Group : OptionGroup<"<gfortran group>">,<br>
+                     DocName<"Fortran compilation flags">, DocBrief<[{<br>
+Flags that will be passed onto the ``gfortran`` compiler when Clang is given<br>
+a Fortran input.}]>;<br>
<br>
 // Generic gfortran options.<br>
 def A_DASH : Joined<["-"], "A-">, Group<gfortran_Group>;<br>
<br>
Modified: cfe/trunk/utils/TableGen/<wbr>CMakeLists.txt<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/utils/TableGen/CMakeLists.txt?rev=292968&r1=292967&r2=292968&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/cfe/trunk/utils/<wbr>TableGen/CMakeLists.txt?rev=<wbr>292968&r1=292967&r2=292968&<wbr>view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- cfe/trunk/utils/TableGen/<wbr>CMakeLists.txt (original)<br>
+++ cfe/trunk/utils/TableGen/<wbr>CMakeLists.txt Tue Jan 24 13:39:46 2017<br>
@@ -7,6 +7,7 @@ add_tablegen(clang-tblgen CLANG<br>
   ClangCommentHTMLNamedCharacter<wbr>ReferenceEmitter.cpp<br>
   ClangCommentHTMLTagsEmitter.<wbr>cpp<br>
   ClangDiagnosticsEmitter.cpp<br>
+  ClangOptionDocEmitter.cpp<br>
   ClangSACheckersEmitter.cpp<br>
   NeonEmitter.cpp<br>
   TableGen.cpp<br>
<br>
Added: cfe/trunk/utils/TableGen/<wbr>ClangOptionDocEmitter.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/utils/TableGen/ClangOptionDocEmitter.cpp?rev=292968&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/cfe/trunk/utils/<wbr>TableGen/<wbr>ClangOptionDocEmitter.cpp?rev=<wbr>292968&view=auto</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- cfe/trunk/utils/TableGen/<wbr>ClangOptionDocEmitter.cpp (added)<br>
+++ cfe/trunk/utils/TableGen/<wbr>ClangOptionDocEmitter.cpp Tue Jan 24 13:39:46 2017<br>
@@ -0,0 +1,358 @@<br>
+//===- ClangOptionDocEmitter.cpp - Documentation for command line flags ---===//<br>
+//<br>
+//                     The LLVM Compiler Infrastructure<br>
+//<br>
+// This file is distributed under the University of Illinois Open Source<br>
+// License. See LICENSE.TXT for details.<br>
+//<br>
+// FIXME: Once this has stabilized, consider moving it to LLVM.<br>
+//<br>
+//===------------------------<wbr>------------------------------<wbr>----------------===//<br>
+<br>
+#include "llvm/TableGen/Error.h"<br>
+#include "llvm/ADT/STLExtras.h"<br>
+#include "llvm/ADT/SmallString.h"<br>
+#include "llvm/ADT/StringSwitch.h"<br>
+#include "llvm/ADT/Twine.h"<br>
+#include "llvm/TableGen/Record.h"<br>
+#include "llvm/TableGen/<wbr>TableGenBackend.h"<br>
+#include <cctype><br>
+#include <cstring><br>
+#include <map><br>
+<br>
+using namespace llvm;<br>
+<br>
+namespace clang {<br>
+namespace docs {<br>
+namespace {<br>
+struct DocumentedOption {<br>
+  Record *Option;<br>
+  std::vector<Record*> Aliases;<br>
+};<br>
+struct DocumentedGroup;<br>
+struct Documentation {<br>
+  std::vector<DocumentedGroup> Groups;<br>
+  std::vector<DocumentedOption> Options;<br>
+};<br>
+struct DocumentedGroup : Documentation {<br>
+  Record *Group;<br>
+};<br>
+<br>
+// Reorganize the records into a suitable form for emitting documentation.<br>
+Documentation extractDocumentation(<wbr>RecordKeeper &Records) {<br>
+  Documentation Result;<br>
+<br>
+  // Build the tree of groups. The root in the tree is the fake option group<br>
+  // (Record*)nullptr, which contains all top-level groups and options.<br>
+  std::map<Record*, std::vector<Record*> > OptionsInGroup;<br>
+  std::map<Record*, std::vector<Record*> > GroupsInGroup;<br>
+  std::map<Record*, std::vector<Record*> > Aliases;<br>
+<br>
+  std::map<std::string, Record*> OptionsByName;<br>
+  for (Record *R : Records.<wbr>getAllDerivedDefinitions("<wbr>Option"))<br>
+    OptionsByName[R-><wbr>getValueAsString("Name")] = R;<br>
+<br>
+  auto Flatten = [](Record *R) {<br>
+    return R->getValue("DocFlatten") && R->getValueAsBit("DocFlatten")<wbr>;<br>
+  };<br>
+<br>
+  auto SkipFlattened = [&](Record *R) -> Record* {<br>
+    while (R && Flatten(R)) {<br>
+      auto *G = dyn_cast<DefInit>(R-><wbr>getValueInit("Group"));<br>
+      if (!G)<br>
+        return nullptr;<br>
+      R = G->getDef();<br>
+    }<br>
+    return R;<br>
+  };<br>
+<br>
+  for (Record *R : Records.<wbr>getAllDerivedDefinitions("<wbr>OptionGroup")) {<br>
+    if (Flatten(R))<br>
+      continue;<br>
+<br>
+    Record *Group = nullptr;<br>
+    if (auto *G = dyn_cast<DefInit>(R-><wbr>getValueInit("Group")))<br>
+      Group = SkipFlattened(G->getDef());<br>
+    GroupsInGroup[Group].push_<wbr>back(R);<br>
+  }<br>
+<br>
+  for (Record *R : Records.<wbr>getAllDerivedDefinitions("<wbr>Option")) {<br>
+    if (auto *A = dyn_cast<DefInit>(R-><wbr>getValueInit("Alias"))) {<br>
+      Aliases[A->getDef()].push_<wbr>back(R);<br>
+      continue;<br>
+    }<br>
+<br>
+    // Pretend no-X and Xno-Y options are aliases of X and XY.<br>
+    auto Name = R->getValueAsString("Name");<br>
+    if (Name.size() >= 4) {<br>
+      if (Name.substr(0, 3) == "no-" && OptionsByName[Name.substr(3)]) {<br>
+        Aliases[OptionsByName[Name.<wbr>substr(3)]].push_back(R);<br>
+        continue;<br>
+      }<br>
+      if (Name.substr(1, 3) == "no-" && OptionsByName[Name[0] + Name.substr(4)]) {<br>
+        Aliases[OptionsByName[Name[0] + Name.substr(4)]].push_back(R);<br>
+        continue;<br>
+      }<br>
+    }<br>
+<br>
+    Record *Group = nullptr;<br>
+    if (auto *G = dyn_cast<DefInit>(R-><wbr>getValueInit("Group")))<br>
+      Group = SkipFlattened(G->getDef());<br>
+    OptionsInGroup[Group].push_<wbr>back(R);<br>
+  }<br>
+<br>
+  auto CompareByName = [](Record *A, Record *B) {<br>
+    return A->getValueAsString("Name") < B->getValueAsString("Name");<br>
+  };<br>
+<br>
+  auto CompareByLocation = [](Record *A, Record *B) {<br>
+    return A->getLoc()[0].getPointer() < B->getLoc()[0].getPointer();<br>
+  };<br>
+<br>
+  auto DocumentationForOption = [&](Record *R) -> DocumentedOption {<br>
+    auto &A = Aliases[R];<br>
+    std::sort(A.begin(), A.end(), CompareByName);<br>
+    return {R, std::move(A)};<br>
+  };<br>
+<br>
+  std::function<Documentation(<wbr>Record *)> DocumentationForGroup =<br>
+      [&](Record *R) -> Documentation {<br>
+    Documentation D;<br>
+<br>
+    auto &Groups = GroupsInGroup[R];<br>
+    std::sort(Groups.begin(), Groups.end(), CompareByLocation);<br>
+    for (Record *G : Groups) {<br>
+      D.Groups.emplace_back();<br>
+      D.Groups.back().Group = G;<br>
+      Documentation &Base = D.Groups.back();<br>
+      Base = DocumentationForGroup(G);<br>
+    }<br>
+<br>
+    auto &Options = OptionsInGroup[R];<br>
+    std::sort(Options.begin(), Options.end(), CompareByName);<br>
+    for (Record *O : Options)<br>
+      D.Options.push_back(<wbr>DocumentationForOption(O));<br>
+<br>
+    return D;<br>
+  };<br>
+<br>
+  return DocumentationForGroup(nullptr)<wbr>;<br>
+}<br>
+<br>
+// Get the first and successive separators to use for an OptionKind.<br>
+std::pair<StringRef,<wbr>StringRef> getSeparatorsForKind(Record *OptionKind) {<br>
+  return StringSwitch<std::pair<<wbr>StringRef, StringRef>>(OptionKind-><wbr>getName())<br>
+    .Cases("KIND_JOINED", "KIND_JOINED_OR_SEPARATE",<br>
+           "KIND_JOINED_AND_SEPARATE",<br>
+           "KIND_REMAINING_ARGS_JOINED", {"", " "})<br>
+    .Case("KIND_COMMAJOINED", {"", ","})<br>
+    .Default({" ", " "});<br>
+}<br>
+<br>
+const unsigned UnlimitedArgs = unsigned(-1);<br>
+<br>
+// Get the number of arguments expected for an option, or -1 if any number of<br>
+// arguments are accepted.<br>
+unsigned getNumArgsForKind(Record *OptionKind, Record *Option) {<br>
+  return StringSwitch<unsigned>(<wbr>OptionKind->getName())<br>
+    .Cases("KIND_JOINED", "KIND_JOINED_OR_SEPARATE", "KIND_SEPARATE", 1)<br>
+    .Cases("KIND_REMAINING_ARGS", "KIND_REMAINING_ARGS_JOINED",<br>
+           "KIND_COMMAJOINED", UnlimitedArgs)<br>
+    .Case("KIND_JOINED_AND_<wbr>SEPARATE", 2)<br>
+    .Case("KIND_MULTIARG", Option->getValueAsInt("<wbr>NumArgs"))<br>
+    .Default(0);<br>
+}<br>
+<br>
+bool hasFlag(const Record *OptionOrGroup, StringRef OptionFlag) {<br>
+  for (const Record *Flag : OptionOrGroup-><wbr>getValueAsListOfDefs("Flags"))<br>
+    if (Flag->getName() == OptionFlag)<br>
+      return true;<br>
+  return false;<br>
+}<br>
+<br>
+bool isExcluded(const Record *OptionOrGroup, const Record *DocInfo) {<br>
+  // FIXME: Provide a flag to specify the set of exclusions.<br>
+  for (StringRef Exclusion : DocInfo-><wbr>getValueAsListOfStrings("<wbr>ExcludedFlags"))<br>
+    if (hasFlag(OptionOrGroup, Exclusion))<br>
+      return true;<br>
+  return false;<br>
+}<br>
+<br>
+std::string escapeRST(StringRef Str) {<br>
+  std::string Out;<br>
+  for (auto K : Str) {<br>
+    if (StringRef("`*|_[]\\").count(<wbr>K))<br>
+      Out.push_back('\\');<br>
+    Out.push_back(K);<br>
+  }<br>
+  return Out;<br>
+}<br>
+<br>
+bool canSphinxCopeWithOption(const Record *Option) {<br>
+  // HACK: Work arond sphinx's inability to cope with punctuation-only options<br>
+  // such as /? by suppressing them from the option list.<br>
+  for (char C : Option->getValueAsString("<wbr>Name"))<br>
+    if (isalnum(C))<br>
+      return true;<br>
+  return false;<br>
+}<br>
+<br>
+void emitHeading(int Depth, std::string Heading, raw_ostream &OS) {<br>
+  assert(Depth < 8 && "groups nested too deeply");<br>
+  OS << Heading << '\n'<br>
+     << std::string(Heading.size(), "=~-_'+<>"[Depth]) << "\n";<br>
+}<br>
+<br>
+/// Get the value of field \p Primary, if possible. If \p Primary does not<br>
+/// exist, get the value of \p Fallback and escape it for rST emission.<br>
+std::string getRSTStringWithTextFallback(<wbr>const Record *R, StringRef Primary,<br>
+                                         StringRef Fallback) {<br>
+  for (auto Field : {Primary, Fallback}) {<br>
+    if (auto *V = R->getValue(Field)) {<br>
+      StringRef Value;<br>
+      if (auto *SV = dyn_cast_or_null<StringInit>(<wbr>V->getValue()))<br>
+        Value = SV->getValue();<br>
+      else if (auto *CV = dyn_cast_or_null<CodeInit>(V-><wbr>getValue()))<br>
+        Value = CV->getValue();<br>
+      if (!Value.empty())<br>
+        return Field == Primary ? Value.str() : escapeRST(Value);<br>
+    }<br>
+  }<br>
+  return StringRef();<br>
+}<br>
+<br>
+void emitOptionWithArgs(StringRef Prefix, Record *Option,<br>
+                               ArrayRef<std::string> Args, raw_ostream &OS) {<br>
+  OS << Prefix << escapeRST(Option-><wbr>getValueAsString("Name"));<br>
+<br>
+  std::pair<StringRef, StringRef> Separators =<br>
+      getSeparatorsForKind(Option-><wbr>getValueAsDef("Kind"));<br>
+<br>
+  StringRef Separator = Separators.first;<br>
+  for (auto Arg : Args) {<br>
+    OS << Separator << escapeRST(Arg);<br>
+    Separator = Separators.second;<br>
+  }<br>
+}<br>
+<br>
+void emitOptionName(StringRef Prefix, Record *Option, raw_ostream &OS) {<br>
+  // Find the arguments to list after the option.<br>
+  unsigned NumArgs = getNumArgsForKind(Option-><wbr>getValueAsDef("Kind"), Option);<br>
+<br>
+  std::vector<std::string> Args;<br>
+  if (!Option->isValueUnset("<wbr>MetaVarName"))<br>
+    Args.push_back(Option-><wbr>getValueAsString("MetaVarName"<wbr>));<br>
+  else if (NumArgs == 1)<br>
+    Args.push_back("<arg>");<br>
+<br>
+  while (Args.size() < NumArgs) {<br>
+    Args.push_back(("<arg" + Twine(Args.size() + 1) + ">").str());<br>
+    // Use '--args <arg1> <arg2>...' if any number of args are allowed.<br>
+    if (Args.size() == 2 && NumArgs == UnlimitedArgs) {<br>
+      Args.back() += "...";<br>
+      break;<br>
+    }<br>
+  }<br>
+<br>
+  emitOptionWithArgs(Prefix, Option, Args, OS);<br>
+<br>
+  auto AliasArgs = Option-><wbr>getValueAsListOfStrings("<wbr>AliasArgs");<br>
+  if (!AliasArgs.empty()) {<br>
+    Record *Alias = Option->getValueAsDef("Alias")<wbr>;<br>
+    OS << " (equivalent to ";<br>
+    emitOptionWithArgs(Alias-><wbr>getValueAsListOfStrings("<wbr>Prefixes").front(),<br>
+                       Alias, Option-><wbr>getValueAsListOfStrings("<wbr>AliasArgs"), OS);<br>
+    OS << ")";<br>
+  }<br>
+}<br>
+<br>
+bool emitOptionNames(Record *Option, raw_ostream &OS, bool EmittedAny) {<br>
+  for (auto &Prefix : Option-><wbr>getValueAsListOfStrings("<wbr>Prefixes")) {<br>
+    if (EmittedAny)<br>
+      OS << ", ";<br>
+    emitOptionName(Prefix, Option, OS);<br>
+    EmittedAny = true;<br>
+  }<br>
+  return EmittedAny;<br>
+}<br>
+<br>
+void emitOption(const DocumentedOption &Option, const Record *DocInfo,<br>
+                raw_ostream &OS) {<br>
+  if (isExcluded(Option.Option, DocInfo))<br>
+    return;<br>
+  if (Option.Option->getValueAsDef(<wbr>"Kind")->getName() == "KIND_UNKNOWN" ||<br>
+      Option.Option->getValueAsDef("<wbr>Kind")->getName() == "KIND_INPUT")<br>
+    return;<br>
+  if (!canSphinxCopeWithOption(<wbr>Option.Option))<br>
+    return;<br>
+<br>
+  // HACK: Emit a different program name with each option to work around<br>
+  // sphinx's inability to cope with options that differ only by punctuation<br>
+  // (eg -ObjC vs -ObjC++, -G vs -G=).<br>
+  static int Emitted = 0;<br>
+  OS << ".. program:: " << DocInfo->getValueAsString("<wbr>Program") << Emitted++<br>
+     << "\n";<br>
+<br>
+  // Emit the names of the option.<br>
+  OS << ".. option:: ";<br>
+  bool EmittedAny = emitOptionNames(Option.Option, OS, false);<br>
+  for (auto *Alias : Option.Aliases)<br>
+    if (!isExcluded(Alias, DocInfo) && canSphinxCopeWithOption(<wbr>Option.Option))<br>
+      EmittedAny = emitOptionNames(Alias, OS, EmittedAny);<br>
+  assert(EmittedAny && "no flags for option");<br>
+  OS << "\n\n";<br>
+<br>
+  // Emit the description, if we have one.<br>
+  std::string Description =<br>
+      getRSTStringWithTextFallback(<wbr>Option.Option, "DocBrief", "HelpText");<br>
+  if (!Description.empty())<br>
+    OS << Description << "\n\n";<br>
+}<br>
+<br>
+void emitDocumentation(int Depth, const Documentation &Doc,<br>
+                       const Record *DocInfo, raw_ostream &OS);<br>
+<br>
+void emitGroup(int Depth, const DocumentedGroup &Group, const Record *DocInfo,<br>
+               raw_ostream &OS) {<br>
+  if (isExcluded(Group.Group, DocInfo))<br>
+    return;<br>
+<br>
+  emitHeading(Depth,<br>
+              getRSTStringWithTextFallback(<wbr>Group.Group, "DocName", "Name"), OS);<br>
+<br>
+  // Emit the description, if we have one.<br>
+  std::string Description =<br>
+      getRSTStringWithTextFallback(<wbr>Group.Group, "DocBrief", "HelpText");<br>
+  if (!Description.empty())<br>
+    OS << Description << "\n\n";<br>
+<br>
+  // Emit contained options and groups.<br>
+  emitDocumentation(Depth + 1, Group, DocInfo, OS);<br>
+}<br>
+<br>
+void emitDocumentation(int Depth, const Documentation &Doc,<br>
+                       const Record *DocInfo, raw_ostream &OS) {<br>
+  for (auto &O : Doc.Options)<br>
+    emitOption(O, DocInfo, OS);<br>
+  for (auto &G : Doc.Groups)<br>
+    emitGroup(Depth, G, DocInfo, OS);<br>
+}<br>
+<br>
+}  // namespace<br>
+}  // namespace docs<br>
+<br>
+void EmitClangOptDocs(RecordKeeper &Records, raw_ostream &OS) {<br>
+  using namespace docs;<br>
+<br>
+  const Record *DocInfo = Records.getDef("<wbr>GlobalDocumentation");<br>
+  if (!DocInfo) {<br>
+    PrintFatalError("The GlobalDocumentation top-level definition is missing, "<br>
+                    "no documentation will be generated.");<br>
+    return;<br>
+  }<br>
+  OS << DocInfo->getValueAsString("<wbr>Intro") << "\n";<br>
+  OS << ".. program:: " << DocInfo->getValueAsString("<wbr>Program") << "\n";<br>
+<br>
+  emitDocumentation(0, extractDocumentation(Records), DocInfo, OS);<br>
+}<br>
+} // end namespace clang<br>
<br>
Modified: cfe/trunk/utils/TableGen/<wbr>TableGen.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/utils/TableGen/TableGen.cpp?rev=292968&r1=292967&r2=292968&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/cfe/trunk/utils/<wbr>TableGen/TableGen.cpp?rev=<wbr>292968&r1=292967&r2=292968&<wbr>view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- cfe/trunk/utils/TableGen/<wbr>TableGen.cpp (original)<br>
+++ cfe/trunk/utils/TableGen/<wbr>TableGen.cpp Tue Jan 24 13:39:46 2017<br>
@@ -53,7 +53,8 @@ enum ActionType {<br>
   GenArmNeonSema,<br>
   GenArmNeonTest,<br>
   GenAttrDocs,<br>
-  GenDiagDocs<br>
+  GenDiagDocs,<br>
+  GenOptDocs<br>
 };<br>
<br>
 namespace {<br>
@@ -135,7 +136,9 @@ cl::opt<ActionType> Action(<br>
         clEnumValN(GenAttrDocs, "gen-attr-docs",<br>
                    "Generate attribute documentation"),<br>
         clEnumValN(GenDiagDocs, "gen-diag-docs",<br>
-                   "Generate attribute documentation")));<br>
+                   "Generate diagnostic documentation"),<br>
+        clEnumValN(GenOptDocs, "gen-opt-docs",<br>
+                   "Generate option documentation")));<br>
<br>
 cl::opt<std::string><br>
 ClangComponent("clang-<wbr>component",<br>
@@ -238,6 +241,9 @@ bool ClangTableGenMain(raw_ostream &OS,<br>
   case GenDiagDocs:<br>
     EmitClangDiagDocs(Records, OS);<br>
     break;<br>
+  case GenOptDocs:<br>
+    EmitClangOptDocs(Records, OS);<br>
+    break;<br>
   }<br>
<br>
   return false;<br>
<br>
Modified: cfe/trunk/utils/TableGen/<wbr>TableGenBackends.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/utils/TableGen/TableGenBackends.h?rev=292968&r1=292967&r2=292968&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/cfe/trunk/utils/<wbr>TableGen/TableGenBackends.h?<wbr>rev=292968&r1=292967&r2=<wbr>292968&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- cfe/trunk/utils/TableGen/<wbr>TableGenBackends.h (original)<br>
+++ cfe/trunk/utils/TableGen/<wbr>TableGenBackends.h Tue Jan 24 13:39:46 2017<br>
@@ -70,6 +70,7 @@ void EmitNeonTest2(RecordKeeper &Records<br>
<br>
 void EmitClangAttrDocs(RecordKeeper &Records, raw_ostream &OS);<br>
 void EmitClangDiagDocs(RecordKeeper &Records, raw_ostream &OS);<br>
+void EmitClangOptDocs(RecordKeeper &Records, raw_ostream &OS);<br>
<br>
 } // end namespace clang<br>
<br>
<br>
<br>
______________________________<wbr>_________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@lists.llvm.org">cfe-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/cfe-commits</a><br>
</blockquote></div><br></div>