[PATCH] D54075: [coroutines] Fix fallthrough warning on try/catch

Brian Gesiak via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Sat Nov 3 12:02:02 PDT 2018


modocache created this revision.
modocache added reviewers: GorNishanov, tks2103, rsmith.
Herald added a subscriber: EricWF.

The test case added in this diff would incorrectly warn that control
flow may fall through without returning. Here's a standalone example:
https://godbolt.org/z/dCwXEi

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`


Repository:
  rC Clang

https://reviews.llvm.org/D54075

Files:
  lib/Analysis/CFG.cpp
  test/SemaCXX/coreturn-eh.cpp

-------------- next part --------------
A non-text attachment was scrubbed...
Name: D54075.172498.patch
Type: text/x-patch
Size: 4256 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20181103/ddbe9bf0/attachment.bin>


More information about the cfe-commits mailing list