[PATCH] D30375: Function with unparsed body is a definition
Richard Smith - zygoloid via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Mon Jun 12 13:27:56 PDT 2017
rsmith accepted this revision.
rsmith added a comment.
This revision is now accepted and ready to land.
LGTM as-is, but a couple of questions for possible further improvements.
================
Comment at: lib/Sema/SemaDecl.cpp:12221
FD->setBody(Body);
+ FD->setWillHaveBody(false);
----------------
Would it make sense to leave this `true` for a defaulted function whose body has not yet been synthesized?
================
Comment at: lib/Sema/SemaTemplateInstantiateDecl.cpp:1812-1819
// Check for a function body.
const FunctionDecl *Definition = nullptr;
if (Function->isDefined(Definition) &&
Definition->getTemplateSpecializationKind() == TSK_Undeclared) {
SemaRef.Diag(Function->getLocation(), diag::err_redefinition)
<< Function->getDeclName();
SemaRef.Diag(Definition->getLocation(), diag::note_previous_definition);
----------------
Can we replace this...
================
Comment at: lib/Sema/SemaTemplateInstantiateDecl.cpp:1841-1853
// If some prior declaration of this function was a friend with an
// uninstantiated definition, reject it.
if (R->getFriendObjectKind()) {
if (const FunctionDecl *RPattern =
R->getTemplateInstantiationPattern()) {
if (RPattern->isDefined(RPattern)) {
SemaRef.Diag(Function->getLocation(), diag::err_redefinition)
----------------
... and this with
```
SemaRef.CheckForFunctionRedefinition(Function);
Function->setWillHaveBody(true);
```
?
https://reviews.llvm.org/D30375
More information about the cfe-commits
mailing list