diff options
author | Richard Smith <richard-llvm@metafoo.co.uk> | 2018-09-27 22:47:04 +0000 |
---|---|---|
committer | Richard Smith <richard-llvm@metafoo.co.uk> | 2018-09-27 22:47:04 +0000 |
commit | 864949bda1db3fa9a165b4c6372d2143e610efbd (patch) | |
tree | 13fd192cfe3195e501ea2eedd8be6788d867d75d /clang/lib/Sema/SemaExpr.cpp | |
parent | 8b4f0e1b8c454e3427ce1ffe5f86df15ff2a6d30 (diff) | |
download | bcm5719-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.cpp | 11 |
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)) |