]> granicus.if.org Git - clang/commitdiff
Fix some issues handling sub-token locations that come from macro expansions.
authorChris Lattner <sabre@nondot.org>
Wed, 18 Feb 2009 18:52:52 +0000 (18:52 +0000)
committerChris Lattner <sabre@nondot.org>
Wed, 18 Feb 2009 18:52:52 +0000 (18:52 +0000)
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

lib/Lex/Preprocessor.cpp
lib/Sema/SemaChecking.cpp

index f50004c666b0a1fbe7c2d25a825bc0c561dd9f79..789d9312215be50ba6585b106c3f07d4a6239294 100644 (file)
@@ -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
index 818a892617e1ce48a278b9748897b9312160f07b..38cc427a0044a0777aadd0aeb440cb1343e64c63 100644 (file)
@@ -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);
     }