From: nobu@... Date: 2014-04-09T04:07:22+00:00 Subject: [ruby-core:61914] [ruby-trunk - Bug #9710] [Closed] __builtin_setjmp/longjmp causes SEGV with mingw Issue #9710 has been updated by Nobuyoshi Nakada. Status changed from Open to Closed % Done changed from 0 to 100 Applied in changeset r45537. ---------- configure.in: no __builtin_setjmp on x64-mingw * configure.in: get rid of __builtin_setjmp/__builtin_longjmp on x64-mingw, which causes SEGV with callcc. [ruby-core:61887] [Bug #9710] ---------------------------------------- Bug #9710: __builtin_setjmp/longjmp causes SEGV with mingw https://bugs.ruby-lang.org/issues/9710#change-46118 * Author: Hiroshi Shirosaki * Status: Closed * Priority: Normal * Assignee: * Category: * Target version: * ruby -v: ruby 2.2.0dev (2014-04-07 trunk 45529) [x64-mingw32] * Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN ---------------------------------------- Now `__builtin_setjmp/__builtin_longjmp` are used with x64-mingw. ruby 2.2.0dev (2014-04-07 trunk 45529) [x64-mingw32] gcc version 4.8.2 20130712 (prerelease) (Built by MinGW-builds project) .ext/include/x64-mingw32/ruby/config.h ~~~ #define RUBY_SETJMP(env) __builtin_setjmp((env)) #define RUBY_LONGJMP(env,val) __builtin_longjmp((env),val) ~~~ But this casues SEGV with callcc. `ruby -rcontinuation -e "callcc{|c|c.call}"` Instead using `setjmpex/longjmp` seems to work fine. ``` #define RUBY_SETJMP(env) setjmpex((env)) #define RUBY_LONGJMP(env,val) longjmp((env),val) ``` -- https://bugs.ruby-lang.org/