]> granicus.if.org Git - clang/commitdiff
c-index-test shouldn't crash when a goto has no matching label. Fixes <rdar://proble...
authorTed Kremenek <kremenek@apple.com>
Tue, 15 Mar 2011 23:47:49 +0000 (23:47 +0000)
committerTed Kremenek <kremenek@apple.com>
Tue, 15 Mar 2011 23:47:49 +0000 (23:47 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@127711 91177308-0d34-0410-b5e6-96231b3b80d8

test/Index/cindex-on-invalid.m
tools/libclang/CIndex.cpp

index d2d952d8b19ecd993ed08199b0e58bfa3f2a0cd7..d223c2ad590e66940878aba02d823240767c05d6 100644 (file)
@@ -1,6 +1,13 @@
 // RUN: c-index-test -test-load-source local %s 2>&1 | FileCheck %s
 
+// <rdar://problem/9123493>
+void test() {                              
+  goto exit;
+}
+
 int foo;
 int
 
-// CHECK: cindex-on-invalid.m:6:70: error: expected identifier or '('
\ No newline at end of file
+// CHECK: cindex-on-invalid.m:5:8: error: use of undeclared label 'exit'
+// CHECK: cindex-on-invalid.m:13:1: error: expected identifier or '('
+
index 290146fa4dd1035cbabc6df716a657d4089c9ea7..538efd7ae380b0731b2adfbcdb9437e14715bcb9 100644 (file)
@@ -3709,7 +3709,9 @@ CXCursor clang_getCursorReferenced(CXCursor C) {
   if (clang_isStatement(C.kind)) {
     Stmt *S = getCursorStmt(C);
     if (GotoStmt *Goto = dyn_cast_or_null<GotoStmt>(S))
-      return MakeCXCursor(Goto->getLabel()->getStmt(), getCursorDecl(C), tu);
+      if (LabelDecl *label = Goto->getLabel())
+        if (LabelStmt *labelS = label->getStmt())
+        return MakeCXCursor(labelS, getCursorDecl(C), tu);
 
     return clang_getNullCursor();
   }