clang 19.0.0git
Macros | Typedefs | Functions
CompilerInvocation.cpp File Reference
#include "clang/Frontend/CompilerInvocation.h"
#include "TestModuleFileExtension.h"
#include "clang/Basic/Builtins.h"
#include "clang/Basic/CharInfo.h"
#include "clang/Basic/CodeGenOptions.h"
#include "clang/Basic/CommentOptions.h"
#include "clang/Basic/Diagnostic.h"
#include "clang/Basic/DiagnosticDriver.h"
#include "clang/Basic/DiagnosticOptions.h"
#include "clang/Basic/FileSystemOptions.h"
#include "clang/Basic/LLVM.h"
#include "clang/Basic/LangOptions.h"
#include "clang/Basic/LangStandard.h"
#include "clang/Basic/ObjCRuntime.h"
#include "clang/Basic/Sanitizers.h"
#include "clang/Basic/SourceLocation.h"
#include "clang/Basic/TargetOptions.h"
#include "clang/Basic/Version.h"
#include "clang/Basic/Visibility.h"
#include "clang/Basic/XRayInstr.h"
#include "clang/Config/config.h"
#include "clang/Driver/Driver.h"
#include "clang/Driver/DriverDiagnostic.h"
#include "clang/Driver/Options.h"
#include "clang/Frontend/CommandLineSourceLoc.h"
#include "clang/Frontend/DependencyOutputOptions.h"
#include "clang/Frontend/FrontendDiagnostic.h"
#include "clang/Frontend/FrontendOptions.h"
#include "clang/Frontend/FrontendPluginRegistry.h"
#include "clang/Frontend/MigratorOptions.h"
#include "clang/Frontend/PreprocessorOutputOptions.h"
#include "clang/Frontend/TextDiagnosticBuffer.h"
#include "clang/Frontend/Utils.h"
#include "clang/Lex/HeaderSearchOptions.h"
#include "clang/Lex/PreprocessorOptions.h"
#include "clang/Sema/CodeCompleteOptions.h"
#include "clang/Serialization/ASTBitCodes.h"
#include "clang/Serialization/ModuleFileExtension.h"
#include "clang/StaticAnalyzer/Core/AnalyzerOptions.h"
#include "llvm/ADT/APInt.h"
#include "llvm/ADT/ArrayRef.h"
#include "llvm/ADT/CachedHashString.h"
#include "llvm/ADT/FloatingPointMode.h"
#include "llvm/ADT/Hashing.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/ADT/SmallString.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/StringRef.h"
#include "llvm/ADT/StringSwitch.h"
#include "llvm/ADT/Twine.h"
#include "llvm/Config/llvm-config.h"
#include "llvm/Frontend/Debug/Options.h"
#include "llvm/IR/DebugInfoMetadata.h"
#include "llvm/Linker/Linker.h"
#include "llvm/MC/MCTargetOptions.h"
#include "llvm/Option/Arg.h"
#include "llvm/Option/ArgList.h"
#include "llvm/Option/OptSpecifier.h"
#include "llvm/Option/OptTable.h"
#include "llvm/Option/Option.h"
#include "llvm/ProfileData/InstrProfReader.h"
#include "llvm/Remarks/HotnessThresholdParser.h"
#include "llvm/Support/CodeGen.h"
#include "llvm/Support/Compiler.h"
#include "llvm/Support/Error.h"
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/ErrorOr.h"
#include "llvm/Support/FileSystem.h"
#include "llvm/Support/HashBuilder.h"
#include "llvm/Support/MathExtras.h"
#include "llvm/Support/MemoryBuffer.h"
#include "llvm/Support/Path.h"
#include "llvm/Support/Process.h"
#include "llvm/Support/Regex.h"
#include "llvm/Support/VersionTuple.h"
#include "llvm/Support/VirtualFileSystem.h"
#include "llvm/Support/raw_ostream.h"
#include "llvm/Target/TargetOptions.h"
#include "llvm/TargetParser/Host.h"
#include "llvm/TargetParser/Triple.h"
#include <algorithm>
#include <atomic>
#include <cassert>
#include <cstddef>
#include <cstring>
#include <ctime>
#include <fstream>
#include <limits>
#include <memory>
#include <optional>
#include <string>
#include <tuple>
#include <type_traits>
#include <utility>
#include <vector>
#include "clang/Driver/Options.inc"
#include "clang/StaticAnalyzer/Core/Analyses.def"
#include "clang/StaticAnalyzer/Core/AnalyzerOptions.def"
#include "clang/Basic/LangStandards.def"
#include "clang/Basic/LangOptions.def"
#include "clang/Basic/DiagnosticOptions.def"
#include "clang/Basic/DebugOptions.def"

Go to the source code of this file.

Macros

#define SIMPLE_ENUM_VALUE_TABLE
 
#define PARSE_OPTION_WITH_MARSHALLING( ARGS, DIAGS, PREFIX_TYPE, SPELLING, ID, KIND, GROUP, ALIAS, ALIASARGS, FLAGS, VISIBILITY, PARAM, HELPTEXT, HELPTEXTSFORVARIANTS, METAVAR, VALUES, SHOULD_PARSE, ALWAYS_EMIT, KEYPATH, DEFAULT_VALUE, IMPLIED_CHECK, IMPLIED_VALUE, NORMALIZER, DENORMALIZER, MERGER, EXTRACTOR, TABLE_INDEX)
 
#define GENERATE_OPTION_WITH_MARSHALLING( CONSUMER, PREFIX_TYPE, SPELLING, ID, KIND, GROUP, ALIAS, ALIASARGS, FLAGS, VISIBILITY, PARAM, HELPTEXT, HELPTEXTSFORVARIANTS, METAVAR, VALUES, SHOULD_PARSE, ALWAYS_EMIT, KEYPATH, DEFAULT_VALUE, IMPLIED_CHECK, IMPLIED_VALUE, NORMALIZER, DENORMALIZER, MERGER, EXTRACTOR, TABLE_INDEX)
 
#define ANALYZER_OPTION_WITH_MARSHALLING(...)    GENERATE_OPTION_WITH_MARSHALLING(Consumer, __VA_ARGS__)
 
#define ANALYSIS_CONSTRAINTS(NAME, CMDFLAG, DESC, CREATFN)
 
#define ANALYSIS_DIAGNOSTICS(NAME, CMDFLAG, DESC, CREATFN)
 
#define ANALYSIS_PURGE(NAME, CMDFLAG, DESC)
 
#define ANALYSIS_INLINING_MODE(NAME, CMDFLAG, DESC)
 
#define ANALYZER_OPTION_WITH_MARSHALLING(...)    PARSE_OPTION_WITH_MARSHALLING(Args, Diags, __VA_ARGS__)
 
#define ANALYSIS_CONSTRAINTS(NAME, CMDFLAG, DESC, CREATFN)    .Case(CMDFLAG, NAME##Model)
 
#define ANALYSIS_DIAGNOSTICS(NAME, CMDFLAG, DESC, CREATFN)    .Case(CMDFLAG, PD_##NAME)
 
#define ANALYSIS_PURGE(NAME, CMDFLAG, DESC)    .Case(CMDFLAG, NAME)
 
#define ANALYSIS_INLINING_MODE(NAME, CMDFLAG, DESC)    .Case(CMDFLAG, NAME)
 
#define ANALYZER_OPTION(TYPE, NAME, CMDFLAG, DESC, DEFAULT_VAL)    initOption(AnOpts.Config, Diags, AnOpts.NAME, CMDFLAG, DEFAULT_VAL);
 
#define ANALYZER_OPTION_DEPENDS_ON_USER_MODE(...)
 
#define ANALYZER_OPTION(...)
 
#define ANALYZER_OPTION_DEPENDS_ON_USER_MODE(TYPE, NAME, CMDFLAG, DESC, SHALLOW_VAL, DEEP_VAL)
 
#define CODEGEN_OPTION_WITH_MARSHALLING(...)    GENERATE_OPTION_WITH_MARSHALLING(Consumer, __VA_ARGS__)
 
#define CODEGEN_OPTION_WITH_MARSHALLING(...)    PARSE_OPTION_WITH_MARSHALLING(Args, Diags, __VA_ARGS__)
 
#define DEPENDENCY_OUTPUT_OPTION_WITH_MARSHALLING(...)    GENERATE_OPTION_WITH_MARSHALLING(Consumer, __VA_ARGS__)
 
