clang  7.0.0svn
Functions
Clang.cpp File Reference
#include "Clang.h"
#include "Arch/AArch64.h"
#include "Arch/ARM.h"
#include "Arch/Mips.h"
#include "Arch/PPC.h"
#include "Arch/RISCV.h"
#include "Arch/Sparc.h"
#include "Arch/SystemZ.h"
#include "Arch/X86.h"
#include "AMDGPU.h"
#include "CommonArgs.h"
#include "Hexagon.h"
#include "InputInfo.h"
#include "PS4CPU.h"
#include "clang/Basic/CharInfo.h"
#include "clang/Basic/LangOptions.h"
#include "clang/Basic/ObjCRuntime.h"
#include "clang/Basic/Version.h"
#include "clang/Config/config.h"
#include "clang/Driver/DriverDiagnostic.h"
#include "clang/Driver/Options.h"
#include "clang/Driver/SanitizerArgs.h"
#include "clang/Driver/XRayArgs.h"
#include "llvm/ADT/StringExtras.h"
#include "llvm/Option/ArgList.h"
#include "llvm/Support/CodeGen.h"
#include "llvm/Support/Compression.h"
#include "llvm/Support/FileSystem.h"
#include "llvm/Support/Path.h"
#include "llvm/Support/Process.h"
#include "llvm/Support/TargetParser.h"
#include "llvm/Support/YAMLParser.h"
Include dependency graph for Clang.cpp:

Go to the source code of this file.

Functions

static void CheckPreprocessingOptions (const Driver &D, const ArgList &Args)
 
static void CheckCodeGenerationOptions (const Driver &D, const ArgList &Args)
 
static void EscapeSpacesAndBackslashes (const char *Arg, SmallVectorImpl< char > &Res)
 
static void QuoteTarget (StringRef Target, SmallVectorImpl< char > &Res)
 
static void forAllAssociatedToolChains (Compilation &C, const JobAction &JA, const ToolChain &RegularToolChain, llvm::function_ref< void(const ToolChain &)> Work)
 Apply Work on the current tool chain RegularToolChain and any other offloading tool chain that is associated with the current action JA. More...
 
static bool getRefinementStep (StringRef In, const Driver &D, const Arg &A, size_t &Position)
 This is a helper function for validating the optional refinement step parameter in reciprocal argument strings. More...
 
static void ParseMRecip (const Driver &D, const ArgList &Args, ArgStringList &OutStrings)
 The -mrecip flag requires processing of many optional parameters. More...
 
static void ParseMPreferVectorWidth (const Driver &D, const ArgList &Args, ArgStringList &CmdArgs)
 The -mprefer-vector-width option accepts either a positive integer or the string "none". More...
 
static void getWebAssemblyTargetFeatures (const ArgList &Args, std::vector< StringRef > &Features)
 
static void getTargetFeatures (const ToolChain &TC, const llvm::Triple &Triple, const ArgList &Args, ArgStringList &CmdArgs, bool ForAS)
 
static bool shouldUseExceptionTablesForObjCExceptions (const ObjCRuntime &runtime, const llvm::Triple &Triple)
 
static void addExceptionArgs (const ArgList &Args, types::ID InputType, const ToolChain &TC, bool KernelOrKext, const ObjCRuntime &objcRuntime, ArgStringList &CmdArgs)
 Adds exception related arguments to the driver command arguments. More...
 
static bool ShouldDisableAutolink (const ArgList &Args, const ToolChain &TC)
 
static bool ShouldDisableDwarfDirectory (const ArgList &Args, const ToolChain &TC)
 
static codegenoptions::DebugInfoKind DebugLevelToInfoKind (const Arg &A)
 
static bool mustUseNonLeafFramePointerForTarget (const llvm::Triple &Triple)
 
static bool useFramePointerForTargetByDefault (const ArgList &Args, const llvm::Triple &Triple)
 
static bool shouldUseFramePointer (const ArgList &Args, const llvm::Triple &Triple)
 
static bool shouldUseLeafFramePointer (const ArgList &Args, const llvm::Triple &Triple)
 
static void addDebugCompDirArg (const ArgList &Args, ArgStringList &CmdArgs)
 Add a CC1 option to specify the debug compilation directory. More...
 
