Build failure with the 0.98 merge
David Daney
ddaney@avtrex.com
Tue Sep 2 21:00:00 GMT 2008
Andrew John Hughes wrote:
> 2008年8月21日 Tom Tromey <tromey@redhat.com>:
>>>>>>> "Andrew" == Andrew John Hughes <gnu_andrew@member.fsf.org> writes:
>> Andrew> /home/andrew/projects/classpath/gcj/sources/gcc/libjava/java/lang/StringBuffer.h:97:
>> Andrew> error: 'java::lang::AbstractStringBuffer*
>> Andrew> java::lang::StringBuffer::StringBuffer$append(jchar)' cannot be
>> Andrew> overloaded
>> Andrew> /home/andrew/projects/classpath/gcj/sources/gcc/libjava/java/lang/StringBuffer.h:38:
>>>> Andrew> Is there an issue with gcj and the use of covariant return
>> Andrew> types from 1.5?
>>>> There shouldn't be. javah has special code in it to rename bridge
>> method targets in this situation.
>>>> Looking at the header I see:
>>>> ::java::lang::StringBuffer * StringBuffer$append(jchar);
>> ::java::lang::Appendable * append(jchar);
>> ::java::lang::AbstractStringBuffer * StringBuffer$append(jchar);
>>>> And looking at AbstractStringBuffer.h:
>>>> virtual ::java::lang::AbstractStringBuffer * AbstractStringBuffer$append(jchar);
>> virtual ::java::lang::Appendable * append(jchar);
>>>>>> So I think javah's bug is that it does not understand how bridge
>> methods might be inherited, and so it does not know rename targets
>> according to the class in the hierarchy where they first appeared.
>> IOW, that 3rd append method in StringBuffer.h should be named
>> AbstractStringBuffer$append.
>>>> Tom
>>>> Changing that manually fixed the issue. I'll look at patching gjavah
> to do the right thing.
>> Continuing, I get more strange errors:
>> /home/andrew/projects/classpath/gcj/sources/gcc/libjava/gnu/gcj/util/natDebug.cc:
> In static member function 'static java::lang::Object*
> gnu::gcj::util::Debug::getField(java::lang::Object*,
> java::lang::reflect::Field*)':
> /home/andrew/projects/classpath/gcj/sources/gcc/libjava/gnu/gcj/util/natDebug.cc:73:
> error: expected type-specifier
> /home/andrew/projects/classpath/gcj/sources/gcc/libjava/gnu/gcj/util/natDebug.cc:73:
> error: cannot convert 'int*' to 'java::lang::Object*' in return
> /home/andrew/projects/classpath/gcj/sources/gcc/libjava/gnu/gcj/util/natDebug.cc:73:
> error: expected ';'
> /home/andrew/projects/classpath/gcj/sources/gcc/libjava/gnu/gcj/util/natDebug.cc:73:
> error: 'Double' is not a member of 'gnu::java::lang'
>> natDebug.cc hasn't changed; any idea what could be wrong here?
>
Some type definition missing from some header file.
I would look at the preprocessed source for clues.
David Daney
More information about the Java
mailing list