> -----Original Message-----
> From: daz [mailto:dooby / d10.karoo.co.uk] 
> Sent: Monday, June 06, 2005 12:21 PM
> To: ruby-core
> Subject: [PATCH] 1.8.3 p1 segfault in array.c- bccwin32 - 
> bcc5.5 (free) compiler bug
> 
> 
> 
> Hi,
> 
> There's a line in array.c which confuses the Borland 5.5 
> compiler optimizer into corrupting a pointer held in a register.
> 
> Use of -O2 flag with the 'free' compiler causes a SEGV in 
> miniruby during the bccwin32 build process.
> 
> I tried to produce a small test case for the Borland 
> community to comment on but without success, so I can't say 
> if this is a known problem or even what the problem is. It 
> doesn't occur anywhere else in the 183p1 source.
> 
> Fix has a much smaller impact than adding 'volatile' would have.
> 
> I don't like the code change, especially as it means the same 
> thing but it will be preferable to the SEGV if you can bear it.

I don't know assembler very well, so forgive my ignorance, but does it
help to add parens?

-    if (TYPE(a) == T_STRING && TYPE(b) == T_STRING) {
+    if ((TYPE(a) == T_STRING) && (TYPE(b) == T_STRING)) {

Just curious.

Dan