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

Reply via email to