[modules] Add local submodule visibility support for declarations.
With this change, enabling -fmodules-local-submodule-visibility results in name visibility rules being applied to submodules of the current module in addition to imported modules (that is, names no longer "leak" between submodules of the same top-level module). This also makes it much safer to textually include a non-modular library into a module: each submodule that textually includes that library will get its own "copy" of that library, and so the library becomes visible no matter which including submodule you import. llvm-svn: 237473
This commit is contained in:
@@ -1597,6 +1597,12 @@ static void ParseLangArgs(LangOptions &Opts, ArgList &Args, InputKind IK,
|
||||
<< Opts.CurrentModule << Opts.ImplementationOfModule;
|
||||
}
|
||||
|
||||
// For now, we only support local submodule visibility in C++ (because we
|
||||
// heavily depend on the ODR for merging redefinitions).
|
||||
if (Opts.ModulesLocalVisibility && !Opts.CPlusPlus)
|
||||
Diags.Report(diag::err_drv_argument_not_allowed_with)
|
||||
<< "-fmodules-local-submodule-visibility" << "C";
|
||||
|
||||
if (Arg *A = Args.getLastArg(OPT_faddress_space_map_mangling_EQ)) {
|
||||
switch (llvm::StringSwitch<unsigned>(A->getValue())
|
||||
.Case("target", LangOptions::ASMM_Target)
|
||||
|
||||
Reference in New Issue
Block a user