diff --git a/include/clang/Analysis/PathSensitive/GRExprEngine.h b/include/clang/Analysis/PathSensitive/GRExprEngine.h
index 7005263..127726a 100644
--- a/include/clang/Analysis/PathSensitive/GRExprEngine.h
+++ b/include/clang/Analysis/PathSensitive/GRExprEngine.h
@@ -20,6 +20,7 @@
 #include "clang/Analysis/PathSensitive/ValueState.h"
 #include "clang/Analysis/PathSensitive/GRSimpleAPICheck.h"
 #include "clang/Analysis/PathSensitive/GRTransferFuncs.h"
+#include "clang/AST/Type.h"
 
 namespace clang {  
   
@@ -636,4 +637,17 @@
 };
 } // end clang namespace
 
+
+//===----------------------------------------------------------------------===//
+// Utility
+//===----------------------------------------------------------------------===//
+
+namespace clang {
+  
+static inline bool IsPointerType(QualType T) {
+  return T->isPointerType() || T->isObjCQualifiedIdType();
+}
+  
+} // end clang namespace
+
 #endif
diff --git a/lib/Analysis/BasicObjCFoundationChecks.cpp b/lib/Analysis/BasicObjCFoundationChecks.cpp
index 98c7e28..d2a3d08 100644
--- a/lib/Analysis/BasicObjCFoundationChecks.cpp
+++ b/lib/Analysis/BasicObjCFoundationChecks.cpp
@@ -40,10 +40,7 @@
   QualType X = Receiver->getType();
   Type* TP = X.getTypePtr();
   
-  // FIXME: Why can this not be a pointer type?
-  //  assert (TP->isPointerType());
-  if (!TP->isPointerType())
-    return NULL;
+  assert (IsPointerType(X));
   
   const PointerType* T = TP->getAsPointerType();
   
diff --git a/lib/Analysis/CFRefCount.cpp b/lib/Analysis/CFRefCount.cpp
index 08bad5b..9ed4f1d 100644
--- a/lib/Analysis/CFRefCount.cpp
+++ b/lib/Analysis/CFRefCount.cpp
@@ -335,7 +335,8 @@
   if (strcmp("CFTypeRef", TDName) != 0)
     return NULL;
   
-  assert (ArgT->isPointerType() || ArgT->isObjCQualifiedIdType());
+  if (!ArgT->isPointerType())
+    return NULL;
 
   QualType RetTy = FT->getResultType();
   
diff --git a/lib/Analysis/GRExprEngine.cpp b/lib/Analysis/GRExprEngine.cpp
index 22205c0..80e9af3 100644
--- a/lib/Analysis/GRExprEngine.cpp
+++ b/lib/Analysis/GRExprEngine.cpp
@@ -28,10 +28,6 @@
 using llvm::cast;
 using llvm::APSInt;
 
-static inline bool IsPointerType(QualType T) {
-  return T->isPointerType() || T->isObjCQualifiedIdType();
-}
-
 //===----------------------------------------------------------------------===//
 // Engine construction and deletion.
 //===----------------------------------------------------------------------===//
diff --git a/lib/Analysis/GRSimpleVals.cpp b/lib/Analysis/GRSimpleVals.cpp
index bb6ea5d..b496f26 100644
--- a/lib/Analysis/GRSimpleVals.cpp
+++ b/lib/Analysis/GRSimpleVals.cpp
@@ -20,6 +20,7 @@
 #include "clang/Analysis/PathSensitive/ValueState.h"
 #include "clang/Analysis/PathSensitive/BugReporter.h"
 #include "clang/Analysis/LocalCheckers.h"
+#include "clang/Analysis/PathSensitive/GRExprEngine.h"
 #include "llvm/Support/Compiler.h"
 #include <sstream>
 
@@ -306,11 +307,10 @@
   BasicValueFactory& BasicVals = Eng.getBasicVals();
   
   llvm::APSInt V = cast<nonlval::ConcreteInt>(X).getValue();
-  V.setIsUnsigned(T->isUnsignedIntegerType() || T->isPointerType() 
-                  || T->isObjCQualifiedIdType());
+  V.setIsUnsigned(T->isUnsignedIntegerType() || IsPointerType(T));
   V.extOrTrunc(Eng.getContext().getTypeSize(T));
   
-  if (T->isPointerType())
+  if (IsPointerType(T))
     return lval::ConcreteInt(BasicVals.getValue(V));
   else
     return nonlval::ConcreteInt(BasicVals.getValue(V));
@@ -320,7 +320,7 @@
 
 RVal GRSimpleVals::EvalCast(GRExprEngine& Eng, LVal X, QualType T) {
   
-  if (T->isPointerLikeType() || T->isObjCQualifiedIdType())
+  if (IsPointerType(T))
     return X;
   
   assert (T->isIntegerType());
@@ -331,7 +331,7 @@
   BasicValueFactory& BasicVals = Eng.getBasicVals();
   
   llvm::APSInt V = cast<lval::ConcreteInt>(X).getValue();
-  V.setIsUnsigned(T->isUnsignedIntegerType() || T->isPointerType());
+  V.setIsUnsigned(T->isUnsignedIntegerType() || IsPointerType(T));
   V.extOrTrunc(Eng.getContext().getTypeSize(T));
 
   return nonlval::ConcreteInt(BasicVals.getValue(V));
@@ -594,7 +594,7 @@
     unsigned Count = Builder.getCurrentBlockCount();
     SymbolID Sym = Eng.getSymbolManager().getConjuredSymbol(CE, Count);
         
-    RVal X = CE->getType()->isPointerType() 
+    RVal X = IsPointerType(CE->getType())
              ? cast<RVal>(lval::SymbolVal(Sym)) 
              : cast<RVal>(nonlval::SymbolVal(Sym));
     
