[all-commits] [llvm/llvm-project] c6e982: [C++20][Modules] Introduce an implementation module.

Iain Sandoe via All-commits all-commits at lists.llvm.org
Thu Mar 23 05:48:15 PDT 2023

  Branch: refs/heads/main
  Home:   https://github.com/llvm/llvm-project
  Commit: c6e9823724ef6bdfee262289ee34d162db436af0
  Author: Iain Sandoe <iain at sandoe.co.uk>
  Date:   2023-03-23 (Thu, 23 Mar 2023)

  Changed paths:
    M clang/include/clang/Basic/Module.h
    M clang/include/clang/Lex/ModuleMap.h
    M clang/include/clang/Sema/Sema.h
    M clang/lib/AST/Decl.cpp
    M clang/lib/CodeGen/CGDeclCXX.cpp
    M clang/lib/CodeGen/CodeGenModule.cpp
    M clang/lib/Frontend/FrontendActions.cpp
    M clang/lib/Lex/ModuleMap.cpp
    M clang/lib/Sema/SemaDecl.cpp
    M clang/lib/Sema/SemaModule.cpp
    M clang/lib/Serialization/ASTWriter.cpp
    M clang/test/CXX/module/basic/basic.def.odr/p4.cppm
    M clang/test/CXX/module/basic/basic.link/p2.cppm
    M clang/test/CodeGenCXX/module-intializer.cpp

  Log Message:
  [C++20][Modules] Introduce an implementation module.

We need to be able to distinguish individual TUs from the same module in cases
where TU-local entities either need to be hidden (or, for some cases of ADL in
template instantiation, need to be detected as exposures).

This creates a module type for the implementation which implicitly imports its
primary module interface per C++20:
[module.unit/8] 'A module-declaration that contains neither an export-keyword
nor a module-partition implicitly imports the primary module interface unit of
the module as if by a module-import-declaration.

Implementation modules are never serialized (-emit-module-interface for an
implementation unit is diagnosed and rejected).

Differential Revision: https://reviews.llvm.org/D126959

More information about the All-commits mailing list