diff options
| author | Chris Lattner <sabre@nondot.org> | 2009-01-27 07:57:44 +0000 |
|---|---|---|
| committer | Chris Lattner <sabre@nondot.org> | 2009-01-27 07:57:44 +0000 |
| commit | f1ca7d3e02e0fb4d5fa6ed56459a31776e82a605 (patch) | |
| tree | 872fc3a12f4820197ea23bf6e061c048bdce7b14 /clang/Driver/DependencyFile.cpp | |
| parent | c360bf2e4868ec6455cea10e26764456098adc5e (diff) | |
| download | bcm5719-llvm-f1ca7d3e02e0fb4d5fa6ed56459a31776e82a605.tar.gz bcm5719-llvm-f1ca7d3e02e0fb4d5fa6ed56459a31776e82a605.zip | |
Introduce a new PresumedLoc class to represent the concept of a location
as reported to the user and as manipulated by #line. This is what __FILE__,
__INCLUDE_LEVEL__, diagnostics and other things should follow (but not
dependency generation!).
This patch also includes several cleanups along the way:
- SourceLocation now has a dump method, and several other places
that did similar things now use it.
- I cleaned up some code in AnalysisConsumer, but it should probably be
simplified further now that NamedDecl is better.
- TextDiagnosticPrinter is now simplified and cleaned up a bit.
This patch is a prerequisite for #line, but does not actually provide
any #line functionality.
llvm-svn: 63098
Diffstat (limited to 'clang/Driver/DependencyFile.cpp')
| -rw-r--r-- | clang/Driver/DependencyFile.cpp | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/clang/Driver/DependencyFile.cpp b/clang/Driver/DependencyFile.cpp index 282164fdd6c..0d4ee91f01b 100644 --- a/clang/Driver/DependencyFile.cpp +++ b/clang/Driver/DependencyFile.cpp @@ -13,6 +13,7 @@ #include "clang.h" #include "clang/Basic/SourceManager.h" +#include "clang/Basic/FileManager.h" #include "clang/Lex/Preprocessor.h" #include "clang/Lex/PPCallbacks.h" #include "clang/Lex/DirectoryLookup.h" @@ -167,8 +168,14 @@ void DependencyFileCallback::FileChanged(SourceLocation Loc, SrcMgr::CharacteristicKind FileType) { if (Reason != PPCallbacks::EnterFile) return; - - const char *Filename = PP->getSourceManager().getSourceName(Loc); + + // Depedency generation really does want to go all the way to the file entry + // for a source location to find out what is depended on. We do not want + // #line markers to affect dependency generation! + SourceManager &SM = PP->getSourceManager(); + + FileID FID = SM.getFileID(SM.getInstantiationLoc(Loc)); + const char *Filename = SM.getFileEntryForID(FID)->getName(); if (!FileMatchesDepCriteria(Filename, FileType)) return; |

