Index: clang/include/clang/Lex/ModuleMap.h =================================================================== --- clang/include/clang/Lex/ModuleMap.h +++ clang/include/clang/Lex/ModuleMap.h @@ -110,6 +110,11 @@ llvm::StringMap> PendingLinkAsModule; public: + /// Get LangOpts of ModuleMap + const LangOptions& getLangOpts() { + return LangOpts; + } + /// Use PendingLinkAsModule information to mark top level link names that /// are going to be replaced by export_as aliases. void resolveLinkAsDependencies(Module *Mod); Index: clang/lib/Lex/HeaderSearch.cpp =================================================================== --- clang/lib/Lex/HeaderSearch.cpp +++ clang/lib/Lex/HeaderSearch.cpp @@ -282,7 +282,8 @@ // Load all module maps in the immediate subdirectories of this search // directory. - loadSubdirectoryModuleMaps(SearchDirs[Idx]); + if (ModMap.getLangOpts().ObjC1 || ModMap.getLangOpts().ObjC2) + loadSubdirectoryModuleMaps(SearchDirs[Idx]); // Look again for the module. Module = ModMap.findModule(ModuleName); Index: clang/test/Modules/Inputs/autoload-subdirectory/a.h =================================================================== --- /dev/null +++ clang/test/Modules/Inputs/autoload-subdirectory/a.h @@ -0,0 +1,8 @@ +#include "b.h" + +class foo { + int x,y; + public: + foo() {}; + ~foo() {}; +}; Index: clang/test/Modules/Inputs/autoload-subdirectory/b.h =================================================================== --- /dev/null +++ clang/test/Modules/Inputs/autoload-subdirectory/b.h @@ -0,0 +1 @@ +class bar {}; Index: clang/test/Modules/Inputs/autoload-subdirectory/include/module.modulemap =================================================================== --- /dev/null +++ clang/test/Modules/Inputs/autoload-subdirectory/include/module.modulemap @@ -0,0 +1,2 @@ +module a { header "a.h" } +module b { header "b.h" } Index: clang/test/Modules/Inputs/autoload-subdirectory/module.modulemap =================================================================== --- /dev/null +++ clang/test/Modules/Inputs/autoload-subdirectory/module.modulemap @@ -0,0 +1,2 @@ +module a { header "a.h" } +module b { header "b.h" } Index: clang/test/Modules/autoload-subdirectory.cpp =================================================================== --- /dev/null +++ clang/test/Modules/autoload-subdirectory.cpp @@ -0,0 +1,9 @@ +// RUN: %clang_cc1 -fmodules -fmodule-name=Foo -I %S/Inputs/autoload-subdirectory/ %s -verify +// expected-no-diagnostics + +#include "a.h" + +int main() { + foo neko; + return 0; +}