Close https://github.com/llvm/llvm-project/issues/60405
See the discussion in the above link for the background.
What the patch does:
- Rename Module::ModuleKind::GlobalModuleFragment to Module::ModuleKind::ExplicitGlobalModuleFragment.
- Add another module kind ImplicitGlobalModuleFragment to ModuleKind.
- Create an implicit global module fragment for the language linkage declarations inside a module purview.
- If the language linkage lives inside the scope of an export decl, the created modules is marked as exported to outer modules.
- In fact, Sema will only create at most 2 implicit global module fragments to avoid creating a lot of unnecessary modules in the edging case.
This is well-specified, I think we can just refer to that.