static bool shouldEnableVectorizerAtOLevel (const ArgList &Args, bool isSlpVec)
 Vectorize at all optimization levels greater than 1 except for -Oz. More...
 
static void addDashXForInput (const ArgList &Args, const InputInfo &Input, ArgStringList &CmdArgs)
 Add -x lang to CmdArgs for Input. More...
 
static void appendUserToPath (SmallVectorImpl< char > &Result)
 
static void addPGOAndCoverageFlags (Compilation &C, const Driver &D, const InputInfo &Output, const ArgList &Args, ArgStringList &CmdArgs)
 
static bool ContainsCompileAction (const Action *A)
 Check whether the given input tree contains any compilation actions. More...
 
static bool UseRelaxAll (Compilation &C, const ArgList &Args)
 Check if -relax-all should be passed to the internal assembler. More...
 
static unsigned DwarfVersionNum (StringRef ArgValue)
 
static void RenderDebugEnablingArgs (const ArgList &Args, ArgStringList &CmdArgs, codegenoptions::DebugInfoKind DebugInfoKind, unsigned DwarfVersion, llvm::DebuggerKind DebuggerTuning)
 
static void RenderDebugInfoCompressionArgs (const ArgList &Args, ArgStringList &CmdArgs, const Driver &D)
 
static const char * RelocationModelName (llvm::Reloc::Model Model)
 
static bool isSignedCharDefault (const llvm::Triple &Triple)
 
static bool isNoCommonDefault (const llvm::Triple &Triple)
 
static void CollectArgsForIntegratedAssembler (Compilation &C, const ArgList &Args, ArgStringList &CmdArgs, const Driver &D)
 
static void RenderFloatingPointOptions (const ToolChain &TC, const Driver &D, bool OFastEnabled, const ArgList &Args, ArgStringList &CmdArgs)
 
static void RenderAnalyzerOptions (const ArgList &Args, ArgStringList &CmdArgs, const llvm::Triple &Triple, const InputInfo &Input)
 
static void RenderSSPOptions (const ToolChain &TC, const ArgList &Args, ArgStringList &CmdArgs, bool KernelOrKext)
 
static void RenderOpenCLOptions (const ArgList &Args, ArgStringList &CmdArgs)
 
static void RenderARCMigrateToolOptions (const Driver &D, const ArgList &Args, ArgStringList &CmdArgs)
 
static void RenderBuiltinOptions (const ToolChain &TC, const llvm::Triple &T, const ArgList &Args, ArgStringList &CmdArgs)
 
static void RenderModulesOptions (Compilation &C, const Driver &D, const ArgList &Args, const InputInfo &Input, const InputInfo &Output, ArgStringList &CmdArgs, bool &HaveModules)
 
static void RenderCharacterOptions (const ArgList &Args, const llvm::Triple &T, ArgStringList &CmdArgs)
 
static void RenderObjCOptions (const ToolChain &TC, const Driver &D, const llvm::Triple &T, const ArgList &Args, ObjCRuntime &Runtime, bool InferCovariantReturns, const InputInfo &Input, ArgStringList &CmdArgs)
 
static void RenderDiagnosticsOptions (const Driver &D, const ArgList &Args, ArgStringList &CmdArgs)
 
static void RenderDebugOptions (const ToolChain &TC, const Driver &D, const llvm::Triple &T, const ArgList &Args, bool EmitCodeView, bool IsWindowsMSVC, ArgStringList &CmdArgs, codegenoptions::DebugInfoKind &DebugInfoKind, const Arg *&SplitDWARFArg)
 
static bool maybeConsumeDash (const std::string &EH, size_t &I)
 
static EHFlags parseClangCLEHFlags (const Driver &D, const ArgList &Args)
 /EH controls whether to run destructor cleanups when exceptions are thrown. More...
 

Function Documentation

◆ addDashXForInput()

static void addDashXForInput ( const ArgList &  Args,
const InputInfo Input,
ArgStringList &  CmdArgs 
)
static

Add -x lang to CmdArgs for Input.

Definition at line 653 of file Clang.cpp.

◆ addDebugCompDirArg()

static void addDebugCompDirArg ( const ArgList &  Args,
ArgStringList &  CmdArgs 
)
static

Add a CC1 option to specify the debug compilation directory.

