Некоторое время назад было известно, что 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 известным (все еще) неработающим?