diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2017-04-20 21:20:51 +0000 | 
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2017-04-20 21:20:51 +0000 | 
| commit | 583e75cce441388bc562fa225d23499261a0091e (patch) | |
| tree | 5944a7c248d4a8c858db45abc3444eb69270a3c8 /lib/Driver/ToolChains/Clang.cpp | |
| parent | 7442d6faa2719e4e7d33a7021c406c5a4facd74d (diff) | |
Diffstat (limited to 'lib/Driver/ToolChains/Clang.cpp')
| -rw-r--r-- | lib/Driver/ToolChains/Clang.cpp | 36 | 
1 files changed, 34 insertions, 2 deletions
| diff --git a/lib/Driver/ToolChains/Clang.cpp b/lib/Driver/ToolChains/Clang.cpp index f8eeeb4eef69..49708e7d7242 100644 --- a/lib/Driver/ToolChains/Clang.cpp +++ b/lib/Driver/ToolChains/Clang.cpp @@ -649,8 +649,24 @@ static void addDashXForInput(const ArgList &Args, const InputInfo &Input,    CmdArgs.push_back("-x");    if (Args.hasArg(options::OPT_rewrite_objc))      CmdArgs.push_back(types::getTypeName(types::TY_PP_ObjCXX)); -  else -    CmdArgs.push_back(types::getTypeName(Input.getType())); +  else { +    // Map the driver type to the frontend type. This is mostly an identity +    // mapping, except that the distinction between module interface units +    // and other source files does not exist at the frontend layer. +    const char *ClangType; +    switch (Input.getType()) { +    case types::TY_CXXModule: +      ClangType = "c++"; +      break; +    case types::TY_PP_CXXModule: +      ClangType = "c++-cpp-output"; +      break; +    default: +      ClangType = types::getTypeName(Input.getType()); +      break; +    } +    CmdArgs.push_back(ClangType); +  }  }  static void appendUserToPath(SmallVectorImpl<char> &Result) { @@ -2290,6 +2306,9 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,    if (!Args.hasFlag(options::OPT_fstrict_return, options::OPT_fno_strict_return,                      true))      CmdArgs.push_back("-fno-strict-return"); +  if (Args.hasFlag(options::OPT_fallow_editor_placeholders, +                   options::OPT_fno_allow_editor_placeholders, false)) +    CmdArgs.push_back("-fallow-editor-placeholders");    if (Args.hasFlag(options::OPT_fstrict_vtable_pointers,                     options::OPT_fno_strict_vtable_pointers,                     false)) @@ -4996,6 +5015,19 @@ void ClangAs::ConstructJob(Compilation &C, const JobAction &JA,    case llvm::Triple::x86_64:      AddX86TargetArgs(Args, CmdArgs);      break; + +  case llvm::Triple::arm: +  case llvm::Triple::armeb: +  case llvm::Triple::thumb: +  case llvm::Triple::thumbeb: +    // This isn't in AddARMTargetArgs because we want to do this for assembly +    // only, not C/C++. +    if (Args.hasFlag(options::OPT_mdefault_build_attributes, +                     options::OPT_mno_default_build_attributes, true)) { +        CmdArgs.push_back("-mllvm"); +        CmdArgs.push_back("-arm-add-build-attributes"); +    } +    break;    }    // Consume all the warning flags. Usually this would be handled more | 
