]> granicus.if.org Git - clang/commit
[coroutines] Fix fallthrough diagnostics for coroutines
authorEric Fiselier <eric@efcs.ca>
Thu, 25 May 2017 02:16:53 +0000 (02:16 +0000)
committerEric Fiselier <eric@efcs.ca>
Thu, 25 May 2017 02:16:53 +0000 (02:16 +0000)
commit28be04dd8e51399b1955d413777003f80e81136f
treed67be085e7f4acb8288fffb8b756cf4fa6ff4bb2
parent03e95d2ffb90719219513cabb351bbd88b2ee6d2
[coroutines] Fix fallthrough diagnostics for coroutines

Summary:
This patch fixes a number of issues with the analysis warnings emitted when a coroutine may reach the end of the function w/o returning.

* Fix bug where coroutines with `return_value` are incorrectly diagnosed as missing `co_return`'s.
* Rework diagnostic message to no longer say "non-void coroutine", because that implies the coroutine doesn't have a void return type, which it might. In this case a non-void coroutine is one who's promise type does not contain `return_void()`

As a side-effect of this patch, coroutine bodies that contain an invalid coroutine promise objects are marked as invalid.

Reviewers: GorNishanov, rsmith, aaron.ballman, majnemer

Reviewed By: GorNishanov

Subscribers: cfe-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@303831 91177308-0d34-0410-b5e6-96231b3b80d8
include/clang/Basic/DiagnosticSemaKinds.td
include/clang/Sema/ScopeInfo.h
lib/Analysis/AnalysisDeclContext.cpp
lib/Sema/AnalysisBasedWarnings.cpp
lib/Sema/SemaCoroutine.cpp
lib/Sema/SemaDecl.cpp
test/SemaCXX/coreturn.cpp
test/SemaCXX/coroutines.cpp