Index: tools/libclang/CXLoadedDiagnostic.cpp
===================================================================
--- tools/libclang/CXLoadedDiagnostic.cpp	(revision 173726)
+++ tools/libclang/CXLoadedDiagnostic.cpp	(working copy)
@@ -102,7 +102,7 @@
 
 CXString CXLoadedDiagnostic::getDiagnosticOption(CXString *Disable) const {
   if (DiagOption.empty())
-    return createCXString("");
+    return cxstring::createEmpty();
 
   // FIXME: possibly refactor with logic in CXStoredDiagnostic.
   if (Disable)
@@ -241,7 +241,7 @@
       if (error)
         *error = CXLoadDiag_None;
       if (errorString)
-        *errorString = createCXString("");
+        *errorString = cxstring::createEmpty();
     }
 
   CXDiagnosticSet load(const char *file);
Index: tools/libclang/CXComment.cpp
===================================================================
--- tools/libclang/CXComment.cpp	(revision 173726)
+++ tools/libclang/CXComment.cpp	(working copy)
@@ -124,7 +124,7 @@
 CXString clang_TextComment_getText(CXComment CXC) {
   const TextComment *TC = getASTNodeAs<TextComment>(CXC);
   if (!TC)
-    return createCXString((const char *) 0);
+    return cxstring::createEmpty();
 
   return createCXString(TC->getText(), /*DupString=*/ false);
 }
@@ -132,7 +132,7 @@
 CXString clang_InlineCommandComment_getCommandName(CXComment CXC) {
   const InlineCommandComment *ICC = getASTNodeAs<InlineCommandComment>(CXC);
   if (!ICC)
-    return createCXString((const char *) 0);
+    return cxstring::createEmpty();
 
   const CommandTraits &Traits = getCommandTraits(CXC);
   return createCXString(ICC->getCommandName(Traits), /*DupString=*/ false);
@@ -172,7 +172,7 @@
                                                unsigned ArgIdx) {
   const InlineCommandComment *ICC = getASTNodeAs<InlineCommandComment>(CXC);
   if (!ICC || ArgIdx >= ICC->getNumArgs())
-    return createCXString((const char *) 0);
+    return cxstring::createEmpty();
 
   return createCXString(ICC->getArgText(ArgIdx), /*DupString=*/ false);
 }
@@ -180,7 +180,7 @@
 CXString clang_HTMLTagComment_getTagName(CXComment CXC) {
   const HTMLTagComment *HTC = getASTNodeAs<HTMLTagComment>(CXC);
   if (!HTC)
-    return createCXString((const char *) 0);
+    return cxstring::createEmpty();
 
   return createCXString(HTC->getTagName(), /*DupString=*/ false);
 }
@@ -204,7 +204,7 @@
 CXString clang_HTMLStartTag_getAttrName(CXComment CXC, unsigned AttrIdx) {
   const HTMLStartTagComment *HST = getASTNodeAs<HTMLStartTagComment>(CXC);
   if (!HST || AttrIdx >= HST->getNumAttrs())
-    return createCXString((const char *) 0);
+    return cxstring::createEmpty();
 
   return createCXString(HST->getAttr(AttrIdx).Name, /*DupString=*/ false);
 }
@@ -212,7 +212,7 @@
 CXString clang_HTMLStartTag_getAttrValue(CXComment CXC, unsigned AttrIdx) {
   const HTMLStartTagComment *HST = getASTNodeAs<HTMLStartTagComment>(CXC);
   if (!HST || AttrIdx >= HST->getNumAttrs())
-    return createCXString((const char *) 0);
+    return cxstring::createEmpty();
 
   return createCXString(HST->getAttr(AttrIdx).Value, /*DupString=*/ false);
 }
