[analyzer] Refactoring: Move checkers into lib/GR/Checkers and their own library, libclangGRCheckers

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@122422 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/examples/PrintFunctionNames/CMakeLists.txt b/examples/PrintFunctionNames/CMakeLists.txt
index ae54442..f16dd2b 100644
--- a/examples/PrintFunctionNames/CMakeLists.txt
+++ b/examples/PrintFunctionNames/CMakeLists.txt
@@ -10,6 +10,7 @@
   clangCodeGen
   clangParse
   clangSema
+  clangGRCheckers
   clangGRCore
   clangAnalysis
   clangIndex
diff --git a/examples/clang-interpreter/CMakeLists.txt b/examples/clang-interpreter/CMakeLists.txt
index 65786db..8bdea4c 100644
--- a/examples/clang-interpreter/CMakeLists.txt
+++ b/examples/clang-interpreter/CMakeLists.txt
@@ -6,6 +6,7 @@
     clangDriver
     clangCodeGen
     clangSema
+    clangGRCheckers
     clangGRCore
     clangIndex
     clangAnalysis
diff --git a/examples/clang-interpreter/Makefile b/examples/clang-interpreter/Makefile
index 9b76624..6a690b0 100644
--- a/examples/clang-interpreter/Makefile
+++ b/examples/clang-interpreter/Makefile
@@ -18,7 +18,7 @@
 LINK_COMPONENTS := jit interpreter nativecodegen bitreader bitwriter ipo \
 	selectiondag asmparser
 USEDLIBS = clangFrontend.a clangSerialization.a clangDriver.a clangCodeGen.a \
-           clangSema.a clangGRCore.a clangAnalysis.a clangRewrite.a \
+           clangSema.a clangGRCheckers.a clangGRCore.a clangAnalysis.a clangRewrite.a \
            clangAST.a clangParse.a clangLex.a clangBasic.a
 
 include $(CLANG_LEVEL)/Makefile
diff --git a/examples/wpa/CMakeLists.txt b/examples/wpa/CMakeLists.txt
index 9dbc044..94719b2 100644
--- a/examples/wpa/CMakeLists.txt
+++ b/examples/wpa/CMakeLists.txt
@@ -7,6 +7,7 @@
   clangSema
   clangAnalysis
   clangSerialization
+  clangGRCheckers
   clangGRCore
   clangRewrite
   clangAST
diff --git a/examples/wpa/Makefile b/examples/wpa/Makefile
index 9e875f3..f04fcb7 100644
--- a/examples/wpa/Makefile
+++ b/examples/wpa/Makefile
@@ -16,7 +16,7 @@
 TOOL_NO_EXPORTS = 1
 
 LINK_COMPONENTS := asmparser bitreader mc core
-USEDLIBS = clangGRCore.a clangIndex.a clangFrontend.a clangDriver.a \
+USEDLIBS = clangGRCheckers.a clangGRCore.a clangIndex.a clangFrontend.a clangDriver.a \
 	   clangSema.a clangAnalysis.a clangSerialization.a \
            clangAST.a clangParse.a clangLex.a clangBasic.a
 
