diff options
-rw-r--r-- | test/Index/cindex-on-invalid.m | 10 | ||||
-rw-r--r-- | tools/libclang/CIndex.cpp | 2 |
2 files changed, 10 insertions, 2 deletions
diff --git a/test/Index/cindex-on-invalid.m b/test/Index/cindex-on-invalid.m index d223c2ad59..6eff24baf8 100644 --- a/test/Index/cindex-on-invalid.m +++ b/test/Index/cindex-on-invalid.m @@ -6,8 +6,16 @@ void test() { } int foo; + +#define NO 0 + +void f(int y) { + if (y = NO); +} + int // CHECK: cindex-on-invalid.m:5:8: error: use of undeclared label 'exit' -// CHECK: cindex-on-invalid.m:13:1: error: expected identifier or '(' +// CHECK: cindex-on-invalid.m:13:9:{13:7-13:13} +// CHECK: cindex-on-invalid.m:21:1: error: expected identifier or '(' diff --git a/tools/libclang/CIndex.cpp b/tools/libclang/CIndex.cpp index ce02088281..870e6b2018 100644 --- a/tools/libclang/CIndex.cpp +++ b/tools/libclang/CIndex.cpp @@ -116,7 +116,7 @@ CXSourceRange cxloc::translateSourceRange(const SourceManager &SM, // location accordingly. SourceLocation EndLoc = R.getEnd(); if (EndLoc.isValid() && EndLoc.isMacroID()) - EndLoc = SM.getSpellingLoc(EndLoc); + EndLoc = SM.getInstantiationRange(EndLoc).second; if (R.isTokenRange() && !EndLoc.isInvalid() && EndLoc.isFileID()) { unsigned Length = Lexer::MeasureTokenLength(EndLoc, SM, LangOpts); EndLoc = EndLoc.getFileLocWithOffset(Length); |