Marvin Humphrey wrote on 1/19/10 2:45 PM:
On Tue, Jan 19, 2010 at 02:14:17PM -0600, Peter Karman wrote:

I do get the same result.

Good, 'cause working around that class of bug would have been a huge PITA -- I
threw up my hands at that NetBSD bug.

Maybe it's macro expansion weirdness?  Try changing "ASSERT_INT_EQ" to
"kino_TestBatch_int_equals" and "StrHelp_UTF8_SKIP" to
"kino_StrHelp_UTF8_SKIP".

I'm also not totally satisfied that we've ruled out vararg argument passing.
What if we do something like this?

    bool_t condition = StrHelp_UTF8_SKIP[i] == 1 ? true : false;
    ASSERT_TRUE(batch, condition, "UTF8_SKIP ascii %d", (int)i);


I added a new function to the core/KinoSearch/Test/Util/TestStringHelper.c file as below:

static void
test_SKIP_and_TRAILING_local()
{
    u8_t i, max;

    for (i=0, max=255; i < max; i++) {
        printf("i == %d\n", i);
        printf("UTF8_SKIP[%d] == %d\n", i, StrHelp_UTF8_SKIP[i]);
        printf("i == %d\n", i);
        printf("UTF8_TRAILING[%d] == %d\n", i, StrHelp_UTF8_TRAILING[i]);
        printf("i == %d size %d\n", i, sizeof(i));
    }
    printf("finally: i == %d\n", i);
}

output:

$ perl -Mblib t/core/032-string_helper.t
<...snip regular test output...>
i == 0
UTF8_SKIP[0] == 1
i == 0
UTF8_TRAILING[0] == 0
i == 0 size 1
finally: i == 255

Notice that 'i' just skips straight from 0 to 255.

When I comment out either of the UTF8_*[..] calls, then it works fine. It's the combination of the two that causes the problem.

So there are no macros to affect that _local() function, and no vararg oddities.

However, when I put the same code into a standalone file and run it, it works (see the test app I sent earlier in this thread with the UTF8 arrays hardcoded).

I have tried this on two different RHEL 4 boxes, both with gcc version 3.4.6 20060404 (Red Hat 3.4.6-3).

I'm going to go drink a beer and try not to think about this madness for awhile and hope that the answer just comes to me in my sleep.
--
Peter Karman  .  http://peknet.com/  .  [email protected]

Reply via email to