diff --git a/clang/lib/Frontend/FrontendAction.cpp b/clang/lib/Frontend/FrontendAction.cpp --- a/clang/lib/Frontend/FrontendAction.cpp +++ b/clang/lib/Frontend/FrontendAction.cpp @@ -807,12 +807,14 @@ goto failure; // If we were asked to load any module map files, do so now. - for (const auto &Filename : CI.getFrontendOpts().ModuleMapFiles) { - if (auto File = CI.getFileManager().getFile(Filename)) - CI.getPreprocessor().getHeaderSearchInfo().loadModuleMapFile( - *File, /*IsSystem*/false); - else - CI.getDiagnostics().Report(diag::err_module_map_not_found) << Filename; + if (CI.getLangOpts().Modules) { + for (const auto &Filename : CI.getFrontendOpts().ModuleMapFiles) { + if (auto File = CI.getFileManager().getFile(Filename)) + CI.getPreprocessor().getHeaderSearchInfo().loadModuleMapFile( + *File, /*IsSystem*/ false); + else + CI.getDiagnostics().Report(diag::err_module_map_not_found) << Filename; + } } // Add a module declaration scope so that modules from -fmodule-map-file diff --git a/clang/test/Modules/explicit-module-maps.cpp b/clang/test/Modules/explicit-module-maps.cpp new file mode 100644 --- /dev/null +++ b/clang/test/Modules/explicit-module-maps.cpp @@ -0,0 +1,8 @@ +// Test that an explicit module map (which fails to parse/load in this case) +// isn't used if modules aren't enabled. + +// RUN: rm -rf %t +// RUN: mkdir %t +// RUN: echo 'DOES NOT PARSE!' > %t/invalid.modulemap +// RUN: %clang_cc1 -fmodule-map-file=%t/invalid.modulemap -verify %s +// expected-no-diagnostics