Author: akirtzidis Date: Wed Sep 26 20:42:07 2012 New Revision: 164743 URL: http://llvm.org/viewvc/llvm-project?rev=164743&view=rev Log: Per discussion in http://lists.cs.uiuc.edu/pipermail/cfe-commits/Week-of-Mon-20120917/064551.html have PPCallbacks::InclusionDirective pass the character range for the filename quotes or brackets.
rdar://11113134 & http://llvm.org/PR13880 Modified: cfe/trunk/include/clang/Lex/PPCallbacks.h cfe/trunk/include/clang/Lex/PreprocessingRecord.h cfe/trunk/lib/Frontend/DependencyFile.cpp cfe/trunk/lib/Frontend/DependencyGraph.cpp cfe/trunk/lib/Lex/PPDirectives.cpp cfe/trunk/lib/Lex/PreprocessingRecord.cpp cfe/trunk/lib/Rewrite/Frontend/InclusionRewriter.cpp cfe/trunk/test/FixIt/fixit-include.c cfe/trunk/tools/libclang/Indexing.cpp Modified: cfe/trunk/include/clang/Lex/PPCallbacks.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Lex/PPCallbacks.h?rev=164743&r1=164742&r2=164743&view=diff ============================================================================== --- cfe/trunk/include/clang/Lex/PPCallbacks.h (original) +++ cfe/trunk/include/clang/Lex/PPCallbacks.h Wed Sep 26 20:42:07 2012 @@ -93,6 +93,9 @@ /// \param IsAngled Whether the file name was enclosed in angle brackets; /// otherwise, it was enclosed in quotes. /// + /// \param FilenameRange The character range of the quotes or angle brackets + /// for the written file name. + /// /// \param File The actual file that may be included by this inclusion /// directive. /// @@ -114,8 +117,8 @@ const Token &IncludeTok, StringRef FileName, bool IsAngled, + CharSourceRange FilenameRange, const FileEntry *File, - SourceLocation EndLoc, StringRef SearchPath, StringRef RelativePath) { } @@ -266,14 +269,14 @@ const Token &IncludeTok, StringRef FileName, bool IsAngled, + CharSourceRange FilenameRange, const FileEntry *File, - SourceLocation EndLoc, StringRef SearchPath, StringRef RelativePath) { - First->InclusionDirective(HashLoc, IncludeTok, FileName, IsAngled, File, - EndLoc, SearchPath, RelativePath); - Second->InclusionDirective(HashLoc, IncludeTok, FileName, IsAngled, File, - EndLoc, SearchPath, RelativePath); + First->InclusionDirective(HashLoc, IncludeTok, FileName, IsAngled, + FilenameRange, File, SearchPath, RelativePath); + Second->InclusionDirective(HashLoc, IncludeTok, FileName, IsAngled, + FilenameRange, File, SearchPath, RelativePath); } virtual void EndOfMainFile() { Modified: cfe/trunk/include/clang/Lex/PreprocessingRecord.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Lex/PreprocessingRecord.h?rev=164743&r1=164742&r2=164743&view=diff ============================================================================== --- cfe/trunk/include/clang/Lex/PreprocessingRecord.h (original) +++ cfe/trunk/include/clang/Lex/PreprocessingRecord.h Wed Sep 26 20:42:07 2012 @@ -597,8 +597,8 @@ const Token &IncludeTok, StringRef FileName, bool IsAngled, + CharSourceRange FilenameRange, const FileEntry *File, - SourceLocation EndLoc, StringRef SearchPath, StringRef RelativePath); virtual void If(SourceLocation Loc, SourceRange ConditionRange); Modified: cfe/trunk/lib/Frontend/DependencyFile.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/DependencyFile.cpp?rev=164743&r1=164742&r2=164743&view=diff ============================================================================== --- cfe/trunk/lib/Frontend/DependencyFile.cpp (original) +++ cfe/trunk/lib/Frontend/DependencyFile.cpp Wed Sep 26 20:42:07 2012 @@ -59,8 +59,8 @@ const Token &IncludeTok, StringRef FileName, bool IsAngled, + CharSourceRange FilenameRange, const FileEntry *File, - SourceLocation EndLoc, StringRef SearchPath, StringRef RelativePath); @@ -132,8 +132,8 @@ const Token &IncludeTok, StringRef FileName, bool IsAngled, + CharSourceRange FilenameRange, const FileEntry *File, - SourceLocation EndLoc, StringRef SearchPath, StringRef RelativePath) { if (!File) { Modified: cfe/trunk/lib/Frontend/DependencyGraph.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/DependencyGraph.cpp?rev=164743&r1=164742&r2=164743&view=diff ============================================================================== --- cfe/trunk/lib/Frontend/DependencyGraph.cpp (original) +++ cfe/trunk/lib/Frontend/DependencyGraph.cpp Wed Sep 26 20:42:07 2012 @@ -51,8 +51,8 @@ const Token &IncludeTok, StringRef FileName, bool IsAngled, + CharSourceRange FilenameRange, const FileEntry *File, - SourceLocation EndLoc, StringRef SearchPath, StringRef RelativePath); @@ -72,8 +72,8 @@ const Token &IncludeTok, StringRef FileName, bool IsAngled, + CharSourceRange FilenameRange, const FileEntry *File, - SourceLocation EndLoc, StringRef SearchPath, StringRef RelativePath) { if (!File) Modified: cfe/trunk/lib/Lex/PPDirectives.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Lex/PPDirectives.cpp?rev=164743&r1=164742&r2=164743&view=diff ============================================================================== --- cfe/trunk/lib/Lex/PPDirectives.cpp (original) +++ cfe/trunk/lib/Lex/PPDirectives.cpp Wed Sep 26 20:42:07 2012 @@ -1296,9 +1296,6 @@ case tok::string_literal: Filename = getSpelling(FilenameTok, FilenameBuffer); End = FilenameTok.getLocation(); - // For an angled include, point the end location at the closing '>'. - if (FilenameTok.is(tok::angle_string_literal)) - End = End.getLocWithOffset(Filename.size()-1); CharEnd = End.getLocWithOffset(Filename.size()); break; @@ -1388,8 +1385,9 @@ } // Notify the callback object that we've seen an inclusion directive. - Callbacks->InclusionDirective(HashLoc, IncludeTok, Filename, isAngled, File, - End, SearchPath, RelativePath); + Callbacks->InclusionDirective(HashLoc, IncludeTok, Filename, isAngled, + CharSourceRange::getCharRange(FilenameTok.getLocation(), CharEnd), + File, SearchPath, RelativePath); } if (File == 0) { Modified: cfe/trunk/lib/Lex/PreprocessingRecord.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Lex/PreprocessingRecord.cpp?rev=164743&r1=164742&r2=164743&view=diff ============================================================================== --- cfe/trunk/lib/Lex/PreprocessingRecord.cpp (original) +++ cfe/trunk/lib/Lex/PreprocessingRecord.cpp Wed Sep 26 20:42:07 2012 @@ -389,8 +389,8 @@ const clang::Token &IncludeTok, StringRef FileName, bool IsAngled, + CharSourceRange FilenameRange, const FileEntry *File, - clang::SourceLocation EndLoc, StringRef SearchPath, StringRef RelativePath) { InclusionDirective::InclusionKind Kind = InclusionDirective::Include; @@ -415,7 +415,16 @@ default: llvm_unreachable("Unknown include directive kind"); } - + + SourceLocation EndLoc; + if (!IsAngled) { + EndLoc = FilenameRange.getBegin(); + } else { + EndLoc = FilenameRange.getEnd(); + if (FilenameRange.isCharRange()) + EndLoc = EndLoc.getLocWithOffset(-1); // the InclusionDirective expects + // a token range. + } clang::InclusionDirective *ID = new (*this) clang::InclusionDirective(*this, Kind, FileName, !IsAngled, File, SourceRange(HashLoc, EndLoc)); Modified: cfe/trunk/lib/Rewrite/Frontend/InclusionRewriter.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Rewrite/Frontend/InclusionRewriter.cpp?rev=164743&r1=164742&r2=164743&view=diff ============================================================================== --- cfe/trunk/lib/Rewrite/Frontend/InclusionRewriter.cpp (original) +++ cfe/trunk/lib/Rewrite/Frontend/InclusionRewriter.cpp Wed Sep 26 20:42:07 2012 @@ -57,8 +57,8 @@ const Token &IncludeTok, StringRef FileName, bool IsAngled, + CharSourceRange FilenameRange, const FileEntry *File, - SourceLocation EndLoc, StringRef SearchPath, StringRef RelativePath); void WriteLineInfo(const char *Filename, int Line, @@ -152,8 +152,8 @@ const Token &/*IncludeTok*/, StringRef /*FileName*/, bool /*IsAngled*/, + CharSourceRange /*FilenameRange*/, const FileEntry * /*File*/, - SourceLocation /*EndLoc*/, StringRef /*SearchPath*/, StringRef /*RelativePath*/) { assert(LastInsertedFileChange == FileChanges.end() && "Another inclusion " Modified: cfe/trunk/test/FixIt/fixit-include.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/FixIt/fixit-include.c?rev=164743&r1=164742&r2=164743&view=diff ============================================================================== --- cfe/trunk/test/FixIt/fixit-include.c (original) +++ cfe/trunk/test/FixIt/fixit-include.c Wed Sep 26 20:42:07 2012 @@ -3,8 +3,10 @@ // RUN: cp %S/fixit-include.h %T // RUN: not %clang_cc1 -fsyntax-only -fixit %t // RUN: %clang_cc1 -Wall -pedantic %t +// RUN: %clang_cc1 -fsyntax-only -fdiagnostics-parseable-fixits %s 2>&1 | FileCheck %s #include <fixit-include.h> // expected-error {{'fixit-include.h' file not found with <angled> include; use "quotes" instead}} +// CHECK: fix-it:{{.*}}:{8:10-8:27} #pragma does_not_exist // expected-warning {{unknown pragma ignored}} Modified: cfe/trunk/tools/libclang/Indexing.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/libclang/Indexing.cpp?rev=164743&r1=164742&r2=164743&view=diff ============================================================================== --- cfe/trunk/tools/libclang/Indexing.cpp (original) +++ cfe/trunk/tools/libclang/Indexing.cpp Wed Sep 26 20:42:07 2012 @@ -68,8 +68,8 @@ const Token &IncludeTok, StringRef FileName, bool IsAngled, + CharSourceRange FilenameRange, const FileEntry *File, - SourceLocation EndLoc, StringRef SearchPath, StringRef RelativePath) { bool isImport = (IncludeTok.is(tok::identifier) && _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
