Give a default implementation for ASTDeserializationListener's methods, no functionality change.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@116506 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/include/clang/Serialization/ASTDeserializationListener.h b/include/clang/Serialization/ASTDeserializationListener.h
index 3cccd05..00860cd 100644
--- a/include/clang/Serialization/ASTDeserializationListener.h
+++ b/include/clang/Serialization/ASTDeserializationListener.h
@@ -26,26 +26,26 @@
   
 class ASTDeserializationListener {
 protected:
-  virtual ~ASTDeserializationListener() {}
+  virtual ~ASTDeserializationListener();
 
 public:
   /// \brief Tell the listener about the reader.
-  virtual void SetReader(ASTReader *Reader) = 0;
+  virtual void SetReader(ASTReader *Reader) { }
 
   /// \brief An identifier was deserialized from the AST file.
   virtual void IdentifierRead(serialization::IdentID ID,
-                              IdentifierInfo *II) = 0;
+                              IdentifierInfo *II) { }
   /// \brief A type was deserialized from the AST file. The ID here has the
   ///        qualifier bits already removed, and T is guaranteed to be locally
   ///        unqualified.
-  virtual void TypeRead(serialization::TypeIdx Idx, QualType T) = 0;
+  virtual void TypeRead(serialization::TypeIdx Idx, QualType T) { }
   /// \brief A decl was deserialized from the AST file.
-  virtual void DeclRead(serialization::DeclID ID, const Decl *D) = 0;
+  virtual void DeclRead(serialization::DeclID ID, const Decl *D) { }
   /// \brief A selector was read from the AST file.
-  virtual void SelectorRead(serialization::SelectorID iD, Selector Sel) = 0;
+  virtual void SelectorRead(serialization::SelectorID iD, Selector Sel) { }
   /// \brief A macro definition was read from the AST file.
   virtual void MacroDefinitionRead(serialization::MacroID, 
-                                   MacroDefinition *MD) = 0;
+                                   MacroDefinition *MD) { }
 };
 
 }
diff --git a/lib/Frontend/FrontendAction.cpp b/lib/Frontend/FrontendAction.cpp
index 819aa52..9718891 100644
--- a/lib/Frontend/FrontendAction.cpp
+++ b/lib/Frontend/FrontendAction.cpp
@@ -42,13 +42,6 @@
     if (Previous)
       Previous->DeclRead(ID, D);
   }
-
-  virtual void SetReader(ASTReader *Reader) {}
-  virtual void IdentifierRead(serialization::IdentID ID, IdentifierInfo *II) {}
-  virtual void TypeRead(serialization::TypeIdx Idx, QualType T) {}
-  virtual void SelectorRead(serialization::SelectorID iD, Selector Sel) {}
-  virtual void MacroDefinitionRead(serialization::MacroID,
-                                   MacroDefinition *MD) {}
 };
 
   /// \brief Checks deserialized declarations and emits error if a name
@@ -77,13 +70,6 @@
       if (Previous)
         Previous->DeclRead(ID, D);
     }
-
-    virtual void SetReader(ASTReader *Reader) {}
-    virtual void IdentifierRead(serialization::IdentID ID, IdentifierInfo *II) {}
-    virtual void TypeRead(serialization::TypeIdx Idx, QualType T) {}
-    virtual void SelectorRead(serialization::SelectorID iD, Selector Sel) {}
-    virtual void MacroDefinitionRead(serialization::MacroID,
-                                     MacroDefinition *MD) {}
 };
 
 } // end anonymous namespace
diff --git a/lib/Serialization/ASTCommon.cpp b/lib/Serialization/ASTCommon.cpp
index 77c1aff..d5b7371 100644
--- a/lib/Serialization/ASTCommon.cpp
+++ b/lib/Serialization/ASTCommon.cpp
@@ -12,11 +12,15 @@
 //===----------------------------------------------------------------------===//
 
 #include "ASTCommon.h"
+#include "clang/Serialization/ASTDeserializationListener.h"
 #include "clang/Basic/IdentifierTable.h"
 #include "llvm/ADT/StringExtras.h"
 
 using namespace clang;
 
+// Give ASTDeserializationListener's VTable a home.
+ASTDeserializationListener::~ASTDeserializationListener() { }
+
 serialization::TypeIdx
 serialization::TypeIdxFromBuiltin(const BuiltinType *BT) {
   unsigned ID = 0;