Issue #8349 has been reported by h.shirosaki (Hiroshi Shirosaki).

----------------------------------------
Bug #8349: [mingw] adding -mfpmath=sse -msse2 causes segv on Windows 7
https://bugs.ruby-lang.org/issues/8349

Author: h.shirosaki (Hiroshi Shirosaki)
Status: Assigned
Priority: Normal
Assignee: naruse (Yui NARUSE)
Category: 
Target version: current: 2.1.0
ruby -v: ruby 2.1.0dev (2013-04-30 trunk 40528) [i386-mingw32]
Backport: 1.9.3: UNKNOWN, 2.0.0: UNKNOWN


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];


-- 
http://bugs.ruby-lang.org/