#define DEPENDENCY_OUTPUT_OPTION_WITH_MARSHALLING(...)    PARSE_OPTION_WITH_MARSHALLING(Args, Diags, __VA_ARGS__)
 
#define FILE_SYSTEM_OPTION_WITH_MARSHALLING(...)    GENERATE_OPTION_WITH_MARSHALLING(Consumer, __VA_ARGS__)
 
#define FILE_SYSTEM_OPTION_WITH_MARSHALLING(...)    PARSE_OPTION_WITH_MARSHALLING(Args, Diags, __VA_ARGS__)
 
#define MIGRATOR_OPTION_WITH_MARSHALLING(...)    GENERATE_OPTION_WITH_MARSHALLING(Consumer, __VA_ARGS__)
 
#define MIGRATOR_OPTION_WITH_MARSHALLING(...)    PARSE_OPTION_WITH_MARSHALLING(Args, Diags, __VA_ARGS__)
 
#define DIAG_OPTION_WITH_MARSHALLING(...)    GENERATE_OPTION_WITH_MARSHALLING(Consumer, __VA_ARGS__)
 
#define DIAG_OPTION_WITH_MARSHALLING(...)    PARSE_OPTION_WITH_MARSHALLING(Args, *Diags, __VA_ARGS__)
 
#define FRONTEND_OPTION_WITH_MARSHALLING(...)    GENERATE_OPTION_WITH_MARSHALLING(Consumer, __VA_ARGS__)
 
#define FRONTEND_OPTION_WITH_MARSHALLING(...)    PARSE_OPTION_WITH_MARSHALLING(Args, Diags, __VA_ARGS__)
 
#define HEADER_SEARCH_OPTION_WITH_MARSHALLING(...)    GENERATE_OPTION_WITH_MARSHALLING(Consumer, __VA_ARGS__)
 
#define HEADER_SEARCH_OPTION_WITH_MARSHALLING(...)    PARSE_OPTION_WITH_MARSHALLING(Args, Diags, __VA_ARGS__)
 
#define LANG_OPTION_WITH_MARSHALLING(...)    GENERATE_OPTION_WITH_MARSHALLING(Consumer, __VA_ARGS__)
 
#define LANGSTANDARD(id, name, lang, desc, features)
 
#define LANGSTANDARD_ALIAS(id, alias)    if (KindValue == LangStandard::lang_##id) ++NumAliases;
 
#define LANGSTANDARD_ALIAS_DEPR(id, alias)
 
#define LANGSTANDARD(id, name, lang, desc, features)
 
#define LANGSTANDARD_ALIAS(id, alias)    if (KindValue == LangStandard::lang_##id) Diag << alias;
 
#define LANGSTANDARD_ALIAS_DEPR(id, alias)
 
#define LANG_OPTION_WITH_MARSHALLING(...)    PARSE_OPTION_WITH_MARSHALLING(Args, Diags, __VA_ARGS__)
 
#define PREPROCESSOR_OPTION_WITH_MARSHALLING(...)    GENERATE_OPTION_WITH_MARSHALLING(Consumer, __VA_ARGS__)
 
#define PREPROCESSOR_OPTION_WITH_MARSHALLING(...)    PARSE_OPTION_WITH_MARSHALLING(Args, Diags, __VA_ARGS__)
 
#define PREPROCESSOR_OUTPUT_OPTION_WITH_MARSHALLING(...)    GENERATE_OPTION_WITH_MARSHALLING(Consumer, __VA_ARGS__)
 
#define PREPROCESSOR_OUTPUT_OPTION_WITH_MARSHALLING(...)    PARSE_OPTION_WITH_MARSHALLING(Args, Diags, __VA_ARGS__)
 
#define TARGET_OPTION_WITH_MARSHALLING(...)    GENERATE_OPTION_WITH_MARSHALLING(Consumer, __VA_ARGS__)
 
#define TARGET_OPTION_WITH_MARSHALLING(...)    PARSE_OPTION_WITH_MARSHALLING(Args, Diags, __VA_ARGS__)
 
#define LANGOPT(Name, Bits, Default, Description)   HBuilder.add(LangOpts->Name);
 
#define ENUM_LANGOPT(Name, Type, Bits, Default, Description)    HBuilder.add(static_cast<unsigned>(LangOpts->get##Name()));
 
#define BENIGN_LANGOPT(Name, Bits, Default, Description)
 
#define BENIGN_ENUM_LANGOPT(Name, Type, Bits, Default, Description)
 
#define DIAGOPT(Name, Bits, Default)   HBuilder.add(diagOpts.Name);
 
#define ENUM_DIAGOPT(Name, Type, Bits, Default)    HBuilder.add(diagOpts.get##Name());
 
#define DEBUGOPT(Name, Bits, Default)   HBuilder.add(CodeGenOpts->Name);
 
#define VALUE_DEBUGOPT(Name, Bits, Default)   HBuilder.add(CodeGenOpts->Name);
 
#define ENUM_DEBUGOPT(Name, Type, Bits, Default)    HBuilder.add(static_cast<unsigned>(CodeGenOpts->get##Name()));
 
#define BENIGN_DEBUGOPT(Name, Bits, Default)
 
#define BENIGN_VALUE_DEBUGOPT(Name, Bits, Default)
 
#define BENIGN_ENUM_DEBUGOPT(Name, Type, Bits, Default)
 

Typedefs

using ArgumentConsumer = CompilerInvocation::ArgumentConsumer
 
using ParseFn = llvm::function_ref< bool(CompilerInvocation &, ArrayRef< const char * >, DiagnosticsEngine &, const char *)>
 
using GenerateFn = llvm::function_ref< void(CompilerInvocation &, SmallVectorImpl< const char * > &, CompilerInvocation::StringAllocator)>
 

Functions

static Expected< std::optional< uint32_t > > parseToleranceOption (StringRef Arg)
 
static std::optional< boolnormalizeSimpleFlag (OptSpecifier Opt, unsigned TableIndex, const ArgList &Args, DiagnosticsEngine &Diags)
 
static std::optional< boolnormalizeSimpleNegativeFlag (OptSpecifier Opt, unsigned, const ArgList &Args, DiagnosticsEngine &)
 
static void denormalizeSimpleFlag (ArgumentConsumer Consumer, const Twine &Spelling, Option::OptionClass, unsigned,...)
 The tblgen-erated code passes in a fifth parameter of an arbitrary type, but denormalizeSimpleFlags never looks at it.
 
template<typename T >
static constexpr bool is_uint64_t_convertible ()
 
template<typename T , std::enable_if_t<!is_uint64_t_convertible< T >(), bool > = false>
static auto makeFlagToValueNormalizer (T Value)
 
static auto makeBooleanOptionNormalizer (bool Value, bool OtherValue, OptSpecifier OtherOpt)
 
static auto makeBooleanOptionDenormalizer (bool Value)
 
static void denormalizeStringImpl (ArgumentConsumer Consumer, const Twine &Spelling, Option::OptionClass OptClass, unsigned, const Twine &Value)
 
template<typename T >
static void denormalizeString (ArgumentConsumer Consumer, const Twine &Spelling, Option::OptionClass OptClass, unsigned TableIndex, T Value)
 
static std::optional< SimpleEnumValue > findValueTableByName (const SimpleEnumValueTable &Table, StringRef Name)
 
static std::optional< SimpleEnumValue > findValueTableByValue (const SimpleEnumValueTable &Table, unsigned Value)
 
static std::optional< unsignednormalizeSimpleEnum (OptSpecifier Opt, unsigned TableIndex, const ArgList &Args, DiagnosticsEngine &Diags)
 
static void denormalizeSimpleEnumImpl (ArgumentConsumer Consumer, const Twine &Spelling, Option::OptionClass OptClass, unsigned TableIndex, unsigned Value)
 
template<typename T >
static void denormalizeSimpleEnum (ArgumentConsumer Consumer, const Twine &Spelling, Option::OptionClass OptClass, unsigned TableIndex, T Value)
 
static std::optional< std::string > normalizeString (OptSpecifier Opt, int TableIndex, const ArgList &Args, DiagnosticsEngine &Diags)
 
template<typename IntTy >
static std::optional< IntTy > normalizeStringIntegral (OptSpecifier Opt, int, const ArgList &Args, DiagnosticsEngine &Diags)
 
static std::optional< std::vector< std::string > > normalizeStringVector (OptSpecifier Opt, int, const ArgList &Args, DiagnosticsEngine &)
 
static void denormalizeStringVector (ArgumentConsumer Consumer, const Twine &Spelling, Option::OptionClass OptClass, unsigned TableIndex, const std::vector< std::string > &Values)
 
