summaryrefslogtreecommitdiffstats
path: root/clang/lib/Serialization/ASTReader.cpp
diff options
context:
space:
mode:
authorDouglas Gregor <dgregor@apple.com>2013-02-06 22:40:31 +0000
committerDouglas Gregor <dgregor@apple.com>2013-02-06 22:40:31 +0000
commit8a114ab557f04ac015dc67a4d92ddeb8978833e0 (patch)
treeba9747a1c74fb35ea146d1da8ff342ea82f81a6c /clang/lib/Serialization/ASTReader.cpp
parentd5d4c89bf0484422d52857d193fbced51472d5d1 (diff)
downloadbcm5719-llvm-8a114ab557f04ac015dc67a4d92ddeb8978833e0.tar.gz
bcm5719-llvm-8a114ab557f04ac015dc67a4d92ddeb8978833e0.zip
Detect when we end up trying to load conflicting module files.
This can happen when one abuses precompiled headers by passing more -D options when using a precompiled hedaer than when it was built. This is intentionally permitted by precompiled headers (and is exploited by some build environments), but causes problems for modules. First part of <rdar://problem/13165109>, detecting when something when horribly wrong. llvm-svn: 174554
Diffstat (limited to 'clang/lib/Serialization/ASTReader.cpp')
-rw-r--r--clang/lib/Serialization/ASTReader.cpp13
1 files changed, 12 insertions, 1 deletions
diff --git a/clang/lib/Serialization/ASTReader.cpp b/clang/lib/Serialization/ASTReader.cpp
index dd2d5d12bcc..aa4c448e989 100644
--- a/clang/lib/Serialization/ASTReader.cpp
+++ b/clang/lib/Serialization/ASTReader.cpp
@@ -3408,7 +3408,18 @@ bool ASTReader::ReadSubmoduleBlock(ModuleFile &F) {
Error("too many submodules");
return true;
}
-
+
+ if (const FileEntry *CurFile = CurrentModule->getASTFile()) {
+ if (CurFile != F.File) {
+ if (!Diags.isDiagnosticInFlight()) {
+ Diag(diag::err_module_file_conflict)
+ << CurrentModule->getTopLevelModuleName()
+ << CurFile->getName()
+ << F.File->getName();
+ }
+ return true;
+ }
+ }
CurrentModule->setASTFile(F.File);
CurrentModule->IsFromModuleFile = true;
CurrentModule->IsSystem = IsSystem || CurrentModule->IsSystem;
OpenPOWER on IntegriCloud