Object.h -vs- nacd_1

Tom Tromey tromey@redhat.com
Tue Jun 19 17:04:00 GMT 2001


Consider this Java program and its associated native code:
 public class X1
 {
 void nacd_1 ()
 {
	System.out.println ("hi");
 }
 void foo ()
 {
	nacd_1 ();
 }
 public native void z ();
 public static void main (String[] args)
 {
	X1 x = new X1 ();
	x.foo ();
	x.z ();
 }
 }
 #include "X1.h"
 void X1::z ()
 {
 nacd_1 ();
 }
If you compile this and run it, it will abort on the call to x.z().
That's because Object.h uses the names nacd_1() and nacd_2() to
reserve slots in the vtable. However these slots don't actually
correspond to virtual functions.
You can also arrange for an error from the C++ compiler if you change
nacd_1()'s return type (say, to `int').
How can we fix this?
Ideally we would find a way to do this without requiring a change to
g++. The g++ maintainers seem increasingly reluctant to do this.
One approach would be to simply choose a really obscure name, like
`$$$$$$$'. I dislike this sort of hack though. (nacd_1() itself is
unlikely to occur. Perhaps this problem is simply ignorable. That is
gross though.)
Tom


More information about the Java mailing list

AltStyle によって変換されたページ (->オリジナル) /