summaryrefslogtreecommitdiff
path: root/pack.c
diff options
context:
space:
mode:
authorngoto <ngoto@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2015-11-13 17:06:43 (GMT)
committerngoto <ngoto@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2015-11-13 17:06:43 (GMT)
commit238c6c5b89179d46e2e4ede21803c4cd55b9a767 (patch)
tree897a8351aae4bd3272311598ddf1361f07838596 /pack.c
parentf2b760e3360bcbbf942dd87daac21643c2aa81c7 (diff)
* pack.c (pack_unpack, AVOID_CC_BUG): Very ugly workaround for
optimization bug of Oracle Solaris Studio 12.4 on Solaris with -xO4 optimization option. [Bug #11684] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52559 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'pack.c')
-rw-r--r--pack.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/pack.c b/pack.c
index 1ca98bc..f47423a 100644
--- a/pack.c
+++ b/pack.c
@@ -1100,6 +1100,15 @@ hex2num(char c)
rb_ary_store(ary, RARRAY_LEN(ary)+tmp_len-1, Qnil); \
} while (0)
+/* Workaround for Oracle Solaris Studio 12.4 C compiler optimization bug
+ * with "-xO4" optimization option.
+ */
+#if defined(__SUNPRO_C) && __SUNPRO_C == 0x5130
+# define AVOID_CC_BUG volatile
+#else
+# define AVOID_CC_BUG
+#endif
+
static VALUE
infected_str_new(const char *ptr, long len, VALUE str)
{
@@ -1231,7 +1240,8 @@ pack_unpack(VALUE str, VALUE fmt)
char *p, *pend;
VALUE ary;
char type;
- long len, tmp_len;
+ long len;
+ AVOID_CC_BUG long tmp_len;
int star;
#ifdef NATINT_PACK
int natint; /* native integer */