static std::optional< std::string > normalizeTriple (OptSpecifier Opt, int TableIndex, const ArgList &Args, DiagnosticsEngine &Diags)
 
template<typename T , typename U >
static T mergeForwardValue (T KeyPath, U Value)
 
template<typename T , typename U >
static T mergeMaskValue (T KeyPath, U Value)
 
template<typename T >
static T extractForwardValue (T KeyPath)
 
template<typename T , typename U , U Value>
static T extractMaskValue (T KeyPath)
 
static StringRef GetInputKindName (InputKind IK)
 Get language name for given input kind.
 
static bool FixupInvocation (CompilerInvocation &Invocation, DiagnosticsEngine &Diags, const ArgList &Args, InputKind IK)
 
static unsigned getOptimizationLevel (ArgList &Args, InputKind IK, DiagnosticsEngine &Diags)
 
static unsigned getOptimizationLevelSize (ArgList &Args)
 
static void GenerateArg (ArgumentConsumer Consumer, llvm::opt::OptSpecifier OptSpecifier)
 
static void GenerateArg (ArgumentConsumer Consumer, llvm::opt::OptSpecifier OptSpecifier, const Twine &Value)
 
static bool RoundTrip (ParseFn Parse, GenerateFn Generate, CompilerInvocation &RealInvocation, CompilerInvocation &DummyInvocation, ArrayRef< const char * > CommandLineArgs, DiagnosticsEngine &Diags, const char *Argv0, bool CheckAgainstOriginalInvocation=false, bool ForceRoundTrip=false)
 May perform round-trip of command line arguments.
 
static void addDiagnosticArgs (ArgList &Args, OptSpecifier Group, OptSpecifier GroupWithValue, std::vector< std::string > &Diagnostics)
 
static void parseAnalyzerConfigs (AnalyzerOptions &AnOpts, DiagnosticsEngine *Diags)
 
static void getAllNoBuiltinFuncValues (ArgList &Args, std::vector< std::string > &Funcs)
 
static void GenerateAnalyzerArgs (const AnalyzerOptions &Opts, ArgumentConsumer Consumer)
 
static bool ParseAnalyzerArgs (AnalyzerOptions &Opts, ArgList &Args, DiagnosticsEngine &Diags)
 
static StringRef getStringOption (AnalyzerOptions::ConfigTable &Config, StringRef OptionName, StringRef DefaultVal)
 
static void initOption (AnalyzerOptions::ConfigTable &Config, DiagnosticsEngine *Diags, StringRef &OptionField, StringRef Name, StringRef DefaultVal)
 
static void initOption (AnalyzerOptions::ConfigTable &Config, DiagnosticsEngine *Diags, bool &OptionField, StringRef Name, bool DefaultVal)
 
static void initOption (AnalyzerOptions::ConfigTable &Config, DiagnosticsEngine *Diags, unsigned &OptionField, StringRef Name, unsigned DefaultVal)
 
static void GenerateOptimizationRemark (ArgumentConsumer Consumer, OptSpecifier OptEQ, StringRef Name, const CodeGenOptions::OptRemark &Remark)
 Generate a remark argument. This is an inverse of ParseOptimizationRemark.
 
static CodeGenOptions::OptRemark ParseOptimizationRemark (DiagnosticsEngine &Diags, ArgList &Args, OptSpecifier OptEQ, StringRef Name)
 Parse a remark command line argument.
 
static bool parseDiagnosticLevelMask (StringRef FlagName, const std::vector< std::string > &Levels, DiagnosticsEngine &Diags, DiagnosticLevelMask &M)
 
static void parseSanitizerKinds (StringRef FlagName, const std::vector< std::string > &Sanitizers, DiagnosticsEngine &Diags, SanitizerSet &S)
 
static SmallVector< StringRef, 4 > serializeSanitizerKinds (SanitizerSet S)
 
static void parseXRayInstrumentationBundle (StringRef FlagName, StringRef Bundle, ArgList &Args, DiagnosticsEngine &D, XRayInstrSet &S)
 
static std::string serializeXRayInstrumentationBundle (const XRayInstrSet &S)
 
static void setPGOUseInstrumentor (CodeGenOptions &Opts, const Twine &ProfileName, llvm::vfs::FileSystem &FS, DiagnosticsEngine &Diags)
 
static void GenerateDependencyOutputArgs (const DependencyOutputOptions &Opts, ArgumentConsumer Consumer)
 
static bool ParseDependencyOutputArgs (DependencyOutputOptions &Opts, ArgList &Args, DiagnosticsEngine &Diags, frontend::ActionKind Action, bool ShowLineMarkers)
 
static bool parseShowColorsArgs (const ArgList &Args, bool DefaultColor)
 
static bool checkVerifyPrefixes (const std::vector< std::string > &VerifyPrefixes, DiagnosticsEngine &Diags)
 
static void GenerateFileSystemArgs (const FileSystemOptions &Opts, ArgumentConsumer Consumer)
 
static bool ParseFileSystemArgs (FileSystemOptions &Opts, const ArgList &Args, DiagnosticsEngine &Diags)
 
static void GenerateMigratorArgs (const MigratorOptions &Opts, ArgumentConsumer Consumer)
 
static bool ParseMigratorArgs (MigratorOptions &Opts, const ArgList &Args, DiagnosticsEngine &Diags)
 
static bool parseTestModuleFileExtensionArg (StringRef Arg, std::string &BlockName, unsigned &MajorVersion, unsigned &MinorVersion, bool &Hashed, std::string &UserInfo)
 Parse the argument to the -ftest-module-file-extension command-line argument.
 
static const auto & getFrontendActionTable ()
 Return a table that associates command line option specifiers with the frontend action.
 
static std::optional< frontend::ActionKindgetFrontendAction (OptSpecifier &Opt)
 Maps command line option to frontend action.
 
static std::optional< OptSpecifier > getProgramActionOpt (frontend::ActionKind ProgramAction)
 Maps frontend action to command line option.
 
static void GenerateFrontendArgs (const FrontendOptions &Opts, ArgumentConsumer Consumer, bool IsHeader)
 
static bool ParseFrontendArgs (FrontendOptions &Opts, ArgList &Args, DiagnosticsEngine &Diags, bool &IsHeaderFile)
 
static void GenerateHeaderSearchArgs (const HeaderSearchOptions &Opts, ArgumentConsumer Consumer)
 
static bool ParseHeaderSearchArgs (HeaderSearchOptions &Opts, ArgList &Args, DiagnosticsEngine &Diags, const std::string &WorkingDir)
 
static void GenerateAPINotesArgs (const APINotesOptions &Opts, ArgumentConsumer Consumer)
 
static void ParseAPINotesArgs (APINotesOptions &Opts, ArgList &Args, DiagnosticsEngine &diags)
 
static void GeneratePointerAuthArgs (const LangOptions &Opts, ArgumentConsumer Consumer)
 
static void ParsePointerAuthArgs (LangOptions &Opts, ArgList &Args, DiagnosticsEngine &Diags)
 
static bool IsInputCompatibleWithStandard (InputKind IK, const LangStandard &S)
 Check if input file kind and language standard are compatible.
 
static bool isStrictlyPreprocessorAction (frontend::ActionKind Action)
 
static void GeneratePreprocessorArgs (const PreprocessorOptions &Opts, ArgumentConsumer Consumer, const LangOptions &LangOpts, const FrontendOptions &FrontendOpts, const CodeGenOptions &CodeGenOpts)
 
static bool ParsePreprocessorArgs (PreprocessorOptions &Opts, ArgList &Args, DiagnosticsEngine &Diags, frontend::ActionKind Action, const FrontendOptions &FrontendOpts)
 
static void GeneratePreprocessorOutputArgs (const PreprocessorOutputOptions &Opts, ArgumentConsumer Consumer, frontend::ActionKind Action)
 
static bool ParsePreprocessorOutputArgs (PreprocessorOutputOptions &Opts, ArgList &Args, DiagnosticsEngine &Diags, frontend::ActionKind Action)
 
static void GenerateTargetArgs (const TargetOptions &Opts, ArgumentConsumer Consumer)
 
static bool ParseTargetArgs (TargetOptions &Opts, ArgList &Args, DiagnosticsEngine &Diags)
 

Macro Definition Documentation

◆ ANALYSIS_CONSTRAINTS [1/2]

