summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/clang/Basic/DiagnosticCommonKinds.td3
-rw-r--r--include/clang/Basic/Module.h18
-rw-r--r--include/clang/Lex/HeaderSearch.h1
-rw-r--r--include/clang/Lex/ModuleMap.h33
-rw-r--r--lib/Basic/Module.cpp7
-rw-r--r--lib/Lex/HeaderSearch.cpp20
-rw-r--r--lib/Lex/ModuleMap.cpp100
-rw-r--r--lib/Lex/PPDirectives.cpp17
-rw-r--r--test/Modules/Inputs/shadow/A1/A.h1
-rw-r--r--test/Modules/Inputs/shadow/A1/module.modulemap5
-rw-r--r--test/Modules/Inputs/shadow/A2/A.h1
-rw-r--r--test/Modules/Inputs/shadow/A2/module.modulemap5
-rw-r--r--test/Modules/Inputs/shadowed-submodule/A1/Foo.h1
-rw-r--r--test/Modules/Inputs/shadowed-submodule/A1/module.modulemap14
-rw-r--r--test/Modules/Inputs/shadowed-submodule/A1/sys/A.h1
-rw-r--r--test/Modules/Inputs/shadowed-submodule/A1/sys/A2.h1
-rw-r--r--test/Modules/Inputs/shadowed-submodule/A2/Foo.h1
-rw-r--r--test/Modules/Inputs/shadowed-submodule/A2/module.modulemap14
-rw-r--r--test/Modules/Inputs/shadowed-submodule/A2/sys/A.h1
-rw-r--r--test/Modules/Inputs/shadowed-submodule/A2/sys/A2.h1
-rw-r--r--test/Modules/Inputs/shadowed-submodule/Foo/module.modulemap3
-rw-r--r--test/Modules/shadow.m21
-rw-r--r--test/Modules/shadowed-submodule.m5
23 files changed, 52 insertions, 222 deletions
diff --git a/include/clang/Basic/DiagnosticCommonKinds.td b/include/clang/Basic/DiagnosticCommonKinds.td
index 711204a790..82ca27b734 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<ModuleBuild>;
def remark_module_lock_timeout : Remark<
"timed out waiting to acquire lock file for module '%0'">, InGroup<ModuleBuild>;
-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 3725fcb06d..6631721e35 100644
--- a/include/clang/Basic/Module.h
+++ b/include/clang/Basic/Module.h
@@ -197,9 +197,6 @@ public:
/// will be false to indicate that this (sub)module is not available.
SmallVector<Requirement, 2> 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 @@ public:
///
/// \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 73a5af1913..6b9dbfcd1e 100644
--- a/include/clang/Lex/HeaderSearch.h
+++ b/include/clang/Lex/HeaderSearch.h
@@ -726,7 +726,6 @@ private:
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 1f3377e521..41ed8e49b6 100644
--- a/include/clang/Lex/ModuleMap.h
+++ b/include/clang/Lex/ModuleMap.h
@@ -195,17 +195,6 @@ private:
/// header.
llvm::DenseMap<const DirectoryEntry *, Module *> 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<const Module *> 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 @@ public:
///
/// \returns The found or newly-created module, along with a boolean value
/// that will be true if the module is newly-created.
- std::pair<Module *, bool>
- findOrCreateModule(StringRef Name, Module *Parent, bool IsFramework,
- bool IsExplicit, bool UsesExplicitModuleMapFile = false);
+ std::pair<Module *, bool> 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 @@ public:
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 @@ public:
/// \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 @@ public:
/// \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 692e138f6c..7124184865 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 ec81754706..6976294a2e 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 c2ea64fcd1..b3ac10c5c5 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<Module *, bool>
-ModuleMap::findOrCreateModule(StringRef Name, Module *Parent, bool IsFramework,
- bool IsExplicit, bool UsesExplicitModuleMapFile) {
+std::pair<Module *, bool> 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 77ee1faf28..ca3e70fd10 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 f07c681c2a..0000000000
--- 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 9439a431b1..0000000000
--- 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 9880ed010f..0000000000
--- 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 935d89bb42..0000000000
--- 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 57775d1a29..0000000000
--- a/test/Modules/Inputs/shadowed-submodule/A1/Foo.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <stdarg.h> // 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 7afbc47136..0000000000
--- 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 4fc3e8ea9e..0000000000
--- a/test/Modules/Inputs/shadowed-submodule/A1/sys/A.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <sys/A2.h>
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 e9b6a44cfe..0000000000
--- 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 38ade6d9f5..0000000000
--- a/test/Modules/Inputs/shadowed-submodule/A2/Foo.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <stdarg.h>
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 c4e44b074a..0000000000
--- 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 4fc3e8ea9e..0000000000
--- a/test/Modules/Inputs/shadowed-submodule/A2/sys/A.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <sys/A2.h>
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 e9b6a44cfe..0000000000
--- 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 11db9cb05d..0000000000
--- 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 44320af2b0..0000000000
--- 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 c9c77bd13a..0000000000
--- 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'}}