summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema/SemaDecl.cpp
diff options
context:
space:
mode:
authorRichard Smith <richard-llvm@metafoo.co.uk>2019-07-29 19:59:45 +0000
committerRichard Smith <richard-llvm@metafoo.co.uk>2019-07-29 19:59:45 +0000
commita625da716c8300d2ff9ec2313e7b38892bcfcfcb (patch)
tree9f9e3b53c77485cbd63f9c9b6ba5f69d8ce92e50 /clang/lib/Sema/SemaDecl.cpp
parent8e9516f2aa495749edd2adb7c8fe0778ee462c17 (diff)
downloadbcm5719-llvm-a625da716c8300d2ff9ec2313e7b38892bcfcfcb.tar.gz
bcm5719-llvm-a625da716c8300d2ff9ec2313e7b38892bcfcfcb.zip
When determining whether a lambda-expression is implicitly constexpr,
check the formal rules rather than seeing if the normal checks produce a diagnostic. This fixes the handling of C++2a extensions in lambdas in C++17 mode, as well as some corner cases in earlier language modes where we issue diagnostics for things other than not satisfying the formal constexpr requirements. llvm-svn: 367254
Diffstat (limited to 'clang/lib/Sema/SemaDecl.cpp')
-rw-r--r--clang/lib/Sema/SemaDecl.cpp3
1 files changed, 1 insertions, 2 deletions
diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp
index 2e82dcf4ac8..ced24805ed8 100644
--- a/clang/lib/Sema/SemaDecl.cpp
+++ b/clang/lib/Sema/SemaDecl.cpp
@@ -13532,8 +13532,7 @@ Decl *Sema::ActOnFinishFunctionBody(Decl *dcl, Stmt *Body,
}
if (!IsInstantiation && FD && FD->isConstexpr() && !FD->isInvalidDecl() &&
- (!CheckConstexprFunctionDecl(FD) ||
- !CheckConstexprFunctionBody(FD, Body)))
+ !CheckConstexprFunctionDefinition(FD, CheckConstexprKind::Diagnose))
FD->setInvalidDecl();
if (FD && FD->hasAttr<NakedAttr>()) {
OpenPOWER on IntegriCloud