aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Basic/SourceManager.cpp4
-rw-r--r--Driver/clang.cpp5
-rw-r--r--include/clang/Basic/SourceManager.h11
3 files changed, 18 insertions, 2 deletions
diff --git a/Basic/SourceManager.cpp b/Basic/SourceManager.cpp
index d7039b3651..fe213426b9 100644
--- a/Basic/SourceManager.cpp
+++ b/Basic/SourceManager.cpp
@@ -508,6 +508,7 @@ MacroIDInfo MacroIDInfo::ReadVal(llvm::Deserializer& D) {
void SourceManager::Emit(llvm::Serializer& S) const {
S.EnterBlock();
S.EmitPtr(this);
+ S.EmitInt(MainFileID);
// Emit: FileInfos. Just emit the file name.
S.EnterBlock();
@@ -541,6 +542,9 @@ SourceManager::CreateAndRegister(llvm::Deserializer& D, FileManager& FMgr){
SourceManager *M = new SourceManager();
D.RegisterPtr(M);
+ // Read: the FileID of the main source file of the translation unit.
+ M->MainFileID = D.ReadInt();
+
std::vector<char> Buf;
{ // Read: FileInfos.
diff --git a/Driver/clang.cpp b/Driver/clang.cpp
index 63f43497ce..20900c2f6b 100644
--- a/Driver/clang.cpp
+++ b/Driver/clang.cpp
@@ -1175,7 +1175,10 @@ int main(int argc, char **argv) {
std::vector<char> PredefineBuffer;
unsigned MainFileID = InitializePreprocessor(PP, InFile, PredefineBuffer);
- if (!MainFileID) continue;
+ if (!MainFileID)
+ continue;
+
+ SourceMgr.setMainFileID(MainFileID);
ProcessInputFile(PP, MainFileID, InFile, *DiagClient);
diff --git a/include/clang/Basic/SourceManager.h b/include/clang/Basic/SourceManager.h
index 325f9ed106..311bea1d3c 100644
--- a/include/clang/Basic/SourceManager.h
+++ b/include/clang/Basic/SourceManager.h
@@ -220,8 +220,11 @@ class SourceManager {
unsigned LastLineNoFilePos;
unsigned LastLineNoResult;
+ /// MainFileID - The file ID for the main source file of the translation unit.
+ unsigned MainFileID;
+
public:
- SourceManager() : LastLineNoFileIDQuery(~0U) {}
+ SourceManager() : LastLineNoFileIDQuery(~0U), MainFileID(0) {}
~SourceManager() {}
void clearIDTables() {
@@ -231,6 +234,12 @@ public:
LastLineNoContentCache = 0;
}
+ /// getMainFileID - Returns the FileID of the main source file.
+ unsigned getMainFileID() const { return MainFileID; }
+
+ /// setMainFileID - Set the FileID of the main source file.
+ void setMainFileID(unsigned ID) { MainFileID = ID; }
+
/// createFileID - Create a new FileID that represents the specified file
/// being #included from the specified IncludePosition. This returns 0 on
/// error and translates NULL into standard input.