153ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar//===--- Action.h - Abstract compilation steps ------------------*- C++ -*-===// 253ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar// 353ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar// The LLVM Compiler Infrastructure 453ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar// 553ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar// This file is distributed under the University of Illinois Open Source 653ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar// License. See LICENSE.TXT for details. 753ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar// 853ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar//===----------------------------------------------------------------------===// 953ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar 1053ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar#ifndef CLANG_DRIVER_ACTION_H_ 1153ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar#define CLANG_DRIVER_ACTION_H_ 1253ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar 132fe63e6adac0b9e5f52bcc3100b545e379417e6eDaniel Dunbar#include "clang/Driver/Types.h" 142fe63e6adac0b9e5f52bcc3100b545e379417e6eDaniel Dunbar#include "clang/Driver/Util.h" 15686775deca8b8685eb90801495880e3abdd844c2Chris Lattner#include "llvm/ADT/SmallVector.h" 16a1ead48a4e9961c7eb22592310c7e9c30cb56794Daniel Dunbar 17b1e25a1bc03292dc538d336573e0be1490223171Reid Klecknernamespace llvm { 18b1e25a1bc03292dc538d336573e0be1490223171Reid Klecknernamespace opt { 19b1e25a1bc03292dc538d336573e0be1490223171Reid Kleckner class Arg; 20b1e25a1bc03292dc538d336573e0be1490223171Reid Kleckner} 21b1e25a1bc03292dc538d336573e0be1490223171Reid Kleckner} 22b1e25a1bc03292dc538d336573e0be1490223171Reid Kleckner 2353ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbarnamespace clang { 2453ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbarnamespace driver { 2553ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar 261eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump/// Action - Represent an abstract compilation step to perform. 2753ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar/// 2853ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar/// An action represents an edge in the compilation graph; typically 2953ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar/// it is a job to transform an input using some tool. 302fe63e6adac0b9e5f52bcc3100b545e379417e6eDaniel Dunbar/// 312fe63e6adac0b9e5f52bcc3100b545e379417e6eDaniel Dunbar/// The current driver is hard wired to expect actions which produce a 322fe63e6adac0b9e5f52bcc3100b545e379417e6eDaniel Dunbar/// single primary output, at least in terms of controlling the 332fe63e6adac0b9e5f52bcc3100b545e379417e6eDaniel Dunbar/// compilation. Actions can produce auxiliary files, but can only 342fe63e6adac0b9e5f52bcc3100b545e379417e6eDaniel Dunbar/// produce a single output to feed into subsequent actions. 3553ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbarclass Action { 3685da0071a4ab7d6f06831d20bad79122d7407df7Daniel Dunbarpublic: 3785da0071a4ab7d6f06831d20bad79122d7407df7Daniel Dunbar typedef ActionList::size_type size_type; 3885da0071a4ab7d6f06831d20bad79122d7407df7Daniel Dunbar typedef ActionList::iterator iterator; 3985da0071a4ab7d6f06831d20bad79122d7407df7Daniel Dunbar typedef ActionList::const_iterator const_iterator; 4085da0071a4ab7d6f06831d20bad79122d7407df7Daniel Dunbar 4185da0071a4ab7d6f06831d20bad79122d7407df7Daniel Dunbar enum ActionClass { 4285da0071a4ab7d6f06831d20bad79122d7407df7Daniel Dunbar InputClass = 0, 4385da0071a4ab7d6f06831d20bad79122d7407df7Daniel Dunbar BindArchClass, 4485da0071a4ab7d6f06831d20bad79122d7407df7Daniel Dunbar PreprocessJobClass, 4585da0071a4ab7d6f06831d20bad79122d7407df7Daniel Dunbar PrecompileJobClass, 4685da0071a4ab7d6f06831d20bad79122d7407df7Daniel Dunbar AnalyzeJobClass, 4730660a898545416f0fea2d717f16f75640001e38Ted Kremenek MigrateJobClass, 4885da0071a4ab7d6f06831d20bad79122d7407df7Daniel Dunbar CompileJobClass, 4985da0071a4ab7d6f06831d20bad79122d7407df7Daniel Dunbar AssembleJobClass, 5085da0071a4ab7d6f06831d20bad79122d7407df7Daniel Dunbar LinkJobClass, 5185da0071a4ab7d6f06831d20bad79122d7407df7Daniel Dunbar LipoJobClass, 526e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar DsymutilJobClass, 53651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines VerifyDebugInfoJobClass, 54651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines VerifyPCHJobClass, 5585da0071a4ab7d6f06831d20bad79122d7407df7Daniel Dunbar 5685da0071a4ab7d6f06831d20bad79122d7407df7Daniel Dunbar JobClassFirst=PreprocessJobClass, 57651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines JobClassLast=VerifyPCHJobClass 5885da0071a4ab7d6f06831d20bad79122d7407df7Daniel Dunbar }; 5985da0071a4ab7d6f06831d20bad79122d7407df7Daniel Dunbar 6085da0071a4ab7d6f06831d20bad79122d7407df7Daniel Dunbar static const char *getClassName(ActionClass AC); 6185da0071a4ab7d6f06831d20bad79122d7407df7Daniel Dunbar 6285da0071a4ab7d6f06831d20bad79122d7407df7Daniel Dunbarprivate: 6385da0071a4ab7d6f06831d20bad79122d7407df7Daniel Dunbar ActionClass Kind; 6485da0071a4ab7d6f06831d20bad79122d7407df7Daniel Dunbar 652fe63e6adac0b9e5f52bcc3100b545e379417e6eDaniel Dunbar /// The output type of this action. 662fe63e6adac0b9e5f52bcc3100b545e379417e6eDaniel Dunbar types::ID Type; 671eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 682fe63e6adac0b9e5f52bcc3100b545e379417e6eDaniel Dunbar ActionList Inputs; 692fe63e6adac0b9e5f52bcc3100b545e379417e6eDaniel Dunbar 7032c1a2ae8b31f32e478c8e504ed81db8c8d25713Daniel Dunbar unsigned OwnsInputs : 1; 7132c1a2ae8b31f32e478c8e504ed81db8c8d25713Daniel Dunbar 722fe63e6adac0b9e5f52bcc3100b545e379417e6eDaniel Dunbarprotected: 7332c1a2ae8b31f32e478c8e504ed81db8c8d25713Daniel Dunbar Action(ActionClass _Kind, types::ID _Type) 7432c1a2ae8b31f32e478c8e504ed81db8c8d25713Daniel Dunbar : Kind(_Kind), Type(_Type), OwnsInputs(true) {} 751eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump Action(ActionClass _Kind, Action *Input, types::ID _Type) 7632c1a2ae8b31f32e478c8e504ed81db8c8d25713Daniel Dunbar : Kind(_Kind), Type(_Type), Inputs(&Input, &Input + 1), OwnsInputs(true) {} 771eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump Action(ActionClass _Kind, const ActionList &_Inputs, types::ID _Type) 7832c1a2ae8b31f32e478c8e504ed81db8c8d25713Daniel Dunbar : Kind(_Kind), Type(_Type), Inputs(_Inputs), OwnsInputs(true) {} 7953ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbarpublic: 802fe63e6adac0b9e5f52bcc3100b545e379417e6eDaniel Dunbar virtual ~Action(); 8185da0071a4ab7d6f06831d20bad79122d7407df7Daniel Dunbar 8231c11ebdaab0acfa10e231730ae95e32c0e39e1fDaniel Dunbar const char *getClassName() const { return Action::getClassName(getKind()); } 8331c11ebdaab0acfa10e231730ae95e32c0e39e1fDaniel Dunbar 8432c1a2ae8b31f32e478c8e504ed81db8c8d25713Daniel Dunbar bool getOwnsInputs() { return OwnsInputs; } 8532c1a2ae8b31f32e478c8e504ed81db8c8d25713Daniel Dunbar void setOwnsInputs(bool Value) { OwnsInputs = Value; } 8632c1a2ae8b31f32e478c8e504ed81db8c8d25713Daniel Dunbar 8785da0071a4ab7d6f06831d20bad79122d7407df7Daniel Dunbar ActionClass getKind() const { return Kind; } 8885da0071a4ab7d6f06831d20bad79122d7407df7Daniel Dunbar types::ID getType() const { return Type; } 8985da0071a4ab7d6f06831d20bad79122d7407df7Daniel Dunbar 90a1ead48a4e9961c7eb22592310c7e9c30cb56794Daniel Dunbar ActionList &getInputs() { return Inputs; } 91a1ead48a4e9961c7eb22592310c7e9c30cb56794Daniel Dunbar const ActionList &getInputs() const { return Inputs; } 92a1ead48a4e9961c7eb22592310c7e9c30cb56794Daniel Dunbar 9385da0071a4ab7d6f06831d20bad79122d7407df7Daniel Dunbar size_type size() const { return Inputs.size(); } 9485da0071a4ab7d6f06831d20bad79122d7407df7Daniel Dunbar 9585da0071a4ab7d6f06831d20bad79122d7407df7Daniel Dunbar iterator begin() { return Inputs.begin(); } 9685da0071a4ab7d6f06831d20bad79122d7407df7Daniel Dunbar iterator end() { return Inputs.end(); } 9785da0071a4ab7d6f06831d20bad79122d7407df7Daniel Dunbar const_iterator begin() const { return Inputs.begin(); } 9885da0071a4ab7d6f06831d20bad79122d7407df7Daniel Dunbar const_iterator end() const { return Inputs.end(); } 992fe63e6adac0b9e5f52bcc3100b545e379417e6eDaniel Dunbar}; 1002fe63e6adac0b9e5f52bcc3100b545e379417e6eDaniel Dunbar 1012fe63e6adac0b9e5f52bcc3100b545e379417e6eDaniel Dunbarclass InputAction : public Action { 10299ba9e3bd70671f3441fb974895f226a83ce0e66David Blaikie virtual void anchor(); 103dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner const llvm::opt::Arg &Input; 104dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner 1057ab25d5c03db34ca5cbca466a4caa224c4879ec6Daniel Dunbarpublic: 106dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner InputAction(const llvm::opt::Arg &_Input, types::ID _Type); 10785da0071a4ab7d6f06831d20bad79122d7407df7Daniel Dunbar 108dd0b3c4c72464af92e2c27dd5a67e29f91ba7b28Reid Kleckner const llvm::opt::Arg &getInputArg() const { return Input; } 10985da0071a4ab7d6f06831d20bad79122d7407df7Daniel Dunbar 1101eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump static bool classof(const Action *A) { 1111eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump return A->getKind() == InputClass; 11285da0071a4ab7d6f06831d20bad79122d7407df7Daniel Dunbar } 1132fe63e6adac0b9e5f52bcc3100b545e379417e6eDaniel Dunbar}; 1142fe63e6adac0b9e5f52bcc3100b545e379417e6eDaniel Dunbar 1152fe63e6adac0b9e5f52bcc3100b545e379417e6eDaniel Dunbarclass BindArchAction : public Action { 11699ba9e3bd70671f3441fb974895f226a83ce0e66David Blaikie virtual void anchor(); 11710ffa9a4887d9376e3eb3598e40523d1b58773c9Daniel Dunbar /// The architecture to bind, or 0 if the default architecture 11810ffa9a4887d9376e3eb3598e40523d1b58773c9Daniel Dunbar /// should be bound. 1192fe63e6adac0b9e5f52bcc3100b545e379417e6eDaniel Dunbar const char *ArchName; 1202fe63e6adac0b9e5f52bcc3100b545e379417e6eDaniel Dunbar 1212fe63e6adac0b9e5f52bcc3100b545e379417e6eDaniel Dunbarpublic: 122f40ed17472a39097cc5039ed437445289487c9bfDaniel Dunbar BindArchAction(Action *Input, const char *_ArchName); 12385da0071a4ab7d6f06831d20bad79122d7407df7Daniel Dunbar 12485da0071a4ab7d6f06831d20bad79122d7407df7Daniel Dunbar const char *getArchName() const { return ArchName; } 12585da0071a4ab7d6f06831d20bad79122d7407df7Daniel Dunbar 1261eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump static bool classof(const Action *A) { 1271eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump return A->getKind() == BindArchClass; 12885da0071a4ab7d6f06831d20bad79122d7407df7Daniel Dunbar } 1292fe63e6adac0b9e5f52bcc3100b545e379417e6eDaniel Dunbar}; 1302fe63e6adac0b9e5f52bcc3100b545e379417e6eDaniel Dunbar 1312fe63e6adac0b9e5f52bcc3100b545e379417e6eDaniel Dunbarclass JobAction : public Action { 13299ba9e3bd70671f3441fb974895f226a83ce0e66David Blaikie virtual void anchor(); 1332fe63e6adac0b9e5f52bcc3100b545e379417e6eDaniel Dunbarprotected: 134f40ed17472a39097cc5039ed437445289487c9bfDaniel Dunbar JobAction(ActionClass Kind, Action *Input, types::ID Type); 135f40ed17472a39097cc5039ed437445289487c9bfDaniel Dunbar JobAction(ActionClass Kind, const ActionList &Inputs, types::ID Type); 13685da0071a4ab7d6f06831d20bad79122d7407df7Daniel Dunbar 13785da0071a4ab7d6f06831d20bad79122d7407df7Daniel Dunbarpublic: 1381eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump static bool classof(const Action *A) { 13985da0071a4ab7d6f06831d20bad79122d7407df7Daniel Dunbar return (A->getKind() >= JobClassFirst && 1401eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump A->getKind() <= JobClassLast); 14185da0071a4ab7d6f06831d20bad79122d7407df7Daniel Dunbar } 1427ab25d5c03db34ca5cbca466a4caa224c4879ec6Daniel Dunbar}; 1437ab25d5c03db34ca5cbca466a4caa224c4879ec6Daniel Dunbar 1447ab25d5c03db34ca5cbca466a4caa224c4879ec6Daniel Dunbarclass PreprocessJobAction : public JobAction { 145651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines void anchor() override; 1467ab25d5c03db34ca5cbca466a4caa224c4879ec6Daniel Dunbarpublic: 147f40ed17472a39097cc5039ed437445289487c9bfDaniel Dunbar PreprocessJobAction(Action *Input, types::ID OutputType); 14885da0071a4ab7d6f06831d20bad79122d7407df7Daniel Dunbar 1491eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump static bool classof(const Action *A) { 15085da0071a4ab7d6f06831d20bad79122d7407df7Daniel Dunbar return A->getKind() == PreprocessJobClass; 1517ab25d5c03db34ca5cbca466a4caa224c4879ec6Daniel Dunbar } 1527ab25d5c03db34ca5cbca466a4caa224c4879ec6Daniel Dunbar}; 1537ab25d5c03db34ca5cbca466a4caa224c4879ec6Daniel Dunbar 1547ab25d5c03db34ca5cbca466a4caa224c4879ec6Daniel Dunbarclass PrecompileJobAction : public JobAction { 155651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines void anchor() override; 1567ab25d5c03db34ca5cbca466a4caa224c4879ec6Daniel Dunbarpublic: 157f40ed17472a39097cc5039ed437445289487c9bfDaniel Dunbar PrecompileJobAction(Action *Input, types::ID OutputType); 15885da0071a4ab7d6f06831d20bad79122d7407df7Daniel Dunbar 1591eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump static bool classof(const Action *A) { 16085da0071a4ab7d6f06831d20bad79122d7407df7Daniel Dunbar return A->getKind() == PrecompileJobClass; 1617ab25d5c03db34ca5cbca466a4caa224c4879ec6Daniel Dunbar } 1627ab25d5c03db34ca5cbca466a4caa224c4879ec6Daniel Dunbar}; 1637ab25d5c03db34ca5cbca466a4caa224c4879ec6Daniel Dunbar 1647ab25d5c03db34ca5cbca466a4caa224c4879ec6Daniel Dunbarclass AnalyzeJobAction : public JobAction { 165651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines void anchor() override; 1667ab25d5c03db34ca5cbca466a4caa224c4879ec6Daniel Dunbarpublic: 167f40ed17472a39097cc5039ed437445289487c9bfDaniel Dunbar AnalyzeJobAction(Action *Input, types::ID OutputType); 16885da0071a4ab7d6f06831d20bad79122d7407df7Daniel Dunbar 1691eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump static bool classof(const Action *A) { 17085da0071a4ab7d6f06831d20bad79122d7407df7Daniel Dunbar return A->getKind() == AnalyzeJobClass; 1717ab25d5c03db34ca5cbca466a4caa224c4879ec6Daniel Dunbar } 1727ab25d5c03db34ca5cbca466a4caa224c4879ec6Daniel Dunbar}; 1737ab25d5c03db34ca5cbca466a4caa224c4879ec6Daniel Dunbar 17430660a898545416f0fea2d717f16f75640001e38Ted Kremenekclass MigrateJobAction : public JobAction { 175651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines void anchor() override; 17630660a898545416f0fea2d717f16f75640001e38Ted Kremenekpublic: 17730660a898545416f0fea2d717f16f75640001e38Ted Kremenek MigrateJobAction(Action *Input, types::ID OutputType); 17830660a898545416f0fea2d717f16f75640001e38Ted Kremenek 17930660a898545416f0fea2d717f16f75640001e38Ted Kremenek static bool classof(const Action *A) { 18030660a898545416f0fea2d717f16f75640001e38Ted Kremenek return A->getKind() == MigrateJobClass; 18130660a898545416f0fea2d717f16f75640001e38Ted Kremenek } 18230660a898545416f0fea2d717f16f75640001e38Ted Kremenek}; 18330660a898545416f0fea2d717f16f75640001e38Ted Kremenek 1847ab25d5c03db34ca5cbca466a4caa224c4879ec6Daniel Dunbarclass CompileJobAction : public JobAction { 185651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines void anchor() override; 1867ab25d5c03db34ca5cbca466a4caa224c4879ec6Daniel Dunbarpublic: 187f40ed17472a39097cc5039ed437445289487c9bfDaniel Dunbar CompileJobAction(Action *Input, types::ID OutputType); 18885da0071a4ab7d6f06831d20bad79122d7407df7Daniel Dunbar 1891eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump static bool classof(const Action *A) { 19085da0071a4ab7d6f06831d20bad79122d7407df7Daniel Dunbar return A->getKind() == CompileJobClass; 19185da0071a4ab7d6f06831d20bad79122d7407df7Daniel Dunbar } 1927ab25d5c03db34ca5cbca466a4caa224c4879ec6Daniel Dunbar}; 1937ab25d5c03db34ca5cbca466a4caa224c4879ec6Daniel Dunbar 1947ab25d5c03db34ca5cbca466a4caa224c4879ec6Daniel Dunbarclass AssembleJobAction : public JobAction { 195651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines void anchor() override; 1967ab25d5c03db34ca5cbca466a4caa224c4879ec6Daniel Dunbarpublic: 197f40ed17472a39097cc5039ed437445289487c9bfDaniel Dunbar AssembleJobAction(Action *Input, types::ID OutputType); 19885da0071a4ab7d6f06831d20bad79122d7407df7Daniel Dunbar 1991eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump static bool classof(const Action *A) { 20085da0071a4ab7d6f06831d20bad79122d7407df7Daniel Dunbar return A->getKind() == AssembleJobClass; 2017ab25d5c03db34ca5cbca466a4caa224c4879ec6Daniel Dunbar } 2027ab25d5c03db34ca5cbca466a4caa224c4879ec6Daniel Dunbar}; 2037ab25d5c03db34ca5cbca466a4caa224c4879ec6Daniel Dunbar 2047ab25d5c03db34ca5cbca466a4caa224c4879ec6Daniel Dunbarclass LinkJobAction : public JobAction { 205651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines void anchor() override; 2067ab25d5c03db34ca5cbca466a4caa224c4879ec6Daniel Dunbarpublic: 207f40ed17472a39097cc5039ed437445289487c9bfDaniel Dunbar LinkJobAction(ActionList &Inputs, types::ID Type); 20885da0071a4ab7d6f06831d20bad79122d7407df7Daniel Dunbar 2091eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump static bool classof(const Action *A) { 21085da0071a4ab7d6f06831d20bad79122d7407df7Daniel Dunbar return A->getKind() == LinkJobClass; 21185da0071a4ab7d6f06831d20bad79122d7407df7Daniel Dunbar } 2122fe63e6adac0b9e5f52bcc3100b545e379417e6eDaniel Dunbar}; 2132fe63e6adac0b9e5f52bcc3100b545e379417e6eDaniel Dunbar 2142fe63e6adac0b9e5f52bcc3100b545e379417e6eDaniel Dunbarclass LipoJobAction : public JobAction { 215651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines void anchor() override; 2162fe63e6adac0b9e5f52bcc3100b545e379417e6eDaniel Dunbarpublic: 217f40ed17472a39097cc5039ed437445289487c9bfDaniel Dunbar LipoJobAction(ActionList &Inputs, types::ID Type); 21885da0071a4ab7d6f06831d20bad79122d7407df7Daniel Dunbar 2191eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump static bool classof(const Action *A) { 22085da0071a4ab7d6f06831d20bad79122d7407df7Daniel Dunbar return A->getKind() == LipoJobClass; 22185da0071a4ab7d6f06831d20bad79122d7407df7Daniel Dunbar } 22253ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar}; 22353ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar 2246e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbarclass DsymutilJobAction : public JobAction { 225651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines void anchor() override; 2266e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbarpublic: 2276e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar DsymutilJobAction(ActionList &Inputs, types::ID Type); 2286e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar 2296e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar static bool classof(const Action *A) { 2306e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar return A->getKind() == DsymutilJobClass; 2316e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar } 2326e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar}; 2336e0f25483b1a801cd1155ea89c2b725feab16332Daniel Dunbar 234f857186fd1995b34185d063a29b11ad4f948519fEric Christopherclass VerifyJobAction : public JobAction { 235651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines void anchor() override; 236651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinespublic: 237651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines VerifyJobAction(ActionClass Kind, Action *Input, types::ID Type); 238651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines VerifyJobAction(ActionClass Kind, ActionList &Inputs, types::ID Type); 239651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines static bool classof(const Action *A) { 240651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines return A->getKind() == VerifyDebugInfoJobClass || 241651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines A->getKind() == VerifyPCHJobClass; 242651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines } 243651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}; 244651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 245651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesclass VerifyDebugInfoJobAction : public VerifyJobAction { 246651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines void anchor() override; 247651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinespublic: 248651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines VerifyDebugInfoJobAction(Action *Input, types::ID Type); 249651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines static bool classof(const Action *A) { 250651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines return A->getKind() == VerifyDebugInfoJobClass; 251651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines } 252651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}; 253651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 254651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesclass VerifyPCHJobAction : public VerifyJobAction { 255651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines void anchor() override; 256f857186fd1995b34185d063a29b11ad4f948519fEric Christopherpublic: 257651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines VerifyPCHJobAction(Action *Input, types::ID Type); 258f857186fd1995b34185d063a29b11ad4f948519fEric Christopher static bool classof(const Action *A) { 259651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines return A->getKind() == VerifyPCHJobClass; 260f857186fd1995b34185d063a29b11ad4f948519fEric Christopher } 261f857186fd1995b34185d063a29b11ad4f948519fEric Christopher}; 262f857186fd1995b34185d063a29b11ad4f948519fEric Christopher 26353ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar} // end namespace driver 26453ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar} // end namespace clang 26553ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar 26653ec55215075c8f4ddd47ca6ed7d382f16beb670Daniel Dunbar#endif 267