[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Nmh-workers] strcasecmp.c and gcc -O2
From: |
Josh Bressers |
Subject: |
Re: [Nmh-workers] strcasecmp.c and gcc -O2 |
Date: |
Thu, 06 Sep 2007 10:15:00 -0400 |
>
> strcasecomp(a,b) segfaults if a=NULL and compiled with -O2 and gcc >= 4.1.1.
>
> The code in question is:
>
>
> int
> mh_strcasecmp (const char *s1, const char *s2)
> {
> const unsigned char *us1, *us2;
>
> us1 = (const unsigned char *) s1,
> us2 = (const unsigned char *) s2;
>
> if (!us1)
> us1 = "";
> if (!us2)
> us2 = "";
>
> while (tolower(*us1) == tolower(*us2++))
> if (*us1++ == '\0')
> return (0);
> return (tolower(*us1) - tolower(*--us2));
> }
>
>
> It seems the compiler (using -O2) totally optimizes away the two if clauses.
> Looking at the assembler:
>
I don't see this behavior with gcc 4.1.2 on Fedora 7. It's quite possible
you're seeing a gcc bug. I'd suggest writing a minimalistic freestanding
testcase. If that testcase still exhibits this behavior, submit a bug
report to the gcc folks.
--
JB