<html>
<head>
<base href="https://llvm.org/bugs/" />
</head>
<body><span class="vcard"><a class="email" href="mailto:david.majnemer@gmail.com" title="David Majnemer <david.majnemer@gmail.com>"> <span class="fn">David Majnemer</span></a>
</span> changed
<a class="bz_bug_link
bz_status_RESOLVED bz_closed"
title="RESOLVED WONTFIX - [WinEH] no-return function in cleanup code not called with -O"
href="https://llvm.org/bugs/show_bug.cgi?id=25997">bug 25997</a>
<br>
<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>What</th>
<th>Removed</th>
<th>Added</th>
</tr>
<tr>
<td style="text-align:right;">Status</td>
<td>NEW
</td>
<td>RESOLVED
</td>
</tr>
<tr>
<td style="text-align:right;">CC</td>
<td>
</td>
<td>david.majnemer@gmail.com, rnk@google.com
</td>
</tr>
<tr>
<td style="text-align:right;">Resolution</td>
<td>---
</td>
<td>WONTFIX
</td>
</tr></table>
<p>
<div>
<b><a class="bz_bug_link
bz_status_RESOLVED bz_closed"
title="RESOLVED WONTFIX - [WinEH] no-return function in cleanup code not called with -O"
href="https://llvm.org/bugs/show_bug.cgi?id=25997#c1">Comment # 1</a>
on <a class="bz_bug_link
bz_status_RESOLVED bz_closed"
title="RESOLVED WONTFIX - [WinEH] no-return function in cleanup code not called with -O"
href="https://llvm.org/bugs/show_bug.cgi?id=25997">bug 25997</a>
from <span class="vcard"><a class="email" href="mailto:david.majnemer@gmail.com" title="David Majnemer <david.majnemer@gmail.com>"> <span class="fn">David Majnemer</span></a>
</span></b>
<pre>Thanks for the excellent bug report!
This seems to be a quirk in the behavior of MSVC's personality routine.
C++17 [except.handle]p9 says:
If no matching handler is found, the function std::terminate() is called;
whether or not the stack is unwound before this call to std::terminate() is
implementation-defined.
Clang has decided that your catch handler is not a matching handler because it
is dynamically unreachable.
Here is an example which doesn't rely on clang-cl. clang, gcc and icc give the
following code different behavior depending on the optimization level:
extern "C" void __attribute__((nothrow, noreturn)) exit(int);
struct S {
~S() { exit(1); }
};
void f() {
S s;
throw 0;
}
void g() {
try {
f();
} catch (...) {
}
}
int main() { g(); }</pre>
</div>
</p>
<hr>
<span>You are receiving this mail because:</span>
<ul>
<li>You are on the CC list for the bug.</li>
</ul>
</body>
</html>