summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema/SemaDeclCXX.cpp
diff options
context:
space:
mode:
authorDouglas Gregor <dgregor@apple.com>2012-02-12 17:34:23 +0000
committerDouglas Gregor <dgregor@apple.com>2012-02-12 17:34:23 +0000
commit1a22d2889b234fcb10cad83be231b113e6d3a8b3 (patch)
tree3541530945b1094d8edb43e46dbe3bd668a048f1 /clang/lib/Sema/SemaDeclCXX.cpp
parent0501c63609a567b89289f3412e5d0225f239d7ea (diff)
downloadbcm5719-llvm-1a22d2889b234fcb10cad83be231b113e6d3a8b3.tar.gz
bcm5719-llvm-1a22d2889b234fcb10cad83be231b113e6d3a8b3.zip
Lambdas have a deleted default constructor and a deleted copy
assignment operator, per C++ [expr.prim.lambda]p19. Make it so. llvm-svn: 150345
Diffstat (limited to 'clang/lib/Sema/SemaDeclCXX.cpp')
-rw-r--r--clang/lib/Sema/SemaDeclCXX.cpp13
1 files changed, 13 insertions, 0 deletions
diff --git a/clang/lib/Sema/SemaDeclCXX.cpp b/clang/lib/Sema/SemaDeclCXX.cpp
index 467cf43797e..b8ea85bea96 100644
--- a/clang/lib/Sema/SemaDeclCXX.cpp
+++ b/clang/lib/Sema/SemaDeclCXX.cpp
@@ -4340,6 +4340,13 @@ bool Sema::ShouldDeleteSpecialMember(CXXMethodDecl *MD, CXXSpecialMember CSM) {
switch (CSM) {
case CXXDefaultConstructor:
IsConstructor = true;
+
+ // C++11 [expr.lambda.prim]p19:
+ // The closure type associated with a lambda-expression has a
+ // deleted (8.4.3) default constructor.
+ if (RD->isLambda())
+ return true;
+
break;
case CXXCopyConstructor:
IsConstructor = true;
@@ -4621,6 +4628,12 @@ bool Sema::ShouldDeleteCopyAssignmentOperator(CXXMethodDecl *MD) {
if (!LangOpts.CPlusPlus0x || RD->isInvalidDecl())
return false;
+ // C++11 [expr.lambda.prim]p19:
+ // The closure type associated with a lambda-expression has a
+ // [...] deleted copy assignment operator.
+ if (RD->isLambda())
+ return true;
+
SourceLocation Loc = MD->getLocation();
// Do access control from the constructor
OpenPOWER on IntegriCloud