[constexpr][c++2a] Try-catch blocks in constexpr functions
authorBruno Cardoso Lopes <bruno.cardoso@gmail.com>
Mon, 10 Dec 2018 19:03:12 +0000 (19:03 +0000)
committerBruno Cardoso Lopes <bruno.cardoso@gmail.com>
Mon, 10 Dec 2018 19:03:12 +0000 (19:03 +0000)
commit5c1399a5823790710a6480301d9bdcae9025af59
tree2d2023d622de2909cb5a1ca81557d9b47bbe0f83
parent5ec146046cbb1a69850d2712f40e9ea273e2a257
[constexpr][c++2a] Try-catch blocks in constexpr functions

Implement support for try-catch blocks in constexpr functions, as
proposed in http://wg21.link/P1002 and voted in San Diego for c++20.

The idea is that we can still never throw inside constexpr, so the catch
block is never entered. A try-catch block like this:

try { f(); } catch (...) { }

is then morally equivalent to just

{ f(); }

Same idea should apply for function/constructor try blocks.

rdar://problem/45530773

Differential Revision: https://reviews.llvm.org/D55097

llvm-svn: 348789
clang/include/clang/Basic/DiagnosticSemaKinds.td
clang/lib/AST/ExprConstant.cpp
clang/lib/Sema/SemaDeclCXX.cpp
clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p3.cpp
clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p4.cpp
clang/test/CXX/drs/dr6xx.cpp
clang/www/cxx_status.html