Re: error: 'jvariant::jvariant(jbyte)' cannot be overloaded
Mathieu Malaterre <[email protected]>
| Newsgroups | gmane.comp.gcc.java.devel |
|---|---|
| Message-ID | <[email protected]> |
On Tue, Jul 21, 2009 at 9:48 AM, Andrew Haley<[email protected]> wrote: > On 07/21/2009 08:16 AM, Mathieu Malaterre wrote: >> On Sun, Jul 19, 2009 at 5:16 PM, Andrew Haley<[email protected]> wrote: >>> On 07/19/2009 09:17 AM, Florian Weimer wrote: >>>> * Andrew Haley: >>>> >>>>> On 07/19/2009 07:02 AM, Florian Weimer wrote: >>>>>> * Mathieu Malaterre: >>>>>> >>>>>>> I am trying to compile VTK using gcj and I am getting those compiler >>>>>>> error, could someone please let me know if the code is legal (should >>>>>>> compile) or not: >>>>>> This is legal per Sun's JNI specficiation: jboolean and jbyte are >>>>>> distinct types because there signedness differs: >>>>>> >>>>>> <http://java.sun.com/javase/6/docs/technotes/guides/jni/spec/types.html#wp198> >>>>>> >>>>>> It's a bug in GCC. >>>>> I didn't see the original message to which this is replying. >>>> It's about C++ code which contains a function overloaded on jbyte and >>>> jboolean. This fails with GCJ because they are typedef'ed to the same >>>> type. >>>> >>>>> If you can make a test case I'll see if the bug can be fixed. >>>> Compare the table I referenced with these pieces from jni_md.h: >>>> >>>> | typedef int jbyte __attribute__((__mode__(__QI__))); >>>> | typedef int jshort __attribute__((__mode__(__HI__))); >>>> | typedef int jint __attribute__((__mode__(__SI__))); >>>> | typedef int jlong __attribute__((__mode__(__DI__))); >>>> | typedef int jboolean __attribute__((__mode__(__QI__))); >>>> | typedef unsigned short jchar __attribute__((__mode__(__HI__))); >>>> | typedef float jfloat; >>>> | typedef double jdouble; >>>> | typedef jint jsize; >>>> >>>> | typedef int8_t jbyte; >>>> | typedef int16_t jshort; >>>> | typedef int32_t jint; >>>> | typedef int64_t jlong; >>>> | typedef float jfloat; >>>> | typedef double jdouble; >>>> | typedef jint jsize; >>>> | typedef int8_t jboolean; >>>> | typedef uint16_t jchar; >>>> >>>> jboolean is signed, but Sun's spec says it should be unsigned. >>> OK. I can fix it, but it's an ABI-incompatible change. There's no >>> way this fix could be applied to any existing releases, only gcc >>> 4.5. >> >> Excellent ! Is there a bug entry so I can follow the process ? > > Not until you make one. Done: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40816 -- Mathieu