The test case added in this diff would incorrectly warn that control
flow may fall through without returning. Here's a standalone example:
The same program, but using return instead of co_return, does not
produce a warning: https://godbolt.org/z/mVldqQ
The issue was in how Clang analysis would structure its representation
of the control-flow graph. Specifically, when constructing the CFG,
CFGBuilder::Visit had special handling of a ReturnStmt, in which it
would place object destructors in the same CFG block as a return statement,
immediately after it. Doing so would allow the logic in
lib/Sema/AnalysisBasedWarning.cpp CheckFallThrough to work properly in the
program that used return, correctly determining that no "plain edges" preceded
the exit block of the function.
Because a co_return statement would not enjoy the same treatment when
it was being built into the control-flow graph, object destructors
would not be placed in the same CFG block as the co_return, thus
resulting in a "plain edge" preceding the exit block of the function,
and so the warning logic would be triggered.
Add special casing for co_return to Clang analysis, thereby
remedying the mistaken warning.
Test Plan: check-clang