summaryrefslogtreecommitdiffstats
path: root/clang/lib
diff options
context:
space:
mode:
Diffstat (limited to 'clang/lib')
-rw-r--r--clang/lib/Driver/Action.cpp6
-rw-r--r--clang/lib/Driver/CMakeLists.txt1
-rw-r--r--clang/lib/Driver/Driver.cpp36
-rw-r--r--clang/lib/Driver/Phases.cpp1
-rw-r--r--clang/lib/Driver/ToolChain.cpp10
-rw-r--r--clang/lib/Driver/ToolChains/Clang.cpp25
-rw-r--r--clang/lib/Driver/ToolChains/InterfaceStubs.cpp37
-rw-r--r--clang/lib/Driver/ToolChains/InterfaceStubs.h36
-rw-r--r--clang/lib/Driver/Types.cpp18
-rw-r--r--clang/lib/Frontend/CompilerInvocation.cpp23
10 files changed, 40 insertions, 153 deletions
diff --git a/clang/lib/Driver/Action.cpp b/clang/lib/Driver/Action.cpp
index 0187cf981eb..47b03f6643b 100644
--- a/clang/lib/Driver/Action.cpp
+++ b/clang/lib/Driver/Action.cpp
@@ -31,7 +31,6 @@ const char *Action::getClassName(ActionClass AC) {
case CompileJobClass: return "compiler";
case BackendJobClass: return "backend";
case AssembleJobClass: return "assembler";
- case IfsMergeJobClass: return "interface-stub-merger";
case LinkJobClass: return "linker";
case LipoJobClass: return "lipo";
case DsymutilJobClass: return "dsymutil";
@@ -358,11 +357,6 @@ void AssembleJobAction::anchor() {}
AssembleJobAction::AssembleJobAction(Action *Input, types::ID OutputType)
: JobAction(AssembleJobClass, Input, OutputType) {}
-void IfsMergeJobAction::anchor() {}
-
-IfsMergeJobAction::IfsMergeJobAction(ActionList &Inputs, types::ID Type)
- : JobAction(IfsMergeJobClass, Inputs, Type) {}
-
void LinkJobAction::anchor() {}
LinkJobAction::LinkJobAction(ActionList &Inputs, types::ID Type)
diff --git a/clang/lib/Driver/CMakeLists.txt b/clang/lib/Driver/CMakeLists.txt
index 64b5d70f42b..d90c0ff4360 100644
--- a/clang/lib/Driver/CMakeLists.txt
+++ b/clang/lib/Driver/CMakeLists.txt
@@ -66,7 +66,6 @@ add_clang_library(clangDriver
ToolChains/WebAssembly.cpp
ToolChains/XCore.cpp
ToolChains/PPCLinux.cpp
- ToolChains/InterfaceStubs.cpp
Types.cpp
XRayArgs.cpp
diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp
index de7ca40d0cd..5233691be60 100644
--- a/clang/lib/Driver/Driver.cpp
+++ b/clang/lib/Driver/Driver.cpp
@@ -274,11 +274,11 @@ phases::ID Driver::getFinalPhase(const DerivedArgList &DAL,
(PhaseArg = DAL.getLastArg(options::OPT__SLASH_P))) {
FinalPhase = phases::Preprocess;
- // --precompile only runs up to precompilation.
+ // --precompile only runs up to precompilation.
} else if ((PhaseArg = DAL.getLastArg(options::OPT__precompile))) {
FinalPhase = phases::Precompile;
- // -{fsyntax-only,-analyze,emit-ast} only run up to the compiler.
+ // -{fsyntax-only,-analyze,emit-ast} only run up to the compiler.
} else if ((PhaseArg = DAL.getLastArg(options::OPT_fsyntax_only)) ||
(PhaseArg = DAL.getLastArg(options::OPT_print_supported_cpus)) ||
(PhaseArg = DAL.getLastArg(options::OPT_module_file_info)) ||
@@ -286,23 +286,20 @@ phases::ID Driver::getFinalPhase(const DerivedArgList &DAL,
(PhaseArg = DAL.getLastArg(options::OPT_rewrite_objc)) ||
(PhaseArg = DAL.getLastArg(options::OPT_rewrite_legacy_objc)) ||
(PhaseArg = DAL.getLastArg(options::OPT__migrate)) ||
+ (PhaseArg = DAL.getLastArg(options::OPT_emit_iterface_stubs)) ||
(PhaseArg = DAL.getLastArg(options::OPT__analyze)) ||
(PhaseArg = DAL.getLastArg(options::OPT_emit_ast))) {
FinalPhase = phases::Compile;
- // clang interface stubs
- } else if ((PhaseArg = DAL.getLastArg(options::OPT_emit_iterface_stubs))) {
- FinalPhase = phases::IfsMerge;
-
- // -S only runs up to the backend.
+ // -S only runs up to the backend.
} else if ((PhaseArg = DAL.getLastArg(options::OPT_S))) {
FinalPhase = phases::Backend;
- // -c compilation only runs up to the assembler.
+ // -c compilation only runs up to the assembler.
} else if ((PhaseArg = DAL.getLastArg(options::OPT_c))) {
FinalPhase = phases::Assemble;
- // Otherwise do everything.
+ // Otherwise do everything.
} else
FinalPhase = phases::Link;
@@ -3326,7 +3323,6 @@ void Driver::BuildActions(Compilation &C, DerivedArgList &Args,
// Construct the actions to perform.
HeaderModulePrecompileJobAction *HeaderModuleAction = nullptr;
ActionList LinkerInputs;
- ActionList MergerInputs;
for (auto &I : Inputs) {
types::ID InputType = I.first;
@@ -3364,17 +3360,6 @@ void Driver::BuildActions(Compilation &C, DerivedArgList &Args,
break;
}
- // TODO: Consider removing this because the merged may not end up being
- // the final Phase in the pipeline. Perhaps the merged could just merge
- // and then pass an artifact of some sort to the Link Phase.
- // Queue merger inputs.
- if (Phase == phases::IfsMerge) {
- assert(Phase == PL.back() && "merging must be final compilation step.");
- MergerInputs.push_back(Current);
- Current = nullptr;
- break;
- }
-
// Each precompiled header file after a module file action is a module
// header of that same module file, rather than being compiled to a
// separate PCH.
@@ -3424,11 +3409,6 @@ void Driver::BuildActions(Compilation &C, DerivedArgList &Args,
Actions.push_back(LA);
}
- // Add an interface stubs merge action if necessary.
- if (!MergerInputs.empty())
- Actions.push_back(
- C.MakeAction<IfsMergeJobAction>(MergerInputs, types::TY_Image));
-
// If --print-supported-cpus, -mcpu=? or -mtune=? is specified, build a custom
// Compile phase that prints out supported cpu models and quits.
if (Arg *A = Args.getLastArg(options::OPT_print_supported_cpus)) {
@@ -3465,8 +3445,6 @@ Action *Driver::ConstructPhaseAction(
switch (Phase) {
case phases::Link:
llvm_unreachable("link action invalid here.");
- case phases::IfsMerge:
- llvm_unreachable("ifsmerge action invalid here.");
case phases::Preprocess: {
types::ID OutputTy;
// -M and -MM specify the dependency file name by altering the output type,
@@ -3531,7 +3509,7 @@ Action *Driver::ConstructPhaseAction(
if (Args.hasArg(options::OPT_verify_pch))
return C.MakeAction<VerifyPCHJobAction>(Input, types::TY_Nothing);
if (Args.hasArg(options::OPT_emit_iterface_stubs))
- return C.MakeAction<CompileJobAction>(Input, types::TY_IFS_CPP);
+ return C.MakeAction<CompileJobAction>(Input, types::TY_IFS);
return C.MakeAction<CompileJobAction>(Input, types::TY_LLVM_BC);
}
case phases::Backend: {
diff --git a/clang/lib/Driver/Phases.cpp b/clang/lib/Driver/Phases.cpp
index 01598c59bd9..5b776c63f71 100644
--- a/clang/lib/Driver/Phases.cpp
+++ b/clang/lib/Driver/Phases.cpp
@@ -20,7 +20,6 @@ const char *phases::getPhaseName(ID Id) {
case Backend: return "backend";
case Assemble: return "assembler";
case Link: return "linker";
- case IfsMerge: return "ifsmerger";
}
llvm_unreachable("Invalid phase id.");
diff --git a/clang/lib/Driver/ToolChain.cpp b/clang/lib/Driver/ToolChain.cpp
index db2497a1085..4379da99d07 100644
--- a/clang/lib/Driver/ToolChain.cpp
+++ b/clang/lib/Driver/ToolChain.cpp
@@ -10,7 +10,6 @@
#include "InputInfo.h"
#include "ToolChains/Arch/ARM.h"
#include "ToolChains/Clang.h"
-#include "ToolChains/InterfaceStubs.h"
#include "clang/Basic/ObjCRuntime.h"
#include "clang/Basic/Sanitizers.h"
#include "clang/Config/config.h"
@@ -280,12 +279,6 @@ Tool *ToolChain::getLink() const {
return Link.get();
}
-Tool *ToolChain::getIfsMerge() const {
- if (!IfsMerge)
- IfsMerge.reset(new tools::ifstool::Merger(*this));
- return IfsMerge.get();
-}
-
Tool *ToolChain::getOffloadBundler() const {
if (!OffloadBundler)
OffloadBundler.reset(new tools::OffloadBundler(*this));
@@ -297,9 +290,6 @@ Tool *ToolChain::getTool(Action::ActionClass AC) const {
case Action::AssembleJobClass:
return getAssemble();
- case Action::IfsMergeJobClass:
- return getIfsMerge();
-
case Action::LinkJobClass:
return getLink();
diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp
index 26e8bc60bfa..8628741f7da 100644
--- a/clang/lib/Driver/ToolChains/Clang.cpp
+++ b/clang/lib/Driver/ToolChains/Clang.cpp
@@ -3683,15 +3683,32 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
} else if (JA.getType() == types::TY_LLVM_BC ||
JA.getType() == types::TY_LTO_BC) {
CmdArgs.push_back("-emit-llvm-bc");
- } else if (JA.getType() == types::TY_IFS ||
- JA.getType() == types::TY_IFS_CPP) {
+ } else if (JA.getType() == types::TY_IFS) {
StringRef ArgStr =
Args.hasArg(options::OPT_iterface_stub_version_EQ)
? Args.getLastArgValue(options::OPT_iterface_stub_version_EQ)
- : "experimental-ifs-v1";
+ : "";
+ StringRef StubFormat =
+ llvm::StringSwitch<StringRef>(ArgStr)
+ .Case("experimental-ifs-v1", "experimental-ifs-v1")
+ .Default("");
+
+ if (StubFormat.empty()) {
+ std::string ErrorMessage =
+ "Invalid interface stub format: " + ArgStr.str() +
+ ((ArgStr == "experimental-yaml-elf-v1" ||
+ ArgStr == "experimental-tapi-elf-v1")
+ ? " is deprecated."
+ : ".");
+ D.Diag(diag::err_drv_invalid_value)
+ << "Must specify a valid interface stub format type, ie: "
+ "-interface-stub-version=experimental-ifs-v1"
+ << ErrorMessage;
+ }
+
CmdArgs.push_back("-emit-interface-stubs");
CmdArgs.push_back(
- Args.MakeArgString(Twine("-interface-stub-version=") + ArgStr.str()));
+ Args.MakeArgString(Twine("-interface-stub-version=") + StubFormat));
} else if (JA.getType() == types::TY_PP_Asm) {
CmdArgs.push_back("-S");
} else if (JA.getType() == types::TY_AST) {
diff --git a/clang/lib/Driver/ToolChains/InterfaceStubs.cpp b/clang/lib/Driver/ToolChains/InterfaceStubs.cpp
deleted file mode 100644
index 6677843b2c5..00000000000
--- a/clang/lib/Driver/ToolChains/InterfaceStubs.cpp
+++ /dev/null
@@ -1,37 +0,0 @@
-//===--- InterfaceStubs.cpp - Base InterfaceStubs Implementations C++ ---===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#include "InterfaceStubs.h"
-#include "CommonArgs.h"
-#include "clang/Driver/Compilation.h"
-
-namespace clang {
-namespace driver {
-namespace tools {
-namespace ifstool {
-void Merger::ConstructJob(Compilation &C, const JobAction &JA,
- const InputInfo &Output, const InputInfoList &Inputs,
- const llvm::opt::ArgList &Args,
- const char *LinkingOutput) const {
- std::string Merger = getToolChain().GetProgramPath(getShortName());
- llvm::opt::ArgStringList CmdArgs;
- CmdArgs.push_back("-action");
- CmdArgs.push_back(Args.getLastArg(options::OPT_emit_merged_ifs)
- ? "write-ifs"
- : "write-bin");
- CmdArgs.push_back("-o");
- CmdArgs.push_back(Output.getFilename());
- for (const auto &Input : Inputs)
- CmdArgs.push_back(Input.getFilename());
- C.addCommand(std::make_unique<Command>(JA, *this, Args.MakeArgString(Merger),
- CmdArgs, Inputs));
-}
-} // namespace ifstool
-} // namespace tools
-} // namespace driver
-} // namespace clang
diff --git a/clang/lib/Driver/ToolChains/InterfaceStubs.h b/clang/lib/Driver/ToolChains/InterfaceStubs.h
deleted file mode 100644
index 4afa73701a4..00000000000
--- a/clang/lib/Driver/ToolChains/InterfaceStubs.h
+++ /dev/null
@@ -1,36 +0,0 @@
-//===--- InterfaceStubs.cpp - Base InterfaceStubs Implementations C++ ---===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_IFS_H
-#define LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_IFS_H
-
-#include "clang/Driver/Tool.h"
-#include "clang/Driver/ToolChain.h"
-
-namespace clang {
-namespace driver {
-namespace tools {
-namespace ifstool {
-class LLVM_LIBRARY_VISIBILITY Merger : public Tool {
-public:
- Merger(const ToolChain &TC) : Tool("IFS::Merger", "llvm-ifs", TC) {}
-
- bool hasIntegratedCPP() const override { return false; }
- bool isLinkJob() const override { return false; }
-
- void ConstructJob(Compilation &C, const JobAction &JA,
- const InputInfo &Output, const InputInfoList &Inputs,
- const llvm::opt::ArgList &TCArgs,
- const char *LinkingOutput) const override;
-};
-} // end namespace ifstool
-} // end namespace tools
-} // end namespace driver
-} // end namespace clang
-
-#endif // LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_IFS_H
diff --git a/clang/lib/Driver/Types.cpp b/clang/lib/Driver/Types.cpp
index 6241fac0c85..da01e1acfca 100644
--- a/clang/lib/Driver/Types.cpp
+++ b/clang/lib/Driver/Types.cpp
@@ -269,7 +269,6 @@ types::ID types::lookupTypeForExtension(llvm::StringRef Ext) {
.Case("lib", TY_Object)
.Case("mii", TY_PP_ObjCXX)
.Case("obj", TY_Object)
- .Case("ifs", TY_IFS)
.Case("pch", TY_PCH)
.Case("pcm", TY_ModuleFile)
.Case("c++m", TY_CXXModule)
@@ -320,22 +319,6 @@ void types::getCompilationPhases(const clang::driver::Driver &Driver,
llvm::copy_if(PhaseList, std::back_inserter(P),
[](phases::ID Phase) { return Phase <= phases::Precompile; });
- // Treat Interface Stubs like its own compilation mode.
- else if (DAL.getLastArg(options::OPT_emit_iterface_stubs)) {
- llvm::SmallVector<phases::ID, phases::MaxNumberOfPhases> IfsModePhaseList;
- llvm::SmallVector<phases::ID, phases::MaxNumberOfPhases> &PL = PhaseList;
- phases::ID LastPhase = phases::IfsMerge;
- if (Id != types::TY_IFS) {
- if (DAL.hasArg(options::OPT_c))
- LastPhase = phases::Compile;
- PL = IfsModePhaseList;
- types::getCompilationPhases(types::TY_IFS_CPP, PL);
- }
- llvm::copy_if(PL, std::back_inserter(P), [&](phases::ID Phase) {
- return Phase <= LastPhase;
- });
- }
-
// -{fsyntax-only,-analyze,emit-ast} only run up to the compiler.
else if (DAL.getLastArg(options::OPT_fsyntax_only) ||
DAL.getLastArg(options::OPT_print_supported_cpus) ||
@@ -344,6 +327,7 @@ void types::getCompilationPhases(const clang::driver::Driver &Driver,
DAL.getLastArg(options::OPT_rewrite_objc) ||
DAL.getLastArg(options::OPT_rewrite_legacy_objc) ||
DAL.getLastArg(options::OPT__migrate) ||
+ DAL.getLastArg(options::OPT_emit_iterface_stubs) ||
DAL.getLastArg(options::OPT__analyze) ||
DAL.getLastArg(options::OPT_emit_ast))
llvm::copy_if(PhaseList, std::back_inserter(P),
diff --git a/clang/lib/Frontend/CompilerInvocation.cpp b/clang/lib/Frontend/CompilerInvocation.cpp
index 6fc8afcf3c6..61a2c07890f 100644
--- a/clang/lib/Frontend/CompilerInvocation.cpp
+++ b/clang/lib/Frontend/CompilerInvocation.cpp
@@ -1734,25 +1734,24 @@ static InputKind ParseFrontendArgs(FrontendOptions &Opts, ArgList &Args,
StringRef ArgStr =
Args.hasArg(OPT_iterface_stub_version_EQ)
? Args.getLastArgValue(OPT_iterface_stub_version_EQ)
- : "experimental-ifs-v1";
- if (ArgStr == "experimental-yaml-elf-v1" ||
- ArgStr == "experimental-tapi-elf-v1") {
+ : "";
+ llvm::Optional<frontend::ActionKind> ProgramAction =
+ llvm::StringSwitch<llvm::Optional<frontend::ActionKind>>(ArgStr)
+ .Case("experimental-ifs-v1", frontend::GenerateInterfaceIfsExpV1)
+ .Default(llvm::None);
+ if (!ProgramAction) {
std::string ErrorMessage =
"Invalid interface stub format: " + ArgStr.str() +
- " is deprecated.";
- Diags.Report(diag::err_drv_invalid_value)
- << "Must specify a valid interface stub format type, ie: "
- "-interface-stub-version=experimental-ifs-v1"
- << ErrorMessage;
- } else if (ArgStr != "experimental-ifs-v1") {
- std::string ErrorMessage =
- "Invalid interface stub format: " + ArgStr.str() + ".";
+ ((ArgStr == "experimental-yaml-elf-v1" ||
+ ArgStr == "experimental-tapi-elf-v1")
+ ? " is deprecated."
+ : ".");
Diags.Report(diag::err_drv_invalid_value)
<< "Must specify a valid interface stub format type, ie: "
"-interface-stub-version=experimental-ifs-v1"
<< ErrorMessage;
} else {
- Opts.ProgramAction = frontend::GenerateInterfaceIfsExpV1;
+ Opts.ProgramAction = *ProgramAction;
}
break;
}
OpenPOWER on IntegriCloud