summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema/SemaExpr.cpp
diff options
context:
space:
mode:
authorRichard Smith <richard-llvm@metafoo.co.uk>2018-09-27 22:47:04 +0000
committerRichard Smith <richard-llvm@metafoo.co.uk>2018-09-27 22:47:04 +0000
commit864949bda1db3fa9a165b4c6372d2143e610efbd (patch)
tree13fd192cfe3195e501ea2eedd8be6788d867d75d /clang/lib/Sema/SemaExpr.cpp
parent8b4f0e1b8c454e3427ce1ffe5f86df15ff2a6d30 (diff)
downloadbcm5719-llvm-864949bda1db3fa9a165b4c6372d2143e610efbd.tar.gz
bcm5719-llvm-864949bda1db3fa9a165b4c6372d2143e610efbd.zip
[cxx2a] P0624R2: Lambdas with no capture-default are
default-constructible and assignable. llvm-svn: 343279
Diffstat (limited to 'clang/lib/Sema/SemaExpr.cpp')
-rw-r--r--clang/lib/Sema/SemaExpr.cpp11
1 files changed, 11 insertions, 0 deletions
diff --git a/clang/lib/Sema/SemaExpr.cpp b/clang/lib/Sema/SemaExpr.cpp
index e89e8a2e68f..26fb107688f 100644
--- a/clang/lib/Sema/SemaExpr.cpp
+++ b/clang/lib/Sema/SemaExpr.cpp
@@ -266,6 +266,17 @@ bool Sema::DiagnoseUseOfDecl(NamedDecl *D, ArrayRef<SourceLocation> Locs,
return true;
}
+ if (auto *MD = dyn_cast<CXXMethodDecl>(D)) {
+ // Lambdas are only default-constructible or assignable in C++2a onwards.
+ if (MD->getParent()->isLambda() &&
+ ((isa<CXXConstructorDecl>(MD) &&
+ cast<CXXConstructorDecl>(MD)->isDefaultConstructor()) ||
+ MD->isCopyAssignmentOperator() || MD->isMoveAssignmentOperator())) {
+ Diag(Loc, diag::warn_cxx17_compat_lambda_def_ctor_assign)
+ << !isa<CXXConstructorDecl>(MD);
+ }
+ }
+
auto getReferencedObjCProp = [](const NamedDecl *D) ->
const ObjCPropertyDecl * {
if (const auto *MD = dyn_cast<ObjCMethodDecl>(D))
OpenPOWER on IntegriCloud