From: nagachika00@... Date: 2014-06-19T15:16:19+00:00 Subject: [ruby-core:63249] [ruby-trunk - Bug #8349] [mingw] adding -mfpmath=sse -msse2 causes segv on Windows 7 Issue #8349 has been updated by Tomoyuki Chikanaga. Backport changed from 1.9.3: UNKNOWN, 2.0.0: UNKNOWN to 1.9.3: UNKNOWN, 2.0.0: DONE r44539 was already backported into ruby_2_1 at r44993. ---------------------------------------- Bug #8349: [mingw] adding -mfpmath=sse -msse2 causes segv on Windows 7 https://bugs.ruby-lang.org/issues/8349#change-47296 * Author: Hiroshi Shirosaki * Status: Closed * Priority: Normal * Assignee: Yui NARUSE * Category: * Target version: 2.1.0 * ruby -v: ruby 2.1.0dev (2013-04-30 trunk 40528) [i386-mingw32] * Backport: 1.9.3: UNKNOWN, 2.0.0: DONE ---------------------------------------- I tried -mfpmath=sse -msse2 with mingw on Windows 7 and got 2 segv while make test-all. Here is the detail. https://gist.github.com/anonymous/5487498 I don't know why these options causes segv, but adding volatile seems to fix this. Is this ok to commit? diff --git a/re.c b/re.c index fe7e390..5c96276 100644 --- a/re.c +++ b/re.c @@ -154,7 +154,8 @@ rb_memsearch_qs(const unsigned char *xs, long m, const unsigned char *ys, long n { const unsigned char *x = xs, *xe = xs + m; const unsigned char *y = ys; - VALUE i, qstable[256]; + volatile VALUE i; + VALUE qstable[256]; /* Preprocessing */ for (i = 0; i < 256; ++i) diff --git a/regcomp.c b/regcomp.c index 1373ff2..8c0e2b5 100644 --- a/regcomp.c +++ b/regcomp.c @@ -5306,7 +5306,7 @@ set_optimize_exact_info(regex_t* reg, OptExactInfo* e) static void set_optimize_map_info(regex_t* reg, OptMapInfo* m) { - int i; + volatile int i; for (i = 0; i < ONIG_CHAR_TABLE_SIZE; i++) reg->map[i] = m->map[i]; -- https://bugs.ruby-lang.org/