[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