#define ANALYSIS_CONSTRAINTS (   NAME,
  CMDFLAG,
  DESC,
  CREATFN 
)
Value:
case NAME##Model: \
GenerateArg(Consumer, OPT_analyzer_constraints, CMDFLAG); \
break;

◆ ANALYSIS_CONSTRAINTS [2/2]

#define ANALYSIS_CONSTRAINTS (   NAME,
  CMDFLAG,
  DESC,
  CREATFN 
)     .Case(CMDFLAG, NAME##Model)

◆ ANALYSIS_DIAGNOSTICS [1/2]

#define ANALYSIS_DIAGNOSTICS (   NAME,
  CMDFLAG,
  DESC,
  CREATFN 
)
Value:
case PD_##NAME: \
GenerateArg(Consumer, OPT_analyzer_output, CMDFLAG); \
break;

◆ ANALYSIS_DIAGNOSTICS [2/2]

#define ANALYSIS_DIAGNOSTICS (   NAME,
  CMDFLAG,
  DESC,
  CREATFN 
)     .Case(CMDFLAG, PD_##NAME)

◆ ANALYSIS_INLINING_MODE [1/2]

#define ANALYSIS_INLINING_MODE (   NAME,
  CMDFLAG,
  DESC 
)
Value:
case NAME: \
GenerateArg(Consumer, OPT_analyzer_inlining_mode, CMDFLAG); \
break;

◆ ANALYSIS_INLINING_MODE [2/2]

#define ANALYSIS_INLINING_MODE (   NAME,
  CMDFLAG,
  DESC 
)     .Case(CMDFLAG, NAME)

◆ ANALYSIS_PURGE [1/2]

#define ANALYSIS_PURGE (   NAME,
  CMDFLAG,
  DESC 
)
Value:
case NAME: \
GenerateArg(Consumer, OPT_analyzer_purge, CMDFLAG); \
break;

◆ ANALYSIS_PURGE [2/2]

#define ANALYSIS_PURGE (   NAME,
  CMDFLAG,
  DESC 
)     .Case(CMDFLAG, NAME)

◆ ANALYZER_OPTION [1/2]

#define ANALYZER_OPTION (   ...)

◆ ANALYZER_OPTION [2/2]

#define ANALYZER_OPTION (   TYPE,
  NAME,
  CMDFLAG,
  DESC,
  DEFAULT_VAL 
)     initOption(AnOpts.Config, Diags, AnOpts.NAME, CMDFLAG, DEFAULT_VAL);

◆ ANALYZER_OPTION_DEPENDS_ON_USER_MODE [1/2]

#define ANALYZER_OPTION_DEPENDS_ON_USER_MODE (   ...)

◆ ANALYZER_OPTION_DEPENDS_ON_USER_MODE [2/2]

#define ANALYZER_OPTION_DEPENDS_ON_USER_MODE (   TYPE,
  NAME,
  CMDFLAG,
  DESC,
  SHALLOW_VAL,
  DEEP_VAL 
)
Value:
initOption(AnOpts.Config, Diags, AnOpts.NAME, CMDFLAG, \
InShallowMode ? SHALLOW_VAL : DEEP_VAL);
static void initOption(AnalyzerOptions::ConfigTable &Config, DiagnosticsEngine *Diags, StringRef &OptionField, StringRef Name, StringRef DefaultVal)

◆ ANALYZER_OPTION_WITH_MARSHALLING [1/2]

#define ANALYZER_OPTION_WITH_MARSHALLING (   ...)     GENERATE_OPTION_WITH_MARSHALLING(Consumer, __VA_ARGS__)

◆ ANALYZER_OPTION_WITH_MARSHALLING [2/2]

#define ANALYZER_OPTION_WITH_MARSHALLING (   ...)     PARSE_OPTION_WITH_MARSHALLING(Args, Diags, __VA_ARGS__)

◆ BENIGN_DEBUGOPT

#define BENIGN_DEBUGOPT (   Name,
  Bits,
  Default 
)

◆ BENIGN_ENUM_DEBUGOPT

#define BENIGN_ENUM_DEBUGOPT (   Name,
  Type,
  Bits,
  Default 
)

◆ BENIGN_ENUM_LANGOPT

#define BENIGN_ENUM_LANGOPT (   Name,
  Type,
  Bits,
  Default,
  Description 
)

◆ BENIGN_LANGOPT

#define BENIGN_LANGOPT (   Name,
  Bits,
  Default,
  Description 
)

◆ BENIGN_VALUE_DEBUGOPT

#define BENIGN_VALUE_DEBUGOPT (   Name,
  Bits,
  Default 
)

◆ CODEGEN_OPTION_WITH_MARSHALLING [1/2]

#define CODEGEN_OPTION_WITH_MARSHALLING (   ...)     GENERATE_OPTION_WITH_MARSHALLING(Consumer, __VA_ARGS__)

◆ CODEGEN_OPTION_WITH_MARSHALLING [2/2]

#define CODEGEN_OPTION_WITH_MARSHALLING (   ...)     PARSE_OPTION_WITH_MARSHALLING(Args, Diags, __VA_ARGS__)

◆ DEBUGOPT

#define DEBUGOPT (   Name,
  Bits,
  Default 
)    HBuilder.add(CodeGenOpts->Name);

◆ DEPENDENCY_OUTPUT_OPTION_WITH_MARSHALLING [1/2]

#define DEPENDENCY_OUTPUT_OPTION_WITH_MARSHALLING (   ...)     GENERATE_OPTION_WITH_MARSHALLING(Consumer, __VA_ARGS__)

◆ DEPENDENCY_OUTPUT_OPTION_WITH_MARSHALLING [2/2]

#define DEPENDENCY_OUTPUT_OPTION_WITH_MARSHALLING (   ...)     PARSE_OPTION_WITH_MARSHALLING(Args, Diags, __VA_ARGS__)

◆ DIAG_OPTION_WITH_MARSHALLING [1/2]

#define DIAG_OPTION_WITH_MARSHALLING (   ...)     GENERATE_OPTION_WITH_MARSHALLING(Consumer, __VA_ARGS__)

◆ DIAG_OPTION_WITH_MARSHALLING [2/2]

#define DIAG_OPTION_WITH_MARSHALLING (   ...)     PARSE_OPTION_WITH_MARSHALLING(Args, *Diags, __VA_ARGS__)

◆ DIAGOPT

#define DIAGOPT (   Name,
  Bits,
  Default 
)    HBuilder.add(diagOpts.Name);

◆ ENUM_DEBUGOPT

