>Submitter-Id: net >Originator: Randolph Chung >Organization: Debian >Confidential: no >Synopsis: [3.3 regression] inline optimization ICE >Severity: serious >Priority: medium >Category: optimization >Class: ice-on-legal-code >Release: 3.3 20030309 (Debian prerelease) (Debian testing/unstable) >Environment: System: Linux gsyprf11.external.hp.com 2.4.20-pa18-UP #1 Sat Jan 4 22:06:52 PST 2003 parisc64 unknown unknown GNU/Linux Architecture: parisc64
<machine, os, target, libraries (multiple lines)> host: hppa-unknown-linux-gnu build: hppa-unknown-linux-gnu target: hppa-unknown-linux-gnu configured with: ../src/configure -v --enable-languages=c,c++,f77,objc,ada,treelang --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-gxx-include-dir=/usr/include/c++/3.3 --enable-shared --with-system-zlib --enable-nls --without-included-gettext --enable-__cxa_atexit --enable-sjlj-exceptions --enable-clocale=gnu --enable-debug --enable-objc-gc hppa-linux >Description: see below; code works with gcc-3.2.3 This is extracted from allegro. It is similar but not the same as optimization/9768 >How-To-Repeat: gcc-3.3 -O2 -c bug.c --------------------8< bug.c 8<------------------- extern int * allegro_errno; typedef long fixed; extern inline int fixfloor (fixed x) { if (x >= 0) return (x >> 16); else return ~((~x) >> 16); } extern inline int fixtoi (fixed x) { return fixfloor(x) + ((x & 0x8000) >> 15); } extern inline fixed ftofix (double x) { if (x > 32767.0) { *allegro_errno = 34; return 0x7FFFFFFF; } if (x < -32767.0) { *allegro_errno = 34; return -0x7FFFFFFF; } return (long)(x * 65536.0 + (x < 0 ? -0.5 : 0.5)); } extern inline double fixtof (fixed x) { return (double)x / 65536.0; } extern inline fixed fixdiv (fixed x, fixed y) { if (y == 0) { *allegro_errno = 34; return (x < 0) ? -0x7FFFFFFF : 0x7FFFFFFF; } else return ftofix(fixtof(x) / fixtof(y)); } extern inline fixed itofix (int x) { return x << 16; } int foo(int n) { return fixtoi(fixdiv(itofix(512), itofix(n))); } --------------------8< bug.c 8<------------------- >Fix: unknown