Fix crash in terminate handler (#12572) [backport]

* fix undefined behavior in terminate handler

* fix failing unit test

* Revert "fix failing unit test"

This reverts commit 0e5e385fbf972d53909347e246a2e9b018fe9906.

* Revert "fix undefined behavior in terminate handler"

This reverts commit 2b582871f1981492838cc70d30e8c0e00ab8c9a9.

* do not throw inside terminate handler with msvc < 1923
This commit is contained in:
Volodymyr Lashko 2019-11-08 00:00:34 +02:00 • committed by cooldome
commit 4e841ab156

View file

@ -484,7 +484,9 @@ when defined(cpp) and appType != "lib" and
var msg = "Unknown error in unexpected exception handler" var msg = "Unknown error in unexpected exception handler"
try: try:
{.emit"#if !defined(_MSC_VER) || (_MSC_VER >= 1923)".}
raise raise
{.emit"#endif".}
except Exception: except Exception:
msg = currException.getStackTrace() & "Error: unhandled exception: " & msg = currException.getStackTrace() & "Error: unhandled exception: " &
currException.msg & " [" & $currException.name & "]" currException.msg & " [" & $currException.name & "]"
@ -493,6 +495,10 @@ when defined(cpp) and appType != "lib" and
except: except:
msg = "Error: unhandled unknown cpp exception" msg = "Error: unhandled unknown cpp exception"
{.emit"#if defined(_MSC_VER) && (_MSC_VER < 1923)".}
msg = "Error: unhandled unknown cpp exception"
{.emit"#endif".}
when defined(genode): when defined(genode):
# stderr not available by default, use the LOG session # stderr not available by default, use the LOG session
echo msg echo msg