diff --git a/include/clang/Basic/DiagnosticCommonKinds.td b/include/clang/Basic/DiagnosticCommonKinds.td index 711204a790f8..82ca27b7345e 100644 --- a/include/clang/Basic/DiagnosticCommonKinds.td +++ b/include/clang/Basic/DiagnosticCommonKinds.td @@ -94,9 +94,6 @@ def remark_module_lock_failure : Remark< "could not acquire lock file for module '%0': %1">, InGroup; def remark_module_lock_timeout : Remark< "timed out waiting to acquire lock file for module '%0'">, InGroup; -def err_module_shadowed : Error<"import of shadowed module '%0'">, DefaultFatal; -def err_module_build_shadowed_submodule : Error< - "build a shadowed submodule '%0'">, DefaultFatal; def err_module_cycle : Error<"cyclic dependency in module '%0': %1">, DefaultFatal; def err_module_prebuilt : Error< diff --git a/include/clang/Basic/Module.h b/include/clang/Basic/Module.h index 3725fcb06db9..6631721e3531 100644 --- a/include/clang/Basic/Module.h +++ b/include/clang/Basic/Module.h @@ -197,9 +197,6 @@ class Module { /// will be false to indicate that this (sub)module is not available. SmallVector Requirements; - /// \brief A module with the same name that shadows this module. - Module *ShadowingModule = nullptr; - /// \brief Whether this module is missing a feature from \c Requirements. unsigned IsMissingRequirement : 1; @@ -378,20 +375,13 @@ class Module { /// /// \param Target The target options used for the current translation unit. /// - /// \param Req If this module is unavailable because of a missing requirement, - /// this parameter will be set to one of the requirements that is not met for - /// use of this module. - /// - /// \param MissingHeader If this module is unavailable because of a missing - /// header, this parameter will be set to one of the missing headers. - /// - /// \param ShadowingModule If this module is unavailable because it is - /// shadowed, this parameter will be set to the shadowing module. + /// \param Req If this module is unavailable, this parameter + /// will be set to one of the requirements that is not met for use of + /// this module. bool isAvailable(const LangOptions &LangOpts, const TargetInfo &Target, Requirement &Req, - UnresolvedHeaderDirective &MissingHeader, - Module *&ShadowingModule) const; + UnresolvedHeaderDirective &MissingHeader) const; /// \brief Determine whether this module is a submodule. bool isSubModule() const { return Parent != nullptr; } diff --git a/include/clang/Lex/HeaderSearch.h b/include/clang/Lex/HeaderSearch.h index 73a5af1913ff..6b9dbfcd1e93 100644 --- a/include/clang/Lex/HeaderSearch.h +++ b/include/clang/Lex/HeaderSearch.h @@ -726,7 +726,6 @@ class HeaderSearch { LoadModuleMapResult loadModuleMapFileImpl(const FileEntry *File, bool IsSystem, const DirectoryEntry *Dir, - bool IsExplicitlyProvided, FileID ID = FileID(), unsigned *Offset = nullptr); diff --git a/include/clang/Lex/ModuleMap.h b/include/clang/Lex/ModuleMap.h index 1f3377e5214d..41ed8e49b6c1 100644 --- a/include/clang/Lex/ModuleMap.h +++ b/include/clang/Lex/ModuleMap.h @@ -195,17 +195,6 @@ class ModuleMap { /// header. llvm::DenseMap UmbrellaDirs; - /// \brief The set of modules provided explicitly (e.g. by -fmodule-map-file), - /// which are allowed to shadow other implicitly discovered modules. - llvm::DenseSet ExplicitlyProvidedModules; - - bool mayShadowModuleBeingParsed(Module *ExistingModule, - bool IsExplicitlyProvided) { - assert(!ExistingModule->Parent && "expected top-level module"); - return !IsExplicitlyProvided && - ExplicitlyProvidedModules.count(ExistingModule); - } - /// \brief The set of attributes that can be attached to a module. struct Attributes { /// \brief Whether this is a system module. @@ -486,9 +475,9 @@ class ModuleMap { /// /// \returns The found or newly-created module, along with a boolean value /// that will be true if the module is newly-created. - std::pair - findOrCreateModule(StringRef Name, Module *Parent, bool IsFramework, - bool IsExplicit, bool UsesExplicitModuleMapFile = false); + std::pair findOrCreateModule(StringRef Name, Module *Parent, + bool IsFramework, + bool IsExplicit); /// \brief Create a 'global module' for a C++ Modules TS module interface /// unit. @@ -513,11 +502,6 @@ class ModuleMap { Module *inferFrameworkModule(const DirectoryEntry *FrameworkDir, bool IsSystem, Module *Parent); - /// \brief Create a new top-level module that is shadowed by - /// \p ShadowingModule. - Module *createShadowedModule(StringRef Name, bool IsFramework, - Module *ShadowingModule); - /// \brief Retrieve the module map file containing the definition of the given /// module. /// @@ -603,8 +587,6 @@ class ModuleMap { /// \brief Marks this header as being excluded from the given module. void excludeHeader(Module *Mod, Module::Header Header); - void setExplicitlyProvided(Module *Mod); - /// \brief Parse the given module map file, and record any modules we /// encounter. /// @@ -624,15 +606,10 @@ class ModuleMap { /// \param ExternModuleLoc The location of the "extern module" declaration /// that caused us to load this module map file, if any. /// - /// \param IsExplicitlyProvided Whether this module map file was provided - /// explicitly by the user (e.g. -fmodule-map-file), rather than found - /// implicitly. - /// /// \returns true if an error occurred, false otherwise. bool parseModuleMapFile(const FileEntry *File, bool IsSystem, - const DirectoryEntry *HomeDir, - bool IsExplicitlyProvided = false, - FileID ID = FileID(), unsigned *Offset = nullptr, + const DirectoryEntry *HomeDir, FileID ID = FileID(), + unsigned *Offset = nullptr, SourceLocation ExternModuleLoc = SourceLocation()); /// \brief Dump the contents of the module map, for debugging purposes. diff --git a/lib/Basic/Module.cpp b/lib/Basic/Module.cpp index 692e138f6c15..7124184865c6 100644 --- a/lib/Basic/Module.cpp +++ b/lib/Basic/Module.cpp @@ -95,16 +95,11 @@ static bool hasFeature(StringRef Feature, const LangOptions &LangOpts, bool Module::isAvailable(const LangOptions &LangOpts, const TargetInfo &Target, Requirement &Req, - UnresolvedHeaderDirective &MissingHeader, - Module *&ShadowingModule) const { + UnresolvedHeaderDirective &MissingHeader) const { if (IsAvailable) return true; for (const Module *Current = this; Current; Current = Current->Parent) { - if (Current->ShadowingModule) { - ShadowingModule = Current->ShadowingModule; - return false; - } for (unsigned I = 0, N = Current->Requirements.size(); I != N; ++I) { if (hasFeature(Current->Requirements[I].first, LangOpts, Target) != Current->Requirements[I].second) { diff --git a/lib/Lex/HeaderSearch.cpp b/lib/Lex/HeaderSearch.cpp index ec8175470632..6976294a2eaf 100644 --- a/lib/Lex/HeaderSearch.cpp +++ b/lib/Lex/HeaderSearch.cpp @@ -1367,8 +1367,7 @@ bool HeaderSearch::loadModuleMapFile(const FileEntry *File, bool IsSystem, } } - switch (loadModuleMapFileImpl(File, IsSystem, Dir, - /*IsExplictlyProvided=*/true, ID, Offset)) { + switch (loadModuleMapFileImpl(File, IsSystem, Dir, ID, Offset)) { case LMM_AlreadyLoaded: case LMM_NewlyLoaded: return false; @@ -1379,9 +1378,10 @@ bool HeaderSearch::loadModuleMapFile(const FileEntry *File, bool IsSystem, llvm_unreachable("Unknown load module map result"); } -HeaderSearch::LoadModuleMapResult HeaderSearch::loadModuleMapFileImpl( - const FileEntry *File, bool IsSystem, const DirectoryEntry *Dir, - bool IsExplicitlyProvided, FileID ID, unsigned *Offset) { +HeaderSearch::LoadModuleMapResult +HeaderSearch::loadModuleMapFileImpl(const FileEntry *File, bool IsSystem, + const DirectoryEntry *Dir, FileID ID, + unsigned *Offset) { assert(File && "expected FileEntry"); // Check whether we've already loaded this module map, and mark it as being @@ -1390,16 +1390,14 @@ HeaderSearch::LoadModuleMapResult HeaderSearch::loadModuleMapFileImpl( if (!AddResult.second) return AddResult.first->second ? LMM_AlreadyLoaded : LMM_InvalidModuleMap; - if (ModMap.parseModuleMapFile(File, IsSystem, Dir, IsExplicitlyProvided, ID, - Offset)) { + if (ModMap.parseModuleMapFile(File, IsSystem, Dir, ID, Offset)) { LoadedModuleMaps[File] = false; return LMM_InvalidModuleMap; } // Try to load a corresponding private module map. if (const FileEntry *PMMFile = getPrivateModuleMap(File, FileMgr)) { - if (ModMap.parseModuleMapFile(PMMFile, IsSystem, Dir, - IsExplicitlyProvided)) { + if (ModMap.parseModuleMapFile(PMMFile, IsSystem, Dir)) { LoadedModuleMaps[File] = false; return LMM_InvalidModuleMap; } @@ -1470,8 +1468,8 @@ HeaderSearch::loadModuleMapFile(const DirectoryEntry *Dir, bool IsSystem, return KnownDir->second ? LMM_AlreadyLoaded : LMM_InvalidModuleMap; if (const FileEntry *ModuleMapFile = lookupModuleMapFile(Dir, IsFramework)) { - LoadModuleMapResult Result = loadModuleMapFileImpl( - ModuleMapFile, IsSystem, Dir, /*IsExplicitlyProvided=*/false); + LoadModuleMapResult Result = + loadModuleMapFileImpl(ModuleMapFile, IsSystem, Dir); // Add Dir explicitly in case ModuleMapFile is in a subdirectory. // E.g. Foo.framework/Modules/module.modulemap // ^Dir ^ModuleMapFile diff --git a/lib/Lex/ModuleMap.cpp b/lib/Lex/ModuleMap.cpp index c2ea64fcd125..b3ac10c5c5ae 100644 --- a/lib/Lex/ModuleMap.cpp +++ b/lib/Lex/ModuleMap.cpp @@ -744,13 +744,14 @@ Module *ModuleMap::lookupModuleQualified(StringRef Name, Module *Context) const{ return Context->findSubmodule(Name); } -std::pair -ModuleMap::findOrCreateModule(StringRef Name, Module *Parent, bool IsFramework, - bool IsExplicit, bool UsesExplicitModuleMapFile) { +std::pair ModuleMap::findOrCreateModule(StringRef Name, + Module *Parent, + bool IsFramework, + bool IsExplicit) { // Try to find an existing module with this name. if (Module *Sub = lookupModuleQualified(Name, Parent)) return std::make_pair(Sub, false); - + // Create a new module with this name. Module *Result = new Module(Name, SourceLocation(), Parent, IsFramework, IsExplicit, NumCreatedModules++); @@ -758,8 +759,6 @@ ModuleMap::findOrCreateModule(StringRef Name, Module *Parent, bool IsFramework, if (LangOpts.CurrentModule == Name) SourceModule = Result; Modules[Name] = Result; - if (UsesExplicitModuleMapFile) - ExplicitlyProvidedModules.insert(Result); } return std::make_pair(Result, true); } @@ -1000,19 +999,6 @@ Module *ModuleMap::inferFrameworkModule(const DirectoryEntry *FrameworkDir, return Result; } -Module *ModuleMap::createShadowedModule(StringRef Name, bool IsFramework, - Module *ShadowingModule) { - - // Create a new module with this name. - Module *Result = - new Module(Name, SourceLocation(), /*Parent=*/nullptr, IsFramework, - /*IsExplicit=*/false, NumCreatedModules++); - Result->ShadowingModule = ShadowingModule; - Result->IsAvailable = false; - - return Result; -} - void ModuleMap::setUmbrellaHeader(Module *Mod, const FileEntry *UmbrellaHeader, Twine NameAsWritten) { Headers[UmbrellaHeader].push_back(KnownHeader(Mod, NormalHeader)); @@ -1130,11 +1116,6 @@ void ModuleMap::excludeHeader(Module *Mod, Module::Header Header) { Mod->Headers[Module::HK_Excluded].push_back(std::move(Header)); } -void ModuleMap::setExplicitlyProvided(Module *Mod) { - assert(Modules[Mod->Name] == Mod && "explicitly provided module is shadowed"); - ExplicitlyProvidedModules.insert(Mod); -} - const FileEntry * ModuleMap::getContainingModuleMapFile(const Module *Module) const { if (Module->DefinitionLoc.isInvalid()) @@ -1338,9 +1319,7 @@ namespace clang { /// \brief Consume the current token and return its location. SourceLocation consumeToken(); - - bool UsesExplicitModuleMapFile = false; - + /// \brief Skip tokens until we reach the a token with the given kind /// (or the end of the file). void skipUntil(MMToken::TokenKind K); @@ -1366,19 +1345,20 @@ namespace clang { bool parseOptionalAttributes(Attributes &Attrs); public: - explicit ModuleMapParser(Lexer &L, SourceManager &SourceMgr, - const TargetInfo *Target, DiagnosticsEngine &Diags, - ModuleMap &Map, const FileEntry *ModuleMapFile, - const DirectoryEntry *Directory, bool IsSystem, - bool UsesExplicitModuleMapFile) + explicit ModuleMapParser(Lexer &L, SourceManager &SourceMgr, + const TargetInfo *Target, + DiagnosticsEngine &Diags, + ModuleMap &Map, + const FileEntry *ModuleMapFile, + const DirectoryEntry *Directory, + bool IsSystem) : L(L), SourceMgr(SourceMgr), Target(Target), Diags(Diags), Map(Map), ModuleMapFile(ModuleMapFile), Directory(Directory), - IsSystem(IsSystem), - UsesExplicitModuleMapFile(UsesExplicitModuleMapFile) { + IsSystem(IsSystem) { Tok.clear(); consumeToken(); } - + bool parseModuleMapFile(); bool terminatedByDirective() { return false; } @@ -1807,7 +1787,6 @@ void ModuleMapParser::parseModuleDecl() { SourceLocation LBraceLoc = consumeToken(); // Determine whether this (sub)module has already been defined. - Module *ShadowingModule = nullptr; if (Module *Existing = Map.lookupModuleQualified(ModuleName, ActiveModule)) { // We might see a (re)definition of a module that we already have a // definition for in two cases: @@ -1833,36 +1812,23 @@ void ModuleMapParser::parseModuleDecl() { } return; } - - if (!Existing->Parent && - Map.mayShadowModuleBeingParsed(Existing, UsesExplicitModuleMapFile)) { - ShadowingModule = Existing; - } else { - // This is not a shawdowed module decl, it is an illegal redefinition. - Diags.Report(ModuleNameLoc, diag::err_mmap_module_redefinition) - << ModuleName; - Diags.Report(Existing->DefinitionLoc, diag::note_mmap_prev_definition); - - // Skip the module definition. - skipUntil(MMToken::RBrace); - if (Tok.is(MMToken::RBrace)) - consumeToken(); - - HadError = true; - return; - } + + Diags.Report(ModuleNameLoc, diag::err_mmap_module_redefinition) + << ModuleName; + Diags.Report(Existing->DefinitionLoc, diag::note_mmap_prev_definition); + + // Skip the module definition. + skipUntil(MMToken::RBrace); + if (Tok.is(MMToken::RBrace)) + consumeToken(); + + HadError = true; + return; } // Start defining this module. - if (ShadowingModule) { - ActiveModule = - Map.createShadowedModule(ModuleName, Framework, ShadowingModule); - } else { - ActiveModule = Map.findOrCreateModule(ModuleName, ActiveModule, Framework, - Explicit, UsesExplicitModuleMapFile) - .first; - } - + ActiveModule = Map.findOrCreateModule(ModuleName, ActiveModule, Framework, + Explicit).first; ActiveModule->DefinitionLoc = ModuleNameLoc; if (Attrs.IsSystem || IsSystem) ActiveModule->IsSystem = true; @@ -2038,7 +2004,7 @@ void ModuleMapParser::parseExternModuleDecl() { Map.HeaderInfo.getHeaderSearchOpts().ModuleMapFileHomeIsCwd ? Directory : File->getDir(), - false /*IsExplicitlyProvided*/, FileID(), nullptr, ExternLoc); + FileID(), nullptr, ExternLoc); } /// Whether to add the requirement \p Feature to the module \p M. @@ -2845,8 +2811,7 @@ bool ModuleMapParser::parseModuleMapFile() { } bool ModuleMap::parseModuleMapFile(const FileEntry *File, bool IsSystem, - const DirectoryEntry *Dir, - bool IsExplicitlyProvided, FileID ID, + const DirectoryEntry *Dir, FileID ID, unsigned *Offset, SourceLocation ExternModuleLoc) { assert(Target && "Missing target information"); @@ -2876,7 +2841,7 @@ bool ModuleMap::parseModuleMapFile(const FileEntry *File, bool IsSystem, Buffer->getBufferEnd()); SourceLocation Start = L.getSourceLocation(); ModuleMapParser Parser(L, SourceMgr, Target, Diags, *this, File, Dir, - IsSystem, IsExplicitlyProvided); + IsSystem); bool Result = Parser.parseModuleMapFile(); ParsedModuleMap[File] = Result; @@ -2889,6 +2854,5 @@ bool ModuleMap::parseModuleMapFile(const FileEntry *File, bool IsSystem, // Notify callbacks that we parsed it. for (const auto &Cb : Callbacks) Cb->moduleMapFileRead(Start, *File, IsSystem); - return Result; } diff --git a/lib/Lex/PPDirectives.cpp b/lib/Lex/PPDirectives.cpp index 77ee1faf283f..ca3e70fd1060 100644 --- a/lib/Lex/PPDirectives.cpp +++ b/lib/Lex/PPDirectives.cpp @@ -1655,18 +1655,12 @@ bool Preprocessor::checkModuleIsAvailable(const LangOptions &LangOpts, DiagnosticsEngine &Diags, Module *M) { Module::Requirement Requirement; Module::UnresolvedHeaderDirective MissingHeader; - Module *ShadowingModule = nullptr; - if (M->isAvailable(LangOpts, TargetInfo, Requirement, MissingHeader, - ShadowingModule)) + if (M->isAvailable(LangOpts, TargetInfo, Requirement, MissingHeader)) return false; if (MissingHeader.FileNameLoc.isValid()) { Diags.Report(MissingHeader.FileNameLoc, diag::err_module_header_missing) << MissingHeader.IsUmbrella << MissingHeader.FileName; - } else if (ShadowingModule) { - Diags.Report(M->DefinitionLoc, diag::err_module_shadowed) << M->Name; - Diags.Report(ShadowingModule->DefinitionLoc, - diag::note_previous_definition); } else { // FIXME: Track the location at which the requirement was specified, and // use it here. @@ -2030,15 +2024,6 @@ void Preprocessor::HandleIncludeDirective(SourceLocation HashLoc, // Determine if we're switching to building a new submodule, and which one. if (auto *M = SuggestedModule.getModule()) { - if (M->getTopLevelModule()->ShadowingModule) { - // We are building a submodule that belongs to a shadowed module. This - // means we find header files in the shadowed module. - Diag(M->DefinitionLoc, diag::err_module_build_shadowed_submodule) - << M->getFullModuleName(); - Diag(M->getTopLevelModule()->ShadowingModule->DefinitionLoc, - diag::note_previous_definition); - return; - } // When building a pch, -fmodule-name tells the compiler to textually // include headers in the specified module. We are not building the // specified module. diff --git a/test/Modules/Inputs/shadow/A1/A.h b/test/Modules/Inputs/shadow/A1/A.h deleted file mode 100644 index f07c681c2aa5..000000000000 --- a/test/Modules/Inputs/shadow/A1/A.h +++ /dev/null @@ -1 +0,0 @@ -#define A1_A_h diff --git a/test/Modules/Inputs/shadow/A1/module.modulemap b/test/Modules/Inputs/shadow/A1/module.modulemap deleted file mode 100644 index 9439a431b1db..000000000000 --- a/test/Modules/Inputs/shadow/A1/module.modulemap +++ /dev/null @@ -1,5 +0,0 @@ -module A { - header "A.h" -} - -module A1 {} diff --git a/test/Modules/Inputs/shadow/A2/A.h b/test/Modules/Inputs/shadow/A2/A.h deleted file mode 100644 index 9880ed010f56..000000000000 --- a/test/Modules/Inputs/shadow/A2/A.h +++ /dev/null @@ -1 +0,0 @@ -#define A2_A_h diff --git a/test/Modules/Inputs/shadow/A2/module.modulemap b/test/Modules/Inputs/shadow/A2/module.modulemap deleted file mode 100644 index 935d89bb425e..000000000000 --- a/test/Modules/Inputs/shadow/A2/module.modulemap +++ /dev/null @@ -1,5 +0,0 @@ -module A { - header "A.h" -} - -module A2 {} diff --git a/test/Modules/Inputs/shadowed-submodule/A1/Foo.h b/test/Modules/Inputs/shadowed-submodule/A1/Foo.h deleted file mode 100644 index 57775d1a29dd..000000000000 --- a/test/Modules/Inputs/shadowed-submodule/A1/Foo.h +++ /dev/null @@ -1 +0,0 @@ -#include // expected-error {{could not build module 'A'}} diff --git a/test/Modules/Inputs/shadowed-submodule/A1/module.modulemap b/test/Modules/Inputs/shadowed-submodule/A1/module.modulemap deleted file mode 100644 index 7afbc4713617..000000000000 --- a/test/Modules/Inputs/shadowed-submodule/A1/module.modulemap +++ /dev/null @@ -1,14 +0,0 @@ -module A [system] { // expected-note {{previous definition is here}} - module sub { - header "sys/A.h" - } - module sub2 { - header "sys/A2.h" - } - module stdarg { - header "stdarg.h" - export * - } -} - -module A2 {} diff --git a/test/Modules/Inputs/shadowed-submodule/A1/sys/A.h b/test/Modules/Inputs/shadowed-submodule/A1/sys/A.h deleted file mode 100644 index 4fc3e8ea9e63..000000000000 --- a/test/Modules/Inputs/shadowed-submodule/A1/sys/A.h +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/test/Modules/Inputs/shadowed-submodule/A1/sys/A2.h b/test/Modules/Inputs/shadowed-submodule/A1/sys/A2.h deleted file mode 100644 index e9b6a44cfe21..000000000000 --- a/test/Modules/Inputs/shadowed-submodule/A1/sys/A2.h +++ /dev/null @@ -1 +0,0 @@ -// nothing diff --git a/test/Modules/Inputs/shadowed-submodule/A2/Foo.h b/test/Modules/Inputs/shadowed-submodule/A2/Foo.h deleted file mode 100644 index 38ade6d9f505..000000000000 --- a/test/Modules/Inputs/shadowed-submodule/A2/Foo.h +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/test/Modules/Inputs/shadowed-submodule/A2/module.modulemap b/test/Modules/Inputs/shadowed-submodule/A2/module.modulemap deleted file mode 100644 index c4e44b074aa1..000000000000 --- a/test/Modules/Inputs/shadowed-submodule/A2/module.modulemap +++ /dev/null @@ -1,14 +0,0 @@ -module A [system] { - module sub { - header "sys/A.h" - } - module sub2 { // expected-error {{build a shadowed submodule 'A.sub2'}} - header "sys/A2.h" - } - module stdarg { - header "stdarg.h" - export * - } -} - -module A2 {} diff --git a/test/Modules/Inputs/shadowed-submodule/A2/sys/A.h b/test/Modules/Inputs/shadowed-submodule/A2/sys/A.h deleted file mode 100644 index 4fc3e8ea9e63..000000000000 --- a/test/Modules/Inputs/shadowed-submodule/A2/sys/A.h +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/test/Modules/Inputs/shadowed-submodule/A2/sys/A2.h b/test/Modules/Inputs/shadowed-submodule/A2/sys/A2.h deleted file mode 100644 index e9b6a44cfe21..000000000000 --- a/test/Modules/Inputs/shadowed-submodule/A2/sys/A2.h +++ /dev/null @@ -1 +0,0 @@ -// nothing diff --git a/test/Modules/Inputs/shadowed-submodule/Foo/module.modulemap b/test/Modules/Inputs/shadowed-submodule/Foo/module.modulemap deleted file mode 100644 index 11db9cb05da2..000000000000 --- a/test/Modules/Inputs/shadowed-submodule/Foo/module.modulemap +++ /dev/null @@ -1,3 +0,0 @@ -module Foo { - header "../A1/Foo.h" -} diff --git a/test/Modules/shadow.m b/test/Modules/shadow.m deleted file mode 100644 index 44320af2b0c6..000000000000 --- a/test/Modules/shadow.m +++ /dev/null @@ -1,21 +0,0 @@ -// RUN: rm -rf %t -// RUN: not %clang_cc1 -fmodules -fimplicit-module-maps -fmodules-cache-path=%t -I %S/Inputs/shadow/A1 -I %S/Inputs/shadow/A2 %s -fsyntax-only 2>&1 | FileCheck %s -check-prefix=REDEFINITION -// RUN: not %clang_cc1 -fmodules -fimplicit-module-maps -fmodules-cache-path=%t -fmodule-map-file=%S/Inputs/shadow/A1/module.modulemap -fmodule-map-file=%S/Inputs/shadow/A2/module.modulemap %s -fsyntax-only 2>&1 | FileCheck %s -check-prefix=REDEFINITION -// REDEFINITION: error: redefinition of module 'A' -// REDEFINITION: note: previously defined - -// RUN: %clang_cc1 -fmodules -fimplicit-module-maps -fmodules-cache-path=%t -fmodule-map-file=%S/Inputs/shadow/A1/module.modulemap -I %S/Inputs/shadow %s -verify - -@import A1; -@import A2; -@import A; - -#import "A2/A.h" // expected-note {{implicitly imported}} -// expected-error@A2/module.modulemap:1 {{import of shadowed module 'A'}} -// expected-note@A1/module.modulemap:1 {{previous definition}} - -#if defined(A2_A_h) -#error got the wrong definition of module A -#elif !defined(A1_A_h) -#error missing definition from A1 -#endif diff --git a/test/Modules/shadowed-submodule.m b/test/Modules/shadowed-submodule.m deleted file mode 100644 index c9c77bd13a1c..000000000000 --- a/test/Modules/shadowed-submodule.m +++ /dev/null @@ -1,5 +0,0 @@ -// RUN: rm -rf %t -// RUN: %clang_cc1 -fmodules -fimplicit-module-maps -fmodules-cache-path=%t -I %S/Inputs/shadowed-submodule/Foo -I %S/Inputs/shadowed-submodule/A2 %s -verify - -@import Foo; // expected-error {{module 'A' was built in directory}} - // expected-note@shadowed-submodule.m:4 {{imported by module 'Foo'}}