#define ENUM_DEBUGOPT (   Name,
  Type,
  Bits,
  Default 
)     HBuilder.add(static_cast<unsigned>(CodeGenOpts->get##Name()));

◆ ENUM_DIAGOPT

#define ENUM_DIAGOPT (   Name,
  Type,
  Bits,
  Default 
)     HBuilder.add(diagOpts.get##Name());

◆ ENUM_LANGOPT

#define ENUM_LANGOPT (   Name,
  Type,
  Bits,
  Default,
  Description 
)     HBuilder.add(static_cast<unsigned>(LangOpts->get##Name()));

◆ FILE_SYSTEM_OPTION_WITH_MARSHALLING [1/2]

#define FILE_SYSTEM_OPTION_WITH_MARSHALLING (   ...)     GENERATE_OPTION_WITH_MARSHALLING(Consumer, __VA_ARGS__)

◆ FILE_SYSTEM_OPTION_WITH_MARSHALLING [2/2]

#define FILE_SYSTEM_OPTION_WITH_MARSHALLING (   ...)     PARSE_OPTION_WITH_MARSHALLING(Args, Diags, __VA_ARGS__)

◆ FRONTEND_OPTION_WITH_MARSHALLING [1/2]

#define FRONTEND_OPTION_WITH_MARSHALLING (   ...)     GENERATE_OPTION_WITH_MARSHALLING(Consumer, __VA_ARGS__)

◆ FRONTEND_OPTION_WITH_MARSHALLING [2/2]

#define FRONTEND_OPTION_WITH_MARSHALLING (   ...)     PARSE_OPTION_WITH_MARSHALLING(Args, Diags, __VA_ARGS__)

◆ GENERATE_OPTION_WITH_MARSHALLING

#define GENERATE_OPTION_WITH_MARSHALLING (   CONSUMER,
  PREFIX_TYPE,
  SPELLING,
  ID,
  KIND,
  GROUP,
  ALIAS,
  ALIASARGS,
  FLAGS,
  VISIBILITY,
  PARAM,
  HELPTEXT,
  HELPTEXTSFORVARIANTS,
  METAVAR,
  VALUES,
  SHOULD_PARSE,
  ALWAYS_EMIT,
  KEYPATH,
  DEFAULT_VALUE,
  IMPLIED_CHECK,
  IMPLIED_VALUE,
  NORMALIZER,
  DENORMALIZER,
  MERGER,
  EXTRACTOR,
  TABLE_INDEX 
)
Value:
if ((VISIBILITY) & options::CC1Option) { \
[&](const auto &Extracted) { \
if (ALWAYS_EMIT || \
(Extracted != \
static_cast<decltype(KEYPATH)>((IMPLIED_CHECK) ? (IMPLIED_VALUE) \
: (DEFAULT_VALUE)))) \
DENORMALIZER(CONSUMER, SPELLING, Option::KIND##Class, TABLE_INDEX, \
Extracted); \
}(EXTRACTOR(KEYPATH)); \
}

Definition at line 551 of file CompilerInvocation.cpp.

◆ HEADER_SEARCH_OPTION_WITH_MARSHALLING [1/2]

#define HEADER_SEARCH_OPTION_WITH_MARSHALLING (   ...)     GENERATE_OPTION_WITH_MARSHALLING(Consumer, __VA_ARGS__)

◆ HEADER_SEARCH_OPTION_WITH_MARSHALLING [2/2]

#define HEADER_SEARCH_OPTION_WITH_MARSHALLING (   ...)     PARSE_OPTION_WITH_MARSHALLING(Args, Diags, __VA_ARGS__)

◆ LANG_OPTION_WITH_MARSHALLING [1/2]

#define LANG_OPTION_WITH_MARSHALLING (   ...)     GENERATE_OPTION_WITH_MARSHALLING(Consumer, __VA_ARGS__)

◆ LANG_OPTION_WITH_MARSHALLING [2/2]

#define LANG_OPTION_WITH_MARSHALLING (   ...)     PARSE_OPTION_WITH_MARSHALLING(Args, Diags, __VA_ARGS__)

◆ LANGOPT

#define LANGOPT (   Name,
  Bits,
  Default,
  Description 
)    HBuilder.add(LangOpts->Name);

◆ LANGSTANDARD [1/2]

#define LANGSTANDARD (   id,
  name,
  lang,
  desc,
  features 
)

◆ LANGSTANDARD [2/2]

#define LANGSTANDARD (   id,
  name,
  lang,
  desc,
  features 
)

◆ LANGSTANDARD_ALIAS [1/2]

#define LANGSTANDARD_ALIAS (   id,
  alias 
)     if (KindValue == LangStandard::lang_##id) ++NumAliases;

◆ LANGSTANDARD_ALIAS [2/2]

#define LANGSTANDARD_ALIAS (   id,
  alias 
)     if (KindValue == LangStandard::lang_##id) Diag << alias;

◆ LANGSTANDARD_ALIAS_DEPR [1/2]

#define LANGSTANDARD_ALIAS_DEPR (   id,
  alias 
)

◆ LANGSTANDARD_ALIAS_DEPR [2/2]

#define LANGSTANDARD_ALIAS_DEPR (   id,
  alias 
)

◆ MIGRATOR_OPTION_WITH_MARSHALLING [1/2]

#define MIGRATOR_OPTION_WITH_MARSHALLING (   ...)     GENERATE_OPTION_WITH_MARSHALLING(Consumer, __VA_ARGS__)

◆ MIGRATOR_OPTION_WITH_MARSHALLING [2/2]

#define MIGRATOR_OPTION_WITH_MARSHALLING (   ...)     PARSE_OPTION_WITH_MARSHALLING(Args, Diags, __VA_ARGS__)

◆ PARSE_OPTION_WITH_MARSHALLING

