diff --git a/lib/Analysis/SimpleConstraintManager.h b/lib/Analysis/SimpleConstraintManager.h
index 5d5a513..02292a1 100644
--- a/lib/Analysis/SimpleConstraintManager.h
+++ b/lib/Analysis/SimpleConstraintManager.h
@@ -77,84 +77,4 @@
 
 }  // end clang namespace
 
-#endif  // ndef LLVM_CLANG_ANALYSIS_SIMPLE_CONSTRAINT_MANAGER_H
-//== SimpleConstraintManager.h ----------------------------------*- C++ -*--==//
-//
-//                     The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-//  Code shared between BasicConstraintManager and RangeConstraintManager.
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef LLVM_CLANG_ANALYSIS_SIMPLE_CONSTRAINT_MANAGER_H
-#define LLVM_CLANG_ANALYSIS_SIMPLE_CONSTRAINT_MANAGER_H
-
-#include "clang/Analysis/PathSensitive/ConstraintManager.h"
-#include "clang/Analysis/PathSensitive/GRState.h"
-
-namespace clang {
-
-class SimpleConstraintManager : public ConstraintManager {
-protected:
-  GRStateManager& StateMgr;
-public:
-  SimpleConstraintManager(GRStateManager& statemgr) 
-    : StateMgr(statemgr) {}
-  virtual ~SimpleConstraintManager();
-  virtual const GRState* Assume(const GRState* St, SVal Cond, bool Assumption,
-                                bool& isFeasible);
-
-  const GRState* Assume(const GRState* St, Loc Cond, bool Assumption,
-                        bool& isFeasible);
-
-  const GRState* AssumeAux(const GRState* St, Loc Cond,bool Assumption,
-                           bool& isFeasible);
-
-  const GRState* Assume(const GRState* St, NonLoc Cond, bool Assumption,
-                        bool& isFeasible);
-
-  const GRState* AssumeAux(const GRState* St, NonLoc Cond, bool Assumption,
-                           bool& isFeasible);
-
-  const GRState* AssumeSymInt(const GRState* St, bool Assumption,
-                              const SymIntConstraint& C, bool& isFeasible);
-
-  virtual const GRState* AssumeSymNE(const GRState* St, SymbolRef sym,
-                                     const llvm::APSInt& V,
-                                     bool& isFeasible) = 0;
-
-  virtual const GRState* AssumeSymEQ(const GRState* St, SymbolRef sym,
-                                     const llvm::APSInt& V,
-                                     bool& isFeasible) = 0;
-
-  virtual const GRState* AssumeSymLT(const GRState* St, SymbolRef sym,
-                                     const llvm::APSInt& V,
-                                     bool& isFeasible) = 0;
-
-  virtual const GRState* AssumeSymGT(const GRState* St, SymbolRef sym,
-                                     const llvm::APSInt& V,
-                                     bool& isFeasible) = 0;
-
-  virtual const GRState* AssumeSymLE(const GRState* St, SymbolRef sym,
-				     const llvm::APSInt& V,
-				     bool& isFeasible) = 0;
-
-  virtual const GRState* AssumeSymGE(const GRState* St, SymbolRef sym,
-				     const llvm::APSInt& V,
-				     bool& isFeasible) = 0;
-
-  const GRState* AssumeInBound(const GRState* St, SVal Idx, SVal UpperBound,
-                               bool Assumption, bool& isFeasible);
-
-private:
-  BasicValueFactory& getBasicVals() { return StateMgr.getBasicVals(); }
-};
-
-}  // end clang namespace
-
-#endif  // ndef LLVM_CLANG_ANALYSIS_SIMPLE_CONSTRAINT_MANAGER_H
+#endif
