diff --git a/tools/c-index-test/c-index-test.c b/tools/c-index-test/c-index-test.c
index a1065a8..f7b7a36 100644
--- a/tools/c-index-test/c-index-test.c
+++ b/tools/c-index-test/c-index-test.c
@@ -373,10 +373,10 @@
 void PrintMemoryUsage(CXTranslationUnit TU) {
   unsigned long total = 0.0;
   unsigned i = 0;
-  CXTUMemoryUsage usage = clang_getCXTUMemoryUsage(TU);
+  CXTUResourceUsage usage = clang_getCXTUResourceUsage(TU);
   fprintf(stderr, "Memory usage:\n");
   for (i = 0 ; i != usage.numEntries; ++i) {
-    const char *name = clang_getTUMemoryUsageName(usage.entries[i].kind);
+    const char *name = clang_getTUResourceUsageName(usage.entries[i].kind);
     unsigned long amount = usage.entries[i].amount;
     total += amount;
     fprintf(stderr, "  %s : %ld bytes (%f MBytes)\n", name, amount,
@@ -384,7 +384,7 @@
   }
   fprintf(stderr, "  TOTAL = %ld bytes (%f MBytes)\n", total,
           ((double) total)/(1024*1024));
-  clang_disposeCXTUMemoryUsage(usage);  
+  clang_disposeCXTUResourceUsage(usage);  
 }
 
 /******************************************************************************/
diff --git a/tools/libclang/CIndex.cpp b/tools/libclang/CIndex.cpp
index 90d9881..ce02088 100644
--- a/tools/libclang/CIndex.cpp
+++ b/tools/libclang/CIndex.cpp
@@ -5181,39 +5181,39 @@
 // Inspecting memory usage.
 //===----------------------------------------------------------------------===//
 
-typedef std::vector<CXTUMemoryUsageEntry> MemUsageEntries;
+typedef std::vector<CXTUResourceUsageEntry> MemUsageEntries;
 
-static inline void createCXTUMemoryUsageEntry(MemUsageEntries &entries,
-                                              enum CXTUMemoryUsageKind k,
+static inline void createCXTUResourceUsageEntry(MemUsageEntries &entries,
+                                              enum CXTUResourceUsageKind k,
                                               double amount) {
-  CXTUMemoryUsageEntry entry = { k, amount };
+  CXTUResourceUsageEntry entry = { k, amount };
   entries.push_back(entry);
 }
 
 extern "C" {
 
-const char *clang_getTUMemoryUsageName(CXTUMemoryUsageKind kind) {
+const char *clang_getTUResourceUsageName(CXTUResourceUsageKind kind) {
   const char *str = "";
   switch (kind) {
-    case CXTUMemoryUsage_AST:
+    case CXTUResourceUsage_AST:
       str = "ASTContext: expressions, declarations, and types"; 
       break;
-    case CXTUMemoryUsage_Identifiers:
+    case CXTUResourceUsage_Identifiers:
       str = "ASTContext: identifiers";
       break;
-    case CXTUMemoryUsage_Selectors:
+    case CXTUResourceUsage_Selectors:
       str = "ASTContext: selectors";
       break;
-    case CXTUMemoryUsage_GlobalCompletionResults:
+    case CXTUResourceUsage_GlobalCompletionResults:
       str = "Code completion: cached global results";
       break;
   }
   return str;
 }
 
-CXTUMemoryUsage clang_getCXTUMemoryUsage(CXTranslationUnit TU) {
+CXTUResourceUsage clang_getCXTUResourceUsage(CXTranslationUnit TU) {
   if (!TU) {
-    CXTUMemoryUsage usage = { (void*) 0, 0, 0 };
+    CXTUResourceUsage usage = { (void*) 0, 0, 0 };
     return usage;
   }
   
@@ -5222,15 +5222,15 @@
   ASTContext &astContext = astUnit->getASTContext();
   
   // How much memory is used by AST nodes and types?
-  createCXTUMemoryUsageEntry(*entries, CXTUMemoryUsage_AST,
+  createCXTUResourceUsageEntry(*entries, CXTUResourceUsage_AST,
     (unsigned long) astContext.getTotalAllocatedMemory());
 
   // How much memory is used by identifiers?
-  createCXTUMemoryUsageEntry(*entries, CXTUMemoryUsage_Identifiers,
+  createCXTUResourceUsageEntry(*entries, CXTUResourceUsage_Identifiers,
     (unsigned long) astContext.Idents.getAllocator().getTotalMemory());
 
   // How much memory is used for selectors?
-  createCXTUMemoryUsageEntry(*entries, CXTUMemoryUsage_Selectors,
+  createCXTUResourceUsageEntry(*entries, CXTUResourceUsage_Selectors,
     (unsigned long) astContext.Selectors.getTotalMemory());
   
   // How much memory is used for caching global code completion results?
@@ -5239,18 +5239,18 @@
       astUnit->getCachedCompletionAllocator().getPtr()) {
     completionBytes = completionAllocator-> getTotalMemory();
   }
-  createCXTUMemoryUsageEntry(*entries, CXTUMemoryUsage_GlobalCompletionResults,
+  createCXTUResourceUsageEntry(*entries, CXTUResourceUsage_GlobalCompletionResults,
     completionBytes);
 
 
-  CXTUMemoryUsage usage = { (void*) entries.get(),
+  CXTUResourceUsage usage = { (void*) entries.get(),
                             (unsigned) entries->size(),
                             entries->size() ? &(*entries)[0] : 0 };
   entries.take();
   return usage;
 }
 
-void clang_disposeCXTUMemoryUsage(CXTUMemoryUsage usage) {
+void clang_disposeCXTUResourceUsage(CXTUResourceUsage usage) {
   if (usage.data)
     delete (MemUsageEntries*) usage.data;
 }
diff --git a/tools/libclang/libclang.darwin.exports b/tools/libclang/libclang.darwin.exports
index 6219d55..30c3fd1 100644
--- a/tools/libclang/libclang.darwin.exports
+++ b/tools/libclang/libclang.darwin.exports
@@ -21,7 +21,7 @@
 _clang_defaultReparseOptions
 _clang_defaultSaveOptions
 _clang_disposeCXCursorSet
-_clang_disposeCXTUMemoryUsage
+_clang_disposeCXTUResourceUsage
 _clang_disposeCodeCompleteResults
 _clang_disposeDiagnostic
 _clang_disposeIndex
@@ -36,7 +36,7 @@
 _clang_executeOnThread
 _clang_formatDiagnostic
 _clang_getCString
-_clang_getCXTUMemoryUsage
+_clang_getCXTUResourceUsage
 _clang_getCXXAccessSpecifier
 _clang_getCanonicalCursor
 _clang_getCanonicalType
@@ -100,7 +100,7 @@
 _clang_getResultType
 _clang_getSpecializedCursorTemplate
 _clang_getSpellingLocation
-_clang_getTUMemoryUsageName
+_clang_getTUResourceUsageName
 _clang_getTemplateCursorKind
 _clang_getTokenExtent
 _clang_getTokenKind
diff --git a/tools/libclang/libclang.exports b/tools/libclang/libclang.exports
index 2b96053..4e96e8a 100644
--- a/tools/libclang/libclang.exports
+++ b/tools/libclang/libclang.exports
@@ -21,7 +21,7 @@
 clang_defaultReparseOptions
 clang_defaultSaveOptions
 clang_disposeCXCursorSet
-clang_disposeCXTUMemoryUsage
+clang_disposeCXTUResourceUsage
 clang_disposeCodeCompleteResults
 clang_disposeDiagnostic
 clang_disposeIndex
@@ -36,7 +36,7 @@
 clang_executeOnThread
 clang_formatDiagnostic
 clang_getCString
-clang_getCXTUMemoryUsage
+clang_getCXTUResourceUsage
 clang_getCXXAccessSpecifier
 clang_getCanonicalCursor
 clang_getCanonicalType
@@ -100,7 +100,7 @@
 clang_getResultType
 clang_getSpecializedCursorTemplate
 clang_getSpellingLocation
-clang_getTUMemoryUsageName
+clang_getTUResourceUsageName
 clang_getTemplateCursorKind
 clang_getTokenExtent
 clang_getTokenKind
