]> granicus.if.org Git - clang/commitdiff
Do not compare invalid source locations
authorDouglas Gregor <dgregor@apple.com>
Mon, 1 Nov 2010 20:13:04 +0000 (20:13 +0000)
committerDouglas Gregor <dgregor@apple.com>
Mon, 1 Nov 2010 20:13:04 +0000 (20:13 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@117946 91177308-0d34-0410-b5e6-96231b3b80d8

tools/libclang/CIndex.cpp

index 279e0fb3a2cce3d2ddddedca3edc4a797f59569b..44493497bdbb2e442e1032242a8cb8a94b94c04e 100644 (file)
@@ -3635,7 +3635,9 @@ enum CXChildVisitResult
 AnnotateTokensWorker::Visit(CXCursor cursor, CXCursor parent) {  
   CXSourceLocation Loc = clang_getCursorLocation(cursor);
   SourceRange cursorRange = getRawCursorExtent(cursor);
-  
+  if (cursorRange.isInvalid())
+    return CXChildVisit_Recurse;
+        
   if (clang_isPreprocessing(cursor.kind)) {    
     // For macro instantiations, just note where the beginning of the macro
     // instantiation occurs.
@@ -3644,9 +3646,6 @@ AnnotateTokensWorker::Visit(CXCursor cursor, CXCursor parent) {
       return CXChildVisit_Recurse;
     }
     
-    if (cursorRange.isInvalid())
-      return CXChildVisit_Continue;
-    
     // Items in the preprocessing record are kept separate from items in
     // declarations, so we keep a separate token index.
     unsigned SavedTokIdx = TokIdx;
@@ -3711,13 +3710,13 @@ AnnotateTokensWorker::Visit(CXCursor cursor, CXCursor parent) {
       if (TypeSourceInfo *TI = DD->getTypeSourceInfo()) {
         TypeLoc TL = TI->getTypeLoc();
         SourceLocation TLoc = TL.getSourceRange().getBegin();
-        if (TLoc.isValid() && 
+        if (TLoc.isValid() && L.isValid() &&
             SrcMgr.isBeforeInTranslationUnit(TLoc, L))
           cursorRange.setBegin(TLoc);
       }
     }
   }
-
+  
   // If the location of the cursor occurs within a macro instantiation, record
   // the spelling location of the cursor in our annotation map.  We can then
   // paper over the token labelings during a post-processing step to try and