diff options
author | Douglas Gregor <dgregor@apple.com> | 2013-02-06 22:40:31 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2013-02-06 22:40:31 +0000 |
commit | 8a114ab557f04ac015dc67a4d92ddeb8978833e0 (patch) | |
tree | ba9747a1c74fb35ea146d1da8ff342ea82f81a6c /clang/lib/Serialization/ASTReader.cpp | |
parent | d5d4c89bf0484422d52857d193fbced51472d5d1 (diff) | |
download | bcm5719-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.cpp | 13 |
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; |