forked from OSchip/llvm-project
Allow Lexer::getLocForEndOfToken to return the location just passed the macro instantiation
if the location given points at the last token of the macro instantiation. Fixes rdar://9045701. llvm-svn: 133804
This commit is contained in:
parent
ca88b4abec
commit
2cfce18645
|
@ -679,9 +679,17 @@ SourceLocation Lexer::AdvanceToTokenCharacter(SourceLocation TokStart,
|
|||
SourceLocation Lexer::getLocForEndOfToken(SourceLocation Loc, unsigned Offset,
|
||||
const SourceManager &SM,
|
||||
const LangOptions &Features) {
|
||||
if (Loc.isInvalid() || !Loc.isFileID())
|
||||
if (Loc.isInvalid())
|
||||
return SourceLocation();
|
||||
|
||||
|
||||
if (Loc.isMacroID()) {
|
||||
if (Offset > 0 || !SM.isAtEndOfMacroInstantiation(Loc))
|
||||
return SourceLocation(); // Points inside the macro instantiation.
|
||||
|
||||
// Continue and find the location just after the macro instantiation.
|
||||
Loc = SM.getInstantiationRange(Loc).second;
|
||||
}
|
||||
|
||||
unsigned Len = Lexer::MeasureTokenLength(Loc, SM, Features);
|
||||
if (Len > Offset)
|
||||
Len = Len - Offset;
|
||||
|
|
|
@ -74,6 +74,11 @@ void foo() {
|
|||
X = 4 // expected-error{{expected ';' after expression}}
|
||||
}
|
||||
|
||||
// rdar://9045701
|
||||
void test9045701(int x) {
|
||||
#define VALUE 0
|
||||
x = VALUE // expected-error{{expected ';' after expression}}
|
||||
}
|
||||
|
||||
// rdar://7980651
|
||||
typedef int intptr_t; // expected-note {{'intptr_t' declared here}}
|
||||
|
|
Loading…
Reference in New Issue