summaryrefslogtreecommitdiffstats
path: root/libclc/r600/lib
diff options
context:
space:
mode:
authorBrian Gesiak <modocache@gmail.com>2018-11-03 22:35:17 +0000
committerBrian Gesiak <modocache@gmail.com>2018-11-03 22:35:17 +0000
commita87ecf6c7f68ae1797d33d9c451d9fd78cf431b8 (patch)
tree7331c667727c2a2df8b08cf070b7082f866bfe50 /libclc/r600/lib
parent7aed9e600b42427292467d408235c367d43a1755 (diff)
downloadbcm5719-llvm-a87ecf6c7f68ae1797d33d9c451d9fd78cf431b8.tar.gz
bcm5719-llvm-a87ecf6c7f68ae1797d33d9c451d9fd78cf431b8.zip
[coroutines] Fix fallthrough warning on try/catch
Summary: 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` Reviewers: GorNishanov, tks2103, rsmith Reviewed By: GorNishanov Subscribers: EricWF, lewissbaker, cfe-commits Differential Revision: https://reviews.llvm.org/D54075 llvm-svn: 346074
Diffstat (limited to 'libclc/r600/lib')
0 files changed, 0 insertions, 0 deletions
OpenPOWER on IntegriCloud