Definition at line 612 of file Clang.cpp.

Referenced by clang::driver::tools::ClangAs::ConstructJob().

◆ addExceptionArgs()

static void addExceptionArgs ( const ArgList &  Args,
types::ID  InputType,
const ToolChain TC,
bool  KernelOrKext,
const ObjCRuntime objcRuntime,
ArgStringList &  CmdArgs 
)
static

Adds exception related arguments to the driver command arguments.

There's a master flag, -fexceptions and also language specific flags to enable/disable C++ and Objective-C exceptions. This makes it possible to for example disable C++ exceptions but enable Objective-C exceptions.

Definition at line 407 of file Clang.cpp.

References clang::driver::Driver::Diag(), clang::driver::ToolChain::getDriver(), clang::driver::ToolChain::getRTTIArg(), clang::driver::ToolChain::getRTTIMode(), clang::driver::ToolChain::getTriple(), clang::driver::types::isCXX(), clang::driver::types::isObjC(), clang::driver::ToolChain::RM_DisabledExplicitly, clang::driver::ToolChain::RM_DisabledImplicitly, clang::driver::ToolChain::RM_EnabledImplicitly, and shouldUseExceptionTablesForObjCExceptions().

◆ addPGOAndCoverageFlags()

static void addPGOAndCoverageFlags ( Compilation C,
const Driver D,
const InputInfo Output,
const ArgList &  Args,
ArgStringList &  CmdArgs 
)
static

◆ appendUserToPath()

static void appendUserToPath ( SmallVectorImpl< char > &  Result)
static

Definition at line 683 of file Clang.cpp.

References clang::isAlphanumeric(), and P.

Referenced by RenderModulesOptions().

◆ CheckCodeGenerationOptions()

static void CheckCodeGenerationOptions ( const Driver D,
const ArgList &  Args 
)
static

Definition at line 64 of file Clang.cpp.

References clang::driver::Driver::Diag().

◆ CheckPreprocessingOptions()

static void CheckPreprocessingOptions ( const Driver D,
const ArgList &  Args 
)
static

◆ CollectArgsForIntegratedAssembler()

static void CollectArgsForIntegratedAssembler ( Compilation C,
const ArgList &  Args,
ArgStringList &  CmdArgs,
const Driver D 
)
static

◆ ContainsCompileAction()

static bool ContainsCompileAction ( const Action A)
static

Check whether the given input tree contains any compilation actions.

Definition at line 843 of file Clang.cpp.

References clang::driver::Action::inputs().

Referenced by UseRelaxAll().

◆ DebugLevelToInfoKind()

static codegenoptions::DebugInfoKind DebugLevelToInfoKind ( const Arg &  A)
static

◆ DwarfVersionNum()

static unsigned DwarfVersionNum ( StringRef  ArgValue)
static

◆ EscapeSpacesAndBackslashes()

static void EscapeSpacesAndBackslashes ( const char *  Arg,
SmallVectorImpl< char > &  Res 
)
static

Definition at line 76 of file Clang.cpp.

Referenced by clang::driver::tools::ClangAs::ConstructJob().

◆ forAllAssociatedToolChains()

static void forAllAssociatedToolChains ( Compilation C,
const JobAction JA,
const ToolChain RegularToolChain,
llvm::function_ref< void(const ToolChain &)>  Work 
)
static

Apply Work on the current tool chain RegularToolChain and any other offloading tool chain that is associated with the current action JA.

Definition at line 122 of file Clang.cpp.

References clang::driver::Compilation::getOffloadToolChains(), clang::driver::Compilation::getSingleOffloadToolChain(), clang::driver::Action::isDeviceOffloading(), clang::driver::Action::isHostOffloading(), clang::driver::Action::OFK_Cuda, clang::driver::Action::OFK_Host, and clang::driver::Action::OFK_OpenMP.

Referenced by RelocationModelName().

◆ getRefinementStep()

static bool getRefinementStep ( StringRef  In,
const Driver D,
const Arg &  A,
size_t Position 
)
static

This is a helper function for validating the optional refinement step parameter in reciprocal argument strings.

Return false if there is an error parsing the refinement step. Otherwise, return true and set the Position of the refinement step in the input string.

Definition at line 151 of file Clang.cpp.

