Index: include/clang/Lex/ModuleLoader.h
===================================================================
--- include/clang/Lex/ModuleLoader.h	(revision 167370)
+++ include/clang/Lex/ModuleLoader.h	(working copy)
@@ -59,7 +59,21 @@
                              Module::NameVisibilityKind Visibility,
                              bool IsInclusionDirective) = 0;
 };
-  
+
+
+/// \brief A stub implementation of ModuleLoader.
+///
+/// This implementation does not load any modules, and is mostly suitable for
+/// unit tests.
+class VoidModuleLoader : public ModuleLoader {
+public:
+  virtual Module *loadModule(SourceLocation ImportLoc, ModuleIdPath Path,
+                             Module::NameVisibilityKind Visibility,
+                             bool IsInclusionDirective) {
+    return 0;
+  }
+};
+
 }
 
 #endif
Index: unittests/Basic/SourceManagerTest.cpp
===================================================================
--- unittests/Basic/SourceManagerTest.cpp	(revision 167370)
+++ unittests/Basic/SourceManagerTest.cpp	(working copy)
@@ -52,14 +52,6 @@
   IntrusiveRefCntPtr<TargetInfo> Target;
 };
 
-class VoidModuleLoader : public ModuleLoader {
-  virtual Module *loadModule(SourceLocation ImportLoc, ModuleIdPath Path,
-                             Module::NameVisibilityKind Visibility,
-                             bool IsInclusionDirective) {
-    return 0;
-  }
-};
-
 TEST_F(SourceManagerTest, isBeforeInTranslationUnit) {
   const char *source =
     "#define M(x) [x]\n"
Index: unittests/Lex/LexerTest.cpp
===================================================================
--- unittests/Lex/LexerTest.cpp	(revision 167370)
+++ unittests/Lex/LexerTest.cpp	(working copy)
@@ -52,14 +52,6 @@
   IntrusiveRefCntPtr<TargetInfo> Target;
 };
 
-class VoidModuleLoader : public ModuleLoader {
-  virtual Module *loadModule(SourceLocation ImportLoc, ModuleIdPath Path,
-                             Module::NameVisibilityKind Visibility,
-                             bool IsInclusionDirective) {
-    return 0;
-  }
-};
-
 TEST_F(LexerTest, LexAPI) {
   const char *source =
     "#define M(x) [x]\n"
Index: unittests/Lex/PPCallbacksTest.cpp
===================================================================
--- unittests/Lex/PPCallbacksTest.cpp	(revision 167370)
+++ unittests/Lex/PPCallbacksTest.cpp	(working copy)
@@ -30,15 +30,6 @@
 
 namespace {
 
-// Stub out module loading.
-class VoidModuleLoader : public ModuleLoader {
-  virtual Module *loadModule(SourceLocation ImportLoc, ModuleIdPath Path,
-    Module::NameVisibilityKind Visibility,
-    bool IsInclusionDirective) {
-      return 0;
-  }
-};
-
 // Stub to collect data from InclusionDirective callbacks.
 class InclusionDirectiveCallbacks : public PPCallbacks {
 public:
Index: unittests/Lex/PreprocessingRecordTest.cpp
===================================================================
--- unittests/Lex/PreprocessingRecordTest.cpp	(revision 167370)
+++ unittests/Lex/PreprocessingRecordTest.cpp	(working copy)
@@ -53,14 +53,6 @@
   IntrusiveRefCntPtr<TargetInfo> Target;
 };
 
-class VoidModuleLoader : public ModuleLoader {
-  virtual Module *loadModule(SourceLocation ImportLoc, ModuleIdPath Path,
-                             Module::NameVisibilityKind Visibility,
-                             bool IsInclusionDirective) {
-    return 0;
-  }
-};
-
 TEST_F(PreprocessingRecordTest, PPRecAPI) {
   const char *source =
       "0 1\n"