#define PARSE_OPTION_WITH_MARSHALLING (   ARGS,
  DIAGS,
  PREFIX_TYPE,
  SPELLING,
  ID,
  KIND,
  GROUP,
  ALIAS,
  ALIASARGS,
  FLAGS,
  VISIBILITY,
  PARAM,
  HELPTEXT,
  HELPTEXTSFORVARIANTS,
  METAVAR,
  VALUES,
  SHOULD_PARSE,
  ALWAYS_EMIT,
  KEYPATH,
  DEFAULT_VALUE,
  IMPLIED_CHECK,
  IMPLIED_VALUE,
  NORMALIZER,
  DENORMALIZER,
  MERGER,
  EXTRACTOR,
  TABLE_INDEX 
)
Value:
if ((VISIBILITY) & options::CC1Option) { \
KEYPATH = MERGER(KEYPATH, DEFAULT_VALUE); \
if (IMPLIED_CHECK) \
KEYPATH = MERGER(KEYPATH, IMPLIED_VALUE); \
if (SHOULD_PARSE) \
if (auto MaybeValue = NORMALIZER(OPT_##ID, TABLE_INDEX, ARGS, DIAGS)) \
KEYPATH = \
MERGER(KEYPATH, static_cast<decltype(KEYPATH)>(*MaybeValue)); \
}

Definition at line 534 of file CompilerInvocation.cpp.

◆ PREPROCESSOR_OPTION_WITH_MARSHALLING [1/2]

#define PREPROCESSOR_OPTION_WITH_MARSHALLING (   ...)     GENERATE_OPTION_WITH_MARSHALLING(Consumer, __VA_ARGS__)

◆ PREPROCESSOR_OPTION_WITH_MARSHALLING [2/2]

#define PREPROCESSOR_OPTION_WITH_MARSHALLING (   ...)     PARSE_OPTION_WITH_MARSHALLING(Args, Diags, __VA_ARGS__)

◆ PREPROCESSOR_OUTPUT_OPTION_WITH_MARSHALLING [1/2]

#define PREPROCESSOR_OUTPUT_OPTION_WITH_MARSHALLING (   ...)     GENERATE_OPTION_WITH_MARSHALLING(Consumer, __VA_ARGS__)

◆ PREPROCESSOR_OUTPUT_OPTION_WITH_MARSHALLING [2/2]

#define PREPROCESSOR_OUTPUT_OPTION_WITH_MARSHALLING (   ...)     PARSE_OPTION_WITH_MARSHALLING(Args, Diags, __VA_ARGS__)

◆ SIMPLE_ENUM_VALUE_TABLE

#define SIMPLE_ENUM_VALUE_TABLE

Definition at line 280 of file CompilerInvocation.cpp.

◆ TARGET_OPTION_WITH_MARSHALLING [1/2]

#define TARGET_OPTION_WITH_MARSHALLING (   ...)     GENERATE_OPTION_WITH_MARSHALLING(Consumer, __VA_ARGS__)

◆ TARGET_OPTION_WITH_MARSHALLING [2/2]

#define TARGET_OPTION_WITH_MARSHALLING (   ...)     PARSE_OPTION_WITH_MARSHALLING(Args, Diags, __VA_ARGS__)

◆ VALUE_DEBUGOPT

#define VALUE_DEBUGOPT (   Name,
  Bits,
  Default 
)    HBuilder.add(CodeGenOpts->Name);

Typedef Documentation

◆ ArgumentConsumer

using ArgumentConsumer = CompilerInvocation::ArgumentConsumer

Definition at line 278 of file CompilerInvocation.cpp.

◆ GenerateFn

using GenerateFn = llvm::function_ref<void( CompilerInvocation &, SmallVectorImpl<const char *> &, CompilerInvocation::StringAllocator)>

Definition at line 747 of file CompilerInvocation.cpp.

◆ ParseFn

using ParseFn = llvm::function_ref<bool(CompilerInvocation &, ArrayRef<const char *>, DiagnosticsEngine &, const char *)>

Definition at line 742 of file CompilerInvocation.cpp.

Function Documentation

◆ addDiagnosticArgs()

static void addDiagnosticArgs ( ArgList &  Args,
OptSpecifier  Group,
OptSpecifier  GroupWithValue,
std::vector< std::string > &  Diagnostics 
)
static

Definition at line 920 of file CompilerInvocation.cpp.

◆ checkVerifyPrefixes()

static bool checkVerifyPrefixes ( const std::vector< std::string > &  VerifyPrefixes,
DiagnosticsEngine Diags 
)
static

◆ denormalizeSimpleEnum()

template<typename T >
static void denormalizeSimpleEnum ( ArgumentConsumer  Consumer,
const Twine &  Spelling,
Option::OptionClass  OptClass,
unsigned  TableIndex,
Value 
)
static

Definition at line 435 of file CompilerInvocation.cpp.

References denormalizeSimpleEnumImpl().

◆ denormalizeSimpleEnumImpl()

static void denormalizeSimpleEnumImpl ( ArgumentConsumer  Consumer,
const Twine &  Spelling,
Option::OptionClass  OptClass,
unsigned  TableIndex,
unsigned  Value 
)
static

Definition at line 419 of file CompilerInvocation.cpp.

References denormalizeString(), and findValueTableByValue().

Referenced by denormalizeSimpleEnum().

◆ denormalizeSimpleFlag()

static void denormalizeSimpleFlag ( ArgumentConsumer  Consumer,
const Twine &  Spelling,
Option::OptionClass  ,
unsigned  ,
  ... 
)
static

The tblgen-erated code passes in a fifth parameter of an arbitrary type, but denormalizeSimpleFlags never looks at it.

Avoid bloating compile-time with unnecessary template instantiations and just ignore it with a variadic argument.

Definition at line 306 of file CompilerInvocation.cpp.

Referenced by GenerateArg().

◆ denormalizeString()

template<typename T >
static void denormalizeString ( ArgumentConsumer  Consumer,
const Twine &  Spelling,
Option::OptionClass  OptClass,
unsigned  TableIndex,
Value 
)
static

◆ denormalizeStringImpl()

static void denormalizeStringImpl ( ArgumentConsumer  Consumer,
const Twine &  Spelling,
Option::OptionClass  OptClass,
unsigned  ,
const Twine &  Value 
)
static

Definition at line 353 of file CompilerInvocation.cpp.

Referenced by denormalizeString().

◆ denormalizeStringVector()

static void denormalizeStringVector ( ArgumentConsumer  Consumer,
const Twine &  Spelling,
Option::OptionClass  OptClass,
unsigned  TableIndex,
const std::vector< std::string > &  Values 
)
static

Definition at line 475 of file CompilerInvocation.cpp.

References denormalizeString().

◆ extractForwardValue()

template<typename T >
static T extractForwardValue ( KeyPath)
static

Definition at line 525 of file CompilerInvocation.cpp.

◆ extractMaskValue()

template<typename T , typename U , U Value>
static T extractMaskValue ( KeyPath)
static

Definition at line 530 of file CompilerInvocation.cpp.

References clang::T.

◆ findValueTableByName()

static std::optional< SimpleEnumValue > findValueTableByName ( const SimpleEnumValueTable &  Table,
StringRef  Name 
)
static

Definition at line 382 of file CompilerInvocation.cpp.

Referenced by normalizeSimpleEnum().

◆ findValueTableByValue()

static std::optional< SimpleEnumValue > findValueTableByValue ( const SimpleEnumValueTable &  Table,
unsigned  Value 
)
static

Definition at line 391 of file CompilerInvocation.cpp.

References clang::Value::Value().

Referenced by denormalizeSimpleEnumImpl().

◆ FixupInvocation()

static bool FixupInvocation ( CompilerInvocation Invocation,
DiagnosticsEngine Diags,
const ArgList &  Args,
InputKind  IK 
)
static

◆ GenerateAnalyzerArgs()

static void GenerateAnalyzerArgs ( const AnalyzerOptions Opts,
ArgumentConsumer  Consumer 
)
static

◆ GenerateAPINotesArgs()

static void GenerateAPINotesArgs ( const APINotesOptions Opts,
ArgumentConsumer  Consumer 
)
static

◆ GenerateArg() [1/2]

static void GenerateArg ( ArgumentConsumer  Consumer,
llvm::opt::OptSpecifier  OptSpecifier 
)
static

◆ GenerateArg() [2/2]

static void GenerateArg ( ArgumentConsumer  Consumer,
llvm::opt::OptSpecifier  OptSpecifier,
const Twine &  Value 
)
static

◆ GenerateDependencyOutputArgs()

static void GenerateDependencyOutputArgs ( const DependencyOutputOptions Opts,
ArgumentConsumer  Consumer 
)
static

◆ GenerateFileSystemArgs()

static void GenerateFileSystemArgs ( const FileSystemOptions Opts,
ArgumentConsumer  Consumer 
)
static

◆ GenerateFrontendArgs()

static void GenerateFrontendArgs ( const FrontendOptions Opts,
ArgumentConsumer  Consumer,
bool  IsHeader 
)
static

Definition at line 2609 of file CompilerInvocation.cpp.

References clang::FrontendOptions::ActionName, clang::ADOF_Default, clang::ADOF_JSON, clang::Asm, clang::frontend::ASTDump, clang::FrontendOptions::ASTDumpAll, clang::FrontendOptions::ASTDumpDecls, clang::FrontendOptions::ASTDumpFormat, clang::FrontendOptions::AuxTargetCPU, clang::FrontendOptions::AuxTargetFeatures, clang::C, clang::CIR, clang::FrontendOptions::CodeCompletionAt, clang::CUDA, clang::CXX, clang::FrontendOptions::DashX, denormalizeString(), clang::ParsedSourceLocation::FileName, clang::frontend::FixIt, clang::FrontendOptions::FixItSuffix, GenerateArg(), clang::driver::getDriverOptTable(), clang::InputKind::getFormat(), clang::InputKind::getHeaderUnitKind(), clang::InputKind::getLanguage(), getProgramActionOpt(), clang::InputKind::HeaderUnit_Abs, clang::InputKind::HeaderUnit_None, clang::InputKind::HeaderUnit_System, clang::InputKind::HeaderUnit_User, clang::HIP, clang::HLSL, clang::FrontendOptions::Inputs, clang::InputKind::isPreprocessed(), clang::LLVM_IR, clang::FrontendOptions::ModuleFileExtensions, clang::FrontendOptions::ModuleFiles, clang::InputKind::ModuleMap, clang::ObjC, clang::ObjCXX, clang::OpenCL, clang::OpenCLCXX, clang::frontend::PluginAction, clang::FrontendOptions::PluginArgs, clang::FrontendOptions::Plugins, clang::InputKind::Precompiled, clang::FrontendOptions::ProgramAction, clang::RenderScript, clang::ParsedSourceLocation::ToString(), and clang::Unknown.

Referenced by clang::CompilerInvocationBase::generateCC1CommandLine().

◆ GenerateHeaderSearchArgs()

static void GenerateHeaderSearchArgs ( const HeaderSearchOptions Opts,
ArgumentConsumer  Consumer 
)
static

◆ GenerateMigratorArgs()

static void GenerateMigratorArgs ( const MigratorOptions Opts,
ArgumentConsumer  Consumer 
)
static

◆ GenerateOptimizationRemark()

static void GenerateOptimizationRemark ( ArgumentConsumer  Consumer,
OptSpecifier  OptEQ,
StringRef  Name,
const CodeGenOptions::OptRemark Remark 
)
static

Generate a remark argument. This is an inverse of ParseOptimizationRemark.

Definition at line 1298 of file CompilerInvocation.cpp.

References GenerateArg(), clang::Remark, clang::CodeGenOptions::RK_Disabled, and clang::CodeGenOptions::RK_Enabled.

◆ GeneratePointerAuthArgs()

static void GeneratePointerAuthArgs ( const LangOptions Opts,
ArgumentConsumer  Consumer 
)
static

◆ GeneratePreprocessorArgs()

static void GeneratePreprocessorArgs ( const PreprocessorOptions Opts,
ArgumentConsumer  Consumer,
const LangOptions LangOpts,
const FrontendOptions FrontendOpts,
const CodeGenOptions CodeGenOpts 
)
static

◆ GeneratePreprocessorOutputArgs()

static void GeneratePreprocessorOutputArgs ( const PreprocessorOutputOptions Opts,
ArgumentConsumer  Consumer,
frontend::ActionKind  Action 
)
static

◆ GenerateTargetArgs()

static void GenerateTargetArgs ( const TargetOptions Opts,
ArgumentConsumer  Consumer 
)
static

◆ getAllNoBuiltinFuncValues()

static void getAllNoBuiltinFuncValues ( ArgList &  Args,
std::vector< std::string > &  Funcs 
)
static

Definition at line 946 of file CompilerInvocation.cpp.

References clang::Builtin::Context::isBuiltinFunc().

◆ getFrontendAction()

static std::optional< frontend::ActionKind > getFrontendAction ( OptSpecifier &  Opt)
static

Maps command line option to frontend action.

Definition at line 2591 of file CompilerInvocation.cpp.

References getFrontendActionTable().

Referenced by ParseFrontendArgs().

◆ getFrontendActionTable()

static const auto & getFrontendActionTable ( )
static

Return a table that associates command line option specifiers with the frontend action.

Note: The pair {frontend::PluginAction, OPT_plugin} is intentionally missing, as this case is handled separately from other frontend options.

Definition at line 2534 of file CompilerInvocation.cpp.

References clang::frontend::ASTDeclList, clang::frontend::ASTDump, clang::frontend::ASTPrint, clang::frontend::ASTView, clang::frontend::DumpCompilerOptions, clang::frontend::DumpRawTokens, clang::frontend::DumpTokens, clang::frontend::EmitAssembly, clang::frontend::EmitBC, clang::frontend::EmitCodeGenOnly, clang::frontend::EmitHTML, clang::frontend::EmitLLVM, clang::frontend::EmitLLVMOnly, clang::frontend::EmitObj, clang::frontend::ExtractAPI, clang::frontend::FixIt, clang::frontend::GenerateHeaderUnit, clang::frontend::GenerateInterfaceStubs, clang::frontend::GenerateModule, clang::frontend::GenerateModuleInterface, clang::frontend::GeneratePCH, clang::frontend::GenerateReducedModuleInterface, clang::frontend::InitOnly, clang::frontend::MigrateSource, clang::frontend::ModuleFileInfo, clang::frontend::ParseSyntaxOnly, clang::frontend::PrintDependencyDirectivesSourceMinimizerOutput, clang::frontend::PrintPreamble, clang::frontend::PrintPreprocessedInput, clang::frontend::RewriteMacros, clang::frontend::RewriteObjC, clang::frontend::RewriteTest, clang::frontend::RunAnalysis, clang::frontend::RunPreprocessorOnly, clang::frontend::TemplightDump, and clang::frontend::VerifyPCH.

Referenced by getFrontendAction(), and getProgramActionOpt().

◆ GetInputKindName()

static StringRef GetInputKindName ( InputKind  IK)
static

◆ getOptimizationLevel()

static unsigned getOptimizationLevel ( ArgList &  Args,
InputKind  IK,
DiagnosticsEngine Diags 
)
static

◆ getOptimizationLevelSize()

static unsigned getOptimizationLevelSize ( ArgList &  Args)
static

Definition at line 711 of file CompilerInvocation.cpp.

◆ getProgramActionOpt()

static std::optional< OptSpecifier > getProgramActionOpt ( frontend::ActionKind  ProgramAction)
static

Maps frontend action to command line option.

Definition at line 2601 of file CompilerInvocation.cpp.

References getFrontendActionTable().

Referenced by GenerateFrontendArgs().

◆ getStringOption()

static StringRef getStringOption ( AnalyzerOptions::ConfigTable Config,
StringRef  OptionName,
StringRef  DefaultVal 
)
static

Definition at line 1181 of file CompilerInvocation.cpp.

Referenced by initOption().

◆ initOption() [1/3]

static void initOption ( AnalyzerOptions::ConfigTable Config,
DiagnosticsEngine Diags,
bool OptionField,
StringRef  Name,
bool  DefaultVal 
)
static

◆ initOption() [2/3]

static void initOption ( AnalyzerOptions::ConfigTable Config,
DiagnosticsEngine Diags,
StringRef &  OptionField,
StringRef  Name,
StringRef  DefaultVal 
)
static

Definition at line 1186 of file CompilerInvocation.cpp.

References getStringOption().

◆ initOption() [3/3]

static void initOption ( AnalyzerOptions::ConfigTable Config,
DiagnosticsEngine Diags,
unsigned OptionField,
StringRef  Name,
unsigned  DefaultVal 
)
static

◆ is_uint64_t_convertible()

template<typename T >
static constexpr bool is_uint64_t_convertible ( )
staticconstexpr

Definition at line 312 of file CompilerInvocation.cpp.

◆ IsInputCompatibleWithStandard()

static bool IsInputCompatibleWithStandard ( InputKind  IK,
const LangStandard S 
)
static

◆ isStrictlyPreprocessorAction()

static bool isStrictlyPreprocessorAction ( frontend::ActionKind  Action)
static

◆ makeBooleanOptionDenormalizer()

static auto makeBooleanOptionDenormalizer ( bool  Value)
static

Definition at line 345 of file CompilerInvocation.cpp.

◆ makeBooleanOptionNormalizer()

static auto makeBooleanOptionNormalizer ( bool  Value,
bool  OtherValue,
OptSpecifier  OtherOpt 
)
static

Definition at line 333 of file CompilerInvocation.cpp.

◆ makeFlagToValueNormalizer()

template<typename T , std::enable_if_t<!is_uint64_t_convertible< T >(), bool > = false>
static auto makeFlagToValueNormalizer ( Value)
static

Definition at line 318 of file CompilerInvocation.cpp.

◆ mergeForwardValue()

template<typename T , typename U >
static T mergeForwardValue ( KeyPath,
U  Value 
)
static

Definition at line 517 of file CompilerInvocation.cpp.

References clang::T.

◆ mergeMaskValue()

template<typename T , typename U >
static T mergeMaskValue ( KeyPath,
U  Value 
)
static

Definition at line 521 of file CompilerInvocation.cpp.

◆ normalizeSimpleEnum()

static std::optional< unsigned > normalizeSimpleEnum ( OptSpecifier  Opt,
unsigned  TableIndex,
const ArgList &  Args,
DiagnosticsEngine Diags 
)
static

◆ normalizeSimpleFlag()

static std::optional< bool > normalizeSimpleFlag ( OptSpecifier  Opt,
unsigned  TableIndex,
const ArgList &  Args,
DiagnosticsEngine Diags 
)
static

Definition at line 284 of file CompilerInvocation.cpp.

◆ normalizeSimpleNegativeFlag()

static std::optional< bool > normalizeSimpleNegativeFlag ( OptSpecifier  Opt,
unsigned  ,
const ArgList &  Args,
DiagnosticsEngine  
)
static

Definition at line 293 of file CompilerInvocation.cpp.

◆ normalizeString()

static std::optional< std::string > normalizeString ( OptSpecifier  Opt,
int  TableIndex,
const ArgList &  Args,
DiagnosticsEngine Diags 
)
static

Definition at line 443 of file CompilerInvocation.cpp.

◆ normalizeStringIntegral()

template<typename IntTy >
static std::optional< IntTy > normalizeStringIntegral ( OptSpecifier  Opt,
int  ,
const ArgList &  Args,
DiagnosticsEngine Diags 
)
static

Definition at line 454 of file CompilerInvocation.cpp.

References clang::DiagnosticsEngine::Report().

◆ normalizeStringVector()

static std::optional< std::vector< std::string > > normalizeStringVector ( OptSpecifier  Opt,
int  ,
const ArgList &  Args,
DiagnosticsEngine  
)
static

Definition at line 470 of file CompilerInvocation.cpp.

◆ normalizeTriple()

static std::optional< std::string > normalizeTriple ( OptSpecifier  Opt,
int  TableIndex,
const ArgList &  Args,
DiagnosticsEngine Diags 
)
static

Definition at line 506 of file CompilerInvocation.cpp.

◆ ParseAnalyzerArgs()

static bool ParseAnalyzerArgs ( AnalyzerOptions Opts,
ArgList &  Args,
DiagnosticsEngine Diags 
)
static

◆ parseAnalyzerConfigs()

static void parseAnalyzerConfigs ( AnalyzerOptions AnOpts,
DiagnosticsEngine Diags 
)
static

◆ ParseAPINotesArgs()

static void ParseAPINotesArgs ( APINotesOptions Opts,
ArgList &  Args,
DiagnosticsEngine diags 
)
static

◆ ParseDependencyOutputArgs()

static bool ParseDependencyOutputArgs ( DependencyOutputOptions Opts,
ArgList &  Args,
DiagnosticsEngine Diags,
frontend::ActionKind  Action,
bool  ShowLineMarkers 
)
static

◆ parseDiagnosticLevelMask()

static bool parseDiagnosticLevelMask ( StringRef  FlagName,
const std::vector< std::string > &  Levels,
DiagnosticsEngine Diags,
DiagnosticLevelMask M 
)
static

◆ ParseFileSystemArgs()

static bool ParseFileSystemArgs ( FileSystemOptions Opts,
const ArgList &  Args,
DiagnosticsEngine Diags 
)
static

Definition at line 2329 of file CompilerInvocation.cpp.

References clang::DiagnosticsEngine::getNumErrors().

◆ ParseFrontendArgs()

static bool ParseFrontendArgs ( FrontendOptions Opts,
ArgList &  Args,
DiagnosticsEngine Diags,
bool IsHeaderFile 
)
static

Definition at line 2779 of file CompilerInvocation.cpp.

References clang::FrontendOptions::ActionName, clang::ADOF_Default, clang::ADOF_JSON, clang::FrontendOptions::ARCMT_None, clang::FrontendOptions::ARCMTAction, clang::Asm, clang::frontend::ASTDump, clang::FrontendOptions::ASTDumpAll, clang::FrontendOptions::ASTDumpDecls, clang::FrontendOptions::ASTDumpFormat, clang::FrontendOptions::AuxTargetCPU, clang::FrontendOptions::AuxTargetFeatures, clang::C, clang::CIR, clang::FrontendOptions::CodeCompletionAt, clang::CUDA, clang::CXX, clang::FrontendOptions::DashX, clang::ParsedSourceLocation::FileName, clang::frontend::FixIt, clang::FrontendOptions::FixItSuffix, clang::ParsedSourceLocation::FromString(), clang::frontend::GenerateInterfaceStubs, clang::frontend::GenerateModule, clang::InputKind::getFormat(), getFrontendAction(), clang::InputKind::getHeader(), clang::InputKind::getHeaderUnitKind(), clang::FrontendOptions::getInputKindForExtension(), clang::DiagnosticsEngine::getNumErrors(), clang::InputKind::getPreprocessed(), clang::InputKind::HeaderUnit_Abs, clang::InputKind::HeaderUnit_None, clang::InputKind::HeaderUnit_System, clang::InputKind::HeaderUnit_User, clang::HIP, clang::HLSL, clang::FrontendOptions::Inputs, clang::FrontendOptions::IsSystemModule, clang::InputKind::isUnknown(), clang::LLVM_IR, clang::FrontendOptions::ModuleFileExtensions, clang::FrontendOptions::ModuleFiles, clang::InputKind::ModuleMap, clang::ObjC, clang::FrontendOptions::ObjCMT_None, clang::FrontendOptions::ObjCMTAction, clang::ObjCXX, clang::OpenCL, clang::OpenCLCXX, clang::frontend::ParseSyntaxOnly, parseTestModuleFileExtensionArg(), clang::frontend::PluginAction, clang::FrontendOptions::PluginArgs, clang::FrontendOptions::Plugins, clang::InputKind::Precompiled, clang::FrontendOptions::ProgramAction, clang::RenderScript, clang::DiagnosticsEngine::Report(), clang::InputKind::Source, clang::Unknown, clang::InputKind::withFormat(), and clang::InputKind::withHeaderUnit().

◆ ParseHeaderSearchArgs()

static bool ParseHeaderSearchArgs ( HeaderSearchOptions Opts,
ArgList &  Args,
DiagnosticsEngine Diags,
const std::string &  WorkingDir 
)
static

◆ ParseMigratorArgs()

static bool ParseMigratorArgs ( MigratorOptions Opts,
const ArgList &  Args,
DiagnosticsEngine Diags 
)
static

Definition at line 2352 of file CompilerInvocation.cpp.

References clang::DiagnosticsEngine::getNumErrors().

◆ ParseOptimizationRemark()

static CodeGenOptions::OptRemark ParseOptimizationRemark ( DiagnosticsEngine Diags,
ArgList &  Args,
OptSpecifier  OptEQ,
StringRef  Name 
)
static

Parse a remark command line argument.

It may be missing, disabled/enabled by '-R[no-]group' or specified with a regular expression by '-Rgroup=regexp'. On top of that, it can be disabled/enabled globally by '-R[no-]everything'.

Definition at line 1314 of file CompilerInvocation.cpp.

References clang::DiagnosticsEngine::Report(), clang::Result, clang::CodeGenOptions::RK_Disabled, clang::CodeGenOptions::RK_DisabledEverything, clang::CodeGenOptions::RK_Enabled, clang::CodeGenOptions::RK_EnabledEverything, and clang::CodeGenOptions::RK_WithPattern.

◆ ParsePointerAuthArgs()

static void ParsePointerAuthArgs ( LangOptions Opts,
ArgList &  Args,
DiagnosticsEngine Diags 
)
static

Definition at line 3324 of file CompilerInvocation.cpp.

◆ ParsePreprocessorArgs()

static bool ParsePreprocessorArgs ( PreprocessorOptions Opts,
ArgList &  Args,
DiagnosticsEngine Diags,
frontend::ActionKind  Action,
const FrontendOptions FrontendOpts 
)
static

◆ ParsePreprocessorOutputArgs()

static bool ParsePreprocessorOutputArgs ( PreprocessorOutputOptions Opts,
ArgList &  Args,
DiagnosticsEngine Diags,
frontend::ActionKind  Action 
)
static

◆ parseSanitizerKinds()

static void parseSanitizerKinds ( StringRef  FlagName,
const std::vector< std::string > &  Sanitizers,
DiagnosticsEngine Diags,
SanitizerSet S 
)
static

◆ parseShowColorsArgs()

static bool parseShowColorsArgs ( const ArgList &  Args,
bool  DefaultColor 
)
static

Definition at line 2270 of file CompilerInvocation.cpp.

References ShowColors.

◆ ParseTargetArgs()

static bool ParseTargetArgs ( TargetOptions Opts,
ArgList &  Args,
DiagnosticsEngine Diags 
)
static

◆ parseTestModuleFileExtensionArg()

static bool parseTestModuleFileExtensionArg ( StringRef  Arg,
std::string &  BlockName,
unsigned MajorVersion,
unsigned MinorVersion,
bool Hashed,
std::string &  UserInfo 
)
static

Parse the argument to the -ftest-module-file-extension command-line argument.

Returns
true on error, false on success.

Definition at line 2510 of file CompilerInvocation.cpp.

Referenced by ParseFrontendArgs().

◆ parseToleranceOption()

static Expected< std::optional< uint32_t > > parseToleranceOption ( StringRef  Arg)
static

Definition at line 116 of file CompilerInvocation.cpp.

◆ parseXRayInstrumentationBundle()

static void parseXRayInstrumentationBundle ( StringRef  FlagName,
StringRef  Bundle,
ArgList &  Args,
DiagnosticsEngine D,
XRayInstrSet S 
)
static

◆ RoundTrip()

static bool RoundTrip ( ParseFn  Parse,
GenerateFn  Generate,
CompilerInvocation RealInvocation,
CompilerInvocation DummyInvocation,
ArrayRef< const char * >  CommandLineArgs,
DiagnosticsEngine Diags,
const char *  Argv0,
bool  CheckAgainstOriginalInvocation = false,
bool  ForceRoundTrip = false 
)
static

May perform round-trip of command line arguments.

By default, the round-trip is enabled in assert builds. This can be overwritten at run-time via the "-round-trip-args" and "-no-round-trip-args" command line flags, or via the ForceRoundTrip parameter.

During round-trip, the command line arguments are parsed into a dummy CompilerInvocation, which is used to generate the command line arguments again. The real CompilerInvocation is then created by parsing the generated arguments, not the original ones. This (in combination with tests covering argument behavior) ensures the generated command line is complete (doesn't drop/mangle any arguments).

Finally, we check the command line that was used to create the real CompilerInvocation instance. By default, we compare it to the command line the real CompilerInvocation generates. This checks whether the generator is deterministic. If CheckAgainstOriginalInvocation is enabled, we instead compare it to the original command line to verify the original command-line was canonical and can round-trip exactly.

Definition at line 769 of file CompilerInvocation.cpp.

References clang::Equal, clang::DiagnosticsEngine::getNumWarnings(), clang::DiagnosticsEngine::Report(), clang::DiagnosticsEngine::setClient(), and clang::Success.

Referenced by clang::CompilerInvocation::checkCC1RoundTrip(), and clang::CompilerInvocation::CreateFromArgs().

◆ serializeSanitizerKinds()

static SmallVector< StringRef, 4 > serializeSanitizerKinds ( SanitizerSet  S)
static

Definition at line 1399 of file CompilerInvocation.cpp.

References clang::serializeSanitizerSet().

◆ serializeXRayInstrumentationBundle()

static std::string serializeXRayInstrumentationBundle ( const XRayInstrSet S)
static

Definition at line 1424 of file CompilerInvocation.cpp.

References clang::serializeXRayInstrValue().

◆ setPGOUseInstrumentor()

static void setPGOUseInstrumentor ( CodeGenOptions Opts,
const Twine &  ProfileName,
llvm::vfs::FileSystem &  FS,
DiagnosticsEngine Diags 
)
static