[PATCH] D128328: [C++20][Modules] Improve handing of Private Module Fragment diagnostics.
Chuanqi Xu via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Wed Jun 22 20:10:40 PDT 2022
ChuanqiXu added inline comments.
================
Comment at: clang/include/clang/Basic/DiagnosticSemaKinds.td:11155
+def err_export_inline_not_defined : Error<
+ "exported inline functions must be defined within the module purview"
+ " and before any private module fragment">;
----------------
iains wrote:
> iains wrote:
> > ChuanqiXu wrote:
> > > From my reading, 'exported' is not emphasized.
> > it is here:
> > https://eel.is/c++draft/module#private.frag-2.1
> > ( I agree it is somewhat confusing, but the export makes the linkage external, which the example treats differently from the fn_m() case which has module linkage).
> >
> > It is possible that we might need to pull together several pieces of the std and maybe ask core for clarification?
> > it is here:
> > https://eel.is/c++draft/module#private.frag-2.1
> > ( I agree it is somewhat confusing, but the export makes the linkage external, which the example treats differently from the fn_m() case which has module linkage).
>
> hmm... my linkage comment is wrong - however the distinction between exported and odr-used seems to be made here (fn_m() and fn_e()).
> >
> > It is possible that we might need to pull together several pieces of the std and maybe ask core for clarification?
>
>
What I read is:
> [dcl.inline]p7: https://eel.is/c++draft/dcl.inline#7
> If an inline function or variable that is attached to a named module is declared in a definition domain, it shall be defined in that domain.
and the definition of `definition domain` is:
> [basic.def.odr]p12: https://eel.is/c++draft/basic#def.odr-12
> A definition domain is a private-module-fragment or the portion of a translation unit excluding its private-module-fragment (if any).
The definition of "attached to a named module" is:
> [module.unit]p7: https://eel.is/c++draft/module.unit#7
> A module is either a named module or the global module. A declaration is attached to a module as follows: ...
So it is clearly not consistency with [module.private.frag]p2.1. I would send this to WG21.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D128328/new/
https://reviews.llvm.org/D128328
More information about the cfe-commits
mailing list