diff options
author | Vivek Pandya <vivekvpandya@gmail.com> | 2019-06-19 14:12:19 +0000 |
---|---|---|
committer | Vivek Pandya <vivekvpandya@gmail.com> | 2019-06-19 14:12:19 +0000 |
commit | 3a0100ac30bf516d7eca0d7725281900460543af (patch) | |
tree | 98555cbc61060142a9461ff2ffe09fec5d014fab /clang/lib/Sema/SemaCoroutine.cpp | |
parent | d0aa6c58beef0a6663aacba8904e286c1925c572 (diff) | |
download | bcm5719-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.cpp | 14 |
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); |