summaryrefslogtreecommitdiffstats
path: root/lldb/packages/Python/lldbsuite/test/python_api/section/main.c
diff options
context:
space:
mode:
authorDavid Majnemer <david.majnemer@gmail.com>2016-01-22 23:20:43 +0000
committerDavid Majnemer <david.majnemer@gmail.com>2016-01-22 23:20:43 +0000
commitf1ff538456fd3fa911d711a697b88e1d3dd99ac5 (patch)
tree9ee9fe31b4df15e408b19048e33c0691de4dc722 /lldb/packages/Python/lldbsuite/test/python_api/section/main.c
parent672dde2b3e3b99cd1fb00315b8cfd7bdd4952ed6 (diff)
downloadbcm5719-llvm-f1ff538456fd3fa911d711a697b88e1d3dd99ac5.tar.gz
bcm5719-llvm-f1ff538456fd3fa911d711a697b88e1d3dd99ac5.zip
[WinEH] Let cleanups post-dominated by unreachable get executed
Cleanups in C++ are a little weird. They are only guaranteed to be reliably executed if, and only if, there is a viable catch handler which can handle the exception. This means that reachability of a cleanup is lexically determined by it being nested with a try-block which unwinds to a catch. It is *cannot* be reasoned about by examining the control flow edges leaving a cleanup. Usually this is not a problem. It becomes a problem when there are *no* edges out of a cleanup because we believed that code post-dominated by the cleanup is dead. In LLVM's case, this code is what informs the personality routine about the presence of a suitable catch handler. However, the lack of edges to that catch handler makes the handler become unreachable which causes us to remove it. By removing the handler, the cleanup becomes unreachable. Instead, inject a catch-all handler with every cleanup that has no unwind edges. This will allow us to properly unwind the stack. This fixes PR25997. llvm-svn: 258580
Diffstat (limited to 'lldb/packages/Python/lldbsuite/test/python_api/section/main.c')
0 files changed, 0 insertions, 0 deletions
OpenPOWER on IntegriCloud