diff --git a/lib/FrontendTool/CMakeLists.txt b/lib/FrontendTool/CMakeLists.txt
index cfd5fbd..f4ace98 100644
--- a/lib/FrontendTool/CMakeLists.txt
+++ b/lib/FrontendTool/CMakeLists.txt
@@ -1,7 +1,7 @@
 set(LLVM_NO_RTTI 1)
 
 set(LLVM_USED_LIBS clangDriver clangFrontend clangRewrite clangCodeGen 
-    clangGRCore)
+    clangGRCheckers clangGRCore)
 
 add_clang_library(clangFrontendTool
   ExecuteCompilerInvocation.cpp
diff --git a/lib/GR/AnalysisConsumer.cpp b/lib/GR/AnalysisConsumer.cpp
index 839ce04..850a440 100644
--- a/lib/GR/AnalysisConsumer.cpp
+++ b/lib/GR/AnalysisConsumer.cpp
@@ -28,8 +28,11 @@
 #include "clang/GR/PathSensitive/GRExprEngine.h"
 #include "clang/GR/PathSensitive/GRTransferFuncs.h"
 #include "clang/GR/PathDiagnosticClients.h"
-#include "GRExprEngineExperimentalChecks.h"
-#include "GRExprEngineInternalChecks.h"
+
+// FIXME: Restructure checker registration.
+#include "Checkers/GRExprEngineExperimentalChecks.h"
+#include "Checkers/GRExprEngineInternalChecks.h"
+
 #include "clang/Basic/FileManager.h"
 #include "clang/Basic/SourceManager.h"
 #include "clang/Frontend/AnalyzerOptions.h"
diff --git a/lib/GR/AnalyzerStatsChecker.cpp b/lib/GR/AnalyzerStatsChecker.cpp
index 2a229cc..2aa1515 100644
--- a/lib/GR/AnalyzerStatsChecker.cpp
+++ b/lib/GR/AnalyzerStatsChecker.cpp
@@ -12,7 +12,10 @@
 #include "clang/GR/PathSensitive/CheckerVisitor.h"
 #include "clang/GR/PathSensitive/ExplodedGraph.h"
 #include "clang/GR/BugReporter/BugReporter.h"
-#include "GRExprEngineExperimentalChecks.h"
+
+// FIXME: Restructure checker registration.
+#include "Checkers/GRExprEngineExperimentalChecks.h"
+
 #include "clang/Basic/SourceManager.h"
 #include "llvm/ADT/SmallPtrSet.h"
 
diff --git a/lib/GR/CMakeLists.txt b/lib/GR/CMakeLists.txt
index ed59398..9cf7a3d 100644
--- a/lib/GR/CMakeLists.txt
+++ b/lib/GR/CMakeLists.txt
@@ -3,85 +3,41 @@
 set(LLVM_USED_LIBS clangBasic clangLex clangAST clangFrontend clangRewrite)
 
 add_clang_library(clangGRCore
-  AdjustedReturnValueChecker.cpp
   AggExprVisitor.cpp
   AnalysisConsumer.cpp
   AnalysisManager.cpp
   AnalyzerStatsChecker.cpp
-  ArrayBoundChecker.cpp
-  AttrNonNullChecker.cpp
   BasicConstraintManager.cpp
-  BasicObjCFoundationChecks.cpp
   BasicStore.cpp
   BasicValueFactory.cpp
   BugReporter.cpp
   BugReporterVisitors.cpp
-  BuiltinFunctionChecker.cpp
   CFRefCount.cpp
-  CStringChecker.cpp
-  CallAndMessageChecker.cpp
-  CastSizeChecker.cpp
-  CastToStructChecker.cpp
-  CheckDeadStores.cpp
-  CheckObjCDealloc.cpp
-  CheckObjCInstMethSignature.cpp
-  CheckSecuritySyntaxOnly.cpp
-  CheckSizeofPointer.cpp
   Checker.cpp
   CheckerHelpers.cpp
-  ChrootChecker.cpp
-  DereferenceChecker.cpp
-  DivZeroChecker.cpp
   Environment.cpp
   ExplodedGraph.cpp
-  FixedAddressChecker.cpp
   FlatStore.cpp
   FrontendActions.cpp
   GRBlockCounter.cpp
   GRCXXExprEngine.cpp
   GRCoreEngine.cpp
   GRExprEngine.cpp
-  GRExprEngineExperimentalChecks.cpp
   GRState.cpp
   HTMLDiagnostics.cpp
-  IdempotentOperationChecker.cpp
-  LLVMConventionsChecker.cpp
-  MacOSXAPIChecker.cpp
-  MallocChecker.cpp
   ManagerRegistry.cpp
   MemRegion.cpp
-  NSAutoreleasePoolChecker.cpp
-  NSErrorChecker.cpp
-  NoReturnFunctionChecker.cpp
-  OSAtomicChecker.cpp
-  ObjCAtSyncChecker.cpp
-  ObjCUnusedIVarsChecker.cpp
   PathDiagnostic.cpp
   PlistDiagnostics.cpp
-  PointerArithChecker.cpp
-  PointerSubChecker.cpp
-  PthreadLockChecker.cpp
   RangeConstraintManager.cpp
   RegionStore.cpp
-  ReturnPointerRangeChecker.cpp
-  ReturnUndefChecker.cpp
-  SValBuilder.cpp
-  SVals.cpp
   SimpleConstraintManager.cpp
   SimpleSValBuilder.cpp
-  StackAddrLeakChecker.cpp
   Store.cpp
-  StreamChecker.cpp
+  SValBuilder.cpp
+  SVals.cpp
   SymbolManager.cpp
   TextPathDiagnostics.cpp
-  UndefBranchChecker.cpp
-  UndefCapturedBlockVarChecker.cpp
-  UndefResultChecker.cpp
-  UndefinedArraySubscriptChecker.cpp
-  UndefinedAssignmentChecker.cpp
-  UnixAPIChecker.cpp
-  UnreachableCodeChecker.cpp
-  VLASizeChecker.cpp
   )
 
 add_dependencies(clangGRCore ClangAttrClasses ClangAttrList ClangDeclNodes
diff --git a/lib/GR/AdjustedReturnValueChecker.cpp b/lib/GR/Checkers/AdjustedReturnValueChecker.cpp
similarity index 100%
rename from lib/GR/AdjustedReturnValueChecker.cpp
rename to lib/GR/Checkers/AdjustedReturnValueChecker.cpp
diff --git a/lib/GR/ArrayBoundChecker.cpp b/lib/GR/Checkers/ArrayBoundChecker.cpp
similarity index 100%
rename from lib/GR/ArrayBoundChecker.cpp
rename to lib/GR/Checkers/ArrayBoundChecker.cpp
diff --git a/lib/GR/AttrNonNullChecker.cpp b/lib/GR/Checkers/AttrNonNullChecker.cpp
similarity index 100%
rename from lib/GR/AttrNonNullChecker.cpp
rename to lib/GR/Checkers/AttrNonNullChecker.cpp
diff --git a/lib/GR/BasicObjCFoundationChecks.cpp b/lib/GR/Checkers/BasicObjCFoundationChecks.cpp
similarity index 100%
rename from lib/GR/BasicObjCFoundationChecks.cpp
rename to lib/GR/Checkers/BasicObjCFoundationChecks.cpp
diff --git a/lib/GR/BasicObjCFoundationChecks.h b/lib/GR/Checkers/BasicObjCFoundationChecks.h
similarity index 100%
rename from lib/GR/BasicObjCFoundationChecks.h
rename to lib/GR/Checkers/BasicObjCFoundationChecks.h
diff --git a/lib/GR/BuiltinFunctionChecker.cpp b/lib/GR/Checkers/BuiltinFunctionChecker.cpp
similarity index 100%
rename from lib/GR/BuiltinFunctionChecker.cpp
rename to lib/GR/Checkers/BuiltinFunctionChecker.cpp
diff --git a/lib/GR/Checkers/CMakeLists.txt b/lib/GR/Checkers/CMakeLists.txt
new file mode 100644
index 0000000..700adb5
--- /dev/null
+++ b/lib/GR/Checkers/CMakeLists.txt
@@ -0,0 +1,49 @@
+add_clang_library(clangGRCheckers
+  AdjustedReturnValueChecker.cpp
+  ArrayBoundChecker.cpp
+  AttrNonNullChecker.cpp
+  BasicObjCFoundationChecks.cpp
+  BuiltinFunctionChecker.cpp
+  CallAndMessageChecker.cpp
+  CastSizeChecker.cpp
+  CastToStructChecker.cpp
+  CheckDeadStores.cpp
+  CheckObjCDealloc.cpp
+  CheckObjCInstMethSignature.cpp
+  CheckSecuritySyntaxOnly.cpp
+  CheckSizeofPointer.cpp
+  ChrootChecker.cpp
+  CStringChecker.cpp
+  DereferenceChecker.cpp
+  DivZeroChecker.cpp
+  FixedAddressChecker.cpp
+  GRExprEngineExperimentalChecks.cpp
+  IdempotentOperationChecker.cpp
+  LLVMConventionsChecker.cpp
+  MacOSXAPIChecker.cpp
+  MallocChecker.cpp
+  NSAutoreleasePoolChecker.cpp
+  NSErrorChecker.cpp
+  NoReturnFunctionChecker.cpp
+  OSAtomicChecker.cpp
+  ObjCAtSyncChecker.cpp
+  ObjCUnusedIVarsChecker.cpp
+  PointerArithChecker.cpp
+  PointerSubChecker.cpp
+  PthreadLockChecker.cpp
+  ReturnPointerRangeChecker.cpp
+  ReturnUndefChecker.cpp
+  StackAddrLeakChecker.cpp
+  StreamChecker.cpp
+  UndefBranchChecker.cpp
+  UndefCapturedBlockVarChecker.cpp
+  UndefResultChecker.cpp
+  UndefinedArraySubscriptChecker.cpp
+  UndefinedAssignmentChecker.cpp
+  UnixAPIChecker.cpp
+  UnreachableCodeChecker.cpp
+  VLASizeChecker.cpp
+  )
+
+add_dependencies(clangGRCore ClangAttrClasses ClangAttrList ClangDeclNodes
+                 ClangStmtNodes)
diff --git a/lib/GR/CStringChecker.cpp b/lib/GR/Checkers/CStringChecker.cpp
similarity index 100%
rename from lib/GR/CStringChecker.cpp
rename to lib/GR/Checkers/CStringChecker.cpp
diff --git a/lib/GR/CallAndMessageChecker.cpp b/lib/GR/Checkers/CallAndMessageChecker.cpp
similarity index 100%
rename from lib/GR/CallAndMessageChecker.cpp
rename to lib/GR/Checkers/CallAndMessageChecker.cpp
diff --git a/lib/GR/CastSizeChecker.cpp b/lib/GR/Checkers/CastSizeChecker.cpp
similarity index 100%
rename from lib/GR/CastSizeChecker.cpp
rename to lib/GR/Checkers/CastSizeChecker.cpp
diff --git a/lib/GR/CastToStructChecker.cpp b/lib/GR/Checkers/CastToStructChecker.cpp
similarity index 100%
rename from lib/GR/CastToStructChecker.cpp
rename to lib/GR/Checkers/CastToStructChecker.cpp
diff --git a/lib/GR/CheckDeadStores.cpp b/lib/GR/Checkers/CheckDeadStores.cpp
similarity index 100%
rename from lib/GR/CheckDeadStores.cpp
rename to lib/GR/Checkers/CheckDeadStores.cpp
diff --git a/lib/GR/CheckObjCDealloc.cpp b/lib/GR/Checkers/CheckObjCDealloc.cpp
similarity index 100%
rename from lib/GR/CheckObjCDealloc.cpp
rename to lib/GR/Checkers/CheckObjCDealloc.cpp
diff --git a/lib/GR/CheckObjCInstMethSignature.cpp b/lib/GR/Checkers/CheckObjCInstMethSignature.cpp
similarity index 100%
rename from lib/GR/CheckObjCInstMethSignature.cpp
rename to lib/GR/Checkers/CheckObjCInstMethSignature.cpp
diff --git a/lib/GR/CheckSecuritySyntaxOnly.cpp b/lib/GR/Checkers/CheckSecuritySyntaxOnly.cpp
similarity index 100%
rename from lib/GR/CheckSecuritySyntaxOnly.cpp
rename to lib/GR/Checkers/CheckSecuritySyntaxOnly.cpp
diff --git a/lib/GR/CheckSizeofPointer.cpp b/lib/GR/Checkers/CheckSizeofPointer.cpp
similarity index 100%
rename from lib/GR/CheckSizeofPointer.cpp
rename to lib/GR/Checkers/CheckSizeofPointer.cpp
diff --git a/lib/GR/ChrootChecker.cpp b/lib/GR/Checkers/ChrootChecker.cpp
similarity index 100%
rename from lib/GR/ChrootChecker.cpp
rename to lib/GR/Checkers/ChrootChecker.cpp
diff --git a/lib/GR/DereferenceChecker.cpp b/lib/GR/Checkers/DereferenceChecker.cpp
similarity index 100%
rename from lib/GR/DereferenceChecker.cpp
rename to lib/GR/Checkers/DereferenceChecker.cpp
diff --git a/lib/GR/DivZeroChecker.cpp b/lib/GR/Checkers/DivZeroChecker.cpp
similarity index 100%
rename from lib/GR/DivZeroChecker.cpp
rename to lib/GR/Checkers/DivZeroChecker.cpp
diff --git a/lib/GR/FixedAddressChecker.cpp b/lib/GR/Checkers/FixedAddressChecker.cpp
similarity index 100%
rename from lib/GR/FixedAddressChecker.cpp
rename to lib/GR/Checkers/FixedAddressChecker.cpp
diff --git a/lib/GR/GRExprEngineExperimentalChecks.cpp b/lib/GR/Checkers/GRExprEngineExperimentalChecks.cpp
similarity index 100%
rename from lib/GR/GRExprEngineExperimentalChecks.cpp
rename to lib/GR/Checkers/GRExprEngineExperimentalChecks.cpp
diff --git a/lib/GR/GRExprEngineExperimentalChecks.h b/lib/GR/Checkers/GRExprEngineExperimentalChecks.h
similarity index 100%
rename from lib/GR/GRExprEngineExperimentalChecks.h
rename to lib/GR/Checkers/GRExprEngineExperimentalChecks.h
diff --git a/lib/GR/GRExprEngineInternalChecks.h b/lib/GR/Checkers/GRExprEngineInternalChecks.h
similarity index 100%
rename from lib/GR/GRExprEngineInternalChecks.h
rename to lib/GR/Checkers/GRExprEngineInternalChecks.h
diff --git a/lib/GR/IdempotentOperationChecker.cpp b/lib/GR/Checkers/IdempotentOperationChecker.cpp
similarity index 100%
rename from lib/GR/IdempotentOperationChecker.cpp
rename to lib/GR/Checkers/IdempotentOperationChecker.cpp
diff --git a/lib/GR/LLVMConventionsChecker.cpp b/lib/GR/Checkers/LLVMConventionsChecker.cpp
similarity index 100%
rename from lib/GR/LLVMConventionsChecker.cpp
rename to lib/GR/Checkers/LLVMConventionsChecker.cpp
diff --git a/lib/GR/MacOSXAPIChecker.cpp b/lib/GR/Checkers/MacOSXAPIChecker.cpp
similarity index 100%
rename from lib/GR/MacOSXAPIChecker.cpp
rename to lib/GR/Checkers/MacOSXAPIChecker.cpp
diff --git a/lib/GR/Checkers/Makefile b/lib/GR/Checkers/Makefile
new file mode 100644
index 0000000..b3d213a
--- /dev/null
+++ b/lib/GR/Checkers/Makefile
@@ -0,0 +1,17 @@
+##===- clang/lib/Checker/Makefile --------------------------*- Makefile -*-===##
+# 
+#                     The LLVM Compiler Infrastructure
+#
+# This file is distributed under the University of Illinois Open Source
+# License. See LICENSE.TXT for details.
+# 
+##===----------------------------------------------------------------------===##
+#
+# This implements analyses built on top of source-level CFGs. 
+#
+##===----------------------------------------------------------------------===##
+
+CLANG_LEVEL := ../../..
+LIBRARYNAME := clangGRCheckers
+
+include $(CLANG_LEVEL)/Makefile
diff --git a/lib/GR/MallocChecker.cpp b/lib/GR/Checkers/MallocChecker.cpp
similarity index 100%
rename from lib/GR/MallocChecker.cpp
rename to lib/GR/Checkers/MallocChecker.cpp
diff --git a/lib/GR/NSAutoreleasePoolChecker.cpp b/lib/GR/Checkers/NSAutoreleasePoolChecker.cpp
similarity index 100%
rename from lib/GR/NSAutoreleasePoolChecker.cpp
rename to lib/GR/Checkers/NSAutoreleasePoolChecker.cpp
diff --git a/lib/GR/NSErrorChecker.cpp b/lib/GR/Checkers/NSErrorChecker.cpp
similarity index 100%
rename from lib/GR/NSErrorChecker.cpp
rename to lib/GR/Checkers/NSErrorChecker.cpp
diff --git a/lib/GR/NoReturnFunctionChecker.cpp b/lib/GR/Checkers/NoReturnFunctionChecker.cpp
similarity index 100%
rename from lib/GR/NoReturnFunctionChecker.cpp
rename to lib/GR/Checkers/NoReturnFunctionChecker.cpp
diff --git a/lib/GR/OSAtomicChecker.cpp b/lib/GR/Checkers/OSAtomicChecker.cpp
similarity index 100%
rename from lib/GR/OSAtomicChecker.cpp
rename to lib/GR/Checkers/OSAtomicChecker.cpp
diff --git a/lib/GR/ObjCAtSyncChecker.cpp b/lib/GR/Checkers/ObjCAtSyncChecker.cpp
similarity index 100%
rename from lib/GR/ObjCAtSyncChecker.cpp
rename to lib/GR/Checkers/ObjCAtSyncChecker.cpp
diff --git a/lib/GR/ObjCUnusedIVarsChecker.cpp b/lib/GR/Checkers/ObjCUnusedIVarsChecker.cpp
similarity index 100%
rename from lib/GR/ObjCUnusedIVarsChecker.cpp
rename to lib/GR/Checkers/ObjCUnusedIVarsChecker.cpp
diff --git a/lib/GR/PointerArithChecker.cpp b/lib/GR/Checkers/PointerArithChecker.cpp
similarity index 100%
rename from lib/GR/PointerArithChecker.cpp
rename to lib/GR/Checkers/PointerArithChecker.cpp
diff --git a/lib/GR/PointerSubChecker.cpp b/lib/GR/Checkers/PointerSubChecker.cpp
similarity index 100%
rename from lib/GR/PointerSubChecker.cpp
rename to lib/GR/Checkers/PointerSubChecker.cpp
diff --git a/lib/GR/PthreadLockChecker.cpp b/lib/GR/Checkers/PthreadLockChecker.cpp
similarity index 100%
rename from lib/GR/PthreadLockChecker.cpp
rename to lib/GR/Checkers/PthreadLockChecker.cpp
diff --git a/lib/GR/ReturnPointerRangeChecker.cpp b/lib/GR/Checkers/ReturnPointerRangeChecker.cpp
similarity index 100%
rename from lib/GR/ReturnPointerRangeChecker.cpp
rename to lib/GR/Checkers/ReturnPointerRangeChecker.cpp
diff --git a/lib/GR/ReturnUndefChecker.cpp b/lib/GR/Checkers/ReturnUndefChecker.cpp
similarity index 100%
rename from lib/GR/ReturnUndefChecker.cpp
rename to lib/GR/Checkers/ReturnUndefChecker.cpp
diff --git a/lib/GR/StackAddrLeakChecker.cpp b/lib/GR/Checkers/StackAddrLeakChecker.cpp
similarity index 100%
rename from lib/GR/StackAddrLeakChecker.cpp
rename to lib/GR/Checkers/StackAddrLeakChecker.cpp
diff --git a/lib/GR/StreamChecker.cpp b/lib/GR/Checkers/StreamChecker.cpp
similarity index 100%
rename from lib/GR/StreamChecker.cpp
rename to lib/GR/Checkers/StreamChecker.cpp
diff --git a/lib/GR/UndefBranchChecker.cpp b/lib/GR/Checkers/UndefBranchChecker.cpp
similarity index 100%
rename from lib/GR/UndefBranchChecker.cpp
rename to lib/GR/Checkers/UndefBranchChecker.cpp
diff --git a/lib/GR/UndefCapturedBlockVarChecker.cpp b/lib/GR/Checkers/UndefCapturedBlockVarChecker.cpp
similarity index 100%
rename from lib/GR/UndefCapturedBlockVarChecker.cpp
rename to lib/GR/Checkers/UndefCapturedBlockVarChecker.cpp
diff --git a/lib/GR/UndefResultChecker.cpp b/lib/GR/Checkers/UndefResultChecker.cpp
similarity index 100%
rename from lib/GR/UndefResultChecker.cpp
rename to lib/GR/Checkers/UndefResultChecker.cpp
diff --git a/lib/GR/UndefinedArraySubscriptChecker.cpp b/lib/GR/Checkers/UndefinedArraySubscriptChecker.cpp
similarity index 100%
rename from lib/GR/UndefinedArraySubscriptChecker.cpp
rename to lib/GR/Checkers/UndefinedArraySubscriptChecker.cpp
diff --git a/lib/GR/UndefinedAssignmentChecker.cpp b/lib/GR/Checkers/UndefinedAssignmentChecker.cpp
similarity index 100%
rename from lib/GR/UndefinedAssignmentChecker.cpp
rename to lib/GR/Checkers/UndefinedAssignmentChecker.cpp
diff --git a/lib/GR/UnixAPIChecker.cpp b/lib/GR/Checkers/UnixAPIChecker.cpp
similarity index 100%
rename from lib/GR/UnixAPIChecker.cpp
rename to lib/GR/Checkers/UnixAPIChecker.cpp
diff --git a/lib/GR/UnreachableCodeChecker.cpp b/lib/GR/Checkers/UnreachableCodeChecker.cpp
similarity index 100%
rename from lib/GR/UnreachableCodeChecker.cpp
rename to lib/GR/Checkers/UnreachableCodeChecker.cpp
diff --git a/lib/GR/VLASizeChecker.cpp b/lib/GR/Checkers/VLASizeChecker.cpp
similarity index 100%
rename from lib/GR/VLASizeChecker.cpp
rename to lib/GR/Checkers/VLASizeChecker.cpp
diff --git a/lib/GR/GRExprEngine.cpp b/lib/GR/GRExprEngine.cpp
index da32592..8743f71 100644
--- a/lib/GR/GRExprEngine.cpp
+++ b/lib/GR/GRExprEngine.cpp
@@ -12,7 +12,10 @@
 //  functions and build the ExplodedGraph at the expression level.
 //
 //===----------------------------------------------------------------------===//
-#include "GRExprEngineInternalChecks.h"
+
+// FIXME: Restructure checker registration.
+#include "Checkers/GRExprEngineInternalChecks.h"
+
 #include "clang/GR/BugReporter/BugType.h"
 #include "clang/GR/PathSensitive/AnalysisManager.h"
 #include "clang/GR/PathSensitive/GRExprEngine.h"
diff --git a/lib/GR/Makefile b/lib/GR/Makefile
index 71066ef..3261983 100644
--- a/lib/GR/Makefile
+++ b/lib/GR/Makefile
@@ -13,6 +13,7 @@
 
 CLANG_LEVEL := ../..
 LIBRARYNAME := clangGRCore
+PARALLEL_DIRS := Checkers
 
 include $(CLANG_LEVEL)/Makefile
 
diff --git a/tools/driver/CMakeLists.txt b/tools/driver/CMakeLists.txt
index 66dd512..9c331a5 100644
--- a/tools/driver/CMakeLists.txt
+++ b/tools/driver/CMakeLists.txt
@@ -8,6 +8,7 @@
   clangCodeGen
   clangParse
   clangSema
+  clangGRCheckers
   clangGRCore
   clangAnalysis
   clangIndex
diff --git a/tools/driver/Makefile b/tools/driver/Makefile
index 834e238..a98d715 100644
--- a/tools/driver/Makefile
+++ b/tools/driver/Makefile
@@ -39,7 +39,7 @@
                    ipo selectiondag
 USEDLIBS = clangFrontendTool.a clangFrontend.a clangDriver.a \
            clangSerialization.a clangCodeGen.a clangParse.a clangSema.a \
-           clangGRCore.a clangAnalysis.a clangIndex.a clangRewrite.a \
+           clangGRCheckers.a clangGRCore.a clangAnalysis.a clangIndex.a clangRewrite.a \
            clangAST.a clangLex.a clangBasic.a
 
 include $(CLANG_LEVEL)/Makefile