From: Chris Lattner Date: Wed, 18 Feb 2009 18:52:52 +0000 (+0000) Subject: Fix some issues handling sub-token locations that come from macro expansions. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=2197c963543397777919cec22b65feb31a9ddf79;p=clang 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 --- diff --git a/lib/Lex/Preprocessor.cpp b/lib/Lex/Preprocessor.cpp index f50004c666..789d931221 100644 --- a/lib/Lex/Preprocessor.cpp +++ b/lib/Lex/Preprocessor.cpp @@ -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 diff --git a/lib/Sema/SemaChecking.cpp b/lib/Sema/SemaChecking.cpp index 818a892617..38cc427a00 100644 --- a/lib/Sema/SemaChecking.cpp +++ b/lib/Sema/SemaChecking.cpp @@ -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); }