Un-revert "[coroutines][PR40978] Emit error for co_yield within catch block"
authorBrian Gesiak <modocache@gmail.com>
Mon, 25 Mar 2019 00:53:10 +0000 (00:53 +0000)
committerBrian Gesiak <modocache@gmail.com>
Mon, 25 Mar 2019 00:53:10 +0000 (00:53 +0000)
commitb15c35aff878cd59328de80b95ba35ab0399b2c8
tree41b25de8d9a2099228db3a32d6ada54859350d3b
parent87d4ab8b92e17db517499403eaa2e0b19992fae2
Un-revert "[coroutines][PR40978] Emit error for co_yield within catch block"

Summary:
https://reviews.llvm.org/D59076 added a new coroutine error that
prevented users from using 'co_await' or 'co_yield' within a exception
handler. However, it was reverted in https://reviews.llvm.org/rC356774
because it caused a regression in nested scopes in C++ catch statements,
as documented by https://bugs.llvm.org/show_bug.cgi?id=41171.

The issue was due to an incorrect use of a `clang::ParseScope`. To fix:

1. Add a regression test for catch statement parsing that mimics the bug
   report from https://bugs.llvm.org/show_bug.cgi?id=41171.
2. Re-apply the coroutines error patch from
   https://reviews.llvm.org/D59076, but this time with the correct
   ParseScope behavior.

Reviewers: GorNishanov, tks2103, rsmith, riccibruno, jbulow

Reviewed By: riccibruno

Subscribers: EricWF, jdoerfert, lewissbaker, cfe-commits

Tags: #clang

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

llvm-svn: 356865
clang/include/clang/Basic/DiagnosticSemaKinds.td
clang/include/clang/Sema/Scope.h
clang/lib/Parse/ParseStmt.cpp
clang/lib/Sema/Scope.cpp
clang/lib/Sema/SemaCoroutine.cpp
clang/test/SemaCXX/coroutines.cpp
clang/test/SemaCXX/exceptions.cpp