diff options
author | Richard Smith <richard-llvm@metafoo.co.uk> | 2019-07-29 19:59:45 +0000 |
---|---|---|
committer | Richard Smith <richard-llvm@metafoo.co.uk> | 2019-07-29 19:59:45 +0000 |
commit | a625da716c8300d2ff9ec2313e7b38892bcfcfcb (patch) | |
tree | 9f9e3b53c77485cbd63f9c9b6ba5f69d8ce92e50 /clang/lib/Sema/SemaDecl.cpp | |
parent | 8e9516f2aa495749edd2adb7c8fe0778ee462c17 (diff) | |
download | bcm5719-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.cpp | 3 |
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>()) { |