OSDN Git Service

[Coroutines] Special handle __builtin_coro_resume for final_suspend nothrow check
authorXun Li <xun@fb.com>
Tue, 23 Jun 2020 22:06:18 +0000 (15:06 -0700)
committerXun Li <xun@fb.com>
Thu, 25 Jun 2020 17:49:50 +0000 (10:49 -0700)
commit366159566df3a980d3e34f3ec9609e77cdb4df8b
tree8099e735695df7720af1ae07c52e7a3ed89f7724
parent63a89693f09f6b24ce4f2350d828150bd9c4f3e8
[Coroutines] Special handle __builtin_coro_resume for final_suspend nothrow check

Summary:
In https://reviews.llvm.org/D82029 we added the conformance check that the expression co_await promise.final_suspend() should not potentially throw.
As part of this expression, in cases when the await_suspend() method of the final suspend awaiter returns a handle, __builtin_coro_resume could be called on the handle to immediately resume that coroutine.
__builtin_coro_resume is not declared with noexcept and it shouldn't. We need to special check this case here.

Reviewers: modocache, lewissbaker, junparser

Reviewed By: lewissbaker

Subscribers: modocache, cfe-commits

Tags: #clang

Differential Revision: https://reviews.llvm.org/D82415
clang/lib/Sema/SemaCoroutine.cpp