@@ -220,7 +220,7 @@
 CXString clang_BlockCommandComment_getCommandName(CXComment CXC) {
   const BlockCommandComment *BCC = getASTNodeAs<BlockCommandComment>(CXC);
   if (!BCC)
-    return createCXString((const char *) 0);
+    return cxstring::createEmpty();
 
   const CommandTraits &Traits = getCommandTraits(CXC);
   return createCXString(BCC->getCommandName(Traits), /*DupString=*/ false);
@@ -238,7 +238,7 @@
                                               unsigned ArgIdx) {
   const BlockCommandComment *BCC = getASTNodeAs<BlockCommandComment>(CXC);
   if (!BCC || ArgIdx >= BCC->getNumArgs())
-    return createCXString((const char *) 0);
+    return cxstring::createEmpty();
 
   return createCXString(BCC->getArgText(ArgIdx), /*DupString=*/ false);
 }
@@ -254,7 +254,7 @@
 CXString clang_ParamCommandComment_getParamName(CXComment CXC) {
   const ParamCommandComment *PCC = getASTNodeAs<ParamCommandComment>(CXC);
   if (!PCC || !PCC->hasParamName())
-    return createCXString((const char *) 0);
+    return cxstring::createEmpty();
 
   return createCXString(PCC->getParamNameAsWritten(), /*DupString=*/ false);
 }
@@ -305,7 +305,7 @@
 CXString clang_TParamCommandComment_getParamName(CXComment CXC) {
   const TParamCommandComment *TPCC = getASTNodeAs<TParamCommandComment>(CXC);
   if (!TPCC || !TPCC->hasParamName())
-    return createCXString((const char *) 0);
+    return cxstring::createEmpty();
 
   return createCXString(TPCC->getParamNameAsWritten(), /*DupString=*/ false);
 }
@@ -338,7 +338,7 @@
   const VerbatimBlockLineComment *VBL =
       getASTNodeAs<VerbatimBlockLineComment>(CXC);
   if (!VBL)
-    return createCXString((const char *) 0);
+    return cxstring::createEmpty();
 
   return createCXString(VBL->getText(), /*DupString=*/ false);
 }
@@ -346,7 +346,7 @@
 CXString clang_VerbatimLineComment_getText(CXComment CXC) {
   const VerbatimLineComment *VLC = getASTNodeAs<VerbatimLineComment>(CXC);
   if (!VLC)
-    return createCXString((const char *) 0);
+    return cxstring::createEmpty();
 
   return createCXString(VLC->getText(), /*DupString=*/ false);
 }
