On the PPC will work just fine 100% of the time. If I run the same
code on the ICBMs it'll return true even when the strings weren't
equal at all in some rare cases. It also shows an error in GCC
The error might be conveying useful information. Would you like to
tell us what it says?
Even worse was trying something like:
if (objc_msgSend(string, NSSelectorFromString(CFSTR
("isEqualToString:")), otherString))
which returns true the far majority of the time even when it the
strings are not equal. However, if I change the code to read:
if ((signed char(*)(id, SEL, id)objc_msgSend)(string,
NSSelectorFromString(CFSTR("isEqualToString:")), otherString))
it always returns the correct value. Is there a reason for this
change between the PPC and the x86?
In your old code you were taking the result of objc_msgSend as a
BOOL; it fails and gives you an error. In the later case you
explicitly tell the compiler that it is something else and it works.
Two things to note: firstly, the function objc_msgSend returns an id,
not a BOOL, which is probably what your error is about. Secondly, in
the Universal Binary Programming Guidelines [1] you'll find that the
BOOL type is represented differently on the Intel processors compared
to how it was on the PPC. The first observation means that your
original code was making an assumption about how something works and
the second observations means that how things work with respect to
BOOL types has changed, so I'm guessing your code fails because your
assumption is no longer correct.