optimization/8204: gcj -O2 to native reorders certain instructions improperly.

rsdio@metastatic.org rsdio@metastatic.org
Fri Oct 11 18:36:00 GMT 2002


>Number:         8204
>Category:       optimization
>Synopsis:       gcj -O2 to native reorders certain instructions improperly.
>Confidential:   no
>Severity:       non-critical
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Fri Oct 11 18:36:00 PDT 2002
>Closed-Date:
>Last-Modified:
>Originator:     rsdio@metastatic.org
>Release:        gcc-3.2
>Organization:
>Environment:
linux-2.4.18-i686.
gcc-3.2 Configured with: ../gcc-3.2/configure --enable-languages=c,c++,f77,java,objc
>Description:
A statement such as:

String s; int i;
while (i < s.length) {
   result[j++] = (byte) ((f(s.charAt(i++)) << 4) | (f(s.charAt(i++))));
}

(f is e.g. a method to turn a hex digit [0-9A-Fa-f] into an integer)

inverts the calls to 'f()' such that the result from the SECOND call is shifted left, not the first as expected.

This bug only appears with native compilation with level 2 optimization or above. It appears only within loops and only with the two method calls.
>How-To-Repeat:
gcj -O2 --classpath=/path/to/libgcj.jar --main=bug -o bug bug.java ; ./bug

Where 'bug.java' is the attached sample. This should print out 8 lines that all say 'false'. The expected behavior is 8 lines that say 'true'.
>Fix:
Unknown.
>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/octet-stream; name="bug.java"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="bug.java"

Y2xhc3MgYnVnIHsKICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJndikgewog
ICAgICBTdHJpbmcgcyA9ICIwMTIzNDU2Nzg5QUJDREVGIjsKICAgICAgYnl0ZVtdIGIxID0gbmV3
IGJ5dGVbXSB7CiAgICAgICAgIDB4MDEsIDB4MjMsIDB4NDUsIDB4NjcsIChieXRlKSAweDg5LCAo
Ynl0ZSkgMHhBQiwKICAgICAgICAgKGJ5dGUpIDB4Q0QsIChieXRlKSAweEVGCiAgICAgIH07CiAg
ICAgIGJ5dGVbXSBiMiA9IG5ldyBieXRlW2IxLmxlbmd0aF07CiAgICAgIGludCBpID0gMCwgaiA9
IDA7CiAgICAgIHdoaWxlIChpIDwgcy5sZW5ndGgoKSkgewogICAgICAgICBiMltqKytdID0gKGJ5
dGUpICgoZnJvbURpZ2l0KHMuY2hhckF0KGkrKykpIDw8IDQpCiAgICAgICAgICAgICAgICAgfCAo
ZnJvbURpZ2l0KHMuY2hhckF0KGkrKykpKSk7CiAgICAgIH0KICAgICAgZm9yIChpbnQgayA9IDA7
IGsgPCBiMS5sZW5ndGg7IGsrKykgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50KGIxW2tdID09
IGIyW2tdKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludCgnICcpOwogICAgICAgICBTeXN0ZW0u
b3V0LnByaW50KEludGVnZXIudG9IZXhTdHJpbmcoYjFba10gJiAweEZGKSk7CiAgICAgICAgIFN5
c3RlbS5vdXQucHJpbnQoJyAnKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKEludGVnZXIu
dG9IZXhTdHJpbmcoYjJba10gJiAweEZGKSk7CiAgICAgIH0KICAgfQoKICAgcHVibGljIHN0YXRp
YyBpbnQgZnJvbURpZ2l0KGNoYXIgYykgewogICAgICBpZiAoYyA+PSAnMCcgJiYgYyA8PSAnOScp
IHsKICAgICAgICAgcmV0dXJuIGMgLSAnMCc7CiAgICAgIH0gZWxzZSBpZiAoYyA+PSAnQScgJiYg
YyA8PSAnRicpIHsKICAgICAgICAgcmV0dXJuIGMgLSAnQScgKyAxMDsKICAgICAgfSBlbHNlIGlm
IChjID49ICdhJyAmJiBjIDw9ICdmJykgewogICAgICAgICByZXR1cm4gYyAtICdhJyArIDEwOwog
ICAgICB9IGVsc2UKICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigi
SW52YWxpZCBoZXhhZGVjaW1hbCBkaWdpdDogIiArIGMpOwogICB9Cn0K



More information about the Gcc-bugs mailing list