[forwarded from http://bugs.debian.org/423160] seen with trunk 20070720 The gij implementation of EnumMap class contains a flaw: it returns strange java.lang.Object classes for missing elements. The error can be demonstrated with this program: === Cut === import java.util.*; public class Test { enum TestEnum { FIRST, SECOND } public static void main(String[] args) { Map<TestEnum, String> map = new EnumMap<TestEnum, String>(TestEnum.class); map.put(TestEnum.FIRST, "first"); System.out.println(map); System.out.println(map.containsKey(TestEnum.SECOND)); System.out.println(map.get(TestEnum.SECOND)); } } $ gcj -C Test.java tmp $ gij Test {FIRST=first} false Exception in thread "main" java.lang.ClassCastException: java.lang.Object cannot be cast to java.lang.String at Test.main(Test.java:13) tmp $ java Test {FIRST=first} false null === Cut === As you can see, Sun Java (the last call) returns correct null, while GNU libgcj returns bogus java.lang.Object.
I have a fix I'm testing.
Subject: Bug 32862 CVSROOT: /cvsroot/classpath Module name: classpath Changes by: Tom Tromey <tromey> 07/07/24 15:26:36 Modified files: . : ChangeLog java/util : EnumMap.java Log message: PR java/32862: * java/util/EnumMap.java (get): Special case emptySlot. (clone): Rewrote. CVSWeb URLs: http://cvs.savannah.gnu.org/viewcvs/classpath/ChangeLog?cvsroot=classpath&r1=1.9354&r2=1.9355 http://cvs.savannah.gnu.org/viewcvs/classpath/java/util/EnumMap.java?cvsroot=classpath&r1=1.4&r2=1.5
Fixed via classpath import.