Have clang_getCursorSource() return NULL when the source location is invalid or refers to a built-in buffer.  Implements <rdar://problem/7296243>.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@89044 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/tools/c-index-test/c-index-test.c b/tools/c-index-test/c-index-test.c
index 36deb2e..3b0e4c8 100644
--- a/tools/c-index-test/c-index-test.c
+++ b/tools/c-index-test/c-index-test.c
@@ -40,11 +40,18 @@
   }
 }
 
+static const char* GetCursorSource(CXCursor Cursor) {  
+  const char *source = clang_getCursorSource(Cursor);
+  if (!source)
+    return "<invalid loc>";  
+  return basename(source);
+}
+
 static void DeclVisitor(CXDecl Dcl, CXCursor Cursor, CXClientData Filter)
 {
   if (!Filter || (Cursor.kind == *(enum CXCursorKind *)Filter)) {
     CXString string;
-    printf("// CHECK: %s:%d:%d: ", basename(clang_getCursorSource(Cursor)),
+    printf("// CHECK: %s:%d:%d: ", GetCursorSource(Cursor),
                                  clang_getCursorLine(Cursor),
                                  clang_getCursorColumn(Cursor));
     PrintCursor(Cursor);
@@ -58,7 +65,7 @@
 {
   if (!Filter || (Cursor.kind == *(enum CXCursorKind *)Filter)) {
     CXString string;
-    printf("// CHECK: %s:%d:%d: ", basename(clang_getCursorSource(Cursor)),
+    printf("// CHECK: %s:%d:%d: ", GetCursorSource(Cursor),
                                  clang_getCursorLine(Cursor),
                                  clang_getCursorColumn(Cursor));
     PrintCursor(Cursor);
@@ -94,8 +101,8 @@
             /* Nothing found here; that's fine. */
           } else if (Ref.kind != CXCursor_FunctionDecl) {
             CXString string;
-            printf("// CHECK: %s:%d:%d: ", basename(clang_getCursorSource(Ref)),
-                                             curLine, curColumn);
+            printf("// CHECK: %s:%d:%d: ", GetCursorSource(Ref),
+                   curLine, curColumn);
             PrintCursor(Ref);
             string = clang_getDeclSpelling(Ref.decl);
             printf(" [Context:%s]\n", clang_getCString(string));