summaryrefslogtreecommitdiffstats
path: root/clang/lib/Serialization
diff options
context:
space:
mode:
authorDouglas Gregor <dgregor@apple.com>2012-10-18 21:18:25 +0000
committerDouglas Gregor <dgregor@apple.com>2012-10-18 21:18:25 +0000
commite68c2cb502718aa1f11addde1e609e7a5052fa0e (patch)
treea475df4f82611afb90f437efd5f6abe5458c39f6 /clang/lib/Serialization
parent4a11540c27a6040896c2dcd6d4c0f3ccfd739626 (diff)
downloadbcm5719-llvm-e68c2cb502718aa1f11addde1e609e7a5052fa0e.tar.gz
bcm5719-llvm-e68c2cb502718aa1f11addde1e609e7a5052fa0e.zip
Move information about the "original file" from the ASTReader into the
module files. llvm-svn: 166228
Diffstat (limited to 'clang/lib/Serialization')
-rw-r--r--clang/lib/Serialization/ASTReader.cpp38
1 files changed, 21 insertions, 17 deletions
diff --git a/clang/lib/Serialization/ASTReader.cpp b/clang/lib/Serialization/ASTReader.cpp
index 489e0a6abd2..deb5adeb91b 100644
--- a/clang/lib/Serialization/ASTReader.cpp
+++ b/clang/lib/Serialization/ASTReader.cpp
@@ -819,11 +819,14 @@ void ASTReader::Error(unsigned DiagID,
/// \brief Tell the AST listener about the predefines buffers in the chain.
bool ASTReader::CheckPredefinesBuffers() {
- if (Listener)
+ if (Listener) {
+ // We only care about the primary module.
+ ModuleFile &M = ModuleMgr.getPrimaryModule();
return Listener->ReadPredefinesBuffer(PCHPredefinesBuffers,
- ActualOriginalFileName,
+ M.ActualOriginalSourceFileName,
SuggestedPredefines,
FileMgr);
+ }
return false;
}
@@ -1833,7 +1836,7 @@ ASTReader::ASTReadResult ASTReader::ReadControlBlock(ModuleFile &F,
}
case LANGUAGE_OPTIONS:
- if (&F == *ModuleMgr.begin() &&
+ if (Listener && &F == *ModuleMgr.begin() &&
ParseLanguageOptions(F, Record) && !DisableValidation)
return IgnorePCH;
break;
@@ -1854,7 +1857,7 @@ ASTReader::ASTReadResult ASTReader::ReadControlBlock(ModuleFile &F,
TargetOpts.Features.push_back(ReadString(Record, Idx));
}
- if (Listener->ReadTargetOptions(F, TargetOpts))
+ if (Listener->ReadTargetOptions(F, TargetOpts) && !DisableValidation)
return IgnorePCH;
}
break;
@@ -1863,11 +1866,10 @@ ASTReader::ASTReadResult ASTReader::ReadControlBlock(ModuleFile &F,
case ORIGINAL_FILE:
// Only record from the primary AST file.
if (&F == *ModuleMgr.begin()) {
- OriginalFileID = FileID::get(Record[0]);
-
- ActualOriginalFileName.assign(BlobStart, BlobLen);
- OriginalFileName = ActualOriginalFileName;
- MaybeAddSystemRootToFilename(OriginalFileName);
+ F.OriginalSourceFileID = FileID::get(Record[0]);
+ F.ActualOriginalSourceFileName.assign(BlobStart, BlobLen);
+ F.OriginalSourceFileName = F.ActualOriginalSourceFileName;
+ MaybeAddSystemRootToFilename(F.OriginalSourceFileName);
}
break;
@@ -2980,17 +2982,19 @@ ASTReader::ASTReadResult ASTReader::ReadAST(const std::string &FileName,
if (DeserializationListener)
DeserializationListener->ReaderInitialized(this);
- if (!OriginalFileID.isInvalid()) {
- OriginalFileID = FileID::get(ModuleMgr.getPrimaryModule().SLocEntryBaseID
- + OriginalFileID.getOpaqueValue() - 1);
+ ModuleFile &PrimaryModule = ModuleMgr.getPrimaryModule();
+ if (!PrimaryModule.OriginalSourceFileID.isInvalid()) {
+ PrimaryModule.OriginalSourceFileID
+ = FileID::get(PrimaryModule.SLocEntryBaseID
+ + PrimaryModule.OriginalSourceFileID.getOpaqueValue() - 1);
- // If this AST file is a precompiled preamble, then set the preamble file ID
- // of the source manager to the file source file from which the preamble was
- // built.
+ // If this AST file is a precompiled preamble, then set the
+ // preamble file ID of the source manager to the file source file
+ // from which the preamble was built.
if (Type == MK_Preamble) {
- SourceMgr.setPreambleFileID(OriginalFileID);
+ SourceMgr.setPreambleFileID(PrimaryModule.OriginalSourceFileID);
} else if (Type == MK_MainFile) {
- SourceMgr.setMainFileID(OriginalFileID);
+ SourceMgr.setMainFileID(PrimaryModule.OriginalSourceFileID);
}
}
OpenPOWER on IntegriCloud