From: ts Date: 2004-08-31T23:59:11+09:00 Subject: Re: (Revised) [PATCH] Subtle bug in bignum.c >>>>> "M" == Markus writes: M> I've always thought (but remember, I don't really know C) that volatile M> was a hint to the compiler that code that _used_ something should _not_ M> hold it in a register, because something else might modify it at any M> time (e.g. the system clock). So I am not sure why it would help. Yes, you are right. Now `x' and `y' will not be in a register, and ruby will find it on the stack if the GC is called in bignew() *even* if a new Bignum is created by rb_big_clone() and stored at this address. The initial problem is that the new Bignum (created by rb_big_clone()) was stored in a register (because `x' was in a register), then the content of the register was replaced with another variable (RBIGNUM(y)->digits) when the gc was called and this is why ruby was unable to mark the Bignum Guy Decoux