]> granicus.if.org Git - clang/commitdiff
Have clang_getCursorSource() return NULL when the source location is invalid or refer...
authorTed Kremenek <kremenek@apple.com>
Tue, 17 Nov 2009 05:31:58 +0000 (05:31 +0000)
committerTed Kremenek <kremenek@apple.com>
Tue, 17 Nov 2009 05:31:58 +0000 (05:31 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@89044 91177308-0d34-0410-b5e6-96231b3b80d8

test/Index/c-index-api-test.m
tools/CIndex/CIndex.cpp
tools/c-index-test/c-index-test.c

index dff3b9bda38c42421b328b2620129f913b8fff89..20071baf4802ab862ece309ca3731f8dd3b8aff6 100644 (file)
@@ -8,13 +8,13 @@
 // CHECK: <invalid loc>:0:0: ObjCInterfaceDecl=Protocol:0:0 [Context=c-index-api-test.m]
 // CHECK: <invalid loc>:0:0: TypedefDecl=id:0:0 [Context=c-index-api-test.m]
 // CHECK: <invalid loc>:0:0: TypedefDecl=Class:0:0 [Context=c-index-api-test.m]
-// CHECK: <built-in>:80:16: StructDecl=__va_list_tag:80:16 [Context=c-index-api-test.m]
-// CHECK: <built-in>:80:42: FieldDecl=gp_offset:80:42 [Context=__va_list_tag]
-// CHECK: <built-in>:80:63: FieldDecl=fp_offset:80:63 [Context=__va_list_tag]
-// CHECK: <built-in>:80:81: FieldDecl=overflow_arg_area:80:81 [Context=__va_list_tag]
-// CHECK: <built-in>:80:107: FieldDecl=reg_save_area:80:107 [Context=__va_list_tag]
-// CHECK: <built-in>:80:123: TypedefDecl=__va_list_tag:80:123 [Context=c-index-api-test.m]
-// CHECK: <built-in>:80:159: TypedefDecl=__builtin_va_list:80:159 [Context=c-index-api-test.m]
+// CHECK: <invalid loc>:80:16: StructDecl=__va_list_tag:80:16 [Context=c-index-api-test.m]
+// CHECK: <invalid loc>:80:42: FieldDecl=gp_offset:80:42 [Context=__va_list_tag]
+// CHECK: <invalid loc>:80:63: FieldDecl=fp_offset:80:63 [Context=__va_list_tag]
+// CHECK: <invalid loc>:80:81: FieldDecl=overflow_arg_area:80:81 [Context=__va_list_tag]
+// CHECK: <invalid loc>:80:107: FieldDecl=reg_save_area:80:107 [Context=__va_list_tag]
+// CHECK: <invalid loc>:80:123: TypedefDecl=__va_list_tag:80:123 [Context=c-index-api-test.m]
+// CHECK: <invalid loc>:80:159: TypedefDecl=__builtin_va_list:80:159 [Context=c-index-api-test.m]
 // 
 
 @interface Foo 
index cf33d7d8cdc6ccd5264471adad9fd200f56e4a4d..493d4f2de6f3da7330c898d999913a44220b71de 100644 (file)
@@ -980,8 +980,11 @@ const char *clang_getCursorSource(CXCursor C)
   SourceManager &SourceMgr = ND->getASTContext().getSourceManager();
   
   SourceLocation SLoc = getLocationFromCursor(C, SourceMgr, ND);
-  if (SLoc.isFileID())
-    return SourceMgr.getBufferName(SLoc);
+  
+  if (SLoc.isFileID()) {
+    const char *bufferName = SourceMgr.getBufferName(SLoc);
+    return bufferName[0] == '<' ? NULL : bufferName;
+  }
 
   // Retrieve the file in which the macro was instantiated, then provide that
   // buffer name.
index 36deb2e6d94667d7151d59d7a7015a08dc24159d..3b0e4c8e9c3a4354462208265e0845da69c7e408 100644 (file)
@@ -40,11 +40,18 @@ static void PrintCursor(CXCursor Cursor) {
   }
 }
 
+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 @@ static void TranslationUnitVisitor(CXTranslationUnit Unit, CXCursor Cursor,
 {
   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 @@ static void TranslationUnitVisitor(CXTranslationUnit Unit, CXCursor Cursor,
             /* 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));