[ forwarded from http://bugs.debian.org/429657 ]

[EMAIL PROTECTED]:/tmp% cat test.c
int abs(int j);
void abort(void);

__attribute__((noinline)) int lisp_atan2(long dy, long dx) {
    if (dx <= 0)
        if (dy > 0)
            return abs(dx) <= abs(dy);
    return 0;
}

int main() {   
    volatile long dy = 63, dx = -77;
    if (lisp_atan2(dy, dx))
        abort();
    return 0;
}
[EMAIL PROTECTED]:/tmp% gcc-4.1 -O1 test.c && ./a.out 
[EMAIL PROTECTED]:/tmp% gcc-4.1 -O2 test.c && ./a.out 
zsh: abort      ./a.out

not reproducible on alpha or amd64, or with 4.2.


-- 
           Summary: wrong code with abs in comparison
           Product: gcc
           Version: 4.1.0
            Status: UNCONFIRMED
          Keywords: wrong-code
          Severity: normal
          Priority: P3
         Component: target
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: falk at debian dot org
 GCC build triplet: i686-pc-linux-gnu
  GCC host triplet: i686-pc-linux-gnu
GCC target triplet: i686-pc-linux-gnu


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33142

Reply via email to