Added storage of the FileID of the the main source file of a translation unit
in SourceManager.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@45225 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/Basic/SourceManager.cpp b/Basic/SourceManager.cpp
index d7039b3..fe21342 100644
--- a/Basic/SourceManager.cpp
+++ b/Basic/SourceManager.cpp
@@ -508,6 +508,7 @@
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 *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 63f4349..20900c2 100644
--- a/Driver/clang.cpp
+++ b/Driver/clang.cpp
@@ -1175,7 +1175,10 @@
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 325f9ed..311bea1 100644
--- a/include/clang/Basic/SourceManager.h
+++ b/include/clang/Basic/SourceManager.h
@@ -220,8 +220,11 @@
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 @@
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.