This is the mail archive of the java@gcc.gnu.org mailing list for the Java project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

JNI bug?


Hey all

Here's an interesting one where GCJ sometimes isn't doing the same as a Sun JDK (no no Andrew, don't stop reading ;-)). Check out this little Java class:

public class NativeBooleanTest
{
	public static void main(String[] args)
	{
		System.loadLibrary("nativeBoolean");
		nativePrintBoolean(false);
		nativePrintBooleanAsInt(false);
	}
	
	private static native void nativePrintBoolean(boolean b);
	private static native void nativePrintBooleanAsInt(boolean b);
}

Now this c code:

#include <jni.h>

JNIEXPORT void JNICALL Java_NativeBooleanTest_nativePrintBoolean
	(JNIEnv *env, jclass c, jboolean b)
{
	printf("nativePrintBoolean: %d\n", b);
}

JNIEXPORT void JNICALL Java_NativeBooleanTest_nativePrintBooleanAsInt
	(JNIEnv *env, jclass c, jint b)
{
	printf("nativePrintBooleanAsInt: %d\n", b);
}


On a sun JVM, the output will be: nativePrintBoolean: 0 nativePrintBooleanAsInt: 0

On GCJ, in this minimalistic sample, it will always be:
nativePrintBoolean: 0
nativePrintBooleanAsInt: 10084864

In a huge library I debugged for this, GCJ 4.3 gives twice 0 if optimization is disabled and also "10084864" as soon as optimization is enabled. GCJ 4.2 gives twice 0 in -O3 mode, GCJ 4.3 no longer.


So,what do others think? What is the problem? Should there be an implicit cast? Is the code wrong? If yes, should it be attended so that the Sun RE is met?
Unfortunately, this seems to go into the same unpleasant RE topic as my Arrays patch... But it also might be a GCJ bug. I don't know for sure.



Marco



Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]