[Bug tree-optimization/20188] [4.0 Regression] glibc-2.3.4 misscompilation.
pluto at pld-linux dot org
gcc-bugzilla@gcc.gnu.org
Fri Feb 25 07:13:00 GMT 2005
------- Additional Comments From pluto at pld-linux dot org 2005-02-24 23:44 -------
(In reply to comment #6)
> I have no idea what is going on here but I will note that "-O3
-fno-tree-dominator-opts" works.
> "-O3 -fno-ivopts" does not work
> "-O3 -fno-strict-aliasing" does not work.
I've looked into final tree-dump and found something interesting.
In the source we can find a [2] strcpy(startbuf, ...)
which can change the state of startbuf between [1] and [3].
if (usestart) {
[1] if (*startbuf == '\0' &&
zp->z_format != NULL &&
strchr(zp->z_format, '%') == NULL &&
strchr(zp->z_format, '/') == NULL)
[2] (void) strcpy(startbuf, zp->z_format);
eat(zp->z_filename, zp->z_linenum);
[3] if (*startbuf == '\0')
error(_("can't determine time zone abbreviation to use
just after until time"));
else
addtt(starttime,
addtype(startoff, startbuf,
startoff != zp->z_gmtoff,
startttisstd,
startttisgmt));
}
Diff shows that the optimizer assumed D.10077=startbuf[0] incorrectly
as const because <L219> can change state of startbuf.
--- 03-zic.i.t70.final_cleanup-no-tree-dominator-opts 2005-02-25
00:26:09.340849848 +0100
+++ 03-zic.i.t70.final_cleanup 2005-02-25 00:26:03.792693296 +0100
@@ -2,48 +2,44 @@
if (usestart != 0) goto <L213>; else goto <L237>;
<L213>:;
- if (startbuf[0] == 0) goto <L214>; else goto <L220>;
+ D.10077 = startbuf[0];
+ if (D.10077 == 0) goto <L214>; else goto <L220>;
<L214>:;
- if (*((const char * *) ivtmp.1013 + 128B) != 0B) goto <L215>; else goto
<L220>;
+ D.10028 = *(D.16876 + 128B);
+ if (D.10028 != 0B) goto <L215>; else goto <L220>;
<L215>:;
- __s = *((const char * *) ivtmp.1013 + 128B);
- __asm__ __volatile__("1:\n\tmovb\t(%0),%%al\n\tcmpb\t%%ah,
%%al\n\tje\t2f\n\tleal\t1(%0),%0\n\ttestb\t%%al,%%al\n\tjne\t1b\n\txorl\t%0,
%0\n2:":"=r" __res, "=&a" __d0:"0" __s, "1" 9472, "m" *(struct
+ __s.107 = (struct
{
char __x[268435455];
- } *) __s:"cc");
+ } *) D.10028;
+ __asm__ __volatile__("1:\n\tmovb\t(%0),%%al\n\tcmpb\t%%ah,
%%al\n\tje\t2f\n\tleal\t1(%0),%0\n\ttestb\t%%al,%%al\n\tjne\t1b\n\txorl\t%0,
%0\n2:":"=r" __res, "=&a" __d0:"0" D.10028, "1" 9472, "m" *__s.107:"cc");
if (__res == 0B) goto <L217>; else goto <L220>;
<L217>:;
- __s = *((const char * *) ivtmp.1013 + 128B);
- __asm__ __volatile__("1:\n\tmovb\t(%0),%%al\n\tcmpb\t%%ah,
%%al\n\tje\t2f\n\tleal\t1(%0),%0\n\ttestb\t%%al,%%al\n\tjne\t1b\n\txorl\t%0,
%0\n2:":"=r" __res, "=&a" __d0:"0" __s, "1" 12032, "m" *(struct
- {
- char __x[268435455];
- } *) __s:"cc");
+ __asm__ __volatile__("1:\n\tmovb\t(%0),%%al\n\tcmpb\t%%ah,
%%al\n\tje\t2f\n\tleal\t1(%0),%0\n\ttestb\t%%al,%%al\n\tjne\t1b\n\txorl\t%0,
%0\n2:":"=r" __res, "=&a" __d0:"0" D.10028, "1" 12032, "m" *__s.107:"cc");
if (__res == 0B) goto <L219>; else goto <L220>;
<L219>:;
- __src = *((const char * *) ivtmp.1013 + 128B);
__dest.50 = (struct
{
char __x[268435455];
} *) &startbuf;
- __asm__ __volatile__("1:\n\tmovb\t(%0),%b2\n\tleal\t1(%0),%0\n\tmovb\t%b2,
(%1)\n\tleal\t1(%1),%1\n\ttestb\t%b2,%b2\n\tjne\t1b":"=&r" __src.1132, "=&r"
__tmp, "=&q" __dummy, "=m" *__dest.50:"0" __src, "1" &startbuf, "m" *(struct
+ __asm__ __volatile__("1:\n\tmovb\t(%0),%b2\n\tleal\t1(%0),%0\n\tmovb\t%b2,
(%1)\n\tleal\t1(%1),%1\n\ttestb\t%b2,%b2\n\tjne\t1b":"=&r" __src, "=&r" __tmp,
"=&q" __dummy, "=m" *__dest.50:"0" D.10028, "1" &startbuf, "m" *(struct
{
char __x[268435455];
- } *) __src:"cc");
+ } *) D.10028:"cc");
<L220>:;
- num = *((int *) ivtmp.1013 + 112B);
- name = *((const char * *) ivtmp.1013 + 108B);
- filename = name;
+ num = *D.16875;
+ filename = *D.16877;
linenum = num;
rfilename = 0B;
rlinenum = -1;
- if (startbuf[0] == 0) goto <L225>; else goto <L226>;
+ if (D.10077 == 0) goto <L225>; else goto <L226>;
<L225>:;
D.10084 = __dcgettext (&_libc_intl_domainname, &"can\'t determine time zone
abbreviation to use just after until time"[0], 5);
error (D.10084);
- goto <bb 173> (<L237>);
+ goto <bb 155> (<L237>);
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20188
More information about the Gcc-bugs
mailing list