ruby-changes:24495
From: knu <ko1@a...>
Date: Fri, 27 Jul 2012 13:12:24 +0900 (JST)
Subject: [ruby-changes:24495] knu:r36546 (ruby_1_8): * numeric.c (int_pow, fix_mul): Avoid optimization bugs of
knu 2012-07-27 13:12:08 +0900 (Fri, 27 Jul 2012) New Revision: 36546 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=36546 Log: * numeric.c (int_pow, fix_mul): Avoid optimization bugs of clang. Submitted by Wataru Kimura [Bug #6796]. Modified files: branches/ruby_1_8/ChangeLog branches/ruby_1_8/numeric.c Index: ruby_1_8/numeric.c =================================================================== --- ruby_1_8/numeric.c (revision 36545) +++ ruby_1_8/numeric.c (revision 36546) @@ -2162,7 +2162,7 @@ VALUE x, y; { if (FIXNUM_P(y)) { -#ifdef __HP_cc +#if defined(__HP_cc) || defined(__clang__) /* avoids an optimization bug of HP aC++/ANSI C B3910B A.06.05 [Jul 25 2005] */ volatile #endif @@ -2320,9 +2320,9 @@ y &= ~1; do { while (y % 2 == 0) { - long x2 = x * x; + volatile long x2 = x * x; if (x2/x != x || !POSFIXABLE(x2)) { - VALUE v; + volatile VALUE v; bignum: v = rb_big_pow(rb_int2big(x), LONG2NUM(y)); if (z != 1) v = rb_big_mul(rb_int2big(neg ? -z : z), v); @@ -2332,7 +2332,7 @@ y >>= 1; } { - long xz = x * z; + volatile long xz = x * z; if (!POSFIXABLE(xz) || xz / x != z) { goto bignum; } Index: ruby_1_8/ChangeLog =================================================================== --- ruby_1_8/ChangeLog (revision 36545) +++ ruby_1_8/ChangeLog (revision 36546) @@ -1,3 +1,8 @@ +Fri Jul 27 13:04:31 2012 Akinori MUSHA <knu@i...> + + * numeric.c (int_pow, fix_mul): Avoid optimization bugs of + clang. Submitted by Wataru Kimura [Bug #6796]. + Fri Jun 29 21:19:36 2012 Nobuyoshi Nakada <nobu@r...> * eval.c (stack_extend): prevent ALLOCA_N, which reserves a memory -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/