@@ -831,7 +831,7 @@
 CXString clang_HTMLTagComment_getAsString(CXComment CXC) {
   const HTMLTagComment *HTC = getASTNodeAs<HTMLTagComment>(CXC);
   if (!HTC)
-    return createCXString((const char *) 0);
+    return cxstring::createEmpty();
 
   SmallString<128> HTML;
   CommentASTToHTMLConverter Converter(0, HTML, getCommandTraits(CXC));
@@ -842,7 +842,7 @@
 CXString clang_FullComment_getAsHTML(CXComment CXC) {
   const FullComment *FC = getASTNodeAs<FullComment>(CXC);
   if (!FC)
-    return createCXString((const char *) 0);
+    return cxstring::createEmpty();
 
   SmallString<1024> HTML;
   CommentASTToHTMLConverter Converter(FC, HTML, getCommandTraits(CXC));
@@ -1364,7 +1364,7 @@
 CXString clang_FullComment_getAsXML(CXComment CXC) {
   const FullComment *FC = getASTNodeAs<FullComment>(CXC);
   if (!FC)
-    return createCXString((const char *) 0);
+    return cxstring::createEmpty();
   ASTContext &Context = FC->getDeclInfo()->CurrentDecl->getASTContext();
   CXTranslationUnit TU = CXC.TranslationUnit;
   SourceManager &SM = cxtu::getASTUnit(TU)->getSourceManager();
Index: tools/libclang/CXStoredDiagnostic.cpp
===================================================================
--- tools/libclang/CXStoredDiagnostic.cpp	(revision 173726)
+++ tools/libclang/CXStoredDiagnostic.cpp	(working copy)
@@ -67,7 +67,7 @@
     return createCXString("-ferror-limit=");
   }
 
-  return createCXString("");
+  return cxstring::createEmpty();
 }
 
 unsigned CXStoredDiagnostic::getCategory() const {
Index: tools/libclang/CXString.h
===================================================================
--- tools/libclang/CXString.h	(revision 173726)
+++ tools/libclang/CXString.h	(working copy)
@@ -25,6 +25,8 @@
 
 struct CXStringBuf;
 
+CXString createEmpty();
+
 /// \brief Create a CXString object from a C string.
 CXString createCXString(const char *String, bool DupString = false);
 
Index: tools/libclang/CIndex.cpp
===================================================================
--- tools/libclang/CIndex.cpp	(revision 173726)
+++ tools/libclang/CIndex.cpp	(working copy)
@@ -2915,7 +2915,7 @@
 
 CXString clang_getTranslationUnitSpelling(CXTranslationUnit CTUnit) {
   if (!CTUnit)
-    return createCXString("");
+    return cxstring::createEmpty();
 
   ASTUnit *CXXUnit = cxtu::getASTUnit(CTUnit);
   return createCXString(CXXUnit->getOriginalSourceFileName(), true);
@@ -2935,7 +2935,7 @@
 extern "C" {
 CXString clang_getFileName(CXFile SFile) {
   if (!SFile)
-    return createCXString((const char*)NULL);
+    return cxstring::createEmpty();
 
   FileEntry *FEnt = static_cast<FileEntry *>(SFile);
   return createCXString(FEnt->getName());
@@ -3107,7 +3107,7 @@
 
 static CXString getDeclSpelling(const Decl *D) {
   if (!D)
-    return createCXString("");
+    return cxstring::createEmpty();
 
   const NamedDecl *ND = dyn_cast<NamedDecl>(D);
   if (!ND) {
@@ -3120,7 +3120,7 @@
       if (Module *Mod = ImportD->getImportedModule())
         return createCXString(Mod->getFullModuleName());
 
-    return createCXString("");
+    return cxstring::createEmpty();
   }
   
   if (const ObjCMethodDecl *OMD = dyn_cast<ObjCMethodDecl>(ND))
@@ -3133,7 +3133,7 @@
     return createCXString(CIMP->getIdentifier()->getNameStart());
 
   if (isa<UsingDirectiveDecl>(D))
-    return createCXString("");
+    return cxstring::createEmpty();
   
   SmallString<1024> S;
   llvm::raw_svector_ostream os(S);
@@ -3205,14 +3205,14 @@
       if (const Decl *D = Storage.dyn_cast<const Decl *>()) {
         if (const NamedDecl *ND = dyn_cast<NamedDecl>(D))
           return createCXString(ND->getNameAsString());
-        return createCXString("");
+        return cxstring::createEmpty();
       }
       if (const OverloadExpr *E = Storage.dyn_cast<const OverloadExpr *>())
         return createCXString(E->getName().getAsString());
       OverloadedTemplateStorage *Ovl
         = Storage.get<OverloadedTemplateStorage*>();
       if (Ovl->size() == 0)
-        return createCXString("");
+        return cxstring::createEmpty();
       return createCXString((*Ovl->begin())->getNameAsString());
     }
         
@@ -3232,7 +3232,7 @@
     const Decl *D = getDeclFromExpr(getCursorExpr(C));
     if (D)
       return getDeclSpelling(D);
-    return createCXString("");
+    return cxstring::createEmpty();
   }
 
   if (clang_isStatement(C.kind)) {
@@ -3240,7 +3240,7 @@
     if (const LabelStmt *Label = dyn_cast_or_null<LabelStmt>(S))
       return createCXString(Label->getName());
 
-    return createCXString("");
+    return cxstring::createEmpty();
   }
   
   if (C.kind == CXCursor_MacroExpansion)
@@ -3267,7 +3267,7 @@
     return createCXString(AA->getLabel());
   }
 
-  return createCXString("");
+  return cxstring::createEmpty();
 }
 
 CXSourceRange clang_Cursor_getSpellingNameRange(CXCursor C,
@@ -3358,7 +3358,7 @@
   
   const Decl *D = getCursorDecl(C);
   if (!D)
-    return createCXString("");
+    return cxstring::createEmpty();
 
   PrintingPolicy Policy = getCursorContext(C).getPrintingPolicy();
   if (const FunctionTemplateDecl *FunTmpl = dyn_cast<FunctionTemplateDecl>(D))
@@ -4792,7 +4792,7 @@
   // deconstructing the source location.
   ASTUnit *CXXUnit = cxtu::getASTUnit(TU);
   if (!CXXUnit)
-    return createCXString("");
+    return cxstring::createEmpty();
 
   SourceLocation Loc = SourceLocation::getFromRawEncoding(CXTok.int_data[1]);
   std::pair<FileID, unsigned> LocInfo
@@ -4801,7 +4801,7 @@
   StringRef Buffer
     = CXXUnit->getSourceManager().getBufferData(LocInfo.first, &Invalid);
   if (Invalid)
-    return createCXString("");
+    return cxstring::createEmpty();
 
   return createCXString(Buffer.substr(LocInfo.second, CXTok.int_data[2]));
 }
@@ -5734,11 +5734,11 @@
   if (always_deprecated)
     *always_deprecated = 0;
   if (deprecated_message)
-    *deprecated_message = cxstring::createCXString("", /*DupString=*/false);
+    *deprecated_message = cxstring::createEmpty();
   if (always_unavailable)
     *always_unavailable = 0;
   if (unavailable_message)
-    *unavailable_message = cxstring::createCXString("", /*DupString=*/false);
+    *unavailable_message = cxstring::createEmpty();
   
   if (!clang_isDeclaration(cursor.kind))
     return 0;
@@ -5875,7 +5875,7 @@
 
 CXString clang_Cursor_getRawCommentText(CXCursor C) {
   if (!clang_isDeclaration(C.kind))
-    return createCXString((const char *) NULL);
+    return cxstring::createEmpty();
 
   const Decl *D = getCursorDecl(C);
   ASTContext &Context = getCursorContext(C);
@@ -5890,7 +5890,7 @@
 
 CXString clang_Cursor_getBriefCommentText(CXCursor C) {
   if (!clang_isDeclaration(C.kind))
-    return createCXString((const char *) NULL);
+    return cxstring::createEmpty();
 
   const Decl *D = getCursorDecl(C);
   const ASTContext &Context = getCursorContext(C);
@@ -5904,7 +5904,7 @@
     return createCXString(BriefText, false);
   }
 
-  return createCXString((const char *) NULL);
+  return cxstring::createEmpty();
 }
 
 CXComment clang_Cursor_getParsedComment(CXCursor C) {
@@ -5937,14 +5937,14 @@
 
 CXString clang_Module_getName(CXModule CXMod) {
   if (!CXMod)
-    return createCXString("");
+    return cxstring::createEmpty();
   Module *Mod = static_cast<Module*>(CXMod);
   return createCXString(Mod->Name);
 }
 
 CXString clang_Module_getFullName(CXModule CXMod) {
   if (!CXMod)
-    return createCXString("");
+    return cxstring::createEmpty();
   Module *Mod = static_cast<Module*>(CXMod);
   return createCXString(Mod->getFullModuleName());
 }
Index: tools/libclang/CXSourceLocation.cpp
===================================================================
--- tools/libclang/CXSourceLocation.cpp	(revision 173726)
+++ tools/libclang/CXSourceLocation.cpp	(working copy)
@@ -187,7 +187,7 @@
 static void createNullLocation(CXString *filename, unsigned *line,
                                unsigned *column, unsigned *offset = 0) {
   if (filename)
-    *filename = createCXString("");
+    *filename = cxstring::createEmpty();
   if (line)
     *line = 0;
   if (column)
Index: tools/libclang/CIndexUSRs.cpp
===================================================================
--- tools/libclang/CIndexUSRs.cpp	(revision 173726)
+++ tools/libclang/CIndexUSRs.cpp	(working copy)
@@ -823,20 +823,20 @@
   if (clang_isDeclaration(K)) {
     const Decl *D = cxcursor::getCursorDecl(C);
     if (!D)
-      return createCXString("");
+      return cxstring::createEmpty();
 
     CXTranslationUnit TU = cxcursor::getCursorTU(C);
     if (!TU)
-      return createCXString("");
+      return cxstring::createEmpty();
 
     CXStringBuf *buf = cxstring::getCXStringBuf(TU);
     if (!buf)
-      return createCXString("");
+      return cxstring::createEmpty();
 
     bool Ignore = cxcursor::getDeclCursorUSR(D, buf->Data);
     if (Ignore) {
       buf->dispose();
-      return createCXString("");
+      return cxstring::createEmpty();
     }
 
     // Return the C-string, but don't make a copy since it is already in
@@ -848,11 +848,11 @@
   if (K == CXCursor_MacroDefinition) {
     CXTranslationUnit TU = cxcursor::getCursorTU(C);
     if (!TU)
-      return createCXString("");
+      return cxstring::createEmpty();
 
     CXStringBuf *buf = cxstring::getCXStringBuf(TU);
     if (!buf)
-      return createCXString("");
+      return cxstring::createEmpty();
 
     {
       USRGenerator UG(&cxcursor::getCursorASTUnit(C)->getASTContext(),
@@ -864,7 +864,7 @@
     return createCXString(buf);
   }
 
-  return createCXString("");
+  return cxstring::createEmpty();
 }
 
 CXString clang_constructUSR_ObjCIvar(const char *name, CXString classUSR) {
Index: tools/libclang/CXCompilationDatabase.cpp
===================================================================
--- tools/libclang/CXCompilationDatabase.cpp	(revision 173726)
+++ tools/libclang/CXCompilationDatabase.cpp	(working copy)
@@ -107,7 +107,7 @@
 clang_CompileCommand_getDirectory(CXCompileCommand CCmd)
 {
   if (!CCmd)
-    return createCXString((const char*)NULL);
+    return cxstring::createEmpty();
 
   CompileCommand *cmd = static_cast<CompileCommand *>(CCmd);
   return createCXString(cmd->Directory.c_str(), /*DupString=*/false);
@@ -126,12 +126,12 @@
 clang_CompileCommand_getArg(CXCompileCommand CCmd, unsigned Arg)
 {
   if (!CCmd)
-    return createCXString((const char*)NULL);
+    return cxstring::createEmpty();
 
   CompileCommand *Cmd = static_cast<CompileCommand *>(CCmd);
 
   if (Arg >= Cmd->CommandLine.size())
-    return createCXString((const char*)NULL);
+    return cxstring::createEmpty();
 
   return createCXString(Cmd->CommandLine[Arg].c_str(), /*DupString=*/false);
 }
Index: tools/libclang/CIndexCodeCompletion.cpp
===================================================================
--- tools/libclang/CIndexCodeCompletion.cpp	(revision 173726)
+++ tools/libclang/CIndexCodeCompletion.cpp	(working copy)
@@ -112,7 +112,7 @@
                                       unsigned chunk_number) {
   CodeCompletionString *CCStr = (CodeCompletionString *)completion_string;
   if (!CCStr || chunk_number >= CCStr->size())
-    return createCXString((const char*)0);
+    return cxstring::createEmpty();
 
   switch ((*CCStr)[chunk_number].Kind) {
   case CodeCompletionString::CK_TypedText:
@@ -139,7 +139,7 @@
       
   case CodeCompletionString::CK_Optional:
     // Note: treated as an empty text block.
-    return createCXString("");
+    return cxstring::createEmpty();
   }
 
   llvm_unreachable("Invalid CodeCompletionString Kind!");
@@ -211,7 +211,7 @@
                                        unsigned annotation_number) {
   CodeCompletionString *CCStr = (CodeCompletionString *)completion_string;
   return CCStr ? createCXString(CCStr->getAnnotation(annotation_number))
-               : createCXString((const char *) 0);
+               : cxstring::createEmpty();
 }
 
 CXString
@@ -222,7 +222,7 @@
   
   CodeCompletionString *CCStr = (CodeCompletionString *)completion_string;
   if (!CCStr)
-    return createCXString((const char *)0);
+    return cxstring::createEmpty();
   
   return createCXString(CCStr->getParentContextName(), /*DupString=*/false);
 }
@@ -232,7 +232,7 @@
   CodeCompletionString *CCStr = (CodeCompletionString *)completion_string;
 
   if (!CCStr)
-    return createCXString((const char *) NULL);
+    return cxstring::createEmpty();
 
   return createCXString(CCStr->getBriefComment(), /*DupString=*/false);
 }
@@ -321,7 +321,7 @@
     CodeCompletionAllocator(new clang::GlobalCodeCompletionAllocator),
     Contexts(CXCompletionContext_Unknown),
     ContainerKind(CXCursor_InvalidCode),
-    ContainerUSR(createCXString("")),
+    ContainerUSR(cxstring::createEmpty()),
     ContainerIsIncomplete(1)
 { 
   if (getenv("LIBCLANG_OBJTRACKING")) {
@@ -619,7 +619,7 @@
       }
       else {
         AllocatedResults.ContainerKind = CXCursor_InvalidCode;
-        AllocatedResults.ContainerUSR = createCXString("");
+        AllocatedResults.ContainerUSR = cxstring::createEmpty();
         AllocatedResults.ContainerIsIncomplete = 1;
       }
     }
@@ -912,7 +912,7 @@
   AllocatedCXCodeCompleteResults *Results =
     static_cast<AllocatedCXCodeCompleteResults *>(ResultsIn);
   if (!Results)
-    return createCXString("");
+    return cxstring::createEmpty();
   
   return createCXString(clang_getCString(Results->ContainerUSR));
 }
@@ -922,7 +922,7 @@
   AllocatedCXCodeCompleteResults *Results =
     static_cast<AllocatedCXCodeCompleteResults *>(ResultsIn);
   if (!Results)
-    return createCXString("");
+    return cxstring::createEmpty();
   
   return createCXString(Results->Selector);
 }
Index: tools/libclang/CXString.cpp
===================================================================
--- tools/libclang/CXString.cpp	(revision 173726)
+++ tools/libclang/CXString.cpp	(working copy)
@@ -29,6 +29,13 @@
 // Basic generation of CXStrings.
 //===----------------------------------------------------------------------===//
 
+CXString cxstring::createEmpty() {
+  CXString Str;
+  Str.data = "";
+  Str.private_flags = CXS_Unmanaged;
+  return Str;
+}
+
 CXString cxstring::createCXString(const char *String, bool DupString){
   CXString Str;
   if (DupString) {
Index: tools/libclang/CXType.cpp
===================================================================
--- tools/libclang/CXType.cpp	(revision 173726)
+++ tools/libclang/CXType.cpp	(working copy)
@@ -636,7 +636,7 @@
 
 CXString clang_getDeclObjCTypeEncoding(CXCursor C) {
   if (!clang_isDeclaration(C.kind))
-    return cxstring::createCXString("");
+    return cxstring::createEmpty();
 
   const Decl *D = static_cast<const Decl*>(C.data[0]);
   ASTUnit *AU = cxcursor::getCursorASTUnit(C);
Index: tools/libclang/CIndexDiagnostic.cpp
===================================================================
--- tools/libclang/CIndexDiagnostic.cpp	(revision 173726)
+++ tools/libclang/CIndexDiagnostic.cpp	(working copy)
@@ -67,12 +67,12 @@
   
   CXString getDiagnosticOption(CXString *Disable) const {
     if (Disable)
-      *Disable = createCXString("", false);    
-    return createCXString("", false);
+      *Disable = cxstring::createEmpty();
+    return cxstring::createEmpty();
   }
   
   unsigned getCategory() const { return 0; }
-  CXString getCategoryText() const { return createCXString(""); }
+  CXString getCategoryText() const { return cxstring::createEmpty(); }
 
   unsigned getNumRanges() const { return 0; }
   CXSourceRange getRange(unsigned Range) const { return clang_getNullRange(); }
@@ -80,7 +80,7 @@
   CXString getFixIt(unsigned FixIt, CXSourceRange *ReplacementRange) const {
     if (ReplacementRange)
       *ReplacementRange = clang_getNullRange();
-    return createCXString("", false);
+    return cxstring::createEmpty();
   }
 };    
     
@@ -239,7 +239,7 @@
 
 CXString clang_formatDiagnostic(CXDiagnostic Diagnostic, unsigned Options) {
   if (!Diagnostic)
-    return createCXString("");
+    return cxstring::createEmpty();
 
   CXDiagnosticSeverity Severity = clang_getDiagnosticSeverity(Diagnostic);
 
@@ -377,17 +377,17 @@
 CXString clang_getDiagnosticSpelling(CXDiagnostic Diag) {
   if (CXDiagnosticImpl *D = static_cast<CXDiagnosticImpl *>(Diag))
     return D->getSpelling();
-  return createCXString("");
+  return cxstring::createEmpty();
 }
 
 CXString clang_getDiagnosticOption(CXDiagnostic Diag, CXString *Disable) {
   if (Disable)
-    *Disable = createCXString("");
+    *Disable = cxstring::createEmpty();
 
   if (CXDiagnosticImpl *D = static_cast<CXDiagnosticImpl *>(Diag))
     return D->getDiagnosticOption(Disable);
 
-  return createCXString("");
+  return cxstring::createEmpty();
 }
 
 unsigned clang_getDiagnosticCategory(CXDiagnostic Diag) {
@@ -404,7 +404,7 @@
 CXString clang_getDiagnosticCategoryText(CXDiagnostic Diag) {
   if (CXDiagnosticImpl *D = static_cast<CXDiagnosticImpl *>(Diag))
     return D->getCategoryText();
-  return createCXString("");
+  return cxstring::createEmpty();
 }
   
 unsigned clang_getDiagnosticNumRanges(CXDiagnostic Diag) {
@@ -432,7 +432,7 @@
   if (!D || FixIt >= D->getNumFixIts()) {
     if (ReplacementRange)
       *ReplacementRange = clang_getNullRange();
-    return createCXString("");
+    return cxstring::createEmpty();
   }
   return D->getFixIt(FixIt, ReplacementRange);
 }
Index: tools/c-index-test/c-index-test.c
===================================================================
--- tools/c-index-test/c-index-test.c	(revision 173726)
+++ tools/c-index-test/c-index-test.c	(working copy)
@@ -793,10 +793,13 @@
 static const char* GetCursorSource(CXCursor Cursor) {
   CXSourceLocation Loc = clang_getCursorLocation(Cursor);
   CXString source;
+  const char *sourceCStr;
   CXFile file;
   clang_getExpansionLocation(Loc, &file, 0, 0, 0);
   source = clang_getFileName(file);
-  if (!clang_getCString(source)) {
+  sourceCStr = clang_getCString(source);
+  assert(sourceCStr);
+  if (!sourceCStr[0]) {
     clang_disposeString(source);
     return "<invalid loc>";
   }
