From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 7776 invoked by alias); 16 Dec 2002 06:06:01 -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 7747 invoked by uid 71); 16 Dec 2002 06:06:01 -0000 Resent-Date: 16 Dec 2002 06:06:01 -0000 Resent-Message-ID: <20021216060601.7746.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, java-prs@gcc.gnu.org Resent-Reply-To: gcc-gnats@gcc.gnu.org, bhun@chello.nl Received: (qmail 7132 invoked by uid 61); 16 Dec 2002 06:02:20 -0000 Message-Id: <20021216060220.7130.qmail@sources.redhat.com> Date: Sun, 15 Dec 2002 22:06:00 -0000 From: bhun@chello.nl Reply-To: bhun@chello.nl To: gcc-gnats@gcc.gnu.org X-Send-Pr-Version: gnatsweb-2.9.3 (1.1.1.1.2.31) Subject: java/8955: switch case statement causes gcj to throw segmentation fault X-SW-Source: 2002-12/txt/msg00830.txt.bz2 List-Id: >Number: 8955 >Category: java >Synopsis: switch case statement causes gcj to throw segmentation fault >Confidential: no >Severity: critical >Priority: medium >Responsible: unassigned >State: open >Class: ice-on-legal-code >Submitter-Id: net >Arrival-Date: Sun Dec 15 22:06:01 PST 2002 >Closed-Date: >Last-Modified: >Originator: Dhek Bhun Kho >Release: gcc 3.2.1 >Organization: >Environment: >Description: gcc version 3.2 (Mandrake Linux 9.0 3.2-1mdk) /usr/lib/gcc-lib/i586-mandrake-linux-gnu/3.2/jc1 /tmp/ccEJu2L1jx -quiet -dumpbase ccEJu2L1jx -g1 -version -foutput-class-dir=cls -fclasspath=/home/java/jar/javax.xml.parsers.jar:src/ -ffilelist-file -fsyntax-only -femit-class-files -o /dev/null GNU Java version 3.2 (Mandrake Linux 9.0 3.2-1mdk) (i586-mandrake-linux-gnu) compiled by GNU C version 3.2 (Mandrake Linux 9.0 3.2-1mdk). Class path starts here: /home/java/jar/javax.xml.parsers.jar/ (zip) src/ /usr/share/java/libgcj-3.2.jar/ (system) (zip) src/org/apache/log4j/Level.java: In class `org.apache.log4j.Level': src/org/apache/log4j/Level.java: In method `org.apache.log4j.Level.toLevel(int,org.apache.log4j.Level)': src/org/apache/log4j/Level.java:104: internal error: Segmentation fault -- is this related to the symbol table problem with c compiler? or is related to opcodes of the jvm? I read that bytecodes differ for ranges without gaps and with gaps, this is one with gaps series: 10000-20000-30000-40000 (int) >How-To-Repeat: compile Log4J offending code: Level toLevel(int val, Level defaultLevel) { switch(val) { case ALL_INT: return ALL; case DEBUG_INT: return Level.DEBUG; case INFO_INT: return Level.INFO; case WARN_INT: return Level.WARN; case ERROR_INT: return Level.ERROR; case FATAL_INT: return Level.FATAL; case OFF_INT: return OFF; default: return defaultLevel; } >Fix: replace switch-case with if-ifelse-ifelse-ifelse-ifelse-else: e.g: if (val==ALL_INT) return ALL; else if (val==DEBUG_INT) return Level.DEBUG; else if (val==INFO_INT) return Level.INFO; else if (val==WARN_INT) return Level.WARN; else if (val==ERROR_INT) return Level.ERROR; else if (val==FATAL_INT) return Level.FATAL; else if (val==OFF_INT) return OFF; else return defaultLevel; } causes no segmentation fault. >Release-Note: >Audit-Trail: >Unformatted: