diff options
author | Douglas Gregor <dgregor@apple.com> | 2011-04-20 21:16:21 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2011-04-20 21:16:21 +0000 |
commit | ffcd985dcbff204108f37dea5b9fe4e6709e965d (patch) | |
tree | f925f3879ef8b8f11447aed4946c43a042e687ab | |
parent | 285dc6530b37d632cd858bac444d29044de4d283 (diff) |
When translating a Clang source range into a libclang source range,
adjust the a ending macro location to the end of the instantiation
location before adjusting it to the end of the token. Fixes
<rdar://problem/9021561>.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@129872 91177308-0d34-0410-b5e6-96231b3b80d8
-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); |