diff --git a/lib/Lex/PreprocessingRecord.cpp b/lib/Lex/PreprocessingRecord.cpp index 2368b38981..3f288b0fd9 100644 --- a/lib/Lex/PreprocessingRecord.cpp +++ b/lib/Lex/PreprocessingRecord.cpp @@ -145,10 +145,10 @@ unsigned PreprocessingRecord::findEndLocalPreprocessedEntity( } void PreprocessingRecord::addPreprocessedEntity(PreprocessedEntity *Entity) { - SourceLocation Loc = Entity->getSourceRange().getBegin(); + assert(Entity); assert((PreprocessedEntities.empty() || - !SourceMgr.isBeforeInTranslationUnit(Loc, - PreprocessedEntities.back()->getSourceRange().getEnd())) && + !SourceMgr.isBeforeInTranslationUnit(Entity->getSourceRange().getBegin(), + PreprocessedEntities.back()->getSourceRange().getBegin())) && "Adding a preprocessed entity that is before the previous one in TU"); PreprocessedEntities.push_back(Entity); } diff --git a/test/Index/getcursor-pp-pch.c b/test/Index/getcursor-pp-pch.c index dc597ffa94..d68384c660 100644 --- a/test/Index/getcursor-pp-pch.c +++ b/test/Index/getcursor-pp-pch.c @@ -11,6 +11,8 @@ void OBSCURE(func)(int x) { // RUN: c-index-test -cursor-at=%s.h:1:11 \ // RUN: -cursor-at=%s.h:2:14 \ // RUN: -cursor-at=%s.h:4:5 \ +// RUN: -cursor-at=%s.h:5:5 \ +// RUN: -cursor-at=%s.h:5:14 \ // RUN: -cursor-at=%s:5:7 \ // RUN: -cursor-at=%s:6:6 \ // RUN: -cursor-at=%s:6:19 \ @@ -21,14 +23,21 @@ void OBSCURE(func)(int x) { // RUN: c-index-test -cursor-at=%s.h:1:11 \ // RUN: -cursor-at=%s.h:2:14 \ // RUN: -cursor-at=%s.h:4:5 \ +// RUN: -cursor-at=%s.h:5:5 \ +// RUN: -cursor-at=%s.h:5:14 \ // RUN: -cursor-at=%s:5:7 \ // RUN: -cursor-at=%s:6:6 \ // RUN: -cursor-at=%s:6:19 \ // RUN: -include %t.h %s | FileCheck %s +// From header // CHECK: macro definition=OBSCURE // CHECK: macro definition=DECORATION // CHECK: macro expansion=DECORATION:2:9 // CHECK: macro expansion=OBSCURE:1:9 +// CHECK: macro expansion=DECORATION:2:9 + +// From main file +// CHECK: macro expansion=OBSCURE:1:9 // CHECK: macro expansion=OBSCURE:1:9 // CHECK: macro expansion=DECORATION:2:9 diff --git a/test/Index/getcursor-pp-pch.c.h b/test/Index/getcursor-pp-pch.c.h index 184dd8b410..c24a39c0e9 100644 --- a/test/Index/getcursor-pp-pch.c.h +++ b/test/Index/getcursor-pp-pch.c.h @@ -2,3 +2,4 @@ #define DECORATION DECORATION +OBSCURE(DECORATION) diff --git a/tools/libclang/CIndex.cpp b/tools/libclang/CIndex.cpp index 5916d5c337..d9bc5ca259 100644 --- a/tools/libclang/CIndex.cpp +++ b/tools/libclang/CIndex.cpp @@ -3468,12 +3468,6 @@ static enum CXChildVisitResult GetCursorVisitor(CXCursor cursor, cursor.kind == CXCursor_TypeRef) return CXChildVisit_Recurse; - // Don't override a preprocessing cursor with another preprocessing - // cursor; we want the outermost preprocessing cursor. - if (clang_isPreprocessing(cursor.kind) && - clang_isPreprocessing(BestCursor->kind)) - return CXChildVisit_Recurse; - *BestCursor = cursor; return CXChildVisit_Recurse; }