I'm not sure this will do the right thing for framework modules; it looks like we'll infer a module map if you disable implicit module maps for them, which doesn't seem like the right behavior (see `HeaderSearch::loadFrameworkModule`).
There are a bunch of other functions in this file which do redundant work that we should short-circuit in this case: * `HeaderSearch::lookupModule` should bail out after checking to see if we've already loaded the module, rather than looping over the include paths and doing nothing with them. * `HeaderSearch::hasModuleMap` should just return immediately, rather than scanning upwards over all parent directories of a file and doing nothing with them. * `HeaderSearch::collectAllModules` should skip its loop over all include paths. * `HeaderSearch::loadTopLevelSystemModules` should skip its loop over all include paths. * `HeaderSearch::loadSubdirectoryModuleMaps` should bail out or assert (it shouldn't be reachable if implicit module maps are disabled). ================ Comment at: docs/Modules.rst:211 @@ +210,3 @@ +``-fno-modules-implicit-maps`` + Suppresses the implicit search for files called ``module.map`` and similar. Instead, module files need to be explicitly specified via ``-fmodule-map-file`` or transitively used. + ---------------- In the documentation, we should refer to `module.modulemap` rather than the deprecated name `module.map`. ================ Comment at: include/clang/Basic/LangOptions.def:129 @@ -128,2 +128,3 @@ LANGOPT(ModulesErrorRecovery, 1, 1, "automatically import modules as needed when performing error recovery") +LANGOPT(ModulesImplicitMaps, 1, 1, "use files called module.map implicitly as module maps") COMPATIBLE_LANGOPT(Optimize , 1, 0, "__OPTIMIZE__ predefined macro") ---------------- `module.modulemap` ================ Comment at: include/clang/Basic/LangOptions.def:129 @@ -128,2 +128,3 @@ LANGOPT(ModulesErrorRecovery, 1, 1, "automatically import modules as needed when performing error recovery") +LANGOPT(ModulesImplicitMaps, 1, 1, "use files called module.map implicitly as module maps") COMPATIBLE_LANGOPT(Optimize , 1, 0, "__OPTIMIZE__ predefined macro") ---------------- rsmith wrote: > `module.modulemap` This should be a `COMPATIBLE_LANGOPT` (or possibly a `BENIGN_LANGOPT`). ================ Comment at: include/clang/Driver/Options.td:678-680 @@ -677,2 +677,5 @@ Flags<[DriverOption, CC1Option]>; +def fno_modules_implicit_maps : + Flag <["-"], "fno-modules-implicit-maps">, + Group<f_Group>, Flags<[DriverOption, CC1Option]>; def fretain_comments_from_system_headers : Flag<["-"], "fretain-comments-from-system-headers">, Group<f_Group>, Flags<[CC1Option]>; ---------------- For driver options, we typically include both a `-fblah` and a `-fno-blah` (so the user can override earlier command-line options from `$CXXFLAGS` or similar). http://reviews.llvm.org/D6305 _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
