Некоторое время назад было известно, что setjmp / longjmp в mingw-w64 не работает (http://www.agardner.me/golang/windows/cgo/64-bit/setjmp/longjmp/2016/02/29/go-windows-setjmp-x86.html).
У нас есть унаследованный код, который мы использовали для запуска в 32-битной Linux и 32-битной Windows, который (по-прежнему) отлично работает. 64-разрядная версия Linux также работает нормально, но 64-разрядная версия Windows перестает работать после первого возврата longjmp в папку setjmp.
Я получаю segfault где-то в msvcrt! _Setjmpex, msvcrt! RtlUnwindEx.
Я изучил код и сначала не заметил нарушений правил, определенных для setjmp / longjmp стандартами C (99/11) в нашем коде. Обходной путь, описанный выше («используйте встроенные команды gcc»), также не работает для меня.
У меня проблемы с созданием минимально воспроизводимого примера. Пример работает. Полного кода нет. Конечно, я могу начать удалять функциональность из полного исходного кода, но это непростая задача.
Итак, вопрос здесь в основном, известно ли, что setjmp / longjmp в mingw-w64 (все еще) сломан?
setjmp
/longjmp
реализации могут по-прежнему давать сбой при определенных обстоятельствах. - person John Bollinger   schedule 10.12.2018