diff --git a/include/clang/Analysis/PathSensitive/SymbolManager.h b/include/clang/Analysis/PathSensitive/SymbolManager.h
index 53a6eec..1f548b4 100644
--- a/include/clang/Analysis/PathSensitive/SymbolManager.h
+++ b/include/clang/Analysis/PathSensitive/SymbolManager.h
@@ -70,7 +70,7 @@
 class SymbolData : public llvm::FoldingSetNode {
 public:
   enum Kind { UndefKind, ParmKind, GlobalKind, ElementKind, FieldKind,
-              ContentsOfKind, ConjuredKind };
+              ConjuredKind };
   
 private:
   Kind K;
@@ -188,30 +188,6 @@
   }
 };
 
-class SymbolDataContentsOf : public SymbolData {
-  SymbolID Sym;
-      
-public:
-  SymbolDataContentsOf(SymbolID MySym, SymbolID sym) : 
-    SymbolData(ContentsOfKind, MySym), Sym(sym) {}
-  
-  SymbolID getContainerSymbol() const { return Sym; }
-  
-  static void Profile(llvm::FoldingSetNodeID& profile, SymbolID Sym) {
-    profile.AddInteger((unsigned) ContentsOfKind);
-    profile.AddInteger(Sym);
-  }
-  
-  virtual void Profile(llvm::FoldingSetNodeID& profile) {
-    Profile(profile, Sym);
-  }
-  
-  // Implement isa<T> support.
-  static inline bool classof(const SymbolData* D) {
-    return D->getKind() == ContentsOfKind;
-  }  
-};
-  
 class SymbolConjured : public SymbolData {
   Stmt* S;
   QualType T;
@@ -294,7 +270,6 @@
   SymbolID getSymbol(VarDecl* D);
   SymbolID getElementSymbol(const MemRegion* R, const llvm::APSInt* Idx);
   SymbolID getFieldSymbol(const MemRegion* R, const FieldDecl* D);
-  SymbolID getContentsOfSymbol(SymbolID sym);
   SymbolID getConjuredSymbol(Stmt* E, QualType T, unsigned VisitCount);
   SymbolID getConjuredSymbol(Expr* E, unsigned VisitCount) {
     return getConjuredSymbol(E, E->getType(), VisitCount);
diff --git a/lib/Analysis/SymbolManager.cpp b/lib/Analysis/SymbolManager.cpp
index aee74a4..c49d127 100644
--- a/lib/Analysis/SymbolManager.cpp
+++ b/lib/Analysis/SymbolManager.cpp
@@ -86,28 +86,7 @@
   DataMap[SymbolCounter] = SD;
   return SymbolCounter++;
 }
- 
-SymbolID SymbolManager::getContentsOfSymbol(SymbolID sym) {
-  
-  llvm::FoldingSetNodeID profile;
-  SymbolDataContentsOf::Profile(profile, sym);
-  void* InsertPos;
-  
-  SymbolData* SD = DataSet.FindNodeOrInsertPos(profile, InsertPos);
-  
-  if (SD)
-    return SD->getSymbol();
 
-  SD = (SymbolData*) BPAlloc.Allocate<SymbolDataContentsOf>();
-  new (SD) SymbolDataContentsOf(SymbolCounter, sym);
-
-
-  DataSet.InsertNode(SD, InsertPos);  
-  DataMap[SymbolCounter] = SD;
-  
-  return SymbolCounter++;
-}
-  
 SymbolID SymbolManager::getConjuredSymbol(Stmt* E, QualType T, unsigned Count) {
   
   llvm::FoldingSetNodeID profile;
@@ -145,13 +124,7 @@
 
     case GlobalKind:
       return cast<SymbolDataGlobalVar>(this)->getDecl()->getType();
-      
-    case ContentsOfKind: {
-      SymbolID x = cast<SymbolDataContentsOf>(this)->getContainerSymbol();
-      QualType T = SymMgr.getSymbolData(x).getType(SymMgr);
-      return T->getAsPointerType()->getPointeeType();
-    }
-      
+
     case ConjuredKind:
       return cast<SymbolConjured>(this)->getType();
   }
