зеркало из https://github.com/microsoft/clang-1.git
Fix some issues handling sub-token locations that come from macro expansions.
We now emit: t.m:6:15: warning: field width should have type 'int', but argument has type 'unsigned int' printf(STR, (unsigned) 1, 1); ^ ~~~~~~~~~~~~ t.m:3:18: note: instantiated from: #define STR "abc%*ddef" ^ which has the correct location in the string literal in the note line. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@64936 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Родитель
5934e75d98
Коммит
2197c96354
|
@ -296,7 +296,7 @@ SourceLocation Preprocessor::AdvanceToTokenCharacter(SourceLocation TokStart,
|
|||
// the instantiation point (the name). We could point to the source
|
||||
// character, but without also pointing to instantiation info, this is
|
||||
// confusing.
|
||||
if (CharNo == 0 || TokStart.isMacroID()) return TokStart;
|
||||
if (CharNo == 0) return TokStart;
|
||||
|
||||
// Figure out how many physical characters away the specified instantiation
|
||||
// character is. This needs to take into consideration newlines and
|
||||
|
|
|
@ -77,17 +77,12 @@ SourceLocation Sema::getLocationOfStringLiteralByte(const StringLiteral *SL,
|
|||
|
||||
// The length of the string is the token length minus the two quotes.
|
||||
TokNumBytes -= 2;
|
||||
|
||||
// If we found the token we're looking for, return the location.
|
||||
|
||||
// FIXME: This should consider character escapes!
|
||||
|
||||
// If the byte is in this token, return the location of the byte.
|
||||
if (ByteNo < TokNumBytes ||
|
||||
(ByteNo == TokNumBytes && TokNo == SL->getNumConcatenated())) {
|
||||
// If the original token came from a macro expansion, just return the
|
||||
// start of the token. We don't want to magically jump to the spelling
|
||||
// for a diagnostic. We do the above business in case some tokens come
|
||||
// from a macro expansion but others don't.
|
||||
if (!StrTokLoc.isFileID()) return StrTokLoc;
|
||||
|
||||
// We advance +1 to step over the '"'.
|
||||
return PP.AdvanceToTokenCharacter(StrTokLoc, ByteNo+1);
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче