iains planned changes to this revision. iains added a comment. need to re-check that the intention of the paper is covered (since we currently treat bare 'export' and 'export {}' in a similar manner).
================ Comment at: clang/lib/Sema/SemaModule.cpp:848-849 + if (auto *FD = dyn_cast<FunctionDecl>(D)) { + if (FD->getTemplateSpecializationKind() == TSK_ExplicitSpecialization) + BadExport = true; + } else if (auto *VD = dyn_cast<VarDecl>(D)) { ---------------- ChuanqiXu wrote: > ChuanqiXu wrote: > > iains wrote: > > > ChuanqiXu wrote: > > > > Given P2615R1 doesn't allow explicit-instantiation in export block too. > > > I think I must be missing something - I do not see that in the paper - > > > please could you expand your comment? > > See the proposed change in #[module.interface]p1 in the paper, it changed: > > > > ``` > > export declaration > > ``` > > > > to > > > > > > ``` > > export named-declaration > > ``` > > > > And the change between the old declaration and the new named declaration is > > in the proposed change in #[dcl.pre]p1. So it shows the special > > declarations shouldn't be allowed after `export`. > > > > Also I noted it is allowed to write `export { declaration-seq_opt }` where > > the `declaration-seq` may contain special declarations. It looks weird to > > me. I'll try to check it and ask WG21 when necessary. > I checked the record. And it shows that the current wording reflects the > intention. I mean > > ``` > export template<> class A<int>; > ``` > > is not allowed. But, > > ``` > export { template<> class A<int> }; > ``` > > is allowed. > > See the proposed change in #[module.interface]p1 in the paper, it changed: ... > And the change between the old declaration and the new named declaration is > in the proposed change in #[dcl.pre]p1. So it shows the special declarations > shouldn't be allowed after `export`. > > Also I noted it is allowed to write `export { declaration-seq_opt }` where > the `declaration-seq` may contain special declarations. It looks weird to me. > I'll try to check it and ask WG21 when necessary. Indeed that does seem to be a strange mismatch - but you are right the introduction does mention this: "This paper addresses CWG2443 by forbidding applying export directly to certain meaningless declarations. Conversely, it also allows all kinds to appear with export {}. For consistency extern "C" is given the same restrictions when used directly." so I think I need to recheck this patch. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D153542/new/ https://reviews.llvm.org/D153542 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits