Hi,
Among the compiler warnings, I noticed an incorrect usage of || in generated C:
in okayOoop:
unusedBits = (1 << 22) || (1LL << (22 + 32));
if (((long64At(oop)) & unusedBits) != 0) {
error("some unused header bits are set; should be zero");
return 0;
}
unusedBitsInYoungObjects = ((1 << 0x1F) || (1 << 30)) || (1 << 29);
if (((longAt(oop)) & unusedBitsInYoungObjects) != 0) {
error("some header bits unused in young objects are set; should be zero");
return 0;
C || will generate 1 in this case (true) but not the intended bit mask.
This is because Smalltalk slang is written with | instead of bitOr:
Find correction in attachment.
Nicolas