diff options
author | Douglas Gregor <dgregor@apple.com> | 2012-01-05 00:12:00 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2012-01-05 00:12:00 +0000 |
commit | fcc54a3b91c9b429e0384238fbe42f73fec757ca (patch) | |
tree | fdf64b6cc2f702132da345819c287977c6914d2e /clang/lib/Lex/ModuleMap.cpp | |
parent | 088f1bc29514735f4b08e7108157ef15b5cd42a4 (diff) | |
download | llvm-fcc54a3b91c9b429e0384238fbe42f73fec757ca.zip llvm-fcc54a3b91c9b429e0384238fbe42f73fec757ca.tar.gz llvm-fcc54a3b91c9b429e0384238fbe42f73fec757ca.tar.bz2 |
If we already have a definition for a top-level module that we deserialized from a module file, don't bother parsing a new definition
llvm-svn: 147574
Diffstat (limited to 'clang/lib/Lex/ModuleMap.cpp')
-rw-r--r-- | clang/lib/Lex/ModuleMap.cpp | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/clang/lib/Lex/ModuleMap.cpp b/clang/lib/Lex/ModuleMap.cpp index 42257f5..6c13938 100644 --- a/clang/lib/Lex/ModuleMap.cpp +++ b/clang/lib/Lex/ModuleMap.cpp @@ -790,6 +790,19 @@ void ModuleMapParser::parseModuleDecl() { // Determine whether this (sub)module has already been defined. if (Module *Existing = Map.lookupModuleQualified(ModuleName, ActiveModule)) { + if (Existing->DefinitionLoc.isInvalid() && !ActiveModule) { + // Skip the module definition. + skipUntil(MMToken::RBrace); + if (Tok.is(MMToken::RBrace)) + consumeToken(); + else { + Diags.Report(Tok.getLocation(), diag::err_mmap_expected_rbrace); + Diags.Report(LBraceLoc, diag::note_mmap_lbrace_match); + HadError = true; + } + return; + } + Diags.Report(ModuleNameLoc, diag::err_mmap_module_redefinition) << ModuleName; Diags.Report(Existing->DefinitionLoc, diag::note_mmap_prev_definition); |