Referenced by ParseMRecip().

◆ getTargetFeatures()

static void getTargetFeatures ( const ToolChain TC,
const llvm::Triple &  Triple,
const ArgList &  Args,
ArgStringList &  CmdArgs,
bool  ForAS 
)
static

◆ getWebAssemblyTargetFeatures()

static void getWebAssemblyTargetFeatures ( const ArgList &  Args,
std::vector< StringRef > &  Features 
)
static

Definition at line 299 of file Clang.cpp.

References clang::driver::tools::handleTargetFeaturesGroup().

Referenced by getTargetFeatures().

◆ isNoCommonDefault()

static bool isNoCommonDefault ( const llvm::Triple &  Triple)
static

◆ isSignedCharDefault()

static bool isSignedCharDefault ( const llvm::Triple &  Triple)
static

Definition at line 1275 of file Clang.cpp.

Referenced by RenderCharacterOptions().

◆ maybeConsumeDash()

static bool maybeConsumeDash ( const std::string &  EH,
size_t I 
)
static

Definition at line 4870 of file Clang.cpp.

◆ mustUseNonLeafFramePointerForTarget()

static bool mustUseNonLeafFramePointerForTarget ( const llvm::Triple &  Triple)
static

Definition at line 511 of file Clang.cpp.

Referenced by shouldUseFramePointer().

◆ parseClangCLEHFlags()

static EHFlags parseClangCLEHFlags ( const Driver D,
const ArgList &  Args 
)
static

/EH controls whether to run destructor cleanups when exceptions are thrown.

There are three modifiers:

  • s: Cleanup after "synchronous" exceptions, aka C++ exceptions.
  • a: Cleanup after "asynchronous" exceptions, aka structured exceptions. The 'a' modifier is unimplemented and fundamentally hard in LLVM IR.
  • c: Assume that extern "C" functions are implicitly nounwind. The default is /EHs-c-, meaning cleanups are disabled.

Definition at line 4891 of file Clang.cpp.

◆ ParseMPreferVectorWidth()

static void ParseMPreferVectorWidth ( const Driver D,
const ArgList &  Args,
ArgStringList &  CmdArgs 
)
static

The -mprefer-vector-width option accepts either a positive integer or the string "none".

Definition at line 280 of file Clang.cpp.

References clang::driver::Driver::Diag().

◆ ParseMRecip()

static void ParseMRecip ( const Driver D,
const ArgList &  Args,
ArgStringList &  OutStrings 
)
static

The -mrecip flag requires processing of many optional parameters.

Definition at line 179 of file Clang.cpp.

References clang::driver::Driver::Diag(), and getRefinementStep().

Referenced by RenderFloatingPointOptions().

◆ QuoteTarget()

static void QuoteTarget ( StringRef  Target,
SmallVectorImpl< char > &  Res 
)
static

Definition at line 93 of file Clang.cpp.

Referenced by RelocationModelName().

◆ RelocationModelName()

static const char* RelocationModelName ( llvm::Reloc::Model  Model)
static

◆ RenderAnalyzerOptions()

static void RenderAnalyzerOptions ( const ArgList &  Args,
ArgStringList &  CmdArgs,
const llvm::Triple &  Triple,
const InputInfo Input 
)
static

◆ RenderARCMigrateToolOptions()

static void RenderARCMigrateToolOptions ( const Driver D,
const ArgList &  Args,
ArgStringList &  CmdArgs 
)
static

Definition at line 2394 of file Clang.cpp.

References clang::driver::Driver::Diag().

◆ RenderBuiltinOptions()

static void RenderBuiltinOptions ( const ToolChain TC,
const llvm::Triple &  T,
const ArgList &  Args,
ArgStringList &  CmdArgs 
)
static

Definition at line 2466 of file Clang.cpp.

References clang::driver::ToolChain::getArch().

◆ RenderCharacterOptions()

static void RenderCharacterOptions ( const ArgList &  Args,
const llvm::Triple &  T,
ArgStringList &  CmdArgs 
)
static

Definition at line 2662 of file Clang.cpp.

References isSignedCharDefault().

◆ RenderDebugEnablingArgs()

