This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

optimization/4785: Optimization breaks compilation at -O



>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:


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]