Sorry to bring this up again, but I hope someone can help me with this.
 I'm trying to compile Parrot on Windows XP / Visual C++ with assertions
enabled, that is, without C<NDEBUG>.

When running miniparrot I receive the following error:

Assertion failed: (PTR2UINTVAL(mmd_table[i].func_ptr) & 3) == 0, file
src\mmd.c, line 1709

Here's some context:

-snip-
/*
 * register default mmds for this type
 */
for (i = 0; i < n; ++i) {
    assert((PTR2UINTVAL(mmd_table[i].func_ptr) & 3) == 0);
    mmd_register(interp,
            mmd_table[i].func_nr, type,
            mmd_table[i].right, mmd_table[i].func_ptr);
    mmd_create_builtin_multi_meth(interp, ns, type, mmd_table + i);
}
-snip-

Now, when I run miniparrot through the debugger C<mmd_table[0].func_ptr>
is 0x100036e3, which is C<Parrot_UnManagedStruct_is_equal>.

My questions are:

- Is anyone else smoking / running Parrot with assertions enabled?

- The assertion seems to check that the lowest two bits of a function
pointer are zero.  Why's that?

Thanks,
Ron

Reply via email to