The following code, placed in a file named A.java, fails to compile with GCJ
4.1.0. Sun's javac has no problem with it. Interestingly, if you comment out
the line marked with "/**/", the code compiles.
/* Begin A.java */
public class A
{
public A() { }
public int foo(Object a) { return 1; }
public int foo(Object[] a) { return 1; }
public static class B extends A
{
public B() { }
/**/ public int foo(Object a) { return 1; }
}
public static class C extends B
{
public C() { }
public int foo(Object[] a) { return super.foo(a); }
}
}
/* End A.java */
The command I ran:
$ gcj4 -v -C A.java
Using built-in specs.
Target: i386-redhat-linux
Configured with: ../configure --prefix=/usr --mandir=/usr/share/man
--infodir=/usr/share/info --enable-shared --enable-threads=posix
--enable-checking=release --with-system-zlib --enable-__cxa_atexit
--disable-libunwind-exceptions --with-gxx-include-dir=/usr/include/c++/3.4.3
--enable-libgcj-multifile --enable-languages=c,c++,java,f95
--enable-java-awt=gtk --disable-dssi
--with-java-home=/usr/lib/jvm/java-1.4.2-gcj-1.4.2.0/jre --with-cpu=generic
--host=i386-redhat-linux
Thread model: posix
gcc version 4.1.0 20060515 (Red Hat 4.1.0-18)
/usr/libexec/gcc/i386-redhat-linux/4.1.0/jc1 A.java -quiet -dumpbase A.java
-mtune=generic -auxbase-strip NONE -g1 -version -fsyntax-only
-femit-class-files -o A
GNU Java version 4.1.0 20060515 (Red Hat 4.1.0-18) (i386-redhat-linux)
compiled by GNU C version 4.1.0 20060515 (Red Hat 4.1.0-18).
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
Class path starts here:
./
/home/rizzolo/lib/
/home/rizzolo/lib/java_cup.jar/ (zip)
/home/rizzolo/cogcomp/LBP/LBJ2/
/usr/share/java/libgcj-4.1.0.jar/ (system) (zip)
A.java: In class 'A$C':
A.java: In method 'A$C.foo(java.lang.Object[])':
A.java:18: error: Can't find method foo([Ljava/lang/Object;) in type A$B.
Candidates are:
'A$B.foo(java.lang.Object)' in 'A$B'
'A.foo(java.lang.Object[])' in 'A'.
public int foo(Object[] a) { return super.foo(a); }
^
1 error
By the way, it is not necessary for classes A, B, and C to be defined in the
same file with B and C defined as static member classes of A. The problem is
also present when the three classes are defined in separate files and not as
member classes.
- Nick
--
Summary: invalid "Can't find method" error
Product: gcc
Version: 4.1.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: java
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: rizzolo at gmail dot com
GCC host triplet: i386-redhat-linux
GCC target triplet: i386-redhat-linux
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=30844