diff options
author | dim <dim@FreeBSD.org> | 2014-11-24 18:11:16 +0000 |
---|---|---|
committer | dim <dim@FreeBSD.org> | 2014-11-24 18:11:16 +0000 |
commit | 6148c19c738a92f344008aa3f88f4e008bada0ee (patch) | |
tree | d4426858455f04d0d8c25a2f9eb9ea5582ffe1b6 /contrib/llvm/tools/clang/include/clang/Driver | |
parent | 2c8643c6396b0a3db33430cf9380e70bbb9efce0 (diff) | |
parent | 173a4f43a911175643bda81ee675e8d9269056ea (diff) | |
download | FreeBSD-src-6148c19c738a92f344008aa3f88f4e008bada0ee.zip FreeBSD-src-6148c19c738a92f344008aa3f88f4e008bada0ee.tar.gz |
Merge clang 3.5.0 release from ^/vendor/clang/dist, resolve conflicts,
and preserve our customizations, where necessary.
Diffstat (limited to 'contrib/llvm/tools/clang/include/clang/Driver')
15 files changed, 656 insertions, 352 deletions
diff --git a/contrib/llvm/tools/clang/include/clang/Driver/Action.h b/contrib/llvm/tools/clang/include/clang/Driver/Action.h index 289dbe3..2cdb581 100644 --- a/contrib/llvm/tools/clang/include/clang/Driver/Action.h +++ b/contrib/llvm/tools/clang/include/clang/Driver/Action.h @@ -50,10 +50,11 @@ public: LinkJobClass, LipoJobClass, DsymutilJobClass, - VerifyJobClass, + VerifyDebugInfoJobClass, + VerifyPCHJobClass, JobClassFirst=PreprocessJobClass, - JobClassLast=VerifyJobClass + JobClassLast=VerifyPCHJobClass }; static const char *getClassName(ActionClass AC); @@ -141,7 +142,7 @@ public: }; class PreprocessJobAction : public JobAction { - virtual void anchor(); + void anchor() override; public: PreprocessJobAction(Action *Input, types::ID OutputType); @@ -151,7 +152,7 @@ public: }; class PrecompileJobAction : public JobAction { - virtual void anchor(); + void anchor() override; public: PrecompileJobAction(Action *Input, types::ID OutputType); @@ -161,7 +162,7 @@ public: }; class AnalyzeJobAction : public JobAction { - virtual void anchor(); + void anchor() override; public: AnalyzeJobAction(Action *Input, types::ID OutputType); @@ -171,7 +172,7 @@ public: }; class MigrateJobAction : public JobAction { - virtual void anchor(); + void anchor() override; public: MigrateJobAction(Action *Input, types::ID OutputType); @@ -181,7 +182,7 @@ public: }; class CompileJobAction : public JobAction { - virtual void anchor(); + void anchor() override; public: CompileJobAction(Action *Input, types::ID OutputType); @@ -191,7 +192,7 @@ public: }; class AssembleJobAction : public JobAction { - virtual void anchor(); + void anchor() override; public: AssembleJobAction(Action *Input, types::ID OutputType); @@ -201,7 +202,7 @@ public: }; class LinkJobAction : public JobAction { - virtual void anchor(); + void anchor() override; public: LinkJobAction(ActionList &Inputs, types::ID Type); @@ -211,7 +212,7 @@ public: }; class LipoJobAction : public JobAction { - virtual void anchor(); + void anchor() override; public: LipoJobAction(ActionList &Inputs, types::ID Type); @@ -221,7 +222,7 @@ public: }; class DsymutilJobAction : public JobAction { - virtual void anchor(); + void anchor() override; public: DsymutilJobAction(ActionList &Inputs, types::ID Type); @@ -231,11 +232,31 @@ public: }; class VerifyJobAction : public JobAction { - virtual void anchor(); + void anchor() override; +public: + VerifyJobAction(ActionClass Kind, Action *Input, types::ID Type); + VerifyJobAction(ActionClass Kind, ActionList &Inputs, types::ID Type); + static bool classof(const Action *A) { + return A->getKind() == VerifyDebugInfoJobClass || + A->getKind() == VerifyPCHJobClass; + } +}; + +class VerifyDebugInfoJobAction : public VerifyJobAction { + void anchor() override; +public: + VerifyDebugInfoJobAction(Action *Input, types::ID Type); + static bool classof(const Action *A) { + return A->getKind() == VerifyDebugInfoJobClass; + } +}; + +class VerifyPCHJobAction : public VerifyJobAction { + void anchor() override; public: - VerifyJobAction(ActionList &Inputs, types::ID Type); + VerifyPCHJobAction(Action *Input, types::ID Type); static bool classof(const Action *A) { - return A->getKind() == VerifyJobClass; + return A->getKind() == VerifyPCHJobClass; } }; diff --git a/contrib/llvm/tools/clang/include/clang/Driver/CC1AsOptions.h b/contrib/llvm/tools/clang/include/clang/Driver/CC1AsOptions.h deleted file mode 100644 index 345f50a..0000000 --- a/contrib/llvm/tools/clang/include/clang/Driver/CC1AsOptions.h +++ /dev/null @@ -1,37 +0,0 @@ -//===--- CC1AsOptions.h - Clang Assembler Options Table ---------*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// - -#ifndef CLANG_DRIVER_CC1ASOPTIONS_H -#define CLANG_DRIVER_CC1ASOPTIONS_H - -namespace llvm { -namespace opt { - class OptTable; -} -} - -namespace clang { -namespace driver { - -namespace cc1asoptions { - enum ID { - OPT_INVALID = 0, // This is not an option ID. -#define OPTION(PREFIX, NAME, ID, KIND, GROUP, ALIAS, ALIASARGS, FLAGS, PARAM, \ - HELPTEXT, METAVAR) OPT_##ID, -#include "clang/Driver/CC1AsOptions.inc" - LastOption -#undef OPTION - }; -} - -llvm::opt::OptTable *createCC1AsOptTable(); -} -} - -#endif diff --git a/contrib/llvm/tools/clang/include/clang/Driver/CC1AsOptions.td b/contrib/llvm/tools/clang/include/clang/Driver/CC1AsOptions.td deleted file mode 100644 index b536724..0000000 --- a/contrib/llvm/tools/clang/include/clang/Driver/CC1AsOptions.td +++ /dev/null @@ -1,95 +0,0 @@ -//===--- CC1AsOptions.td - Options for clang -cc1as -----------------------===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// This file defines the options accepted by clang -cc1as. -// -//===----------------------------------------------------------------------===// - -// Include the common option parsing interfaces. -include "llvm/Option/OptParser.td" - -//===----------------------------------------------------------------------===// -// Target Options -//===----------------------------------------------------------------------===// - -def triple : Separate<["-"], "triple">, - HelpText<"Specify target triple (e.g. x86_64-pc-linux-gnu)">; -def target_cpu : Separate<["-"], "target-cpu">, - HelpText<"Target a specific cpu type">; -def target_feature : Separate<["-"], "target-feature">, - HelpText<"Target specific attributes">; - -//===----------------------------------------------------------------------===// -// Language Options -//===----------------------------------------------------------------------===// - -def I : JoinedOrSeparate<["-"], "I">, MetaVarName<"<directory>">, - HelpText<"Add directory to include search path">; -def n : Flag<["-"], "n">, - HelpText<"Don't automatically start assembly file with a text section">; -def msave_temp_labels : Flag<["-"], "msave-temp-labels">, - HelpText<"Save temporary labels in the symbol table. " - "Note this may change .s semantics, it should almost never be used " - "on compiler generated code!">; -def main_file_name : Separate<["-"], "main-file-name">, - HelpText<"Main file name to use for debug info">; - -//===----------------------------------------------------------------------===// -// Frontend Options -//===----------------------------------------------------------------------===// - -def o : Separate<["-"], "o">, MetaVarName<"<path>">, - HelpText<"Specify output file">; - -def filetype : Separate<["-"], "filetype">, - HelpText<"Specify the output file type ('asm', 'null', or 'obj')">; - -def help : Flag<["-", "--"], "help">, - HelpText<"Print this help text">; - -def version : Flag<["-", "--"], "version">, - HelpText<"Print the assembler version">; -def v : Flag<["-"], "v">, Alias<version>; - -// Generic forwarding to LLVM options. This should only be used for debugging -// and experimental features. -def mllvm : Separate<["-"], "mllvm">, - HelpText<"Additional arguments to forward to LLVM's option processing">; - -//===----------------------------------------------------------------------===// -// Transliterate Options -//===----------------------------------------------------------------------===// - -def output_asm_variant : Separate<["-"], "output-asm-variant">, - HelpText<"Select the asm variant index to use for output">; -def show_encoding : Flag<["-"], "show-encoding">, - HelpText<"Show instruction encoding information in transliterate mode">; -def show_inst : Flag<["-"], "show-inst">, - HelpText<"Show internal instruction representation in transliterate mode">; - -//===----------------------------------------------------------------------===// -// Assemble Options -//===----------------------------------------------------------------------===// - -def mrelax_all : Flag<["-"], "mrelax-all">, - HelpText<"Relax all fixups (for performance testing)">; - -def mno_exec_stack : Flag<["-"], "mnoexecstack">, - HelpText<"Mark the file as not needing an executable stack">; - -def g : Flag<["-"], "g">, HelpText<"Generate source level debug information">; - -def fdebug_compilation_dir : Separate<["-"], "fdebug-compilation-dir">, - HelpText<"The compilation directory to embed in the debug info.">; - -def dwarf_debug_flags : Separate<["-"], "dwarf-debug-flags">, - HelpText<"The string to embed in the Dwarf debug flags record.">; - -def dwarf_debug_producer : Separate<["-"], "dwarf-debug-producer">, - HelpText<"The string to embed in the Dwarf debug AT_producer record.">; diff --git a/contrib/llvm/tools/clang/include/clang/Driver/CC1Options.h b/contrib/llvm/tools/clang/include/clang/Driver/CC1Options.h deleted file mode 100644 index e69de29..0000000 --- a/contrib/llvm/tools/clang/include/clang/Driver/CC1Options.h +++ /dev/null diff --git a/contrib/llvm/tools/clang/include/clang/Driver/CC1Options.td b/contrib/llvm/tools/clang/include/clang/Driver/CC1Options.td index 85cfdcf..d25560c 100644 --- a/contrib/llvm/tools/clang/include/clang/Driver/CC1Options.td +++ b/contrib/llvm/tools/clang/include/clang/Driver/CC1Options.td @@ -7,7 +7,7 @@ // //===----------------------------------------------------------------------===// // -// This file defines the options accepted by clang -cc1. +// This file defines the options accepted by clang -cc1 and clang -cc1as. // //===----------------------------------------------------------------------===// @@ -17,21 +17,24 @@ let Flags = [CC1Option, NoDriverOption] in { // Target Options //===----------------------------------------------------------------------===// -def cxx_abi : Separate<["-"], "cxx-abi">, - HelpText<"Target a particular C++ ABI type">; -def target_abi : Separate<["-"], "target-abi">, - HelpText<"Target a particular ABI type">; +let Flags = [CC1Option, CC1AsOption, NoDriverOption] in { + def target_cpu : Separate<["-"], "target-cpu">, HelpText<"Target a specific cpu type">; -def mfpmath : Separate<["-"], "mfpmath">, - HelpText<"Which unit to use for fp math">; def target_feature : Separate<["-"], "target-feature">, HelpText<"Target specific attributes">; -def target_linker_version : Separate<["-"], "target-linker-version">, - HelpText<"Target linker version">; def triple : Separate<["-"], "triple">, HelpText<"Specify target triple (e.g. i686-apple-darwin9)">; + +} + +def target_abi : Separate<["-"], "target-abi">, + HelpText<"Target a particular ABI type">; +def target_linker_version : Separate<["-"], "target-linker-version">, + HelpText<"Target linker version">; def triple_EQ : Joined<["-"], "triple=">, Alias<triple>; +def mfpmath : Separate<["-"], "mfpmath">, + HelpText<"Which unit to use for fp math">; //===----------------------------------------------------------------------===// // Analyzer Options @@ -124,22 +127,37 @@ def migrator_no_finalize_removal : Flag<["-"], "no-finalize-removal">, // CodeGen Options //===----------------------------------------------------------------------===// +let Flags = [CC1Option, CC1AsOption, NoDriverOption] in { + +def fdebug_compilation_dir : Separate<["-"], "fdebug-compilation-dir">, + HelpText<"The compilation directory to embed in the debug info.">; +def dwarf_debug_flags : Separate<["-"], "dwarf-debug-flags">, + HelpText<"The string to embed in the Dwarf debug flags record.">; +def mno_exec_stack : Flag<["-"], "mnoexecstack">, + HelpText<"Mark the file as not needing an executable stack">; +def compress_debug_sections : Flag<["-"], "compress-debug-sections">, + HelpText<"Compress DWARF debug sections using zlib">; +def msave_temp_labels : Flag<["-"], "msave-temp-labels">, + HelpText<"Save temporary labels in the symbol table. " + "Note this may change .s semantics and shouldn't generally be used " + "on compiler-generated code.">; + +} + def disable_llvm_optzns : Flag<["-"], "disable-llvm-optzns">, HelpText<"Don't run LLVM optimization passes">; def disable_llvm_verifier : Flag<["-"], "disable-llvm-verifier">, HelpText<"Don't run the LLVM IR verifier pass">; def disable_red_zone : Flag<["-"], "disable-red-zone">, HelpText<"Do not emit code that uses the red zone.">; -def fdebug_compilation_dir : Separate<["-"], "fdebug-compilation-dir">, - HelpText<"The compilation directory to embed in the debug info.">; -def dwarf_debug_flags : Separate<["-"], "dwarf-debug-flags">, - HelpText<"The string to embed in the Dwarf debug flags record.">; def dwarf_column_info : Flag<["-"], "dwarf-column-info">, HelpText<"Turn on column location information.">; def split_dwarf : Flag<["-"], "split-dwarf">, HelpText<"Split out the dwarf .dwo sections">; def gnu_pubnames : Flag<["-"], "gnu-pubnames">, HelpText<"Emit newer GNU style pubnames">; +def arange_sections : Flag<["-"], "arange_sections">, + HelpText<"Emit DWARF .debug_arange sections">; def fforbid_guard_variables : Flag<["-"], "fforbid-guard-variables">, HelpText<"Emit an error if a C++ static local initializer would need a guard variable">; def no_implicit_float : Flag<["-"], "no-implicit-float">, @@ -188,8 +206,6 @@ def mfloat_abi : Separate<["-"], "mfloat-abi">, HelpText<"The float ABI to use">; def mlimit_float_precision : Separate<["-"], "mlimit-float-precision">, HelpText<"Limit float precision to the given value">; -def mno_exec_stack : Flag<["-"], "mnoexecstack">, - HelpText<"Mark the file as not needing an executable stack">; def split_stacks : Flag<["-"], "split-stacks">, HelpText<"Try to use a split stack if possible.">; def mno_zero_initialized_in_bss : Flag<["-"], "mno-zero-initialized-in-bss">, @@ -198,8 +214,6 @@ def backend_option : Separate<["-"], "backend-option">, HelpText<"Additional arguments to forward to LLVM backend (during code gen)">; def mregparm : Separate<["-"], "mregparm">, HelpText<"Limit the number of registers available for integer arguments">; -def msave_temp_labels : Flag<["-"], "msave-temp-labels">, - HelpText<"(integrated-as) Save temporary labels">; def mrelocation_model : Separate<["-"], "mrelocation-model">, HelpText<"The relocation model to use">; def munwind_tables : Flag<["-"], "munwind-tables">, @@ -223,10 +237,12 @@ def dependent_lib : Joined<["--"], "dependent-lib=">, def sys_header_deps : Flag<["-"], "sys-header-deps">, HelpText<"Include system headers in dependency output">; +def module_file_deps : Flag<["-"], "module-file-deps">, + HelpText<"Include module files in dependency output">; def header_include_file : Separate<["-"], "header-include-file">, HelpText<"Filename (or -) to write header include output to">; def show_includes : Flag<["--"], "show-includes">, - HelpText<"Print cl.exe style /showIncludes to stderr">; + HelpText<"Print cl.exe style /showIncludes to stdout">; //===----------------------------------------------------------------------===// // Diagnostic Options @@ -256,6 +272,8 @@ def fconstexpr_backtrace_limit : Separate<["-"], "fconstexpr-backtrace-limit">, HelpText<"Set the maximum number of entries to print in a constexpr evaluation backtrace (0 = no limit).">; def fmessage_length : Separate<["-"], "fmessage-length">, MetaVarName<"<N>">, HelpText<"Format message diagnostics so that they fit within N columns or fewer, when possible.">; +def verify : Flag<["-"], "verify">, + HelpText<"Verify diagnostic output using comment directives">; def Wno_rewrite_macros : Flag<["-"], "Wno-rewrite-macros">, HelpText<"Silence ObjC rewriting warnings">; @@ -266,6 +284,7 @@ def Wno_rewrite_macros : Flag<["-"], "Wno-rewrite-macros">, // This isn't normally used, it is just here so we can parse a // CompilerInvocation out of a driver-derived argument vector. def cc1 : Flag<["-"], "cc1">; +def cc1as : Flag<["-"], "cc1as">; def ast_merge : Separate<["-"], "ast-merge">, MetaVarName<"<ast file>">, @@ -297,8 +316,6 @@ def plugin_arg : JoinedAndSeparate<["-"], "plugin-arg-">, HelpText<"Pass <arg> to plugin <name>">; def add_plugin : Separate<["-"], "add-plugin">, MetaVarName<"<name>">, HelpText<"Use the named plugin action in addition to the default action">; -def version : Flag<["-"], "version">, - HelpText<"Print the compiler version">; def ast_dump_filter : Separate<["-"], "ast-dump-filter">, MetaVarName<"<dump_filter>">, HelpText<"Use with -ast-dump or -ast-print to dump/print only AST declaration" @@ -308,6 +325,8 @@ def ast_dump_lookups : Flag<["-"], "ast-dump-lookups">, HelpText<"Include name lookup table dumps in AST dumps">; def fno_modules_global_index : Flag<["-"], "fno-modules-global-index">, HelpText<"Do not automatically generate or update the global module index">; +def fno_modules_error_recovery : Flag<["-"], "fno-modules-error-recovery">, + HelpText<"Do not automatically import modules for error recovery">; let Group = Action_Group in { @@ -393,14 +412,19 @@ def foverride_record_layout_EQ : Joined<["-"], "foverride-record-layout=">, // Language Options //===----------------------------------------------------------------------===// +let Flags = [CC1Option, CC1AsOption, NoDriverOption] in { + +def version : Flag<["-"], "version">, + HelpText<"Print the compiler version">; +def main_file_name : Separate<["-"], "main-file-name">, + HelpText<"Main file name to use for debug info">; + +} + def fblocks_runtime_optional : Flag<["-"], "fblocks-runtime-optional">, HelpText<"Weakly link in the blocks runtime">; def fsjlj_exceptions : Flag<["-"], "fsjlj-exceptions">, HelpText<"Use SjLj style exceptions">; -def fhidden_weak_vtables : Flag<["-"], "fhidden-weak-vtables">, - HelpText<"Generate weak vtables and RTTI with hidden visibility">; -def main_file_name : Separate<["-"], "main-file-name">, - HelpText<"Main file name to use for debug info">; def split_dwarf_file : Separate<["-"], "split-dwarf-file">, HelpText<"File name to use for split dwarf debug info output">; def fno_wchar : Flag<["-"], "fno-wchar">, @@ -476,6 +500,10 @@ def fsized_deallocation : Flag<["-"], "fsized-deallocation">, HelpText<"Enable C++1y sized global deallocation functions">; def fobjc_subscripting_legacy_runtime : Flag<["-"], "fobjc-subscripting-legacy-runtime">, HelpText<"Allow Objective-C array and dictionary subscripting in legacy runtime">; +def vtordisp_mode_EQ : Joined<["-"], "vtordisp-mode=">, + HelpText<"Control vtordisp placement on win32 targets">; +def fno_rtti_data : Flag<["-"], "fno-rtti-data">, + HelpText<"Control emission of RTTI data">; //===----------------------------------------------------------------------===// // Header Search Options @@ -504,14 +532,6 @@ def internal_externc_isystem : JoinedOrSeparate<["-"], "internal-externc-isystem "implicit extern \"C\" semantics; these are assumed to not be " "user-provided and are used to model system and standard headers' " "paths.">; -def isystem_prefix : JoinedOrSeparate<["-"], "isystem-prefix">, - MetaVarName<"<prefix>">, - HelpText<"Treat all #include paths starting with <prefix> as including a " - "system header.">; -def ino_system_prefix : JoinedOrSeparate<["-"], "ino-system-prefix">, - MetaVarName<"<prefix>">, - HelpText<"Treat all #include paths starting with <prefix> as not including a " - "system header.">; //===----------------------------------------------------------------------===// // Preprocessor Options @@ -539,6 +559,8 @@ def cl_single_precision_constant : Flag<["-"], "cl-single-precision-constant">, HelpText<"OpenCL only. Treat double precision floating-point constant as single precision constant.">; def cl_finite_math_only : Flag<["-"], "cl-finite-math-only">, HelpText<"OpenCL only. Allow floating-point optimizations that assume arguments and results are not NaNs or +-Inf.">; +def cl_kernel_arg_info : Flag<["-"], "cl-kernel-arg-info">, + HelpText<"OpenCL only. Generate kernel argument metadata.">; def cl_unsafe_math_optimizations : Flag<["-"], "cl-unsafe-math-optimizations">, HelpText<"OpenCL only. Allow unsafe floating-point optimizations. Also implies -cl-no-signed-zeros and -cl-mad-enable">; def cl_fast_relaxed_math : Flag<["-"], "cl-fast-relaxed-math">, @@ -556,3 +578,32 @@ def fcuda_is_device : Flag<["-"], "fcuda-is-device">, HelpText<"Generate code for CUDA device">; } // let Flags = [CC1Option] + + +//===----------------------------------------------------------------------===// +// cc1as-only Options +//===----------------------------------------------------------------------===// + +let Flags = [CC1AsOption, NoDriverOption] in { + +// Language Options +def n : Flag<["-"], "n">, + HelpText<"Don't automatically start assembly file with a text section">; + +// Frontend Options +def filetype : Separate<["-"], "filetype">, + HelpText<"Specify the output file type ('asm', 'null', or 'obj')">; + +// Transliterate Options +def output_asm_variant : Separate<["-"], "output-asm-variant">, + HelpText<"Select the asm variant index to use for output">; +def show_encoding : Flag<["-"], "show-encoding">, + HelpText<"Show instruction encoding information in transliterate mode">; +def show_inst : Flag<["-"], "show-inst">, + HelpText<"Show internal instruction representation in transliterate mode">; + +// Assemble Options +def dwarf_debug_producer : Separate<["-"], "dwarf-debug-producer">, + HelpText<"The string to embed in the Dwarf debug AT_producer record.">; + +} // let Flags = [CC1AsOption] diff --git a/contrib/llvm/tools/clang/include/clang/Driver/CLCompatOptions.td b/contrib/llvm/tools/clang/include/clang/Driver/CLCompatOptions.td index d17a63c..7278bf8 100644 --- a/contrib/llvm/tools/clang/include/clang/Driver/CLCompatOptions.td +++ b/contrib/llvm/tools/clang/include/clang/Driver/CLCompatOptions.td @@ -57,10 +57,19 @@ def _SLASH_C : CLFlag<"C">, HelpText<"Don't discard comments when preprocessing" def _SLASH_c : CLFlag<"c">, HelpText<"Compile only">, Alias<c>; def _SLASH_D : CLJoinedOrSeparate<"D">, HelpText<"Define macro">, MetaVarName<"<macro[=value]>">, Alias<D>; -def _SLASH_GR : CLFlag<"GR">, HelpText<"Enable RTTI">, Alias<frtti>; -def _SLASH_GR_ : CLFlag<"GR-">, HelpText<"Disable RTTI">, Alias<fno_rtti>; +def _SLASH_E : CLFlag<"E">, HelpText<"Preprocess to stdout">, Alias<E>; +def _SLASH_GR : CLFlag<"GR">, HelpText<"Enable emission of RTTI data">; +def _SLASH_GR_ : CLFlag<"GR-">, HelpText<"Disable emission of RTTI data">; def _SLASH_GF_ : CLFlag<"GF-">, HelpText<"Disable string pooling">, Alias<fwritable_strings>; +def _SLASH_Gy : CLFlag<"Gy">, HelpText<"Put each function in its own section">, + Alias<ffunction_sections>; +def _SLASH_Gy_ : CLFlag<"Gy-">, HelpText<"Don't put each function in its own section">, + Alias<fno_function_sections>; +def _SLASH_Gw : CLFlag<"Gw">, HelpText<"Put each data item in its own section">, + Alias<fdata_sections>; +def _SLASH_Gw_ : CLFlag<"Gw-">, HelpText<"Don't put each data item in its own section">, + Alias<fno_data_sections>; def _SLASH_help : CLFlag<"help">, Alias<help>, HelpText<"Display available options">; def _SLASH_HELP : CLFlag<"HELP">, Alias<help>; @@ -88,7 +97,6 @@ def _SLASH_Oy : CLFlag<"Oy">, HelpText<"Enable frame pointer omission">, Alias<fomit_frame_pointer>; def _SLASH_Oy_ : CLFlag<"Oy-">, HelpText<"Disable frame pointer omission">, Alias<fno_omit_frame_pointer>; -def _SLASH_P : CLFlag<"P">, HelpText<"Only run the preprocessor">, Alias<E>; def _SLASH_QUESTION : CLFlag<"?">, Alias<help>, HelpText<"Display available options">; def _SLASH_showIncludes : CLFlag<"showIncludes">, @@ -96,6 +104,16 @@ def _SLASH_showIncludes : CLFlag<"showIncludes">, Alias<show_includes>; def _SLASH_U : CLJoinedOrSeparate<"U">, HelpText<"Undefine macro">, MetaVarName<"<macro>">, Alias<U>; +def _SLASH_vmb : CLFlag<"vmb">, + HelpText<"Use a best-case representation method for member pointers">; +def _SLASH_vmg : CLFlag<"vmg">, + HelpText<"Use a most-general representation for member pointers">; +def _SLASH_vms : CLFlag<"vms">, + HelpText<"Set the default most-general representation to single inheritance">; +def _SLASH_vmm : CLFlag<"vmm">, + HelpText<"Set the default most-general representation to multiple inheritance">; +def _SLASH_vmv : CLFlag<"vmv">, + HelpText<"Set the default most-general representation to virtual inheritance">; def _SLASH_W0 : CLFlag<"W0">, HelpText<"Disable all warnings">, Alias<w>; def _SLASH_W1 : CLFlag<"W1">, HelpText<"Enable -Wall">, Alias<Wall>; def _SLASH_W2 : CLFlag<"W2">, HelpText<"Enable -Wall">, Alias<Wall>; @@ -107,14 +125,27 @@ def _SLASH_WX : CLFlag<"WX">, HelpText<"Treat warnings as errors">, def _SLASH_WX_ : CLFlag<"WX-">, HelpText<"Do not treat warnings as errors">, Alias<W_Joined>, AliasArgs<["no-error"]>; def _SLASH_w_flag : CLFlag<"w">, HelpText<"Disable all warnings">, Alias<w>; +def _SLASH_wd4005 : CLFlag<"wd4005">, Alias<W_Joined>, + AliasArgs<["no-macro-redefined"]>; +def _SLASH_vd : CLJoined<"vd">, HelpText<"Control vtordisp placement">, + Alias<vtordisp_mode_EQ>; +def _SLASH_Z7 : CLFlag<"Z7">, Alias<gline_tables_only>; +def _SLASH_Zi : CLFlag<"Zi">, HelpText<"Enable debug information">, + Alias<gline_tables_only>; def _SLASH_Zs : CLFlag<"Zs">, HelpText<"Syntax-check only">, Alias<fsyntax_only>; // Non-aliases: +def _SLASH_arch : CLCompileJoined<"arch:">, + HelpText<"Set architecture for code generation">; + def _SLASH_M_Group : OptionGroup<"</M group>">, Group<cl_compile_Group>; +def _SLASH_EH : CLJoined<"EH">, HelpText<"Exception handling model">; +def _SLASH_EP : CLFlag<"EP">, + HelpText<"Disable linemarker output and preprocess to stdout">; def _SLASH_FA : CLFlag<"FA">, HelpText<"Output assembly code file during compilation">; def _SLASH_Fa : CLJoined<"Fa">, @@ -127,6 +158,9 @@ def _SLASH_FI : CLJoinedOrSeparate<"FI">, def _SLASH_Fe : CLJoined<"Fe">, HelpText<"Set output executable file or directory (ends in / or \\)">, MetaVarName<"<file or directory>">; +def _SLASH_Fi : CLCompileJoined<"Fi">, + HelpText<"Set preprocess output file name">, + MetaVarName<"<file>">; def _SLASH_Fo : CLCompileJoined<"Fo">, HelpText<"Set output object file, or directory (ends in / or \\)">, MetaVarName<"<file or directory>">; @@ -142,6 +176,7 @@ def _SLASH_MT : Option<["/", "-"], "MT", KIND_FLAG>, Group<_SLASH_M_Group>, Flags<[CLOption, DriverOption]>, HelpText<"Use static run-time">; def _SLASH_MTd : Option<["/", "-"], "MTd", KIND_FLAG>, Group<_SLASH_M_Group>, Flags<[CLOption, DriverOption]>, HelpText<"Use static debug run-time">; +def _SLASH_P : CLFlag<"P">, HelpText<"Preprocess to file">; def _SLASH_Tc : CLCompileJoinedOrSeparate<"Tc">, HelpText<"Specify a C source file">, MetaVarName<"<filename>">; def _SLASH_TC : CLCompileFlag<"TC">, HelpText<"Treat all source files as C">; @@ -164,9 +199,10 @@ def _SLASH_Ob2 : CLIgnoredFlag<"Ob2">; def _SLASH_RTC : CLIgnoredJoined<"RTC">; def _SLASH_sdl : CLIgnoredFlag<"sdl">; def _SLASH_sdl_ : CLIgnoredFlag<"sdl-">; -def _SLASH_vmg : CLIgnoredFlag<"vmg">; def _SLASH_w : CLIgnoredJoined<"w">; def _SLASH_Zc_forScope : CLIgnoredFlag<"Zc:forScope">; +def _SLASH_Zc_inline : CLIgnoredFlag<"Zc:inline">; +def _SLASH_Zc_rvalueCast : CLIgnoredFlag<"Zc:rvalueCast">; def _SLASH_Zc_wchar_t : CLIgnoredFlag<"Zc:wchar_t">; def _SLASH_Zm : CLIgnoredJoined<"Zm">; @@ -174,19 +210,15 @@ def _SLASH_Zm : CLIgnoredJoined<"Zm">; // Unsupported: def _SLASH_AI : CLJoined<"AI">; -def _SLASH_arch : CLJoined<"arch:">; def _SLASH_bigobj : CLFlag<"bigobj">; def _SLASH_clr : CLJoined<"clr">; +def _SLASH_d2Zi_PLUS : CLFlag<"d2Zi+">; def _SLASH_doc : CLJoined<"doc">; -def _SLASH_E : CLFlag<"E">; -def _SLASH_EH : CLJoined<"EH">; -def _SLASH_EP : CLFlag<"EP">; def _SLASH_FA_joined : CLJoined<"FA">; def _SLASH_favor : CLJoined<"favor">; def _SLASH_FC : CLFlag<"FC">; def _SLASH_F : CLFlag<"F">; def _SLASH_Fd : CLJoined<"Fd">; -def _SLASH_Fi : CLJoined<"Fi">; def _SLASH_Fm : CLJoined<"Fm">; def _SLASH_fp : CLJoined<"fp">; def _SLASH_Fp : CLJoined<"Fp">; @@ -210,8 +242,6 @@ def _SLASH_GS : CLFlag<"GS">; def _SLASH_Gs : CLJoined<"Gs">; def _SLASH_GT : CLFlag<"GT">; def _SLASH_GX : CLFlag<"GX">; -def _SLASH_Gy : CLFlag<"Gy">; -def _SLASH_Gy_ : CLFlag<"Gy-">; def _SLASH_Gz : CLFlag<"Gz">; def _SLASH_GZ : CLFlag<"GZ">; def _SLASH_H : CLFlag<"H">; @@ -229,11 +259,6 @@ def _SLASH_Qpar : CLFlag<"Qpar">; def _SLASH_Qvec_report : CLJoined<"Qvec-report">; def _SLASH_u : CLFlag<"u">; def _SLASH_V : CLFlag<"V">; -def _SLASH_vd : CLJoined<"vd">; -def _SLASH_vmb : CLFlag<"vmb">; -def _SLASH_vmm : CLFlag<"vmm">; -def _SLASH_vms : CLFlag<"vms">; -def _SLASH_vmv : CLFlag<"vmv">; def _SLASH_volatile : CLFlag<"volatile">; def _SLASH_WL : CLFlag<"WL">; def _SLASH_Wp64 : CLFlag<"Wp64">; @@ -243,13 +268,11 @@ def _SLASH_Y_ : CLFlag<"Y-">; def _SLASH_Yd : CLFlag<"Yd">; def _SLASH_Yl : CLJoined<"Yl">; def _SLASH_Yu : CLJoined<"Yu">; -def _SLASH_Z7 : CLFlag<"Z7">; def _SLASH_Za : CLFlag<"Za">; def _SLASH_Zc : CLJoined<"Zc:">; def _SLASH_Ze : CLFlag<"Ze">; def _SLASH_Zg : CLFlag<"Zg">; -def _SLASH_Zi : CLFlag<"Zi">; def _SLASH_ZI : CLFlag<"ZI">; def _SLASH_Zl : CLFlag<"Zl">; -def _SLASH_Zp : CLFlag<"Zp">; +def _SLASH_Zp : CLJoined<"Zp">; def _SLASH_ZW : CLJoined<"ZW">; diff --git a/contrib/llvm/tools/clang/include/clang/Driver/Compilation.h b/contrib/llvm/tools/clang/include/clang/Driver/Compilation.h index 3493e4f..c1c0f43 100644 --- a/contrib/llvm/tools/clang/include/clang/Driver/Compilation.h +++ b/contrib/llvm/tools/clang/include/clang/Driver/Compilation.h @@ -69,6 +69,9 @@ class Compilation { /// Redirection for stdout, stderr, etc. const StringRef **Redirects; + /// Whether we're compiling for diagnostic purposes. + bool ForDiagnostics; + public: Compilation(const Driver &D, const ToolChain &DefaultToolChain, llvm::opt::InputArgList *Args, @@ -173,6 +176,9 @@ public: /// so compilation can be reexecuted to generate additional diagnostic /// information (e.g., preprocessed source(s)). void initCompilationForDiagnostics(); + + /// Return true if we're compiling for diagnostics. + bool isForDiagnostics() { return ForDiagnostics; } }; } // end namespace driver diff --git a/contrib/llvm/tools/clang/include/clang/Driver/Driver.h b/contrib/llvm/tools/clang/include/clang/Driver/Driver.h index 73c8086..df974ad 100644 --- a/contrib/llvm/tools/clang/include/clang/Driver/Driver.h +++ b/contrib/llvm/tools/clang/include/clang/Driver/Driver.h @@ -15,11 +15,11 @@ #include "clang/Driver/Phases.h" #include "clang/Driver/Types.h" #include "clang/Driver/Util.h" -#include "llvm/ADT/OwningPtr.h" #include "llvm/ADT/StringMap.h" #include "llvm/ADT/StringRef.h" #include "llvm/ADT/Triple.h" #include "llvm/Support/Path.h" // FIXME: Kill when CompilationInfo +#include <memory> // lands. #include <list> #include <set> @@ -188,12 +188,11 @@ private: // getFinalPhase - Determine which compilation mode we are in and record // which option we used to determine the final phase. phases::ID getFinalPhase(const llvm::opt::DerivedArgList &DAL, - llvm::opt::Arg **FinalPhaseArg = 0) const; + llvm::opt::Arg **FinalPhaseArg = nullptr) const; public: Driver(StringRef _ClangExecutable, StringRef _DefaultTargetTriple, - StringRef _DefaultImageName, DiagnosticsEngine &_Diags); ~Driver(); @@ -259,7 +258,7 @@ public: /// \param Args - The input arguments. /// \param Inputs - The list to store the resulting compilation /// inputs onto. - void BuildInputs(const ToolChain &TC, const llvm::opt::DerivedArgList &Args, + void BuildInputs(const ToolChain &TC, llvm::opt::DerivedArgList &Args, InputList &Inputs) const; /// BuildActions - Construct the list of actions to perform for the diff --git a/contrib/llvm/tools/clang/include/clang/Driver/Job.h b/contrib/llvm/tools/clang/include/clang/Driver/Job.h index 1dd49a7..5b19efe 100644 --- a/contrib/llvm/tools/clang/include/clang/Driver/Job.h +++ b/contrib/llvm/tools/clang/include/clang/Driver/Job.h @@ -11,9 +11,9 @@ #define CLANG_DRIVER_JOB_H_ #include "clang/Basic/LLVM.h" -#include "llvm/ADT/OwningPtr.h" #include "llvm/ADT/SmallVector.h" #include "llvm/Option/Option.h" +#include <memory> namespace llvm { class raw_ostream; @@ -76,8 +76,8 @@ public: Command(const Action &_Source, const Tool &_Creator, const char *_Executable, const llvm::opt::ArgStringList &_Arguments); - virtual void Print(llvm::raw_ostream &OS, const char *Terminator, - bool Quote, bool CrashReport = false) const; + void Print(llvm::raw_ostream &OS, const char *Terminator, bool Quote, + bool CrashReport = false) const override; virtual int Execute(const StringRef **Redirects, std::string *ErrMsg, bool *ExecutionFailed) const; @@ -88,6 +88,8 @@ public: /// getCreator - Return the Tool which caused the creation of this job. const Tool &getCreator() const { return Creator; } + const char *getExecutable() const { return Executable; } + const llvm::opt::ArgStringList &getArguments() const { return Arguments; } static bool classof(const Job *J) { @@ -104,18 +106,18 @@ public: const char *Executable_, const ArgStringList &Arguments_, Command *Fallback_); - virtual void Print(llvm::raw_ostream &OS, const char *Terminator, - bool Quote, bool CrashReport = false) const; + void Print(llvm::raw_ostream &OS, const char *Terminator, bool Quote, + bool CrashReport = false) const override; - virtual int Execute(const StringRef **Redirects, std::string *ErrMsg, - bool *ExecutionFailed) const; + int Execute(const StringRef **Redirects, std::string *ErrMsg, + bool *ExecutionFailed) const override; static bool classof(const Job *J) { return J->getKind() == FallbackCommandClass; } private: - OwningPtr<Command> Fallback; + std::unique_ptr<Command> Fallback; }; /// JobList - A sequence of jobs to perform. @@ -133,8 +135,8 @@ public: JobList(); virtual ~JobList(); - virtual void Print(llvm::raw_ostream &OS, const char *Terminator, - bool Quote, bool CrashReport = false) const; + void Print(llvm::raw_ostream &OS, const char *Terminator, + bool Quote, bool CrashReport = false) const override; /// Add a job to the list (taking ownership). void addJob(Job *J) { Jobs.push_back(J); } diff --git a/contrib/llvm/tools/clang/include/clang/Driver/Multilib.h b/contrib/llvm/tools/clang/include/clang/Driver/Multilib.h new file mode 100644 index 0000000..6c3738a --- /dev/null +++ b/contrib/llvm/tools/clang/include/clang/Driver/Multilib.h @@ -0,0 +1,167 @@ +//===--- Multilib.h ---------------------------------------------*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#ifndef CLANG_LIB_DRIVER_MULTILIB_H_ +#define CLANG_LIB_DRIVER_MULTILIB_H_ + +#include "clang/Basic/LLVM.h" +#include "llvm/ADT/Triple.h" +#include "llvm/Option/Option.h" +#include <string> +#include <vector> + +namespace clang { +namespace driver { + +/// This corresponds to a single GCC Multilib, or a segment of one controlled +/// by a command line flag +class Multilib { +public: + typedef std::vector<std::string> flags_list; + +private: + std::string GCCSuffix; + std::string OSSuffix; + std::string IncludeSuffix; + flags_list Flags; + +public: + Multilib(StringRef GCCSuffix = "", StringRef OSSuffix = "", + StringRef IncludeSuffix = ""); + + /// \brief Get the detected GCC installation path suffix for the multi-arch + /// target variant. Always starts with a '/', unless empty + const std::string &gccSuffix() const { + assert(GCCSuffix.empty() || + (StringRef(GCCSuffix).front() == '/' && GCCSuffix.size() > 1)); + return GCCSuffix; + } + /// Set the GCC installation path suffix. + Multilib &gccSuffix(StringRef S); + + /// \brief Get the detected os path suffix for the multi-arch + /// target variant. Always starts with a '/', unless empty + const std::string &osSuffix() const { + assert(OSSuffix.empty() || + (StringRef(OSSuffix).front() == '/' && OSSuffix.size() > 1)); + return OSSuffix; + } + /// Set the os path suffix. + Multilib &osSuffix(StringRef S); + + /// \brief Get the include directory suffix. Always starts with a '/', unless + /// empty + const std::string &includeSuffix() const { + assert(IncludeSuffix.empty() || + (StringRef(IncludeSuffix).front() == '/' && IncludeSuffix.size() > 1)); + return IncludeSuffix; + } + /// Set the include directory suffix + Multilib &includeSuffix(StringRef S); + + /// \brief Get the flags that indicate or contraindicate this multilib's use + /// All elements begin with either '+' or '-' + const flags_list &flags() const { return Flags; } + flags_list &flags() { return Flags; } + /// Add a flag to the flags list + Multilib &flag(StringRef F) { + assert(F.front() == '+' || F.front() == '-'); + Flags.push_back(F); + return *this; + } + + /// \brief print summary of the Multilib + void print(raw_ostream &OS) const; + + /// Check whether any of the 'against' flags contradict the 'for' flags. + bool isValid() const; + + /// Check whether the default is selected + bool isDefault() const + { return GCCSuffix.empty() && OSSuffix.empty() && IncludeSuffix.empty(); } + + bool operator==(const Multilib &Other) const; +}; + +raw_ostream &operator<<(raw_ostream &OS, const Multilib &M); + +class MultilibSet { +public: + typedef std::vector<Multilib> multilib_list; + typedef multilib_list::iterator iterator; + typedef multilib_list::const_iterator const_iterator; + + struct FilterCallback { + virtual ~FilterCallback() {}; + /// \return true iff the filter should remove the Multilib from the set + virtual bool operator()(const Multilib &M) const = 0; + }; + +private: + multilib_list Multilibs; + +public: + MultilibSet() {} + + /// Add an optional Multilib segment + MultilibSet &Maybe(const Multilib &M); + + /// Add a set of mutually incompatible Multilib segments + MultilibSet &Either(const Multilib &M1, const Multilib &M2); + MultilibSet &Either(const Multilib &M1, const Multilib &M2, + const Multilib &M3); + MultilibSet &Either(const Multilib &M1, const Multilib &M2, + const Multilib &M3, const Multilib &M4); + MultilibSet &Either(const Multilib &M1, const Multilib &M2, + const Multilib &M3, const Multilib &M4, + const Multilib &M5); + MultilibSet &Either(const std::vector<Multilib> &Ms); + + /// Filter out some subset of the Multilibs using a user defined callback + MultilibSet &FilterOut(const FilterCallback &F); + /// Filter out those Multilibs whose gccSuffix matches the given expression + MultilibSet &FilterOut(std::string Regex); + + /// Add a completed Multilib to the set + void push_back(const Multilib &M); + + /// Union this set of multilibs with another + void combineWith(const MultilibSet &MS); + + /// Remove all of thie multilibs from the set + void clear() { Multilibs.clear(); } + + iterator begin() { return Multilibs.begin(); } + const_iterator begin() const { return Multilibs.begin(); } + + iterator end() { return Multilibs.end(); } + const_iterator end() const { return Multilibs.end(); } + + /// Pick the best multilib in the set, \returns false if none are compatible + bool select(const Multilib::flags_list &Flags, Multilib &M) const; + + unsigned size() const { return Multilibs.size(); } + + void print(raw_ostream &OS) const; + +private: + /// Apply the filter to Multilibs and return the subset that remains + static multilib_list filterCopy(const FilterCallback &F, + const multilib_list &Ms); + + /// Apply the filter to the multilib_list, removing those that don't match + static void filterInPlace(const FilterCallback &F, multilib_list &Ms); +}; + +raw_ostream &operator<<(raw_ostream &OS, const MultilibSet &MS); +} +} + +#endif + diff --git a/contrib/llvm/tools/clang/include/clang/Driver/Options.h b/contrib/llvm/tools/clang/include/clang/Driver/Options.h index 28948be..cee705d 100644 --- a/contrib/llvm/tools/clang/include/clang/Driver/Options.h +++ b/contrib/llvm/tools/clang/include/clang/Driver/Options.h @@ -30,7 +30,8 @@ enum ClangFlags { CoreOption = (1 << 8), CLOption = (1 << 9), CC1Option = (1 << 10), - NoDriverOption = (1 << 11) + CC1AsOption = (1 << 11), + NoDriverOption = (1 << 12) }; enum ID { diff --git a/contrib/llvm/tools/clang/include/clang/Driver/Options.td b/contrib/llvm/tools/clang/include/clang/Driver/Options.td index 5e7c76d..a48b7ad 100644 --- a/contrib/llvm/tools/clang/include/clang/Driver/Options.td +++ b/contrib/llvm/tools/clang/include/clang/Driver/Options.td @@ -44,6 +44,9 @@ def CLOption : OptionFlag; // CC1Option - This option should be accepted by clang -cc1. def CC1Option : OptionFlag; +// CC1AsOption - This option should be accepted by clang -cc1as. +def CC1AsOption : OptionFlag; + // NoDriverOption - This option should not be accepted by the driver. def NoDriverOption : OptionFlag; @@ -60,7 +63,10 @@ def I_Group : OptionGroup<"<I group>">, Group<CompileOnly_Group>; def M_Group : OptionGroup<"<M group>">, Group<CompileOnly_Group>; def T_Group : OptionGroup<"<T group>">; def O_Group : OptionGroup<"<O group>">, Group<CompileOnly_Group>; +def R_Group : OptionGroup<"<R group>">, Group<CompileOnly_Group>; +def R_value_Group : OptionGroup<"<R (with value) group>">, Group<R_Group>; def W_Group : OptionGroup<"<W group>">, Group<CompileOnly_Group>; +def W_value_Group : OptionGroup<"<W (with value) group>">, Group<W_Group>; def d_Group : OptionGroup<"<d group>">; def f_Group : OptionGroup<"<f group>">, Group<CompileOnly_Group>; def f_clang_Group : OptionGroup<"<f (clang-only) group>">, Group<CompileOnly_Group>; @@ -69,11 +75,11 @@ def g_flags_Group : OptionGroup<"<g flags group>">; def i_Group : OptionGroup<"<i group>">, Group<CompileOnly_Group>; def clang_i_Group : OptionGroup<"<clang i group>">, Group<i_Group>; def m_Group : OptionGroup<"<m group>">, Group<CompileOnly_Group>; -def m_x86_Features_Group : OptionGroup<"<m x86 features group>">, Group<m_Group>; +def m_x86_Features_Group : OptionGroup<"<m x86 features group>">, Group<m_Group>, Flags<[CoreOption]>; def m_hexagon_Features_Group : OptionGroup<"<m hexagon features group>">, Group<m_Group>; def m_arm_Features_Group : OptionGroup<"<m arm features group>">, Group<m_Group>; +def m_aarch64_Features_Group : OptionGroup<"<m aarch64 features group>">, Group<m_Group>; def m_ppc_Features_Group : OptionGroup<"<m ppc features group>">, Group<m_Group>; -def opencl_Group : OptionGroup<"<opencl group>">; def u_Group : OptionGroup<"<u group>">; def pedantic_Group : OptionGroup<"<pedantic group>">, @@ -87,6 +93,10 @@ def clang_ignored_f_Group : OptionGroup<"<clang ignored f group>">, def clang_ignored_m_Group : OptionGroup<"<clang ignored m group>">, Group<m_Group>; +// Group that ignores all gcc optimizations that won't be implemented +def clang_ignored_gcc_optimization_f_Group : OptionGroup< + "<clang_ignored_gcc_optimization_f_Group>">, Group<f_Group>; + ///////// // Options @@ -184,8 +194,13 @@ def objcmt_returns_innerpointer_property : Flag<["-"], "objcmt-returns-innerpoin HelpText<"Enable migration to annotate property with NS_RETURNS_INNER_POINTER">; def objcmt_ns_nonatomic_iosonly: Flag<["-"], "objcmt-ns-nonatomic-iosonly">, Flags<[CC1Option]>, HelpText<"Enable migration to use NS_NONATOMIC_IOSONLY macro for setting property's 'atomic' attribute">; -def objcmt_white_list_dir_path: Joined<["-"], "objcmt-white-list-dir-path=">, Flags<[CC1Option]>, +def objcmt_migrate_designated_init : Flag<["-"], "objcmt-migrate-designated-init">, Flags<[CC1Option]>, + HelpText<"Enable migration to infer NS_DESIGNATED_INITIALIZER for initializer methods">; +def objcmt_whitelist_dir_path: Joined<["-"], "objcmt-whitelist-dir-path=">, Flags<[CC1Option]>, HelpText<"Only modify files with a filename contained in the provided directory path">; +// The misspelt "white-list" [sic] alias is due for removal. +def : Joined<["-"], "objcmt-white-list-dir-path=">, Flags<[CC1Option]>, + Alias<objcmt_whitelist_dir_path>; // Make sure all other -ccc- options are rejected. def ccc_ : Joined<["-"], "ccc-">, Group<internal_Group>, Flags<[Unsupported]>; @@ -193,7 +208,7 @@ def ccc_ : Joined<["-"], "ccc-">, Group<internal_Group>, Flags<[Unsupported]>; // Standard Options def _HASH_HASH_HASH : Flag<["-"], "###">, Flags<[DriverOption, CoreOption]>, - HelpText<"Print the commands to run for this compilation">; + HelpText<"Print (but do not run) the commands to run for this compilation">; def _DASH_DASH : Option<["--"], "", KIND_REMAINING_ARGS>, Flags<[DriverOption, CoreOption]>; def A : JoinedOrSeparate<["-"], "A">, Flags<[RenderJoined]>; @@ -210,23 +225,29 @@ def G_EQ : Joined<["-"], "G=">, Flags<[DriverOption]>; def H : Flag<["-"], "H">, Flags<[CC1Option]>, HelpText<"Show header includes and nesting depth">; def I_ : Flag<["-"], "I-">, Group<I_Group>; -def I : JoinedOrSeparate<["-"], "I">, Group<I_Group>, Flags<[CC1Option]>, +def I : JoinedOrSeparate<["-"], "I">, Group<I_Group>, Flags<[CC1Option,CC1AsOption]>, HelpText<"Add directory to include search path">; def L : JoinedOrSeparate<["-"], "L">, Flags<[RenderJoined]>; -def MD : Flag<["-"], "MD">, Group<M_Group>; -def MF : JoinedOrSeparate<["-"], "MF">, Group<M_Group>; +def MD : Flag<["-"], "MD">, Group<M_Group>, + HelpText<"Write a depfile containing user and system headers">; +def MMD : Flag<["-"], "MMD">, Group<M_Group>, + HelpText<"Write a depfile containing user headers">; +def M : Flag<["-"], "M">, Group<M_Group>, + HelpText<"Like -MD, but also implies -E and writes to stdout by default">; +def MM : Flag<["-"], "MM">, Group<M_Group>, + HelpText<"Like -MMD, but also implies -E and writes to stdout by default">; +def MF : JoinedOrSeparate<["-"], "MF">, Group<M_Group>, + HelpText<"Write depfile output from -MMD, -MD, -MM, or -M to <file>">, + MetaVarName<"<file>">; def MG : Flag<["-"], "MG">, Group<M_Group>, Flags<[CC1Option]>, - HelpText<"Add missing headers to dependency list">; -def MMD : Flag<["-"], "MMD">, Group<M_Group>; -def MM : Flag<["-"], "MM">, Group<M_Group>; + HelpText<"Add missing headers to depfile">; def MP : Flag<["-"], "MP">, Group<M_Group>, Flags<[CC1Option]>, HelpText<"Create phony target for each dependency (other than main file)">; def MQ : JoinedOrSeparate<["-"], "MQ">, Group<M_Group>, Flags<[CC1Option]>, - HelpText<"Specify target to quote for dependency">; + HelpText<"Specify name of main file output to quote in depfile">; def MT : JoinedOrSeparate<["-"], "MT">, Group<M_Group>, Flags<[CC1Option]>, - HelpText<"Specify target for dependency">; + HelpText<"Specify name of main file output in depfile">; def Mach : Flag<["-"], "Mach">; -def M : Flag<["-"], "M">, Group<M_Group>; def O0 : Flag<["-"], "O0">, Group<O_Group>, Flags<[CC1Option]>; def O4 : Flag<["-"], "O4">, Group<O_Group>, Flags<[CC1Option]>; def ObjCXX : Flag<["-"], "ObjC++">, Flags<[DriverOption]>, @@ -242,7 +263,19 @@ def Qn : Flag<["-"], "Qn">; def Qunused_arguments : Flag<["-"], "Qunused-arguments">, Flags<[DriverOption, CoreOption]>, HelpText<"Don't emit warning for unused driver arguments">; def Q : Flag<["-"], "Q">; -def R : Flag<["-"], "R">; +def Rpass_EQ : Joined<["-"], "Rpass=">, Group<R_value_Group>, Flags<[CC1Option]>, + HelpText<"Report transformations performed by optimization passes whose " + "name matches the given POSIX regular expression">; +def Rpass_missed_EQ : Joined<["-"], "Rpass-missed=">, Group<R_value_Group>, + Flags<[CC1Option]>, + HelpText<"Report missed transformations by optimization passes whose " + "name matches the given POSIX regular expression">; +def Rpass_analysis_EQ : Joined<["-"], "Rpass-analysis=">, Group<R_value_Group>, + Flags<[CC1Option]>, + HelpText<"Report transformation analysis from optimization passes whose " + "name matches the given POSIX regular expression">; +def R_Joined : Joined<["-"], "R">, Group<R_Group>, Flags<[CC1Option, CoreOption]>, + MetaVarName<"<remark>">, HelpText<"Enable the specified remark">; def S : Flag<["-"], "S">, Flags<[DriverOption,CC1Option]>, Group<Action_Group>, HelpText<"Only run preprocess and compilation steps">; def Tbss : JoinedOrSeparate<["-"], "Tbss">, Group<T_Group>; @@ -261,6 +294,7 @@ def Wextra : Flag<["-"], "Wextra">, Group<W_Group>, Flags<[CC1Option]>; def Wl_COMMA : CommaJoined<["-"], "Wl,">, Flags<[LinkerInput, RenderAsInput]>, HelpText<"Pass the comma separated arguments in <arg> to the linker">, MetaVarName<"<arg>">; +// FIXME: This is broken; these should not be Joined arguments. def Wno_nonportable_cfstrings : Joined<["-"], "Wno-nonportable-cfstrings">, Group<W_Group>, Flags<[CC1Option]>; def Wnonportable_cfstrings : Joined<["-"], "Wnonportable-cfstrings">, Group<W_Group>, @@ -268,6 +302,8 @@ def Wnonportable_cfstrings : Joined<["-"], "Wnonportable-cfstrings">, Group<W_Gr def Wp_COMMA : CommaJoined<["-"], "Wp,">, HelpText<"Pass the comma separated arguments in <arg> to the preprocessor">, MetaVarName<"<arg>">; +def Wwrite_strings : Flag<["-"], "Wwrite-strings">, Group<W_Group>, Flags<[CC1Option]>; +def Wno_write_strings : Flag<["-"], "Wno-write-strings">, Group<W_Group>, Flags<[CC1Option]>; def W_Joined : Joined<["-"], "W">, Group<W_Group>, Flags<[CC1Option, CoreOption]>, MetaVarName<"<warning>">, HelpText<"Enable the specified warning">; def Xanalyzer : Separate<["-"], "Xanalyzer">, @@ -278,6 +314,8 @@ def Xassembler : Separate<["-"], "Xassembler">, def Xclang : Separate<["-"], "Xclang">, HelpText<"Pass <arg> to the clang compiler">, MetaVarName<"<arg>">, Flags<[DriverOption, CoreOption]>; +def z : Separate<["-"], "z">, Flags<[LinkerInput, RenderAsInput]>, + HelpText<"Pass -z <arg> to the linker">, MetaVarName<"<arg>">; def Xlinker : Separate<["-"], "Xlinker">, Flags<[LinkerInput, RenderAsInput]>, HelpText<"Pass <arg> to the linker">, MetaVarName<"<arg>">; def Xpreprocessor : Separate<["-"], "Xpreprocessor">, @@ -297,8 +335,6 @@ def bind__at__load : Flag<["-"], "bind_at_load">; def bundle__loader : Separate<["-"], "bundle_loader">; def bundle : Flag<["-"], "bundle">; def b : JoinedOrSeparate<["-"], "b">, Flags<[Unsupported]>; -def cl_kernel_arg_info : Flag<["-"], "cl-kernel-arg-info">, Flags<[CC1Option]>, Group<opencl_Group>, -HelpText<"OpenCL only. This option allows the compiler to store information about the arguments of a kernel(s)"> ; def client__name : JoinedOrSeparate<["-"], "client_name">; def combine : Flag<["-", "--"], "combine">, Flags<[DriverOption, Unsupported]>; def compatibility__version : JoinedOrSeparate<["-"], "compatibility_version">; @@ -320,6 +356,8 @@ def dependency_file : Separate<["-"], "dependency-file">, Flags<[CC1Option]>, HelpText<"Filename (or -) to write dependency output to">; def dependency_dot : Separate<["-"], "dependency-dot">, Flags<[CC1Option]>, HelpText<"Filename to write DOT-formatted header dependencies to">; +def module_dependency_dir : Separate<["-"], "module-dependency-dir">, + Flags<[CC1Option]>, HelpText<"Directory to dump module dependencies to">; def dumpmachine : Flag<["-"], "dumpmachine">; def dumpspecs : Flag<["-"], "dumpspecs">, Flags<[Unsupported]>; def dumpversion : Flag<["-"], "dumpversion">; @@ -346,10 +384,7 @@ def fapple_kext : Flag<["-"], "fapple-kext">, Group<f_Group>, Flags<[CC1Option]> HelpText<"Use Apple's kernel extensions ABI">; def fapple_pragma_pack : Flag<["-"], "fapple-pragma-pack">, Group<f_Group>, Flags<[CC1Option]>, HelpText<"Enable Apple gcc-compatible #pragma pack handling">; -def faddress_sanitizer : Flag<["-"], "faddress-sanitizer">, Group<f_Group>; -def fno_address_sanitizer : Flag<["-"], "fno-address-sanitizer">, Group<f_Group>; -def fthread_sanitizer : Flag<["-"], "fthread-sanitizer">, Group<f_Group>; -def fno_thread_sanitizer : Flag<["-"], "fno-thread-sanitizer">, Group<f_Group>; +def shared_libasan : Flag<["-"], "shared-libasan">; def fasm : Flag<["-"], "fasm">, Group<f_Group>; def fasm_blocks : Flag<["-"], "fasm-blocks">, Group<f_Group>, Flags<[CC1Option]>; @@ -369,19 +404,23 @@ def fno_autolink : Flag <["-"], "fno-autolink">, Group<f_Group>, def fprofile_sample_use_EQ : Joined<["-"], "fprofile-sample-use=">, Group<f_Group>, Flags<[DriverOption, CC1Option]>, HelpText<"Enable sample-based profile guided optimizations">; +def fauto_profile_EQ : Joined<["-"], "fauto-profile=">, + Alias<fprofile_sample_use_EQ>; +def fprofile_instr_generate : Flag<["-"], "fprofile-instr-generate">, + Group<f_Group>, Flags<[CC1Option]>, + HelpText<"Generate instrumented code to collect execution counts">; +def fprofile_instr_use : Flag<["-"], "fprofile-instr-use">, Group<f_Group>; +def fprofile_instr_use_EQ : Joined<["-"], "fprofile-instr-use=">, + Group<f_Group>, Flags<[CC1Option]>, + HelpText<"Use instrumentation data for profile-guided optimization">; def fblocks : Flag<["-"], "fblocks">, Group<f_Group>, Flags<[CC1Option]>, HelpText<"Enable the 'blocks' language feature">; def fbootclasspath_EQ : Joined<["-"], "fbootclasspath=">, Group<f_Group>; def fborland_extensions : Flag<["-"], "fborland-extensions">, Group<f_Group>, Flags<[CC1Option]>, HelpText<"Accept non-standard constructs supported by the Borland compiler">; -def fbounds_checking : Flag<["-"], "fbounds-checking">, Group<f_Group>, - HelpText<"Enable run-time bounds checks">; -def fbounds_checking_EQ : Joined<["-"], "fbounds-checking=">, Flags<[CC1Option]>, - Group<f_Group>; def fbuiltin : Flag<["-"], "fbuiltin">, Group<f_Group>; def fcaret_diagnostics : Flag<["-"], "fcaret-diagnostics">, Group<f_Group>; -def fcatch_undefined_behavior : Flag<["-"], "fcatch-undefined-behavior">, Group<f_Group>; def fclasspath_EQ : Joined<["-"], "fclasspath=">, Group<f_Group>; def fcolor_diagnostics : Flag<["-"], "fcolor-diagnostics">, Group<f_Group>, Flags<[CC1Option]>, HelpText<"Use colors in diagnostics">; @@ -417,8 +456,6 @@ def fdiagnostics_print_source_range_info : Flag<["-"], "fdiagnostics-print-sourc HelpText<"Print source range spans in numeric form">; def fdiagnostics_show_option : Flag<["-"], "fdiagnostics-show-option">, Group<f_Group>, Flags<[CC1Option]>, HelpText<"Print option name with mappable diagnostics">; -def fdiagnostics_show_name : Flag<["-"], "fdiagnostics-show-name">, Group<f_Group>, - Flags<[CC1Option]>, HelpText<"Print diagnostic name">; def fdiagnostics_show_note_include_stack : Flag<["-"], "fdiagnostics-show-note-include-stack">, Group<f_Group>, Flags<[CC1Option]>, HelpText<"Display include stacks for diagnostic notes">; def fdiagnostics_format_EQ : Joined<["-"], "fdiagnostics-format=">, Group<f_clang_Group>; @@ -428,8 +465,8 @@ def fdiagnostics_show_template_tree : Flag<["-"], "fdiagnostics-show-template-tr HelpText<"Print a template comparison tree for differing templates">; def fdollars_in_identifiers : Flag<["-"], "fdollars-in-identifiers">, Group<f_Group>, HelpText<"Allow '$' in identifiers">, Flags<[CC1Option]>; -def fdwarf2_cfi_asm : Flag<["-"], "fdwarf2-cfi-asm">, Group<f_Group>; -def fno_dwarf2_cfi_asm : Flag<["-"], "fno-dwarf2-cfi-asm">, Group<f_Group>, Flags<[CC1Option]>; +def fdwarf2_cfi_asm : Flag<["-"], "fdwarf2-cfi-asm">, Group<clang_ignored_f_Group>; +def fno_dwarf2_cfi_asm : Flag<["-"], "fno-dwarf2-cfi-asm">, Group<clang_ignored_f_Group>; def fdwarf_directory_asm : Flag<["-"], "fdwarf-directory-asm">, Group<f_Group>; def fno_dwarf_directory_asm : Flag<["-"], "fno-dwarf-directory-asm">, Group<f_Group>, Flags<[CC1Option]>; def felide_constructors : Flag<["-"], "felide-constructors">, Group<f_Group>; @@ -440,18 +477,16 @@ def feliminate_unused_debug_symbols : Flag<["-"], "feliminate-unused-debug-symbo def femit_all_decls : Flag<["-"], "femit-all-decls">, Group<f_Group>, Flags<[CC1Option]>, HelpText<"Emit all declarations, even if unused">; def fencoding_EQ : Joined<["-"], "fencoding=">, Group<f_Group>; -def ferror_limit_EQ : Joined<["-"], "ferror-limit=">, Group<f_Group>; +def ferror_limit_EQ : Joined<["-"], "ferror-limit=">, Group<f_Group>, Flags<[CoreOption]>; def fexceptions : Flag<["-"], "fexceptions">, Group<f_Group>, Flags<[CC1Option]>, HelpText<"Enable support for exception handling">; -def fexpensive_optimizations : Flag<["-"], "fexpensive-optimizations">, - Group<clang_ignored_f_Group>; -def fno_expensive_optimizations : Flag<["-"], "fno-expensive-optimizations">, - Group<clang_ignored_f_Group>; +def : Flag<["-"], "fexpensive-optimizations">, Group<clang_ignored_gcc_optimization_f_Group>; +def : Flag<["-"], "fno-expensive-optimizations">, Group<clang_ignored_gcc_optimization_f_Group>; def fextdirs_EQ : Joined<["-"], "fextdirs=">, Group<f_Group>; -def fextended_identifiers : Flag<["-"], "fextended-identifiers">, - Group<clang_ignored_f_Group>; -def fno_extended_identifiers : Flag<["-"], "fno-extended-identifiers">, - Group<f_Group>, Flags<[Unsupported]>; +def : Flag<["-"], "fdefer-pop">, Group<clang_ignored_gcc_optimization_f_Group>; +def : Flag<["-"], "fno-defer-pop">, Group<clang_ignored_gcc_optimization_f_Group>; +def : Flag<["-"], "fextended-identifiers">, Group<clang_ignored_f_Group>; +def : Flag<["-"], "fno-extended-identifiers">, Group<f_Group>, Flags<[Unsupported]>; def fhosted : Flag<["-"], "fhosted">, Group<f_Group>; def ffast_math : Flag<["-"], "ffast-math">, Group<f_Group>, Flags<[CC1Option]>, HelpText<"Enable the *frontend*'s 'fast-math' mode. This has no effect on " @@ -470,23 +505,21 @@ def fsanitize_EQ : CommaJoined<["-"], "fsanitize=">, Group<f_clang_Group>, "address (memory errors) | thread (race detection) | " "undefined (miscellaneous undefined behavior)">; def fno_sanitize_EQ : CommaJoined<["-"], "fno-sanitize=">, Group<f_clang_Group>; -def fsanitize_address_zero_base_shadow : Flag<["-"], "fsanitize-address-zero-base-shadow">, - Group<f_clang_Group>, Flags<[CC1Option]>, - HelpText<"Make AddressSanitizer map shadow memory " - "at zero offset">; -def fno_sanitize_address_zero_base_shadow : Flag<["-"], "fno-sanitize-address-zero-base-shadow">, - Group<f_clang_Group>; def fsanitize_blacklist : Joined<["-"], "fsanitize-blacklist=">, - Group<f_clang_Group>, Flags<[CC1Option]>, + Group<f_clang_Group>, Flags<[CC1Option, CoreOption]>, HelpText<"Path to blacklist file for sanitizers">; def fno_sanitize_blacklist : Flag<["-"], "fno-sanitize-blacklist">, Group<f_clang_Group>, HelpText<"Don't use blacklist file for sanitizers">; +def fsanitize_memory_track_origins_EQ : Joined<["-"], "fsanitize-memory-track-origins=">, + Group<f_clang_Group>, Flags<[CC1Option]>, + HelpText<"Enable origins tracking in MemorySanitizer">; def fsanitize_memory_track_origins : Flag<["-"], "fsanitize-memory-track-origins">, Group<f_clang_Group>, Flags<[CC1Option]>, HelpText<"Enable origins tracking in MemorySanitizer">; def fno_sanitize_memory_track_origins : Flag<["-"], "fno-sanitize-memory-track-origins">, - Group<f_clang_Group>; + Group<f_clang_Group>, Flags<[CC1Option]>, + HelpText<"Disable origins tracking in MemorySanitizer">; def fsanitize_recover : Flag<["-"], "fsanitize-recover">, Group<f_clang_Group>; def fno_sanitize_recover : Flag<["-"], "fno-sanitize-recover">, @@ -512,9 +545,9 @@ def fhonor_nans : Flag<["-"], "fhonor-nans">, Group<f_Group>; def fno_honor_nans : Flag<["-"], "fno-honor-nans">, Group<f_Group>; def fhonor_infinities : Flag<["-"], "fhonor-infinities">, Group<f_Group>; def fno_honor_infinities : Flag<["-"], "fno-honor-infinities">, Group<f_Group>; -// Sic. This option was misspelled originally. -def fhonor_infinites : Flag<["-"], "fhonor-infinites">, Alias<fhonor_infinities>; -def fno_honor_infinites : Flag<["-"], "fno-honor-infinites">, Alias<fno_honor_infinities>; +// This option was originally misspelt "infinites" [sic]. +def : Flag<["-"], "fhonor-infinites">, Alias<fhonor_infinities>; +def : Flag<["-"], "fno-honor-infinites">, Alias<fno_honor_infinities>; def ftrapping_math : Flag<["-"], "ftrapping-math">, Group<f_Group>; def fno_trapping_math : Flag<["-"], "fno-trapping-math">, Group<f_Group>; def ffp_contract : Joined<["-"], "ffp-contract=">, Group<f_Group>, @@ -541,12 +574,12 @@ def fgnu_runtime : Flag<["-"], "fgnu-runtime">, Group<f_Group>, HelpText<"Generate output compatible with the standard GNU Objective-C runtime">; def fheinous_gnu_extensions : Flag<["-"], "fheinous-gnu-extensions">, Flags<[CC1Option]>; def filelist : Separate<["-"], "filelist">, Flags<[LinkerInput]>; -def findirect_virtual_calls : Flag<["-"], "findirect-virtual-calls">, Alias<fapple_kext>; -def finline_functions : Flag<["-"], "finline-functions">, Group<clang_ignored_f_Group>; +def : Flag<["-"], "findirect-virtual-calls">, Alias<fapple_kext>; +def finline_functions : Flag<["-"], "finline-functions">, Group<clang_ignored_gcc_optimization_f_Group>; def finline : Flag<["-"], "finline">, Group<clang_ignored_f_Group>; +def finput_charset_EQ : Joined<["-"], "finput-charset=">, Group<f_Group>; def finstrument_functions : Flag<["-"], "finstrument-functions">, Group<f_Group>, Flags<[CC1Option]>, HelpText<"Generate calls to instrument function entry and exit">; -def fkeep_inline_functions : Flag<["-"], "fkeep-inline-functions">, Group<clang_ignored_f_Group>; def flat__namespace : Flag<["-"], "flat_namespace">; def flax_vector_conversions : Flag<["-"], "flax-vector-conversions">, Group<f_Group>; def flimited_precision_EQ : Joined<["-"], "flimited-precision=">, Group<f_Group>; @@ -559,21 +592,45 @@ def fmessage_length_EQ : Joined<["-"], "fmessage-length=">, Group<f_Group>; def fms_extensions : Flag<["-"], "fms-extensions">, Group<f_Group>, Flags<[CC1Option]>, HelpText<"Accept some non-standard constructs supported by the Microsoft compiler">; def fms_compatibility : Flag<["-"], "fms-compatibility">, Group<f_Group>, Flags<[CC1Option]>, - HelpText<"Enable Microsoft compatibility mode">; -def fmsc_version : Joined<["-"], "fmsc-version=">, Group<f_Group>, Flags<[CC1Option, CoreOption]>, - HelpText<"Version of the Microsoft C/C++ compiler to report in _MSC_VER (0 = don't define it (default))">; + HelpText<"Enable full Microsoft Visual C++ compatibility">; +def fmsc_version : Joined<["-"], "fmsc-version=">, Group<f_Group>, Flags<[DriverOption, CoreOption]>, + HelpText<"Microsoft compiler version number to report in _MSC_VER (0 = don't define it (default))">; +def fms_compatibility_version + : Joined<["-"], "fms-compatibility-version=">, + Group<f_Group>, + Flags<[ CC1Option, CoreOption ]>, + HelpText<"Dot-separated value representing the Microsoft compiler " + "version number to report in _MSC_VER (0 = don't define it " + "(default))">; def fdelayed_template_parsing : Flag<["-"], "fdelayed-template-parsing">, Group<f_Group>, HelpText<"Parse templated function definitions at the end of the " - "translation unit ">, Flags<[CC1Option]>; + "translation unit">, Flags<[CC1Option]>; +def fms_memptr_rep_EQ : Joined<["-"], "fms-memptr-rep=">, Group<f_Group>, Flags<[CC1Option]>; def fmodules_cache_path : Joined<["-"], "fmodules-cache-path=">, Group<i_Group>, Flags<[DriverOption, CC1Option]>, MetaVarName<"<directory>">, HelpText<"Specify the module cache path">; +def fmodules_user_build_path : Separate<["-"], "fmodules-user-build-path">, Group<i_Group>, + Flags<[DriverOption, CC1Option]>, MetaVarName<"<directory>">, + HelpText<"Specify the module user build path">; def fmodules_prune_interval : Joined<["-"], "fmodules-prune-interval=">, Group<i_Group>, Flags<[CC1Option]>, MetaVarName<"<seconds>">, HelpText<"Specify the interval (in seconds) between attempts to prune the module cache">; def fmodules_prune_after : Joined<["-"], "fmodules-prune-after=">, Group<i_Group>, Flags<[CC1Option]>, MetaVarName<"<seconds>">, HelpText<"Specify the interval (in seconds) after which a module file will be considered unused">; +def fmodules_search_all : Flag <["-"], "fmodules-search-all">, Group<f_Group>, + Flags<[DriverOption, CC1Option]>, + HelpText<"Search even non-imported modules to resolve references">; +def fbuild_session_timestamp : Joined<["-"], "fbuild-session-timestamp=">, + Group<i_Group>, Flags<[CC1Option]>, MetaVarName<"<time since Epoch in seconds>">, + HelpText<"Time when the current build session started">; +def fmodules_validate_once_per_build_session : Flag<["-"], "fmodules-validate-once-per-build-session">, + Group<i_Group>, Flags<[CC1Option]>, + HelpText<"Don't verify input files for the modules if the module has been " + "successfully validate or loaded during this build session">; +def fmodules_validate_system_headers : Flag<["-"], "fmodules-validate-system-headers">, + Group<i_Group>, Flags<[CC1Option]>, + HelpText<"Validate the system headers that a module depends on when loading the module">; def fmodules : Flag <["-"], "fmodules">, Group<f_Group>, Flags<[DriverOption, CC1Option]>, HelpText<"Enable the 'modules' language feature">; @@ -591,6 +648,11 @@ def fmodules_ignore_macro : Joined<["-"], "fmodules-ignore-macro=">, Group<f_Gro def fmodules_decluse : Flag <["-"], "fmodules-decluse">, Group<f_Group>, Flags<[DriverOption,CC1Option]>, HelpText<"Require declaration of modules used within a module">; +def fmodules_strict_decluse : Flag <["-"], "fmodules-strict-decluse">, Group<f_Group>, + Flags<[DriverOption,CC1Option]>, + HelpText<"Like -fmodules-decluse but requires all headers to be in modules">; +def fno_modules_search_all : Flag <["-"], "fno-modules-search-all">, Group<f_Group>, + Flags<[DriverOption, CC1Option]>; def fretain_comments_from_system_headers : Flag<["-"], "fretain-comments-from-system-headers">, Group<f_Group>, Flags<[CC1Option]>; def fmudflapth : Flag<["-"], "fmudflapth">, Group<f_Group>; @@ -627,7 +689,6 @@ def fno_cxx_modules : Flag <["-"], "fno-cxx-modules">, Group<f_Group>, Flags<[DriverOption]>; def fno_diagnostics_fixit_info : Flag<["-"], "fno-diagnostics-fixit-info">, Group<f_Group>, Flags<[CC1Option]>, HelpText<"Do not include fixit information in diagnostics">; -def fno_diagnostics_show_name : Flag<["-"], "fno-diagnostics-show-name">, Group<f_Group>; def fno_diagnostics_show_option : Flag<["-"], "fno-diagnostics-show-option">, Group<f_Group>; def fno_diagnostics_show_note_include_stack : Flag<["-"], "fno-diagnostics-show-note-include-stack">, Flags<[CC1Option]>, Group<f_Group>; @@ -640,7 +701,6 @@ def fno_exceptions : Flag<["-"], "fno-exceptions">, Group<f_Group>; def fno_gnu_keywords : Flag<["-"], "fno-gnu-keywords">, Group<f_Group>, Flags<[CC1Option]>; def fno_inline_functions : Flag<["-"], "fno-inline-functions">, Group<f_clang_Group>, Flags<[CC1Option]>; def fno_inline : Flag<["-"], "fno-inline">, Group<f_clang_Group>, Flags<[CC1Option]>; -def fno_keep_inline_functions : Flag<["-"], "fno-keep-inline-functions">, Group<clang_ignored_f_Group>; def fno_lax_vector_conversions : Flag<["-"], "fno-lax-vector-conversions">, Group<f_Group>, HelpText<"Disallow implicit conversions between vectors with a different number of elements or different element types">, Flags<[CC1Option]>; def fno_merge_all_constants : Flag<["-"], "fno-merge-all-constants">, Group<f_Group>, @@ -651,6 +711,8 @@ def fno_module_maps : Flag <["-"], "fno-module-maps">, Group<f_Group>, Flags<[DriverOption]>; def fno_modules_decluse : Flag <["-"], "fno-modules-decluse">, Group<f_Group>, Flags<[DriverOption]>; +def fno_modules_strict_decluse : Flag <["-"], "fno-strict-modules-decluse">, Group<f_Group>, + Flags<[DriverOption]>; def fno_ms_extensions : Flag<["-"], "fno-ms-extensions">, Group<f_Group>; def fno_ms_compatibility : Flag<["-"], "fno-ms-compatibility">, Group<f_Group>; def fno_delayed_template_parsing : Flag<["-"], "fno-delayed-template-parsing">, Group<f_Group>; @@ -670,8 +732,10 @@ def fno_show_source_location : Flag<["-"], "fno-show-source-location">, Group<f_ Flags<[CC1Option]>, HelpText<"Do not include source location information with diagnostics">; def fno_spell_checking : Flag<["-"], "fno-spell-checking">, Group<f_Group>, Flags<[CC1Option]>, HelpText<"Disable spell-checking">; -def fno_stack_protector : Flag<["-"], "fno-stack-protector">, Group<f_Group>; -def fno_strict_aliasing : Flag<["-"], "fno-strict-aliasing">, Group<f_Group>; +def fno_stack_protector : Flag<["-"], "fno-stack-protector">, Group<f_Group>, + HelpText<"Disable the use of stack protectors">; +def fno_strict_aliasing : Flag<["-"], "fno-strict-aliasing">, Group<f_Group>, + Flags<[DriverOption, CoreOption]>; def fstruct_path_tbaa : Flag<["-"], "fstruct-path-tbaa">, Group<f_Group>; def fno_struct_path_tbaa : Flag<["-"], "fno-struct-path-tbaa">, Group<f_Group>; def fno_strict_enums : Flag<["-"], "fno-strict-enums">, Group<f_Group>; @@ -724,7 +788,8 @@ def fno_objc_nonfragile_abi : Flag<["-"], "fno-objc-nonfragile-abi">, Group<f_Gr def fobjc_sender_dependent_dispatch : Flag<["-"], "fobjc-sender-dependent-dispatch">, Group<f_Group>; def fomit_frame_pointer : Flag<["-"], "fomit-frame-pointer">, Group<f_Group>; -def fopenmp : Flag<["-"], "fopenmp">, Group<f_Group>, Flags<[CC1Option]>; +def fopenmp : Flag<["-"], "fopenmp">, Group<f_Group>, Flags<[CC1Option, NoArgumentUnused]>; +def fopenmp_EQ : Joined<["-"], "fopenmp=">, Group<f_Group>, Flags<[CC1Option]>; def fno_optimize_sibling_calls : Flag<["-"], "fno-optimize-sibling-calls">, Group<f_Group>; def foptimize_sibling_calls : Flag<["-"], "foptimize-sibling-calls">, Group<f_Group>; def force__cpusubtype__ALL : Flag<["-"], "force_cpusubtype_ALL">; @@ -751,12 +816,14 @@ def frandom_seed_EQ : Joined<["-"], "frandom-seed=">, Group<clang_ignored_f_Grou def freg_struct_return : Flag<["-"], "freg-struct-return">, Group<f_Group>, Flags<[CC1Option]>, HelpText<"Override the default ABI to return small structs in registers">; def frtti : Flag<["-"], "frtti">, Group<f_Group>; -def fsched_interblock : Flag<["-"], "fsched-interblock">, Group<clang_ignored_f_Group>; +def : Flag<["-"], "fsched-interblock">, Group<clang_ignored_f_Group>; def fshort_enums : Flag<["-"], "fshort-enums">, Group<f_Group>, Flags<[CC1Option]>, HelpText<"Allocate to an enum type only as many bytes as it needs for the declared range of possible values">; -def freorder_blocks : Flag<["-"], "freorder-blocks">, Group<clang_ignored_f_Group>; +def : Flag<["-"], "freorder-blocks">, Group<clang_ignored_gcc_optimization_f_Group>; def fshort_wchar : Flag<["-"], "fshort-wchar">, Group<f_Group>, Flags<[CC1Option]>, HelpText<"Force wchar_t to be a short unsigned int">; +def fno_short_wchar : Flag<["-"], "fno-short-wchar">, Group<f_Group>, Flags<[CC1Option]>, + HelpText<"Force wchar_t to be an unsigned int">; def fshow_overloads_EQ : Joined<["-"], "fshow-overloads=">, Group<f_Group>, Flags<[CC1Option]>, HelpText<"Which overload candidates to show when overload resolution fails: " "best|all; defaults to all">; @@ -768,15 +835,20 @@ def fsigned_char : Flag<["-"], "fsigned-char">, Group<f_Group>; def fno_signed_char : Flag<["-"], "fno-signed-char">, Flags<[CC1Option]>, Group<clang_ignored_f_Group>, HelpText<"Char is unsigned">; def fsplit_stack : Flag<["-"], "fsplit-stack">, Group<f_Group>; -def fstack_protector_all : Flag<["-"], "fstack-protector-all">, Group<f_Group>; -def fstack_protector : Flag<["-"], "fstack-protector">, Group<f_Group>; +def fstack_protector_all : Flag<["-"], "fstack-protector-all">, Group<f_Group>, + HelpText<"Force the usage of stack protectors for all functions">; +def fstack_protector_strong : Flag<["-"], "fstack-protector-strong">, Group<f_Group>, + HelpText<"Use a strong heuristic to apply stack protectors to functions">; +def fstack_protector : Flag<["-"], "fstack-protector">, Group<f_Group>, + HelpText<"Enable stack protectors for functions potentially vulnerable to stack smashing">; def fstandalone_debug : Flag<["-"], "fstandalone-debug">, Group<f_Group>, Flags<[CC1Option]>, HelpText<"Emit full debug info for all types used by the program">; def fno_standalone_debug : Flag<["-"], "fno-standalone-debug">, Group<f_Group>, Flags<[CC1Option]>, HelpText<"Limit debug information produced to reduce size of debug binary">; def flimit_debug_info : Flag<["-"], "flimit-debug-info">, Alias<fno_standalone_debug>; def fno_limit_debug_info : Flag<["-"], "fno-limit-debug-info">, Alias<fstandalone_debug>; -def fstrict_aliasing : Flag<["-"], "fstrict-aliasing">, Group<f_Group>; +def fstrict_aliasing : Flag<["-"], "fstrict-aliasing">, Group<f_Group>, + Flags<[DriverOption, CoreOption]>; def fstrict_enums : Flag<["-"], "fstrict-enums">, Group<f_Group>, Flags<[CC1Option]>, HelpText<"Enable optimizations based on the strict definition of an enum's " "value range">; @@ -793,29 +865,28 @@ def ftest_coverage : Flag<["-"], "ftest-coverage">, Group<f_Group>; def fvectorize : Flag<["-"], "fvectorize">, Group<f_Group>, HelpText<"Enable the loop vectorization passes">; def fno_vectorize : Flag<["-"], "fno-vectorize">, Group<f_Group>; -def ftree_vectorize : Flag<["-"], "ftree-vectorize">, Alias<fvectorize>; -def fno_tree_vectorize : Flag<["-"], "fno-tree-vectorize">, Alias<fno_vectorize>; +def : Flag<["-"], "ftree-vectorize">, Alias<fvectorize>; +def : Flag<["-"], "fno-tree-vectorize">, Alias<fno_vectorize>; def fslp_vectorize : Flag<["-"], "fslp-vectorize">, Group<f_Group>, HelpText<"Enable the superword-level parallelism vectorization passes">; def fno_slp_vectorize : Flag<["-"], "fno-slp-vectorize">, Group<f_Group>; def fslp_vectorize_aggressive : Flag<["-"], "fslp-vectorize-aggressive">, Group<f_Group>, HelpText<"Enable the BB vectorization passes">; def fno_slp_vectorize_aggressive : Flag<["-"], "fno-slp-vectorize-aggressive">, Group<f_Group>; -def ftree_slp_vectorize : Flag<["-"], "ftree-slp-vectorize">, Alias<fslp_vectorize>; -def fno_tree_slp_vectorize : Flag<["-"], "fno-tree-slp-vectorize">, Alias<fno_slp_vectorize>; +def : Flag<["-"], "ftree-slp-vectorize">, Alias<fslp_vectorize>; +def : Flag<["-"], "fno-tree-slp-vectorize">, Alias<fno_slp_vectorize>; def Wlarge_by_value_copy_def : Flag<["-"], "Wlarge-by-value-copy">, HelpText<"Warn if a function definition returns or accepts an object larger " "in bytes than a given value">, Flags<[HelpHidden]>; def Wlarge_by_value_copy_EQ : Joined<["-"], "Wlarge-by-value-copy=">, Flags<[CC1Option]>; -// Just silence warnings about -Wlarger-than, -Wframe-larger-than for now. -def Wlarger_than : Separate<["-"], "Wlarger-than">, Group<clang_ignored_f_Group>; -def Wlarger_than_EQ : Joined<["-"], "Wlarger-than=">, Alias<Wlarger_than>; -def Wlarger_than_ : Joined<["-"], "Wlarger-than-">, Alias<Wlarger_than>; -def Wframe_larger_than : Separate<["-"], "Wframe-larger-than">, Group<clang_ignored_f_Group>; -def Wframe_larger_than_EQ : Joined<["-"], "Wframe-larger-than=">, Alias<Wframe_larger_than>; +// These "special" warning flags are effectively processed as f_Group flags by the driver: +// Just silence warnings about -Wlarger-than for now. +def Wlarger_than_EQ : Joined<["-"], "Wlarger-than=">, Group<clang_ignored_f_Group>; +def Wlarger_than_ : Joined<["-"], "Wlarger-than-">, Alias<Wlarger_than_EQ>; +def Wframe_larger_than_EQ : Joined<["-"], "Wframe-larger-than=">, Group<f_Group>, Flags<[DriverOption]>; -def fterminated_vtables : Flag<["-"], "fterminated-vtables">, Alias<fapple_kext>; +def : Flag<["-"], "fterminated-vtables">, Alias<fapple_kext>; def fthreadsafe_statics : Flag<["-"], "fthreadsafe-statics">, Group<f_Group>; def ftime_report : Flag<["-"], "ftime-report">, Group<f_Group>, Flags<[CC1Option]>; def ftlsmodel_EQ : Joined<["-"], "ftls-model=">, Group<f_Group>, Flags<[CC1Option]>; @@ -870,10 +941,13 @@ def fno_data_sections : Flag <["-"], "fno-data-sections">, Group<f_Group>, Flags<[CC1Option]>; def fdebug_types_section: Flag <["-"], "fdebug-types-section">, Group<f_Group>, Flags<[CC1Option]>, HelpText<"Place debug types in their own section (ELF Only)">; +def fno_debug_types_section: Flag<["-"], "fno-debug-types-section">, Group<f_Group>, + Flags<[CC1Option]>; def g_Flag : Flag<["-"], "g">, Group<g_Group>, - HelpText<"Generate source level debug information">, Flags<[CC1Option]>; + HelpText<"Generate source-level debug information">, Flags<[CC1Option,CC1AsOption]>; def gline_tables_only : Flag<["-"], "gline-tables-only">, Group<g_Group>, HelpText<"Emit debug line number tables only">, Flags<[CC1Option]>; +def gmlt : Flag<["-"], "gmlt">, Alias<gline_tables_only>; def g0 : Flag<["-"], "g0">, Group<g_Group>; def g1 : Flag<["-"], "g1">, Group<g_Group>; def g2 : Flag<["-"], "g2">, Group<g_Group>; @@ -884,11 +958,11 @@ def ggdb1 : Flag<["-"], "ggdb1">, Group<g_Group>; def ggdb2 : Flag<["-"], "ggdb2">, Group<g_Group>; def ggdb3 : Flag<["-"], "ggdb3">, Group<g_Group>; def gdwarf_2 : Flag<["-"], "gdwarf-2">, Group<g_Group>, - HelpText<"Generate source level debug information with dwarf version 2">, Flags<[CC1Option]>; + HelpText<"Generate source-level debug information with dwarf version 2">, Flags<[CC1Option,CC1AsOption]>; def gdwarf_3 : Flag<["-"], "gdwarf-3">, Group<g_Group>, - HelpText<"Generate source level debug information with dwarf version 3">, Flags<[CC1Option]>; + HelpText<"Generate source-level debug information with dwarf version 3">, Flags<[CC1Option,CC1AsOption]>; def gdwarf_4 : Flag<["-"], "gdwarf-4">, Group<g_Group>, - HelpText<"Generate source level debug information with dwarf version 4">, Flags<[CC1Option]>; + HelpText<"Generate source-level debug information with dwarf version 4">, Flags<[CC1Option,CC1AsOption]>; def gfull : Flag<["-"], "gfull">, Group<g_Group>; def gused : Flag<["-"], "gused">, Group<g_Group>; def gstabs : Joined<["-"], "gstabs">, Group<g_Group>, Flags<[Unsupported]>; @@ -902,10 +976,12 @@ def gno_record_gcc_switches : Flag<["-"], "gno-record-gcc-switches">, def gstrict_dwarf : Flag<["-"], "gstrict-dwarf">, Group<g_flags_Group>; def gno_strict_dwarf : Flag<["-"], "gno-strict-dwarf">, Group<g_flags_Group>; def gcolumn_info : Flag<["-"], "gcolumn-info">, Group<g_flags_Group>; +def gno_column_info : Flag<["-"], "gno-column-info">, Group<g_flags_Group>; def gsplit_dwarf : Flag<["-"], "gsplit-dwarf">, Group<g_flags_Group>; def ggnu_pubnames : Flag<["-"], "ggnu-pubnames">, Group<g_flags_Group>; +def gdwarf_aranges : Flag<["-"], "gdwarf-aranges">, Group<g_flags_Group>; def headerpad__max__install__names : Joined<["-"], "headerpad_max_install_names">; -def help : Flag<["-", "--"], "help">, Flags<[CC1Option]>, +def help : Flag<["-", "--"], "help">, Flags<[CC1Option,CC1AsOption]>, HelpText<"Display available options">; def index_header_map : Flag<["-"], "index-header-map">, Flags<[CC1Option]>, HelpText<"Make the next included directory (-I or -F) an indexer header map">; @@ -922,9 +998,10 @@ def include_pch : Separate<["-"], "include-pch">, Group<clang_i_Group>, Flags<[C HelpText<"Include precompiled header file">, MetaVarName<"<file>">; def relocatable_pch : Flag<["-", "--"], "relocatable-pch">, Flags<[CC1Option]>, HelpText<"Whether to build a relocatable precompiled header">; +def verify_pch : Flag<["-"], "verify-pch">, Group<Action_Group>, Flags<[CC1Option]>, + HelpText<"Load and verify that a pre-compiled header file is not stale">; def init : Separate<["-"], "init">; def install__name : Separate<["-"], "install_name">; -def integrated_as : Flag<["-"], "integrated-as">, Flags<[DriverOption]>; def iprefix : JoinedOrSeparate<["-"], "iprefix">, Group<clang_i_Group>, Flags<[CC1Option]>, HelpText<"Set the -iwithprefix/-iwithprefixbefore prefix">, MetaVarName<"<dir>">; def iquote : JoinedOrSeparate<["-"], "iquote">, Group<clang_i_Group>, Flags<[CC1Option]>, @@ -942,21 +1019,28 @@ def iwithsysroot : JoinedOrSeparate<["-"], "iwithsysroot">, Group<clang_i_Group> HelpText<"Add directory to SYSTEM include search path, " "absolute paths are relative to -isysroot">, MetaVarName<"<directory>">, Flags<[CC1Option]>; +def ivfsoverlay : JoinedOrSeparate<["-"], "ivfsoverlay">, Group<clang_i_Group>, Flags<[CC1Option]>, + HelpText<"Overlay the virtual filesystem described by file over the real file system">; def i : Joined<["-"], "i">, Group<i_Group>; def keep__private__externs : Flag<["-"], "keep_private_externs">; def l : JoinedOrSeparate<["-"], "l">, Flags<[LinkerInput, RenderJoined]>; def lazy__framework : Separate<["-"], "lazy_framework">, Flags<[LinkerInput]>; def lazy__library : Separate<["-"], "lazy_library">, Flags<[LinkerInput]>; -def EL : Flag<["-"], "EL">, Flags<[DriverOption]>; -def EB : Flag<["-"], "EB">, Flags<[DriverOption]>; +def mlittle_endian : Flag<["-"], "mlittle-endian">, Flags<[DriverOption]>; +def EL : Flag<["-"], "EL">, Alias<mlittle_endian>; +def mbig_endian : Flag<["-"], "mbig-endian">, Flags<[DriverOption]>; +def EB : Flag<["-"], "EB">, Alias<mbig_endian>; +def m16 : Flag<["-"], "m16">, Group<m_Group>, Flags<[DriverOption, CoreOption]>; def m32 : Flag<["-"], "m32">, Group<m_Group>, Flags<[DriverOption, CoreOption]>; def mqdsp6_compat : Flag<["-"], "mqdsp6-compat">, Group<m_Group>, Flags<[DriverOption,CC1Option]>, HelpText<"Enable hexagon-qdsp6 backward compatibility">; def m3dnowa : Flag<["-"], "m3dnowa">, Group<m_x86_Features_Group>; def m3dnow : Flag<["-"], "m3dnow">, Group<m_x86_Features_Group>; def m64 : Flag<["-"], "m64">, Group<m_Group>, Flags<[DriverOption, CoreOption]>; +def mx32 : Flag<["-"], "mx32">, Group<m_Group>, Flags<[DriverOption, CoreOption]>; def mabi_EQ : Joined<["-"], "mabi=">, Group<m_Group>; def march_EQ : Joined<["-"], "march=">, Group<m_Group>; +def masm_EQ : Joined<["-"], "masm=">, Group<m_Group>, Flags<[DriverOption]>; def mcmodel_EQ : Joined<["-"], "mcmodel=">, Group<m_Group>; def mconstant_cfstrings : Flag<["-"], "mconstant-cfstrings">, Group<clang_ignored_m_Group>; def mcpu_EQ : Joined<["-"], "mcpu=">, Group<m_Group>; @@ -977,7 +1061,7 @@ def mios_simulator_version_min_EQ : Joined<["-"], "mios-simulator-version-min="> def mkernel : Flag<["-"], "mkernel">, Group<m_Group>; def mlinker_version_EQ : Joined<["-"], "mlinker-version=">, Flags<[DriverOption]>; -def mllvm : Separate<["-"], "mllvm">, Flags<[CC1Option]>, +def mllvm : Separate<["-"], "mllvm">, Flags<[CC1Option,CC1AsOption,CoreOption]>, HelpText<"Additional arguments to forward to LLVM's option processing">; def mmacosx_version_min_EQ : Joined<["-"], "mmacosx-version-min=">, Group<m_Group>; def mms_bitfields : Flag<["-"], "mms-bitfields">, Group<m_Group>, Flags<[CC1Option]>, @@ -1032,11 +1116,11 @@ def mno_rdseed : Flag<["-"], "mno-rdseed">, Group<m_x86_Features_Group>; def mno_sha : Flag<["-"], "mno-sha">, Group<m_x86_Features_Group>; def munaligned_access : Flag<["-"], "munaligned-access">, Group<m_arm_Features_Group>, - HelpText<"Allow memory accesses to be unaligned (ARM only)">; + HelpText<"Allow memory accesses to be unaligned (AArch32/AArch64 only)">; def mno_unaligned_access : Flag<["-"], "mno-unaligned-access">, Group<m_arm_Features_Group>, - HelpText<"Force all memory accesses to be aligned (ARM only)">; + HelpText<"Force all memory accesses to be aligned (AArch32/AArch64 only)">; def mstrict_align : Flag<["-"], "mstrict-align">, Alias<mno_unaligned_access>, Flags<[CC1Option,HelpHidden]>, - HelpText<"Force all memory accesses to be aligned (ARM only, same as mno-unaligned-access)">; + HelpText<"Force all memory accesses to be aligned (AArch64 only, same as mno-unaligned-access)">; def mno_thumb : Flag<["-"], "mno-thumb">, Group<m_arm_Features_Group>; def mrestrict_it: Flag<["-"], "mrestrict-it">, Group<m_arm_Features_Group>, HelpText<"Disallow generation of deprecated IT blocks for ARMv8. It is on by default for ARMv8 Thumb mode.">; @@ -1049,6 +1133,13 @@ def mcrc : Flag<["-"], "mcrc">, Group<m_arm_Features_Group>, HelpText<"Allow use of CRC instructions (ARM only)">; def mnocrc : Flag<["-"], "mnocrc">, Group<m_arm_Features_Group>, HelpText<"Disallow use of CRC instructions (ARM only)">; +def mlong_calls : Flag<["-"], "mlong-calls">, Group<m_arm_Features_Group>, + HelpText<"Generate an indirect jump to enable jumps further than 64M">; +def mno_long_calls : Flag<["-"], "mno-long-calls">, Group<m_arm_Features_Group>, + HelpText<"Restore the default behaviour of not generating long calls">; + +def mgeneral_regs_only : Flag<["-"], "mgeneral-regs-only">, Group<m_aarch64_Features_Group>, + HelpText<"Generate code which only uses the general purpose registers (AArch64 only)">; def mvsx : Flag<["-"], "mvsx">, Group<m_ppc_Features_Group>; def mno_vsx : Flag<["-"], "mno-vsx">, Group<m_ppc_Features_Group>; @@ -1060,6 +1151,8 @@ def mpopcntd : Flag<["-"], "mpopcntd">, Group<m_ppc_Features_Group>; def mno_popcntd : Flag<["-"], "mno-popcntd">, Group<m_ppc_Features_Group>; def mqpx : Flag<["-"], "mqpx">, Group<m_ppc_Features_Group>; def mno_qpx : Flag<["-"], "mno-qpx">, Group<m_ppc_Features_Group>; +def mcrbits : Flag<["-"], "mcrbits">, Group<m_ppc_Features_Group>; +def mno_crbits : Flag<["-"], "mno-crbits">, Group<m_ppc_Features_Group>; def faltivec : Flag<["-"], "faltivec">, Group<f_Group>, Flags<[CC1Option]>, HelpText<"Enable AltiVec vector initializer syntax">; @@ -1075,7 +1168,7 @@ def moslib_EQ : Joined<["-"], "moslib=">, Group<m_Group>; def mpascal_strings : Flag<["-"], "mpascal-strings">, Alias<fpascal_strings>; def mred_zone : Flag<["-"], "mred-zone">, Group<m_Group>; def mregparm_EQ : Joined<["-"], "mregparm=">, Group<m_Group>; -def mrelax_all : Flag<["-"], "mrelax-all">, Group<m_Group>, Flags<[CC1Option]>, +def mrelax_all : Flag<["-"], "mrelax-all">, Group<m_Group>, Flags<[CC1Option,CC1AsOption]>, HelpText<"(integrated-as) Relax all machine instructions">; def mrtd : Flag<["-"], "mrtd">, Group<m_Group>, Flags<[CC1Option]>, HelpText<"Make StdCall calling convention the default">; @@ -1142,18 +1235,48 @@ def mfp64 : Flag<["-"], "mfp64">, Group<m_Group>, def mfp32 : Flag<["-"], "mfp32">, Group<m_Group>, HelpText<"Use 32-bit floating point registers (MIPS only)">; def mnan_EQ : Joined<["-"], "mnan=">, Group<m_Group>; +def mips1 : Flag<["-"], "mips1">, + Alias<march_EQ>, AliasArgs<["mips1"]>, + HelpText<"Equivalent to -march=mips1">, Flags<[HelpHidden]>; +def mips2 : Flag<["-"], "mips2">, + Alias<march_EQ>, AliasArgs<["mips2"]>, + HelpText<"Equivalent to -march=mips2">, Flags<[HelpHidden]>; +def mips3 : Flag<["-"], "mips3">, + Alias<march_EQ>, AliasArgs<["mips3"]>, + HelpText<"Equivalent to -march=mips3">, Flags<[HelpHidden]>; +def mips4 : Flag<["-"], "mips4">, + Alias<march_EQ>, AliasArgs<["mips4"]>, + HelpText<"Equivalent to -march=mips4">, Flags<[HelpHidden]>; +def mips5 : Flag<["-"], "mips5">, + Alias<march_EQ>, AliasArgs<["mips5"]>, + HelpText<"Equivalent to -march=mips5">, Flags<[HelpHidden]>; def mips32 : Flag<["-"], "mips32">, Alias<march_EQ>, AliasArgs<["mips32"]>, HelpText<"Equivalent to -march=mips32">, Flags<[HelpHidden]>; def mips32r2 : Flag<["-"], "mips32r2">, Alias<march_EQ>, AliasArgs<["mips32r2"]>, HelpText<"Equivalent to -march=mips32r2">, Flags<[HelpHidden]>; +def mips32r6 : Flag<["-"], "mips32r6">, + Alias<march_EQ>, AliasArgs<["mips32r6"]>, + HelpText<"Equivalent to -march=mips32r6">, Flags<[HelpHidden]>; def mips64 : Flag<["-"], "mips64">, Alias<march_EQ>, AliasArgs<["mips64"]>, HelpText<"Equivalent to -march=mips64">, Flags<[HelpHidden]>; def mips64r2 : Flag<["-"], "mips64r2">, Alias<march_EQ>, AliasArgs<["mips64r2"]>, HelpText<"Equivalent to -march=mips64r2">, Flags<[HelpHidden]>; +def mips64r6 : Flag<["-"], "mips64r6">, + Alias<march_EQ>, AliasArgs<["mips64r6"]>, + HelpText<"Equivalent to -march=mips64r6">, Flags<[HelpHidden]>; +def mfpxx : Flag<["-"], "mfpxx">, Group<m_Group>, + HelpText<"Avoid FPU mode dependent operations when used with the O32 ABI">, + Flags<[HelpHidden]>; +def modd_spreg : Flag<["-"], "modd-spreg">, Group<m_Group>, + HelpText<"Enable odd single-precision floating point registers">, + Flags<[HelpHidden]>; +def mno_odd_spreg : Flag<["-"], "mno-odd-spreg">, Group<m_Group>, + HelpText<"Disable odd single-precision floating point registers">, + Flags<[HelpHidden]>; def module_file_info : Flag<["-"], "module-file-info">, Flags<[DriverOption,CC1Option]>, Group<Action_Group>; def mthumb : Flag<["-"], "mthumb">, Group<m_Group>; def mtune_EQ : Joined<["-"], "mtune=">, Group<m_Group>; @@ -1164,7 +1287,6 @@ def mwarn_nonportable_cfstrings : Flag<["-"], "mwarn-nonportable-cfstrings">, Gr def no_canonical_prefixes : Flag<["-"], "no-canonical-prefixes">, Flags<[HelpHidden]>, HelpText<"Use relative instead of canonical paths">; def no_cpp_precomp : Flag<["-"], "no-cpp-precomp">, Group<clang_ignored_f_Group>; -def no_integrated_as : Flag<["-"], "no-integrated-as">, Flags<[DriverOption]>; def no_integrated_cpp : Flag<["-", "--"], "no-integrated-cpp">, Flags<[DriverOption]>; def no_pedantic : Flag<["-", "--"], "no-pedantic">, Group<pedantic_Group>; def no__dead__strip__inits__and__terms : Flag<["-"], "no_dead_strip_inits_and_terms">; @@ -1184,7 +1306,7 @@ def nostdincxx : Flag<["-"], "nostdinc++">, Flags<[CC1Option]>, HelpText<"Disable standard #include directories for the C++ standard library">; def nostdlib : Flag<["-"], "nostdlib">; def object : Flag<["-"], "object">; -def o : JoinedOrSeparate<["-"], "o">, Flags<[DriverOption, RenderAsInput, CC1Option]>, +def o : JoinedOrSeparate<["-"], "o">, Flags<[DriverOption, RenderAsInput, CC1Option, CC1AsOption]>, HelpText<"Write output to <file>">, MetaVarName<"<file>">; def pagezero__size : JoinedOrSeparate<["-"], "pagezero_size">; def pass_exit_codes : Flag<["-", "--"], "pass-exit-codes">, Flags<[Unsupported]>; @@ -1232,6 +1354,8 @@ def rtlib_EQ : Joined<["-", "--"], "rtlib=">; def r : Flag<["-"], "r">; def save_temps : Flag<["-", "--"], "save-temps">, Flags<[DriverOption]>, HelpText<"Save intermediate compilation results">; +def via_file_asm : Flag<["-", "--"], "via-file-asm">, InternalDebugOpt, + HelpText<"Write assembly to file for input to assemble jobs">; def sectalign : MultiArg<["-"], "sectalign", 3>; def sectcreate : MultiArg<["-"], "sectcreate", 3>; def sectobjectsymbols : MultiArg<["-"], "sectobjectsymbols", 2>; @@ -1261,8 +1385,18 @@ def stdlib_EQ : Joined<["-", "--"], "stdlib=">, Flags<[CC1Option]>, HelpText<"C++ standard library to use">; def sub__library : JoinedOrSeparate<["-"], "sub_library">; def sub__umbrella : JoinedOrSeparate<["-"], "sub_umbrella">; +def system_header_prefix : Joined<["--"], "system-header-prefix=">, + Group<clang_i_Group>, Flags<[CC1Option]>, MetaVarName<"<prefix>">, + HelpText<"Treat all #include paths starting with <prefix> as including a " + "system header.">; +def : Separate<["--"], "system-header-prefix">, Alias<system_header_prefix>; +def no_system_header_prefix : Joined<["--"], "no-system-header-prefix=">, + Group<clang_i_Group>, Flags<[CC1Option]>, MetaVarName<"<prefix>">, + HelpText<"Treat all #include paths starting with <prefix> as not including a " + "system header.">; +def : Separate<["--"], "no-system-header-prefix">, Alias<no_system_header_prefix>; def s : Flag<["-"], "s">; -def target : Joined<["--"], "target=">, Flags<[DriverOption]>, +def target : Joined<["--"], "target=">, Flags<[DriverOption, CoreOption]>, HelpText<"Generate code for the given target">; def gcc_toolchain : Joined<["--"], "gcc-toolchain=">, Flags<[DriverOption]>, HelpText<"Use the gcc toolchain at the given directory">; @@ -1282,10 +1416,10 @@ def undef : Flag<["-"], "undef">, Group<u_Group>, Flags<[CC1Option]>, HelpText<"undef all system defines">; def unexported__symbols__list : Separate<["-"], "unexported_symbols_list">; def u : JoinedOrSeparate<["-"], "u">, Group<u_Group>; -def v : Flag<["-"], "v">, Flags<[CC1Option]>, +def v : Flag<["-"], "v">, Flags<[CC1Option, CoreOption]>, HelpText<"Show commands to run and use verbose output">; -def verify : Flag<["-"], "verify">, Flags<[DriverOption,CC1Option]>, - HelpText<"Verify output using a verifier">; +def verify_debug_info : Flag<["--"], "verify-debug-info">, Flags<[DriverOption]>, + HelpText<"Verify the binary representation of debug output">; def weak_l : Joined<["-"], "weak-l">, Flags<[LinkerInput]>; def weak__framework : Separate<["-"], "weak_framework">, Flags<[LinkerInput]>; def weak__library : Separate<["-"], "weak_library">, Flags<[LinkerInput]>; @@ -1298,6 +1432,15 @@ def x : JoinedOrSeparate<["-"], "x">, Flags<[DriverOption,CC1Option]>, MetaVarName<"<language>">; def y : Joined<["-"], "y">; +def fintegrated_as : Flag<["-"], "fintegrated-as">, Flags<[DriverOption]>, + Group<f_Group>, HelpText<"Enable the integrated assembler">; +def fno_integrated_as : Flag<["-"], "fno-integrated-as">, + Flags<[CC1Option, DriverOption]>, Group<f_Group>, + HelpText<"Disable the integrated assembler">; +def : Flag<["-"], "integrated-as">, Alias<fintegrated_as>, Flags<[DriverOption]>; +def : Flag<["-"], "no-integrated-as">, Alias<fno_integrated_as>, + Flags<[CC1Option, DriverOption]>; + def working_directory : JoinedOrSeparate<["-"], "working-directory">, Flags<[CC1Option]>, HelpText<"Resolve file paths relative to the specified directory">; def working_directory_EQ : Joined<["-"], "working-directory=">, Flags<[CC1Option]>, @@ -1306,7 +1449,8 @@ def working_directory_EQ : Joined<["-"], "working-directory=">, Flags<[CC1Option // Double dash options, which are usually an alias for one of the previous // options. -def _mhwdiv_EQ : Separate<["--"], "mhwdiv">, Alias<mhwdiv_EQ>; +def _mhwdiv_EQ : Joined<["--"], "mhwdiv=">, Alias<mhwdiv_EQ>; +def _mhwdiv : Separate<["--"], "mhwdiv">, Alias<mhwdiv_EQ>; def _CLASSPATH_EQ : Joined<["--"], "CLASSPATH=">, Alias<fclasspath_EQ>; def _CLASSPATH : Separate<["--"], "CLASSPATH">, Alias<fclasspath_EQ>; def _all_warnings : Flag<["--"], "all-warnings">, Alias<Wall>; @@ -1449,52 +1593,55 @@ multiclass BooleanFFlag<string name> { def _fno : Flag<["-"], "fno-"#name>; } -def fprofile_dir : Joined<["-"], "fprofile-dir=">, Group<clang_ignored_f_Group>; +defm : BooleanFFlag<"no-keep-inline-functions">, Group<clang_ignored_gcc_optimization_f_Group>; + +def fprofile_dir : Joined<["-"], "fprofile-dir=">, Group<clang_ignored_gcc_optimization_f_Group>; -defm profile_use : BooleanFFlag<"profile-use">, Group<clang_ignored_f_Group>; -def fprofile_use_EQ : Joined<["-"], "fprofile-use=">, Group<clang_ignored_f_Group>; -def fuse_ld_EQ : Joined<["-"], "fuse-ld=">, Group<clang_ignored_f_Group>; +defm profile_use : BooleanFFlag<"profile-use">, Group<clang_ignored_gcc_optimization_f_Group>; +def fprofile_use_EQ : Joined<["-"], "fprofile-use=">, Group<clang_ignored_gcc_optimization_f_Group>; +def fuse_ld_EQ : Joined<["-"], "fuse-ld=">, Group<f_Group>; -defm align_functions : BooleanFFlag<"align-functions">, Group<clang_ignored_f_Group>; -def falign_functions_EQ : Joined<["-"], "falign-functions=">, Group<clang_ignored_f_Group>; +defm align_functions : BooleanFFlag<"align-functions">, Group<clang_ignored_gcc_optimization_f_Group>; +def falign_functions_EQ : Joined<["-"], "falign-functions=">, Group<clang_ignored_gcc_optimization_f_Group>; // FIXME: This option should be supported and wired up to our diognostics, but // ignore it for now to avoid breaking builds that use it. def fdiagnostics_show_location_EQ : Joined<["-"], "fdiagnostics-show-location=">, Group<clang_ignored_f_Group>; defm eliminate_unused_debug_types : BooleanFFlag<"eliminate-unused-debug-types">, Group<clang_ignored_f_Group>; -defm float_store : BooleanFFlag<"float-store">, Group<clang_ignored_f_Group>; +defm float_store : BooleanFFlag<"float-store">, Group<clang_ignored_gcc_optimization_f_Group>; defm function_attribute_list : BooleanFFlag<"function-attribute-list">, Group<clang_ignored_f_Group>; -defm gcse : BooleanFFlag<"gcse">, Group<clang_ignored_f_Group>; +defm gcse : BooleanFFlag<"gcse">, Group<clang_ignored_gcc_optimization_f_Group>; defm gnu : BooleanFFlag<"gnu">, Group<clang_ignored_f_Group>; defm ident : BooleanFFlag<"ident">, Group<clang_ignored_f_Group>; defm implicit_templates : BooleanFFlag<"implicit-templates">, Group<clang_ignored_f_Group>; -defm inline_limit : BooleanFFlag<"inline-limit">, Group<clang_ignored_f_Group>; -defm ivopts : BooleanFFlag<"ivopts">, Group<clang_ignored_f_Group>; +def finline_limit_EQ : Joined<["-"], "finline-limit=">, Group<clang_ignored_gcc_optimization_f_Group>; +defm finline_limit : BooleanFFlag<"inline-limit">, Group<clang_ignored_gcc_optimization_f_Group>; +defm ivopts : BooleanFFlag<"ivopts">, Group<clang_ignored_gcc_optimization_f_Group>; defm non_call_exceptions : BooleanFFlag<"non-call-exceptions">, Group<clang_ignored_f_Group>; defm permissive : BooleanFFlag<"permissive">, Group<clang_ignored_f_Group>; -defm prefetch_loop_arrays : BooleanFFlag<"prefetch-loop-arrays">, Group<clang_ignored_f_Group>; +defm prefetch_loop_arrays : BooleanFFlag<"prefetch-loop-arrays">, Group<clang_ignored_gcc_optimization_f_Group>; defm printf : BooleanFFlag<"printf">, Group<clang_ignored_f_Group>; defm profile : BooleanFFlag<"profile">, Group<clang_ignored_f_Group>; -defm profile_correction : BooleanFFlag<"profile-correction">, Group<clang_ignored_f_Group>; +defm profile_correction : BooleanFFlag<"profile-correction">, Group<clang_ignored_gcc_optimization_f_Group>; defm profile_generate_sampling : BooleanFFlag<"profile-generate-sampling">, Group<clang_ignored_f_Group>; defm profile_reusedist : BooleanFFlag<"profile-reusedist">, Group<clang_ignored_f_Group>; -defm profile_values : BooleanFFlag<"profile-values">, Group<clang_ignored_f_Group>; +defm profile_values : BooleanFFlag<"profile-values">, Group<clang_ignored_gcc_optimization_f_Group>; defm regs_graph : BooleanFFlag<"regs-graph">, Group<clang_ignored_f_Group>; defm ripa : BooleanFFlag<"ripa">, Group<clang_ignored_f_Group>; -defm rounding_math : BooleanFFlag<"rounding-math">, Group<clang_ignored_f_Group>; -defm schedule_insns : BooleanFFlag<"schedule-insns">, Group<clang_ignored_f_Group>; +defm rounding_math : BooleanFFlag<"rounding-math">, Group<clang_ignored_gcc_optimization_f_Group>; +defm schedule_insns : BooleanFFlag<"schedule-insns">, Group<clang_ignored_gcc_optimization_f_Group>; defm see : BooleanFFlag<"see">, Group<clang_ignored_f_Group>; -defm signaling_nans : BooleanFFlag<"signaling-nans">, Group<clang_ignored_f_Group>; +defm signaling_nans : BooleanFFlag<"signaling-nans">, Group<clang_ignored_gcc_optimization_f_Group>; defm spec_constr_count : BooleanFFlag<"spec-constr-count">, Group<clang_ignored_f_Group>; defm strength_reduce : - BooleanFFlag<"strength-reduce">, Group<clang_ignored_f_Group>; + BooleanFFlag<"strength-reduce">, Group<clang_ignored_gcc_optimization_f_Group>; defm tls_model : BooleanFFlag<"tls-model">, Group<clang_ignored_f_Group>; -defm tracer : BooleanFFlag<"tracer">, Group<clang_ignored_f_Group>; +defm tracer : BooleanFFlag<"tracer">, Group<clang_ignored_gcc_optimization_f_Group>; defm tree_salias : BooleanFFlag<"tree-salias">, Group<clang_ignored_f_Group>; defm tree_vectorizer_verbose : BooleanFFlag<"tree-vectorizer-verbose">, Group<clang_ignored_f_Group>; -defm unroll_all_loops : BooleanFFlag<"unroll-all-loops">, Group<clang_ignored_f_Group>; -defm unswitch_loops : BooleanFFlag<"unswitch-loops">, Group<clang_ignored_f_Group>; +defm unroll_all_loops : BooleanFFlag<"unroll-all-loops">, Group<clang_ignored_gcc_optimization_f_Group>; +defm unswitch_loops : BooleanFFlag<"unswitch-loops">, Group<clang_ignored_gcc_optimization_f_Group>; // gfortran options that we recognize in the driver and pass along when diff --git a/contrib/llvm/tools/clang/include/clang/Driver/SanitizerArgs.h b/contrib/llvm/tools/clang/include/clang/Driver/SanitizerArgs.h index 35b8f89..c79c471 100644 --- a/contrib/llvm/tools/clang/include/clang/Driver/SanitizerArgs.h +++ b/contrib/llvm/tools/clang/include/clang/Driver/SanitizerArgs.h @@ -9,10 +9,9 @@ #ifndef CLANG_LIB_DRIVER_SANITIZERARGS_H_ #define CLANG_LIB_DRIVER_SANITIZERARGS_H_ -#include <string> - #include "llvm/Option/Arg.h" #include "llvm/Option/ArgList.h" +#include <string> namespace clang { namespace driver { @@ -43,14 +42,16 @@ class SanitizerArgs { NeedsLeakDetection = Leak, NeedsUbsanRt = Undefined | Integer, NotAllowedWithTrap = Vptr, - HasZeroBaseShadow = Thread | Memory | DataFlow + HasZeroBaseShadow = Thread | Memory | DataFlow, + NeedsUnwindTables = Address | Thread | Memory | DataFlow }; unsigned Kind; std::string BlacklistFile; - bool MsanTrackOrigins; + int MsanTrackOrigins; bool AsanZeroBaseShadow; bool UbsanTrapOnError; + bool AsanSharedRuntime; public: SanitizerArgs(); @@ -58,6 +59,7 @@ class SanitizerArgs { SanitizerArgs(const ToolChain &TC, const llvm::opt::ArgList &Args); bool needsAsanRt() const { return Kind & NeedsAsanRt; } + bool needsSharedAsanRt() const { return AsanSharedRuntime; } bool needsTsanRt() const { return Kind & NeedsTsanRt; } bool needsMsanRt() const { return Kind & NeedsMsanRt; } bool needsLeakDetection() const { return Kind & NeedsLeakDetection; } @@ -74,6 +76,7 @@ class SanitizerArgs { bool hasZeroBaseShadow() const { return (Kind & HasZeroBaseShadow) || AsanZeroBaseShadow; } + bool needsUnwindTables() const { return Kind & NeedsUnwindTables; } void addArgs(const llvm::opt::ArgList &Args, llvm::opt::ArgStringList &CmdArgs) const; @@ -99,7 +102,7 @@ class SanitizerArgs { /// Produce an argument string from ArgList \p Args, which shows how it /// provides a sanitizer kind in \p Mask. For example, the argument list - /// "-fsanitize=thread,vptr -faddress-sanitizer" with mask \c NeedsUbsanRt + /// "-fsanitize=thread,vptr -fsanitize=address" with mask \c NeedsUbsanRt /// would produce "-fsanitize=vptr". static std::string lastArgumentForKind(const Driver &D, const llvm::opt::ArgList &Args, diff --git a/contrib/llvm/tools/clang/include/clang/Driver/ToolChain.h b/contrib/llvm/tools/clang/include/clang/Driver/ToolChain.h index c212a83..550e4df 100644 --- a/contrib/llvm/tools/clang/include/clang/Driver/ToolChain.h +++ b/contrib/llvm/tools/clang/include/clang/Driver/ToolChain.h @@ -11,12 +11,13 @@ #define CLANG_DRIVER_TOOLCHAIN_H_ #include "clang/Driver/Action.h" +#include "clang/Driver/Multilib.h" #include "clang/Driver/Types.h" #include "clang/Driver/Util.h" -#include "llvm/ADT/OwningPtr.h" #include "llvm/ADT/SmallVector.h" #include "llvm/ADT/Triple.h" #include "llvm/Support/Path.h" +#include <memory> #include <string> namespace llvm { @@ -65,17 +66,19 @@ private: /// programs. path_list ProgramPaths; - mutable OwningPtr<Tool> Clang; - mutable OwningPtr<Tool> Assemble; - mutable OwningPtr<Tool> Link; + mutable std::unique_ptr<Tool> Clang; + mutable std::unique_ptr<Tool> Assemble; + mutable std::unique_ptr<Tool> Link; Tool *getClang() const; Tool *getAssemble() const; Tool *getLink() const; Tool *getClangAs() const; - mutable OwningPtr<SanitizerArgs> SanitizerArguments; + mutable std::unique_ptr<SanitizerArgs> SanitizerArguments; protected: + MultilibSet Multilibs; + ToolChain(const Driver &D, const llvm::Triple &T, const llvm::opt::ArgList &Args); @@ -127,6 +130,8 @@ public: path_list &getProgramPaths() { return ProgramPaths; } const path_list &getProgramPaths() const { return ProgramPaths; } + const MultilibSet &getMultilibs() const { return Multilibs; } + const SanitizerArgs& getSanitizerArgs() const; // Tool access. @@ -139,7 +144,7 @@ public: virtual llvm::opt::DerivedArgList * TranslateArgs(const llvm::opt::DerivedArgList &Args, const char *BoundArch) const { - return 0; + return nullptr; } /// Choose a tool to use to handle the action \p JA. @@ -150,6 +155,10 @@ public: std::string GetFilePath(const char *Name) const; std::string GetProgramPath(const char *Name) const; + /// Returns the linker path, respecting the -fuse-ld= argument to determine + /// the linker suffix or name. + std::string GetLinkerPath() const; + /// \brief Dispatch to the specific toolchain for verbose printing. /// /// This is used when handling the verbose option to print detailed, @@ -159,6 +168,10 @@ public: // Platform defaults information + /// \brief Returns true if the toolchain is targeting a non-native + /// architecture. + virtual bool isCrossCompiling() const; + /// HasNativeLTOLinker - Check whether the linker and related tools have /// native LLVM support. virtual bool HasNativeLLVMSupport() const; @@ -193,7 +206,7 @@ public: virtual bool UseObjCMixedDispatch() const { return false; } /// GetDefaultStackProtectorLevel - Get the default stack protector level for - /// this tool chain (0=off, 1=on, 2=all). + /// this tool chain (0=off, 1=on, 2=strong, 3=all). virtual unsigned GetDefaultStackProtectorLevel(bool KernelOrKext) const { return 0; } @@ -275,6 +288,9 @@ public: virtual void addClangTargetOptions(const llvm::opt::ArgList &DriverArgs, llvm::opt::ArgStringList &CC1Args) const; + /// \brief Add warning options that need to be passed to cc1 for this target. + virtual void addClangWarningOptions(llvm::opt::ArgStringList &CC1Args) const; + // GetRuntimeLibType - Determine the runtime library type to use with the // given compilation arguments. virtual RuntimeLibType diff --git a/contrib/llvm/tools/clang/include/clang/Driver/Types.def b/contrib/llvm/tools/clang/include/clang/Driver/Types.def index d4f52d3..3209679 100644 --- a/contrib/llvm/tools/clang/include/clang/Driver/Types.def +++ b/contrib/llvm/tools/clang/include/clang/Driver/Types.def @@ -54,22 +54,22 @@ TYPE("objective-c++", ObjCXX, PP_ObjCXX, "mm", "u") // C family input files to precompile. TYPE("c-header-cpp-output", PP_CHeader, INVALID, "i", "p") -TYPE("c-header", CHeader, PP_CHeader, 0, "pu") -TYPE("cl-header", CLHeader, PP_CHeader, 0, "pu") +TYPE("c-header", CHeader, PP_CHeader, nullptr, "pu") +TYPE("cl-header", CLHeader, PP_CHeader, nullptr, "pu") TYPE("objective-c-header-cpp-output", PP_ObjCHeader, INVALID, "mi", "p") -TYPE("objective-c-header", ObjCHeader, PP_ObjCHeader, 0, "pu") +TYPE("objective-c-header", ObjCHeader, PP_ObjCHeader, nullptr, "pu") TYPE("c++-header-cpp-output", PP_CXXHeader, INVALID, "ii", "p") -TYPE("c++-header", CXXHeader, PP_CXXHeader, 0, "pu") +TYPE("c++-header", CXXHeader, PP_CXXHeader, nullptr, "pu") TYPE("objective-c++-header-cpp-output", PP_ObjCXXHeader, INVALID, "mii", "p") -TYPE("objective-c++-header", ObjCXXHeader, PP_ObjCXXHeader, 0, "pu") +TYPE("objective-c++-header", ObjCXXHeader, PP_ObjCXXHeader, nullptr, "pu") // Other languages. -TYPE("ada", Ada, INVALID, 0, "u") +TYPE("ada", Ada, INVALID, nullptr, "u") TYPE("assembler", PP_Asm, INVALID, "s", "au") TYPE("assembler-with-cpp", Asm, PP_Asm, "S", "au") -TYPE("f95", PP_Fortran, INVALID, 0, "u") -TYPE("f95-cpp-input", Fortran, PP_Fortran, 0, "u") -TYPE("java", Java, INVALID, 0, "u") +TYPE("f95", PP_Fortran, INVALID, nullptr, "u") +TYPE("f95-cpp-input", Fortran, PP_Fortran, nullptr, "u") +TYPE("java", Java, INVALID, nullptr, "u") // LLVM IR/LTO types. We define separate types for IR and LTO because LTO // outputs should use the standard suffixes. @@ -87,8 +87,8 @@ TYPE("rewritten-legacy-objc", RewrittenLegacyObjC,INVALID, "cpp", "") TYPE("remap", Remap, INVALID, "remap", "") TYPE("precompiled-header", PCH, INVALID, "gch", "A") TYPE("object", Object, INVALID, "o", "") -TYPE("treelang", Treelang, INVALID, 0, "u") +TYPE("treelang", Treelang, INVALID, nullptr, "u") TYPE("image", Image, INVALID, "out", "") TYPE("dSYM", dSYM, INVALID, "dSYM", "A") TYPE("dependencies", Dependencies, INVALID, "d", "") -TYPE("none", Nothing, INVALID, 0, "u") +TYPE("none", Nothing, INVALID, nullptr, "u") |