middle-end/6679: wrong code generated for dead code

Volker Reichelt reichelt@igpm.rwth-aachen.de
Thu Nov 7 15:06:00 GMT 2002


The following reply was made to PR middle-end/6679; it has been noted by GNATS.

From: Volker Reichelt <reichelt@igpm.rwth-aachen.de>
To: gcc-gnats@gcc.gnu.org, gcc-bugs@gcc.gnu.org, nobody@gcc.gnu.org,
        rveldema@cs.vu.nl
Cc:  
Subject: Re: middle-end/6679: wrong code generated for dead code
Date: Fri, 8 Nov 2002 00:52:44 +0100

 Hi,
 
 the problem can be demonstrated with the following testcase:
 
 --------------------------snip here-------------------------
 bool foo (int i)
 {
     switch (i)
     {
         case 0: return false;
         case 1: return false;
         case 2: return false;
         case 3: return false;
         case 4: return false;
     }
 
     return false;
 }
 
 int main() { return 0; }
 --------------------------snip here-------------------------
 
 Compiling this with gcc 3.1, 3.2 or the 3.2-branch on i686-pc-linux-gnu I get
 the following error message:
 
 /tmp/ccii3YKY.o: In function `foo(int)':
 /tmp/ccii3YKY.o(.text+0x11): undefined reference to `.L8'
 collect2: ld returned 1 exit status
 
 The assembler code for the function "foo" is:
 
 	.align 2
 .globl _Z3fooi
 	.type	_Z3fooi,@function
 _Z3fooi:
 .LFB1:
 	pushl	%ebp
 .LCFI0:
 	movl	%esp, %ebp
 .LCFI1:
 	cmpl	$4, 8(%ebp)
 	ja	.L1
 	movl	8(%ebp), %eax
 	sall	$2, %eax
 	movl	.L8(%eax), %eax     <--------- !!!!!
 .L1:
 	movl	$0, %eax
 	popl	%ebp
 	ret
 .LFE1:
 .Lfe1:
 	.size	_Z3fooi,.Lfe1-_Z3fooi
 
 Note that the problem disappears with only four cases in the switch statement.
 
 The problem doesn't arise on the main trunk, though.
 Because this is a regression from 3.0.x, I rate the PR as "high priority".
 
 Greetings,
 Volker
 
 http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&pr=6679
 
 



More information about the Gcc-prs mailing list