Recent JNI regression
Marco Trudel
mtrudel@gmx.ch
Wed Feb 7 17:52:00 GMT 2007
Andrew Haley wrote:
> A recent checkin of mine caused a bug in the handling of CNI data.
> This fixes it.
Cool. Thanks for the fast reaction!
Marco
> Andrew.
>
>
> 2007-02-07 Andrew Haley <aph@redhat.com>
>
> * class.c (uncache_this_class_ref): New.
> * expr.c (build_jni_stub): Initialize the class.
> (expand_byte_code): Call uncache_this_class_ref after generating
> code.
>
> Index: class.c
> ===================================================================
> --- class.c (revision 121594)
> +++ class.c (working copy)
> @@ -1047,6 +1047,15 @@
> }
> }
>
> +/* Remove the reference to the local variable that holds the current
> + class$. */
> +
> +void
> +uncache_this_class_ref (tree fndecl ATTRIBUTE_UNUSED)
> +{
> + this_classdollar = build_classdollar_field (output_class);
> +}
> +
> /* Build a reference to the class TYPE.
> Also handles primitive types and array types. */
>
> Index: expr.c
> ===================================================================
> --- expr.c (revision 121594)
> +++ expr.c (working copy)
> @@ -2799,6 +2799,21 @@
> build1 (RETURN_EXPR, res_type, res_var));
> TREE_SIDE_EFFECTS (body) = 1;
>
> + /* Prepend class initialization for static methods reachable from
> + other classes. */
> + if (METHOD_STATIC (method)
> + && (! METHOD_PRIVATE (method)
> + || INNER_CLASS_P (DECL_CONTEXT (method))))
> + {
> + tree init = build3 (CALL_EXPR, void_type_node,
> + build_address_of (soft_initclass_node),
> + build_tree_list (NULL_TREE,
> + klass),
> + NULL_TREE);
> + body = build2 (COMPOUND_EXPR, void_type_node, init, body);
> + TREE_SIDE_EFFECTS (body) = 1;
> + }
> +
> bind = build3 (BIND_EXPR, void_type_node, BLOCK_VARS (block),
> body, block);
> return bind;
> @@ -3227,6 +3242,8 @@
> maybe_poplevels (PC);
> } /* for */
>
> + uncache_this_class_ref (method);
> +
> if (dead_code_index != -1)
> {
> /* We've just reached the end of a region of dead code. */
> Index: java-tree.h
> ===================================================================
> --- java-tree.h (revision 121594)
> +++ java-tree.h (working copy)
> @@ -1130,6 +1130,7 @@
> extern tree layout_class_method (tree, tree, tree, tree);
> extern void layout_class_methods (tree);
> extern void cache_this_class_ref (tree);
> +extern void uncache_this_class_ref (tree);
> extern tree build_class_ref (tree);
> extern tree build_dtable_decl (tree);
> extern tree build_internal_class_name (tree);
>
More information about the Java-patches
mailing list