static void RenderDebugEnablingArgs ( const ArgList &  Args,
ArgStringList &  CmdArgs,
codegenoptions::DebugInfoKind  DebugInfoKind,
unsigned  DwarfVersion,
llvm::DebuggerKind  DebuggerTuning 
)
static

◆ RenderDebugInfoCompressionArgs()

static void RenderDebugInfoCompressionArgs ( const ArgList &  Args,
ArgStringList &  CmdArgs,
const Driver D 
)
static

◆ RenderDebugOptions()

static void RenderDebugOptions ( const ToolChain TC,
const Driver D,
const llvm::Triple &  T,
const ArgList &  Args,
bool  EmitCodeView,
bool  IsWindowsMSVC,
ArgStringList &  CmdArgs,
codegenoptions::DebugInfoKind DebugInfoKind,
const Arg *&  SplitDWARFArg 
)
static

◆ RenderDiagnosticsOptions()

static void RenderDiagnosticsOptions ( const Driver D,
const ArgList &  Args,
ArgStringList &  CmdArgs 
)
static

◆ RenderFloatingPointOptions()

static void RenderFloatingPointOptions ( const ToolChain TC,
const Driver D,
bool  OFastEnabled,
const ArgList &  Args,
ArgStringList &  CmdArgs 
)
static

◆ RenderModulesOptions()

static void RenderModulesOptions ( Compilation C,
const Driver D,
const ArgList &  Args,
const InputInfo Input,
const InputInfo Output,
ArgStringList &  CmdArgs,
bool HaveModules 
)
static

◆ RenderObjCOptions()

static void RenderObjCOptions ( const ToolChain TC,
const Driver D,
const llvm::Triple &  T,
const ArgList &  Args,
ObjCRuntime Runtime,
bool  InferCovariantReturns,
const InputInfo Input,
ArgStringList &  CmdArgs 
)
static

◆ RenderOpenCLOptions()

static void RenderOpenCLOptions ( const ArgList &  Args,
ArgStringList &  CmdArgs 
)
static

Definition at line 2369 of file Clang.cpp.

◆ RenderSSPOptions()

static void RenderSSPOptions ( const ToolChain TC,
const ArgList &  Args,
ArgStringList &  CmdArgs,
bool  KernelOrKext 
)
static

◆ ShouldDisableAutolink()

static bool ShouldDisableAutolink ( const ArgList &  Args,
const ToolChain TC 
)
static

◆ ShouldDisableDwarfDirectory()

static bool ShouldDisableDwarfDirectory ( const ArgList &  Args,
const ToolChain TC 
)
static

Definition at line 489 of file Clang.cpp.

References clang::driver::ToolChain::useIntegratedAs().

◆ shouldEnableVectorizerAtOLevel()

static bool shouldEnableVectorizerAtOLevel ( const ArgList &  Args,
bool  isSlpVec 
)
static

Vectorize at all optimization levels greater than 1 except for -Oz.

For -Oz the loop vectorizer is disable, while the slp vectorizer is enabled.

Definition at line 622 of file Clang.cpp.

◆ shouldUseExceptionTablesForObjCExceptions()

static bool shouldUseExceptionTablesForObjCExceptions ( const ObjCRuntime runtime,
const llvm::Triple &  Triple 
)
static

Definition at line 387 of file Clang.cpp.

References clang::ObjCRuntime::isNonFragile().

Referenced by addExceptionArgs().

◆ shouldUseFramePointer()

static bool shouldUseFramePointer ( const ArgList &  Args,
const llvm::Triple &  Triple 
)
static

◆ shouldUseLeafFramePointer()

static bool shouldUseLeafFramePointer ( const ArgList &  Args,
const llvm::Triple &  Triple 
)
static

Definition at line 596 of file Clang.cpp.

References useFramePointerForTargetByDefault().

◆ useFramePointerForTargetByDefault()

static bool useFramePointerForTargetByDefault ( const ArgList &  Args,
const llvm::Triple &  Triple 
)
static

◆ UseRelaxAll()

static bool UseRelaxAll ( Compilation C,
const ArgList &  Args 
)
static

Check if -relax-all should be passed to the internal assembler.

This is done by default when compiling non-assembler source with -O0.

Definition at line 856 of file Clang.cpp.

References ContainsCompileAction(), and clang::driver::Compilation::getActions().

Referenced by CollectArgsForIntegratedAssembler().