From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 6827 invoked by alias); 12 Oct 2002 01:36:01 -0000 Mailing-List: contact gcc-prs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-prs-owner@gcc.gnu.org Received: (qmail 6803 invoked by uid 71); 12 Oct 2002 01:36:01 -0000 Resent-Date: 12 Oct 2002 01:36:01 -0000 Resent-Message-ID: <20021012013601.6802.qmail@sources.redhat.com> Resent-From: gcc-gnats@gcc.gnu.org (GNATS Filer) Resent-Cc: gcc-prs@gcc.gnu.org, gcc-bugs@gcc.gnu.org Resent-Reply-To: gcc-gnats@gcc.gnu.org, rsdio@metastatic.org Received: (qmail 2322 invoked by uid 61); 12 Oct 2002 01:27:01 -0000 Message-Id: <20021012012701.2319.qmail@sources.redhat.com> Date: Fri, 11 Oct 2002 18:36:00 -0000 From: rsdio@metastatic.org Reply-To: rsdio@metastatic.org To: gcc-gnats@gcc.gnu.org X-Send-Pr-Version: gnatsweb-2.9.3 (1.1.1.1.2.31) Subject: optimization/8204: gcj -O2 to native reorders certain instructions improperly. X-SW-Source: 2002-10/txt/msg00506.txt.bz2 List-Id: >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