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