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
This commit is contained in:
Douglas Gregor 2011-04-20 21:16:21 +00:00
parent 285dc6530b
commit ffcd985dcb
2 changed files with 10 additions and 2 deletions

View File

@ -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 '('

View File

@ -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);