diff --git a/include/clang/StaticAnalyzer/Core/PathSensitive/SVals.h b/include/clang/StaticAnalyzer/Core/PathSensitive/SVals.h
index def060f..9b6dc53 100644
--- a/include/clang/StaticAnalyzer/Core/PathSensitive/SVals.h
+++ b/include/clang/StaticAnalyzer/Core/PathSensitive/SVals.h
@@ -71,7 +71,7 @@
 
   template<typename T>
   T castAs() const {
-    assert(T::isType(*this));
+    assert(T::isKind(*this));
     T t;
     SVal& sv = t;
     sv = *this;
@@ -80,7 +80,7 @@
 
   template<typename T>
   llvm::Optional<T> getAs() const {
-    if (!T::isType(*this))
+    if (!T::isKind(*this))
       return llvm::Optional<T>();
     T t;
     SVal& sv = t;
@@ -182,7 +182,7 @@
 
 private:
   friend class SVal;
-  static bool isType(const SVal& V) {
+  static bool isKind(const SVal& V) {
     return V.getBaseKind() == UndefinedKind;
   }
 };
@@ -204,7 +204,7 @@
   
 private:
   friend class SVal;
-  static bool isType(const SVal& V) {
+  static bool isKind(const SVal& V) {
     return !V.isUndef();
   }
 };
@@ -215,7 +215,7 @@
   
 private:
   friend class SVal;
-  static bool isType(const SVal& V) {
+  static bool isKind(const SVal& V) {
     return V.getBaseKind() == UnknownKind;
   }
 };
@@ -233,7 +233,7 @@
     : DefinedOrUnknownSVal(d, isLoc, ValKind) {}
 private:
   friend class SVal;
-  static bool isType(const SVal& V) {
+  static bool isKind(const SVal& V) {
     return !V.isUnknownOrUndef();
   }
 };
@@ -249,7 +249,7 @@
 
 private:
   friend class SVal;
-  static bool isType(const SVal& V) {
+  static bool isKind(const SVal& V) {
     return V.getBaseKind() == NonLocKind;
   }
 };
@@ -270,7 +270,7 @@
 
 private:
   friend class SVal;
-  static bool isType(const SVal& V) {
+  static bool isKind(const SVal& V) {
     return V.getBaseKind() == LocKind;
   }
 };
@@ -300,12 +300,12 @@
 private:
   friend class SVal;
   SymbolVal() {}
-  static bool isType(const SVal& V) {
+  static bool isKind(const SVal& V) {
     return V.getBaseKind() == NonLocKind &&
            V.getSubKind() == SymbolValKind;
   }
 
-  static bool isType(const NonLoc& V) {
+  static bool isKind(const NonLoc& V) {
     return V.getSubKind() == SymbolValKind;
   }
 };
@@ -330,12 +330,12 @@
 private:
   friend class SVal;
   ConcreteInt() {}
-  static bool isType(const SVal& V) {
+  static bool isKind(const SVal& V) {
     return V.getBaseKind() == NonLocKind &&
            V.getSubKind() == ConcreteIntKind;
   }
 
-  static bool isType(const NonLoc& V) {
+  static bool isKind(const NonLoc& V) {
     return V.getSubKind() == ConcreteIntKind;
   }
 };
@@ -372,12 +372,12 @@
 private:
   friend class SVal;
   LocAsInteger() {}
-  static bool isType(const SVal& V) {
+  static bool isKind(const SVal& V) {
     return V.getBaseKind() == NonLocKind &&
            V.getSubKind() == LocAsIntegerKind;
   }
 
-  static bool isType(const NonLoc& V) {
+  static bool isKind(const NonLoc& V) {
     return V.getSubKind() == LocAsIntegerKind;
   }
 };
@@ -399,11 +399,11 @@
 private:
   friend class SVal;
   CompoundVal() {}
-  static bool isType(const SVal& V) {
+  static bool isKind(const SVal& V) {
     return V.getBaseKind() == NonLocKind && V.getSubKind() == CompoundValKind;
   }
 
-  static bool isType(const NonLoc& V) {
+  static bool isKind(const NonLoc& V) {
     return V.getSubKind() == CompoundValKind;
   }
 };
@@ -423,11 +423,11 @@
 private:
   friend class SVal;
   LazyCompoundVal() {}
-  static bool isType(const SVal& V) {
+  static bool isKind(const SVal& V) {
     return V.getBaseKind() == NonLocKind &&
            V.getSubKind() == LazyCompoundValKind;
   }
-  static bool isType(const NonLoc& V) {
+  static bool isKind(const NonLoc& V) {
     return V.getSubKind() == LazyCompoundValKind;
   }
 };
@@ -453,11 +453,11 @@
 private:
   friend class SVal;
   GotoLabel() {}
-  static bool isType(const SVal& V) {
+  static bool isKind(const SVal& V) {
     return V.getBaseKind() == LocKind && V.getSubKind() == GotoLabelKind;
   }
 
-  static bool isType(const Loc& V) {
+  static bool isKind(const Loc& V) {
     return V.getSubKind() == GotoLabelKind;
   }
 };
@@ -491,12 +491,12 @@
 private:
   friend class SVal;
   MemRegionVal() {}
-  static bool isType(const SVal& V) {
+  static bool isKind(const SVal& V) {
     return V.getBaseKind() == LocKind &&
            V.getSubKind() == MemRegionKind;
   }
 
-  static bool isType(const Loc& V) {
+  static bool isKind(const Loc& V) {
     return V.getSubKind() == MemRegionKind;
   }
 };
@@ -516,12 +516,12 @@
 private:
   friend class SVal;
   ConcreteInt() {}
-  static bool isType(const SVal& V) {
+  static bool isKind(const SVal& V) {
     return V.getBaseKind() == LocKind &&
            V.getSubKind() == ConcreteIntKind;
   }
 
-  static bool isType(const Loc& V) {
+  static bool isKind(const Loc& V) {
     return V.getSubKind() == ConcreteIntKind;
   }
 };
