This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
optimization/4785: Optimization breaks compilation at -O
- To: gcc-gnats at gcc dot gnu dot org
- Subject: optimization/4785: Optimization breaks compilation at -O
- From: Peter Schmid <schmid at snake dot iap dot physik dot tu-darmstadt dot de>
- Date: Sun, 4 Nov 2001 20:25:17 +0100
>Number: 4785
>Category: optimization
>Synopsis: Optimization breaks compilation at -O
>Confidential: no
>Severity: serious
>Priority: medium
>Responsible: unassigned
>State: open
>Class: ice-on-legal-code
>Submitter-Id: net
>Arrival-Date: Sun Nov 04 11:26:00 PST 2001
>Closed-Date:
>Last-Modified:
>Originator: Peter Schmid
>Release: 3.1 20011103 (experimental)
>Organization:
TU Darmstadt
>Environment:
System: Linux kiste 2.4.12 #4 Fri Nov 2 15:57:09 CET 2001 i686 unknown
Architecture: i686
SuSE 7.3
GNU ld version 2.11.90.0.29
Glibc 2.2.4
host: i686-pc-linux-gnu
build: i686-pc-linux-gnu
target: i686-pc-linux-gnu
configured with: ../gcc/configure --enable-shared --disable-nls --enable-threads=posix --enable-clocale=gnu --enable-languages=c,c++,f77,objc
>Description:
The following source code i.c causes an internal compiler error when -O is
added to the command line. There are no problems at other optimization levels. g++ compiles this code without a problem.
>How-To-Repeat:
Source code i.c
typedef unsigned char uch;
struct huft
{
uch e;
uch b;
};
#define BMAX 16
void f()
{
int h = 0;
register unsigned j = 1;
int lx[BMAX+1];
int *l = lx+1;
struct huft r;
struct huft *u[BMAX];
r.b = (uch)l[h-1];
u[h-1][j] = r;
}
Compiling i.c
gcc -c -v -O i.c --save-temps
Reading specs from /usr/local/lib/gcc-lib/i686-pc-linux-gnu/3.1/specs
Configured with: ../gcc/configure --enable-shared --disable-nls --enable-threads=posix --enable-clocale=gnu --enable-languages=c,c++,f77,objc
Thread model: posix
gcc version 3.1 20011103 (experimental)
/usr/local/lib/gcc-lib/i686-pc-linux-gnu/3.1/cpp0 -lang-c -v -D__GNUC__=3 -D__GNUC_MINOR__=1 -D__GNUC_PATCHLEVEL__=0 -D__ELF__ -Dunix -Dlinux -D__ELF__ -D__unix__ -D__linux__ -D__unix -D__linux -Asystem=posix -D__OPTIMIZE__ -D__STDC_HOSTED__=1 -Acpu=i386 -Amachine=i386 -Di386 -D__i386 -D__i386__ -D__tune_i686__ -D__tune_pentiumpro__ i.c i.i
GNU CPP version 3.1 20011103 (experimental) (cpplib) (i386 Linux/ELF)
ignoring nonexistent directory "NONE/include"
ignoring nonexistent directory "/usr/local/i686-pc-linux-gnu/include"
#include "..." search starts here:
#include <...> search starts here:
/usr/local/include
/usr/local/lib/gcc-lib/i686-pc-linux-gnu/3.1/include
/usr/include
End of search list.
/usr/local/lib/gcc-lib/i686-pc-linux-gnu/3.1/cc1 -fpreprocessed i.i -quiet -dumpbase i.c -O -version -o i.s
GNU CPP version 3.1 20011103 (experimental) (cpplib) (i386 Linux/ELF)
GNU C version 3.1 20011103 (experimental) (i686-pc-linux-gnu)
compiled by GNU C version 3.1 20011103 (experimental).
i.c: In function `f':
i.c:23: Unrecognizable insn:
(insn 31 29 33 (set (reg:SI 66)
(subreg:SI (mem:QI (reg/f:SI 65) [0 S1 A32]) 0)) -1 (insn_list 29 (nil))
(expr_list:REG_DEAD (reg/f:SI 65)
(nil)))
i.c:23: Internal compiler error in extract_insn, at recog.c:2128
Please submit a full bug report,
with preprocessed source if appropriate.
See <URL:http://www.gnu.org/software/gcc/bugs.html> for instructions.
Preprocessed source i.i
# 1 "i.c"
# 1 "<builtin>"
# 1 "<command line>"
# 1 "i.c"
typedef unsigned char uch;
struct huft
{
uch e;
uch b;
};
void f()
{
int h = 0;
register unsigned j = 1;
int lx[16 +1];
int *l = lx+1;
struct huft r;
struct huft *u[16];
r.b = (uch)l[h-1];
u[h-1][j] = r;
}
>Fix:
>Release-Note:
>Audit-Trail:
>Unformatted: