This is the mail archive of the
mailing list for the GCC project.
Re: [vta/trunk] stabilize Java JNI function types
- From: Andrew Haley <aph-gcc at littlepinkcloud dot COM>
- To: Alexandre Oliva <aoliva at redhat dot com>
- Cc: gcc-patches at gcc dot gnu dot org
- Date: Mon, 12 Nov 2007 19:10:46 +0000
- Subject: Re: [vta/trunk] stabilize Java JNI function types
- References: <firstname.lastname@example.org>
Alexandre Oliva writes:
> Using type uids for hashing requires us to make sure that
> canonicalizing a type always gets us the type with the same uid.
> Unfortunately, if a type is garbage collected in between uses, we
> won't canonicalize to it any more, and will instead use a new type.
> If the canonicalization could have avoided the creation of other
> types, this will also have the effect of getting TYPE_UIDs out of sync
> between the compilations with or without garbage collection of that
> type. If they do get out of sync, we often get changes to Java UTF8
> As it turns out, the Java front-end builds types to hold the proper
> type of a JNI method implementation, but only uses it in code, and
> so the type can quickly get garbage collected.
> With as simple a change as using that type for the meth variable that
> holds the pointer to that implementation, we keep the type around such
> that other methods with the same signature get the same canonical
> type, regardless of garbage collection.
> As an additional benefit, the variable gets the correct static type in
> debug information, rather than a generic pointer type.
> Ok for trunk? This is the last patch I needed to get
> make bootstrap-debug &&
> make prepare-bootstrap4-debug-lib-novta &&
> make bootstrap4-debug &&
> rm compare3-debug && make compare3-debug
> to pass, i.e., all target libraries compiled with
> -fvar-tracking-assignments and with -fno-var-tracking-assignments
> compared identically, on x86_64-linux-gnu.
> for gcc/java/ChangeLog.vta
> from Alexandre Oliva <email@example.com>
> * expr.c (build_jni_stub): Use the computed jni func type for
> variable meth.
Ok, if you include a comment in the source explaining why you do this.