diff options
Diffstat (limited to 'clang/lib')
-rw-r--r-- | clang/lib/Driver/Action.cpp | 30 | ||||
-rw-r--r-- | clang/lib/Driver/Driver.cpp | 11 | ||||
-rw-r--r-- | clang/lib/Driver/ToolChain.cpp | 3 | ||||
-rw-r--r-- | clang/lib/Driver/ToolChains.cpp | 2 | ||||
-rw-r--r-- | clang/lib/Driver/Tools.cpp | 7 |
5 files changed, 38 insertions, 15 deletions
diff --git a/clang/lib/Driver/Action.cpp b/clang/lib/Driver/Action.cpp index ddd2d599da0..86a48fd8b7f 100644 --- a/clang/lib/Driver/Action.cpp +++ b/clang/lib/Driver/Action.cpp @@ -33,7 +33,8 @@ const char *Action::getClassName(ActionClass AC) { case LinkJobClass: return "linker"; case LipoJobClass: return "lipo"; case DsymutilJobClass: return "dsymutil"; - case VerifyJobClass: return "verify"; + case VerifyDebugInfoJobClass: return "verify-debug-info"; + case VerifyPCHJobClass: return "verify-pch"; } llvm_unreachable("invalid class"); @@ -117,6 +118,29 @@ DsymutilJobAction::DsymutilJobAction(ActionList &Inputs, types::ID Type) void VerifyJobAction::anchor() {} -VerifyJobAction::VerifyJobAction(ActionList &Inputs, types::ID Type) - : JobAction(VerifyJobClass, Inputs, Type) { +VerifyJobAction::VerifyJobAction(ActionClass Kind, Action *Input, + types::ID Type) + : JobAction(Kind, Input, Type) { + assert((Kind == VerifyDebugInfoJobClass || Kind == VerifyPCHJobClass) && + "ActionClass is not a valid VerifyJobAction"); +} + +VerifyJobAction::VerifyJobAction(ActionClass Kind, ActionList &Inputs, + types::ID Type) + : JobAction(Kind, Inputs, Type) { + assert((Kind == VerifyDebugInfoJobClass || Kind == VerifyPCHJobClass) && + "ActionClass is not a valid VerifyJobAction"); +} + +void VerifyDebugInfoJobAction::anchor() {} + +VerifyDebugInfoJobAction::VerifyDebugInfoJobAction(Action *Input, + types::ID Type) + : VerifyJobAction(VerifyDebugInfoJobClass, Input, Type) { +} + +void VerifyPCHJobAction::anchor() {} + +VerifyPCHJobAction::VerifyPCHJobAction(Action *Input, types::ID Type) + : VerifyJobAction(VerifyPCHJobClass, Input, Type) { } diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp index 270c3a701b0..898bdc94e29 100644 --- a/clang/lib/Driver/Driver.cpp +++ b/clang/lib/Driver/Driver.cpp @@ -936,13 +936,12 @@ void Driver::BuildUniversalActions(const ToolChain &TC, Actions.push_back(new DsymutilJobAction(Inputs, types::TY_dSYM)); } - // Verify the output (debug information only for now). + // Verify the debug info output. if (Args.hasArg(options::OPT_verify_debug_info)) { - ActionList VerifyInputs; - VerifyInputs.push_back(Actions.back()); + Action *VerifyInput = Actions.back(); Actions.pop_back(); - Actions.push_back(new VerifyJobAction(VerifyInputs, - types::TY_Nothing)); + Actions.push_back(new VerifyDebugInfoJobAction(VerifyInput, + types::TY_Nothing)); } } } @@ -1318,7 +1317,7 @@ Action *Driver::ConstructPhaseAction(const ArgList &Args, phases::ID Phase, } else if (Args.hasArg(options::OPT_module_file_info)) { return new CompileJobAction(Input, types::TY_ModuleFile); } else if (Args.hasArg(options::OPT_verify_pch)) { - return new CompileJobAction(Input, types::TY_Nothing); + return new VerifyPCHJobAction(Input, types::TY_Nothing); } else if (IsUsingLTO(Args)) { types::ID Output = Args.hasArg(options::OPT_S) ? types::TY_LTO_IR : types::TY_LTO_BC; diff --git a/clang/lib/Driver/ToolChain.cpp b/clang/lib/Driver/ToolChain.cpp index 9b09b4ecd66..9c43706d4f9 100644 --- a/clang/lib/Driver/ToolChain.cpp +++ b/clang/lib/Driver/ToolChain.cpp @@ -114,7 +114,7 @@ Tool *ToolChain::getTool(Action::ActionClass AC) const { case Action::BindArchClass: case Action::LipoJobClass: case Action::DsymutilJobClass: - case Action::VerifyJobClass: + case Action::VerifyDebugInfoJobClass: llvm_unreachable("Invalid tool kind."); case Action::CompileJobClass: @@ -122,6 +122,7 @@ Tool *ToolChain::getTool(Action::ActionClass AC) const { case Action::PreprocessJobClass: case Action::AnalyzeJobClass: case Action::MigrateJobClass: + case Action::VerifyPCHJobClass: return getClang(); } diff --git a/clang/lib/Driver/ToolChains.cpp b/clang/lib/Driver/ToolChains.cpp index 9c4213bc18d..d328b1671dd 100644 --- a/clang/lib/Driver/ToolChains.cpp +++ b/clang/lib/Driver/ToolChains.cpp @@ -212,7 +212,7 @@ Tool *MachO::getTool(Action::ActionClass AC) const { if (!Dsymutil) Dsymutil.reset(new tools::darwin::Dsymutil(*this)); return Dsymutil.get(); - case Action::VerifyJobClass: + case Action::VerifyDebugInfoJobClass: if (!VerifyDebug) VerifyDebug.reset(new tools::darwin::VerifyDebug(*this)); return VerifyDebug.get(); diff --git a/clang/lib/Driver/Tools.cpp b/clang/lib/Driver/Tools.cpp index af8696c42a7..6885f2410f2 100644 --- a/clang/lib/Driver/Tools.cpp +++ b/clang/lib/Driver/Tools.cpp @@ -2066,14 +2066,13 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA, CmdArgs.push_back("-emit-pch"); else CmdArgs.push_back("-emit-pth"); + } else if (isa<VerifyPCHJobAction>(JA)) { + CmdArgs.push_back("-verify-pch"); } else { assert(isa<CompileJobAction>(JA) && "Invalid action for clang tool."); if (JA.getType() == types::TY_Nothing) { - if (Args.hasArg(options::OPT_verify_pch)) - CmdArgs.push_back("-verify-pch"); - else - CmdArgs.push_back("-fsyntax-only"); + CmdArgs.push_back("-fsyntax-only"); } else if (JA.getType() == types::TY_LLVM_IR || JA.getType() == types::TY_LTO_IR) { CmdArgs.push_back("-emit-llvm"); |