[coroutines] Diagnose when promise types fail to declare either return_void or return...
authorEric Fiselier <eric@efcs.ca>
Thu, 25 May 2017 14:59:39 +0000 (14:59 +0000)
committerEric Fiselier <eric@efcs.ca>
Thu, 25 May 2017 14:59:39 +0000 (14:59 +0000)
commitfc50f62caafd35b3dd4297d7af109fb7e6c00675
treeb8f0eb8222ca57760c1363746a34757d601fcbdb
parent4bf928282f0d4d3b4af92ba9e404a770d653c2df
[coroutines] Diagnose when promise types fail to declare either return_void or return_value.

Summary:
According to the PDTS it's perfectly legal to have a promise type that defines neither `return_value` nor `return_void`. However a coroutine that uses such a promise type will almost always have UB, because it can never `co_return`.

This patch changes Clang to diagnose such cases as an error. It also cleans up some of the diagnostic messages relating to member lookup in the promise type.

Reviewers: GorNishanov, rsmith

Reviewed By: GorNishanov

Subscribers: cfe-commits

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

llvm-svn: 303868
clang/include/clang/Basic/DiagnosticSemaKinds.td
clang/lib/Sema/SemaCoroutine.cpp
clang/test/SemaCXX/coreturn.cpp
clang/test/SemaCXX/coroutines.cpp