From: Douglas Gregor Date: Wed, 20 Apr 2011 21:16:21 +0000 (+0000) Subject: When translating a Clang source range into a libclang source range, X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=ffcd985dcbff204108f37dea5b9fe4e6709e965d;p=clang 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 . git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@129872 91177308-0d34-0410-b5e6-96231b3b80d8 --- 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);