mirror of https://github.com/microsoft/clang.git
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:
parent
285dc6530b
commit
ffcd985dcb
|
@ -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 '('
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue