diff options
author | Tom Weaver <Tom.Weaver@Sony.com> | 2021-02-10 16:40:07 +0000 |
---|---|---|
committer | Tom Weaver <Tom.Weaver@Sony.com> | 2021-02-10 16:40:07 +0000 |
commit | b86a763afb9a1f55f4b234ce97320917ead6ac7f (patch) | |
tree | 8e4836d8f31e40301986a883838f7a55d31eaebf /clang/lib/Driver/ToolChain.cpp | |
parent | a743702a1f4880e4492196b1ce9a9a63e0b4c075 (diff) | |
download | llvm-b86a763afb9a1f55f4b234ce97320917ead6ac7f.zip llvm-b86a763afb9a1f55f4b234ce97320917ead6ac7f.tar.gz llvm-b86a763afb9a1f55f4b234ce97320917ead6ac7f.tar.bz2 |
Revert "Revert "[clang][driver] Only warn once about invalid library values""
This reverts commit a743702a1f4880e4492196b1ce9a9a63e0b4c075.
Test was fixed in c6a1b16db7dc7a0af8951b39f29ddbe639a98a3b
Diffstat (limited to 'clang/lib/Driver/ToolChain.cpp')
-rw-r--r-- | clang/lib/Driver/ToolChain.cpp | 62 |
1 files changed, 41 insertions, 21 deletions
diff --git a/clang/lib/Driver/ToolChain.cpp b/clang/lib/Driver/ToolChain.cpp index c8363808..d0f404d 100644 --- a/clang/lib/Driver/ToolChain.cpp +++ b/clang/lib/Driver/ToolChain.cpp @@ -884,66 +884,86 @@ void ToolChain::addProfileRTLibs(const llvm::opt::ArgList &Args, ToolChain::RuntimeLibType ToolChain::GetRuntimeLibType( const ArgList &Args) const { + if (runtimeLibType) + return *runtimeLibType; + const Arg* A = Args.getLastArg(options::OPT_rtlib_EQ); StringRef LibName = A ? A->getValue() : CLANG_DEFAULT_RTLIB; // Only use "platform" in tests to override CLANG_DEFAULT_RTLIB! if (LibName == "compiler-rt") - return ToolChain::RLT_CompilerRT; + runtimeLibType = ToolChain::RLT_CompilerRT; else if (LibName == "libgcc") - return ToolChain::RLT_Libgcc; + runtimeLibType = ToolChain::RLT_Libgcc; else if (LibName == "platform") - return GetDefaultRuntimeLibType(); + runtimeLibType = GetDefaultRuntimeLibType(); + else { + if (A) + getDriver().Diag(diag::err_drv_invalid_rtlib_name) + << A->getAsString(Args); - if (A) - getDriver().Diag(diag::err_drv_invalid_rtlib_name) << A->getAsString(Args); + runtimeLibType = GetDefaultRuntimeLibType(); + } - return GetDefaultRuntimeLibType(); + return *runtimeLibType; } ToolChain::UnwindLibType ToolChain::GetUnwindLibType( const ArgList &Args) const { + if (unwindLibType) + return *unwindLibType; + const Arg *A = Args.getLastArg(options::OPT_unwindlib_EQ); StringRef LibName = A ? A->getValue() : CLANG_DEFAULT_UNWINDLIB; if (LibName == "none") - return ToolChain::UNW_None; + unwindLibType = ToolChain::UNW_None; else if (LibName == "platform" || LibName == "") { ToolChain::RuntimeLibType RtLibType = GetRuntimeLibType(Args); if (RtLibType == ToolChain::RLT_CompilerRT) - return ToolChain::UNW_None; + unwindLibType = ToolChain::UNW_None; else if (RtLibType == ToolChain::RLT_Libgcc) - return ToolChain::UNW_Libgcc; + unwindLibType = ToolChain::UNW_Libgcc; } else if (LibName == "libunwind") { if (GetRuntimeLibType(Args) == RLT_Libgcc) getDriver().Diag(diag::err_drv_incompatible_unwindlib); - return ToolChain::UNW_CompilerRT; + unwindLibType = ToolChain::UNW_CompilerRT; } else if (LibName == "libgcc") - return ToolChain::UNW_Libgcc; + unwindLibType = ToolChain::UNW_Libgcc; + else { + if (A) + getDriver().Diag(diag::err_drv_invalid_unwindlib_name) + << A->getAsString(Args); - if (A) - getDriver().Diag(diag::err_drv_invalid_unwindlib_name) - << A->getAsString(Args); + unwindLibType = GetDefaultUnwindLibType(); + } - return GetDefaultUnwindLibType(); + return *unwindLibType; } ToolChain::CXXStdlibType ToolChain::GetCXXStdlibType(const ArgList &Args) const{ + if (cxxStdlibType) + return *cxxStdlibType; + const Arg *A = Args.getLastArg(options::OPT_stdlib_EQ); StringRef LibName = A ? A->getValue() : CLANG_DEFAULT_CXX_STDLIB; // Only use "platform" in tests to override CLANG_DEFAULT_CXX_STDLIB! if (LibName == "libc++") - return ToolChain::CST_Libcxx; + cxxStdlibType = ToolChain::CST_Libcxx; else if (LibName == "libstdc++") - return ToolChain::CST_Libstdcxx; + cxxStdlibType = ToolChain::CST_Libstdcxx; else if (LibName == "platform") - return GetDefaultCXXStdlibType(); + cxxStdlibType = GetDefaultCXXStdlibType(); + else { + if (A) + getDriver().Diag(diag::err_drv_invalid_stdlib_name) + << A->getAsString(Args); - if (A) - getDriver().Diag(diag::err_drv_invalid_stdlib_name) << A->getAsString(Args); + cxxStdlibType = GetDefaultCXXStdlibType(); + } - return GetDefaultCXXStdlibType(); + return *cxxStdlibType; } /// Utility function to add a system include directory to CC1 arguments. |