From b74f46047320419a0871d75d2a94dabebbd53535 Mon Sep 17 00:00:00 2001 From: ngoto Date: Fri, 13 Nov 2015 17:06:43 +0000 Subject: * 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 --- ChangeLog | 6 ++++++ pack.c | 12 +++++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index ee8ce90655..3b6bd48e51 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +Sat Nov 14 01:53:52 2015 Naohisa Goto + + * 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] + Fri Nov 13 23:00:23 2015 Hiroshi Shirosaki * configure.in: unset LD_PRELOAD on mingw. msys2 child processes diff --git a/pack.c b/pack.c index 1ca98bcee6..f47423a2b6 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 */ -- cgit v1.2.3