summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema/SemaCoroutine.cpp
diff options
context:
space:
mode:
authorVivek Pandya <vivekvpandya@gmail.com>2019-06-19 14:12:19 +0000
committerVivek Pandya <vivekvpandya@gmail.com>2019-06-19 14:12:19 +0000
commit3a0100ac30bf516d7eca0d7725281900460543af (patch)
tree98555cbc61060142a9461ff2ffe09fec5d014fab /clang/lib/Sema/SemaCoroutine.cpp
parentd0aa6c58beef0a6663aacba8904e286c1925c572 (diff)
downloadbcm5719-llvm-3a0100ac30bf516d7eca0d7725281900460543af.tar.gz
bcm5719-llvm-3a0100ac30bf516d7eca0d7725281900460543af.zip
Allow copy/move assignment operator to be coroutine as per N4775
This change fixes https://bugs.llvm.org/show_bug.cgi?id=40997. Reviewers: GorNishanov, rsmith Reviewed by: GorNishanov Subscribers: cfe-commits, lewissbaker, modocache, llvm-commits Differential Revision: https://reviews.llvm.org/D63381 llvm-svn: 363804
Diffstat (limited to 'clang/lib/Sema/SemaCoroutine.cpp')
-rw-r--r--clang/lib/Sema/SemaCoroutine.cpp14
1 files changed, 2 insertions, 12 deletions
diff --git a/clang/lib/Sema/SemaCoroutine.cpp b/clang/lib/Sema/SemaCoroutine.cpp
index fc6470617c0..f0347af6a1b 100644
--- a/clang/lib/Sema/SemaCoroutine.cpp
+++ b/clang/lib/Sema/SemaCoroutine.cpp
@@ -204,8 +204,6 @@ static bool isValidCoroutineContext(Sema &S, SourceLocation Loc,
enum InvalidFuncDiag {
DiagCtor = 0,
DiagDtor,
- DiagCopyAssign,
- DiagMoveAssign,
DiagMain,
DiagConstexpr,
DiagAutoRet,
@@ -219,23 +217,15 @@ static bool isValidCoroutineContext(Sema &S, SourceLocation Loc,
return false;
};
- // Diagnose when a constructor, destructor, copy/move assignment operator,
+ // Diagnose when a constructor, destructor
// or the function 'main' are declared as a coroutine.
auto *MD = dyn_cast<CXXMethodDecl>(FD);
- // [class.ctor]p6: "A constructor shall not be a coroutine."
+ // [class.ctor]p11: "A constructor shall not be a coroutine."
if (MD && isa<CXXConstructorDecl>(MD))
return DiagInvalid(DiagCtor);
// [class.dtor]p17: "A destructor shall not be a coroutine."
else if (MD && isa<CXXDestructorDecl>(MD))
return DiagInvalid(DiagDtor);
- // N4499 [special]p6: "A special member function shall not be a coroutine."
- // Per C++ [special]p1, special member functions are the "default constructor,
- // copy constructor and copy assignment operator, move constructor and move
- // assignment operator, and destructor."
- else if (MD && MD->isCopyAssignmentOperator())
- return DiagInvalid(DiagCopyAssign);
- else if (MD && MD->isMoveAssignmentOperator())
- return DiagInvalid(DiagMoveAssign);
// [basic.start.main]p3: "The function main shall not be a coroutine."
else if (FD->isMain())
return DiagInvalid(DiagMain);
OpenPOWER on IntegriCloud