diff options
Diffstat (limited to 'clang/lib/Driver/ToolChain.cpp')
-rw-r--r-- | clang/lib/Driver/ToolChain.cpp | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/clang/lib/Driver/ToolChain.cpp b/clang/lib/Driver/ToolChain.cpp index 6c7a6c8794c..1e446dc1ebc 100644 --- a/clang/lib/Driver/ToolChain.cpp +++ b/clang/lib/Driver/ToolChain.cpp @@ -517,6 +517,18 @@ std::string ToolChain::ComputeLLVMTriple(const ArgList &Args, else ArchName = "arm"; + // Check if ARM ISA was explicitly selected (using -mno-thumb or -marm) for + // M-Class CPUs/architecture variants, which is not supported. + bool ARMModeRequested = !Args.hasFlag(options::OPT_mthumb, + options::OPT_mno_thumb, ThumbDefault); + if (IsMProfile && ARMModeRequested) { + if (!MCPU.empty()) + getDriver().Diag(diag::err_cpu_unsupported_isa) << CPU << "ARM"; + else + getDriver().Diag(diag::err_arch_unsupported_isa) + << tools::arm::getARMArch(MArch, getTriple()) << "ARM"; + } + // Assembly files should start in ARM mode, unless arch is M-profile. // Windows is always thumb. if ((InputType != types::TY_PP_Asm && Args.hasFlag(options::OPT_mthumb, |