From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 15109 invoked by alias); 20 Mar 2003 17:06:00 -0000 Mailing-List: contact gcc-prs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-prs-owner@gcc.gnu.org Received: (qmail 15088 invoked by uid 71); 20 Mar 2003 17:06:00 -0000 Resent-Date: 20 Mar 2003 17:06:00 -0000 Resent-Message-ID: <20030320170600.15087.qmail@sources.redhat.com> Resent-From: gcc-gnats@gcc.gnu.org (GNATS Filer) Resent-Cc: gcc-prs@gcc.gnu.org, gcc-bugs@gcc.gnu.org Resent-Reply-To: gcc-gnats@gcc.gnu.org, ian.mitchell@risk.sungard.com Received: (qmail 12604 invoked by uid 48); 20 Mar 2003 16:59:13 -0000 Message-Id: <20030320165913.12603.qmail@sources.redhat.com> Date: Thu, 20 Mar 2003 17:06:00 -0000 From: ian.mitchell@risk.sungard.com Reply-To: ian.mitchell@risk.sungard.com To: gcc-gnats@gcc.gnu.org X-Send-Pr-Version: gnatsweb-2.9.3 (1.1.1.1.2.31) Subject: driver/10168: identical return statements plus default in a switch can cause undefined symbols X-SW-Source: 2003-03/txt/msg01341.txt.bz2 List-Id: >Number: 10168 >Category: driver >Synopsis: identical return statements plus default in a switch can cause undefined symbols >Confidential: no >Severity: serious >Priority: medium >Responsible: unassigned >State: open >Class: sw-bug >Submitter-Id: net >Arrival-Date: Thu Mar 20 17:06:00 UTC 2003 >Closed-Date: >Last-Modified: >Originator: ian.mitchell@risk.sungard.com >Release: unknown-1.0 >Organization: >Environment: SunOS 5.8 >Description: If there are 5 or more identical returns plus a default in a switch statement, then there is an unresolved symbol at link time >How-To-Repeat: compile/link attached program >Fix: >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: text/plain; name="switch.out" Content-Disposition: inline; filename="switch.out" wildone=> gcc -v -save-temps switch.cc Reading specs from /usr/local/lib/gcc-lib/sparc-sun-solaris2.8/3.2/specs Configured with: ../configure --with-as=/usr/ccs/bin/as --with-ld=/usr/ccs/bin/ld --disable-nls Thread model: posix gcc version 3.2 /usr/local/lib/gcc-lib/sparc-sun-solaris2.8/3.2/cpp0 -lang-c++ -D__GNUG__=3 -D__DEPRECATED -D__EXCEPTIONS -v -D__GNUC__=3 -D__GNUC_MINOR__=2 -D__GNUC_PATCHLEVEL__=0 -D__GXX_ABI_VERSION=102 -Dsparc -Dsun -Dunix -D__svr4__ -D__SVR4 -D__PRAGMA_REDEFINE_EXTNAME -D__sparc__ -D__sun__ -D__unix__ -D__svr4__ -D__SVR4 -D__PRAGMA_REDEFINE_EXTNAME -D__sparc -D__sun -D__unix -Asystem=unix -Asystem=svr4 -D__NO_INLINE__ -D__STDC_HOSTED__=1 -D_XOPEN_SOURCE=500 -D_LARGEFILE_SOURCE=1 -D_LARGEFILE64_SOURCE=1 -D__EXTENSIONS__ -D__SIZE_TYPE__=unsigned int -D__PTRDIFF_TYPE__=int -D__WCHAR_TYPE__=long int -D__WINT_TYPE__=long int -D__GCC_NEW_VARARGS__ -Acpu=sparc -Amachine=sparc switch.cc switch.ii GNU CPP version 3.2 (cpplib) (sparc ELF) ignoring nonexistent directory "NONE/include" ignoring nonexistent directory "/usr/local/sparc-sun-solaris2.8/include" #include "..." search starts here: #include <...> search starts here: /usr/local/include/c++/3.2 /usr/local/include/c++/3.2/sparc-sun-solaris2.8 /usr/local/include/c++/3.2/backward /usr/local/include /usr/local/lib/gcc-lib/sparc-sun-solaris2.8/3.2/include /usr/include End of search list. /usr/local/lib/gcc-lib/sparc-sun-solaris2.8/3.2/cc1plus -fpreprocessed switch.ii -quiet -dumpbase switch.cc -version -o switch.s GNU CPP version 3.2 (cpplib) (sparc ELF) GNU C++ version 3.2 (sparc-sun-solaris2.8) compiled by GNU C version 3.2. /usr/ccs/bin/as -V -Qy -s -o switch.o switch.s /usr/ccs/bin/as: Sun WorkShop 6 99/08/18 /usr/local/lib/gcc-lib/sparc-sun-solaris2.8/3.2/collect2 -V -Y P,/usr/ccs/lib:/usr/lib -Qy /usr/local/lib/gcc-lib/sparc-sun-solaris2.8/3.2/crt1.o /usr/local/lib/gcc-lib/sparc-sun-solaris2.8/3.2/crti.o /usr/ccs/lib/values-Xa.o /usr/local/lib/gcc-lib/sparc-sun-solaris2.8/3.2/crtbegin.o -L/usr/local/lib/gcc-lib/sparc-sun-solaris2.8/3.2 -L/usr/ccs/bin -L/usr/ccs/lib -L/usr/local/lib/gcc-lib/sparc-sun-solaris2.8/3.2/../../.. switch.o -lgcc -lgcc_eh -lc -lgcc -lgcc_eh -lc /usr/local/lib/gcc-lib/sparc-sun-solaris2.8/3.2/crtend.o /usr/local/lib/gcc-lib/sparc-sun-solaris2.8/3.2/crtn.o ld: Software Generation Utilities - Solaris-ELF (4.0) Undefined first referenced symbol in file .LL10 switch.o ld: fatal: Symbol referencing errors. No output written to a.out collect2: ld returned 1 exit status wildone=> cat switch.ii # 1 "switch.cc" # 1 "" # 1 "" # 1 "switch.cc" int main() { int i; switch(i) { case 0: return 0; case 1: return 0; case 2: return 0; case 3: return 0; case 4: return 0; case 5: return 0; default: ; }; } wildone=> cat switch.s .file "switch.cc" .section ".text" .align 4 .global main .type main,#function .proc 04 main: .LLFB1: !#PROLOGUE# 0 save %sp, -120, %sp .LLCFI0: !#PROLOGUE# 1 ld [%fp-20], %i0 cmp %i0, 5 bgu .LL1 nop ld [%fp-20], %i0 sll %i0, 2, %i1 sethi %hi(.LL10), %i0 or %i0, %lo(.LL10), %i0 ld [%i1+%i0], %i0 .LL1: mov 0, %i0 nop ret restore .LLFE1: .LLfe1: .size main,.LLfe1-main .ident "GCC: (GNU) 3.2"