Driver: Provide food and shelter for Action vtables.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@66978 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/include/clang/Driver/Action.h b/include/clang/Driver/Action.h
index 9cd17f7..a9da267 100644
--- a/include/clang/Driver/Action.h
+++ b/include/clang/Driver/Action.h
@@ -84,8 +84,7 @@
 class InputAction : public Action {
   const Arg &Input;
 public:
-  InputAction(const Arg &_Input, types::ID _Type) : Action(InputClass, _Type),
-                                                    Input(_Input) {}
+  InputAction(const Arg &_Input, types::ID _Type);
 
   const Arg &getInputArg() const { return Input; }
 
@@ -99,9 +98,7 @@
   const char *ArchName;
 
 public:
-  BindArchAction(Action *Input, const char *_ArchName) 
-    : Action(BindArchClass, Input, Input->getType()), ArchName(_ArchName) {
-  }
+  BindArchAction(Action *Input, const char *_ArchName);
 
   const char *getArchName() const { return ArchName; }
 
@@ -113,10 +110,8 @@
 
 class JobAction : public Action {
 protected:
-  JobAction(ActionClass Kind, Action *Input, types::ID Type) 
-    : Action(Kind, Input, Type) {}
-  JobAction(ActionClass Kind, const ActionList &Inputs, types::ID Type) 
-    : Action(Kind, Inputs, Type) {}
+  JobAction(ActionClass Kind, Action *Input, types::ID Type);
+  JobAction(ActionClass Kind, const ActionList &Inputs, types::ID Type);
 
 public:
   static bool classof(const Action *A) { 
@@ -128,9 +123,7 @@
 
 class PreprocessJobAction : public JobAction {
 public:
-  PreprocessJobAction(Action *Input, types::ID OutputType)
-    : JobAction(PreprocessJobClass, Input, OutputType) {
-  }
+  PreprocessJobAction(Action *Input, types::ID OutputType);
 
   static bool classof(const Action *A) { 
     return A->getKind() == PreprocessJobClass;
@@ -140,9 +133,7 @@
 
 class PrecompileJobAction : public JobAction {
 public:
-  PrecompileJobAction(Action *Input, types::ID OutputType)
-    : JobAction(PrecompileJobClass, Input, OutputType) {
-  }
+  PrecompileJobAction(Action *Input, types::ID OutputType);
 
   static bool classof(const Action *A) { 
     return A->getKind() == PrecompileJobClass;
@@ -152,9 +143,7 @@
 
 class AnalyzeJobAction : public JobAction {
 public:
-  AnalyzeJobAction(Action *Input, types::ID OutputType)
-    : JobAction(AnalyzeJobClass, Input, OutputType) {
-  }
+  AnalyzeJobAction(Action *Input, types::ID OutputType);
 
   static bool classof(const Action *A) { 
     return A->getKind() == AnalyzeJobClass;
@@ -164,9 +153,7 @@
 
 class CompileJobAction : public JobAction {
 public:
-  CompileJobAction(Action *Input, types::ID OutputType)
-    : JobAction(CompileJobClass, Input, OutputType) {
-  }
+  CompileJobAction(Action *Input, types::ID OutputType);
 
   static bool classof(const Action *A) { 
     return A->getKind() == CompileJobClass;
@@ -176,9 +163,7 @@
 
 class AssembleJobAction : public JobAction {
 public:
-  AssembleJobAction(Action *Input, types::ID OutputType)
-    : JobAction(AssembleJobClass, Input, OutputType) {
-  }
+  AssembleJobAction(Action *Input, types::ID OutputType);
 
   static bool classof(const Action *A) { 
     return A->getKind() == AssembleJobClass;
@@ -188,8 +173,7 @@
 
 class LinkJobAction : public JobAction {
 public:
-  LinkJobAction(ActionList &Inputs, types::ID Type) 
-    : JobAction(LinkJobClass, Inputs, Type) {}
+  LinkJobAction(ActionList &Inputs, types::ID Type);
 
   static bool classof(const Action *A) { 
     return A->getKind() == LinkJobClass;
@@ -199,8 +183,7 @@
 
 class LipoJobAction : public JobAction {
 public:
-  LipoJobAction(ActionList &Inputs, types::ID Type) 
-    : JobAction(LipoJobClass, Inputs, Type) {}
+  LipoJobAction(ActionList &Inputs, types::ID Type);
 
   static bool classof(const Action *A) { 
     return A->getKind() == LipoJobClass;
diff --git a/lib/Driver/Action.cpp b/lib/Driver/Action.cpp
index 0ffc8f0..d4cdb13 100644
--- a/lib/Driver/Action.cpp
+++ b/lib/Driver/Action.cpp
@@ -30,3 +30,47 @@
   assert(0 && "invalid class");
   return 0;
 }
+
+InputAction::InputAction(const Arg &_Input, types::ID _Type) 
+  : Action(InputClass, _Type), Input(_Input) {
+}
+
+BindArchAction::BindArchAction(Action *Input, const char *_ArchName) 
+  : Action(BindArchClass, Input, Input->getType()), ArchName(_ArchName) {
+}
+
+JobAction::JobAction(ActionClass Kind, Action *Input, types::ID Type)
+  : Action(Kind, Input, Type) {
+}
+
+JobAction::JobAction(ActionClass Kind, const ActionList &Inputs, types::ID Type) 
+  : Action(Kind, Inputs, Type) {
+}
+
+PreprocessJobAction::PreprocessJobAction(Action *Input, types::ID OutputType)
+  : JobAction(PreprocessJobClass, Input, OutputType) {
+}
+
+PrecompileJobAction::PrecompileJobAction(Action *Input, types::ID OutputType)
+  : JobAction(PrecompileJobClass, Input, OutputType) {
+}
+
+AnalyzeJobAction::AnalyzeJobAction(Action *Input, types::ID OutputType)
+  : JobAction(AnalyzeJobClass, Input, OutputType) {
+}
+
+CompileJobAction::CompileJobAction(Action *Input, types::ID OutputType)
+  : JobAction(CompileJobClass, Input, OutputType) {
+}
+
+AssembleJobAction::AssembleJobAction(Action *Input, types::ID OutputType)
+  : JobAction(AssembleJobClass, Input, OutputType) {
+}
+
+LinkJobAction::LinkJobAction(ActionList &Inputs, types::ID Type) 
+  : JobAction(LinkJobClass, Inputs, Type) {
+}
+
+LipoJobAction(ActionList &Inputs, types::ID Type)     
+  : JobAction(LipoJobClass, Inputs, Type) {
+}