Commit 74b002ba by Andrew Haley

[multiple changes]

2005-08-10  Andrew Haley  <aph@redhat.com>

        * java-gimplify.c (java_gimplify_modify_expr): Fix any pointer
        type mismatches to make legal GIMPLE.

2005-08-10  Robin Green <greenrd@greenrd.org>

        PR java/23230:
        * parse.y (maybe_use_access_method): Generalize check from
        java.lang.Object to any superclass of current_class

From-SVN: r102988
parent eb2b0cc0
2005-08-10 Andrew Haley <aph@redhat.com>
* java-gimplify.c (java_gimplify_modify_expr): Fix any pointer
type mismatches to make legal GIMPLE.
2005-08-10 Robin Green <greenrd@greenrd.org>
PR java/23230:
* parse.y (maybe_use_access_method): Generalize check from
java.lang.Object to any superclass of current_class
2005-08-08 Nathan Sidwell <nathan@codesourcery.com> 2005-08-08 Nathan Sidwell <nathan@codesourcery.com>
* class.c (build_class_ref): Wrap the primary class type in a * class.c (build_class_ref): Wrap the primary class type in a
......
...@@ -208,17 +208,16 @@ java_gimplify_exit_block_expr (tree expr) ...@@ -208,17 +208,16 @@ java_gimplify_exit_block_expr (tree expr)
return build1 (GOTO_EXPR, void_type_node, label); return build1 (GOTO_EXPR, void_type_node, label);
} }
/* This is specific to the bytecode compiler. If a variable has
LOCAL_SLOT_P set, replace an assignment to it with an assignment to
the corresponding variable that holds all its aliases. */
static tree static tree
java_gimplify_modify_expr (tree modify_expr) java_gimplify_modify_expr (tree modify_expr)
{ {
tree lhs = TREE_OPERAND (modify_expr, 0); tree lhs = TREE_OPERAND (modify_expr, 0);
tree rhs = TREE_OPERAND (modify_expr, 1); tree rhs = TREE_OPERAND (modify_expr, 1);
tree lhs_type = TREE_TYPE (lhs); tree lhs_type = TREE_TYPE (lhs);
/* This is specific to the bytecode compiler. If a variable has
LOCAL_SLOT_P set, replace an assignment to it with an assignment
to the corresponding variable that holds all its aliases. */
if (TREE_CODE (lhs) == VAR_DECL if (TREE_CODE (lhs) == VAR_DECL
&& DECL_LANG_SPECIFIC (lhs) && DECL_LANG_SPECIFIC (lhs)
&& LOCAL_SLOT_P (lhs) && LOCAL_SLOT_P (lhs)
...@@ -230,7 +229,12 @@ java_gimplify_modify_expr (tree modify_expr) ...@@ -230,7 +229,12 @@ java_gimplify_modify_expr (tree modify_expr)
new_lhs, new_rhs); new_lhs, new_rhs);
modify_expr = build1 (NOP_EXPR, lhs_type, modify_expr); modify_expr = build1 (NOP_EXPR, lhs_type, modify_expr);
} }
else if (lhs_type != TREE_TYPE (rhs))
/* Fix up type mismatches to make legal GIMPLE. These are
generated in several places, in particular null pointer
assignment and subclass assignment. */
TREE_OPERAND (modify_expr, 1) = convert (lhs_type, rhs);
return modify_expr; return modify_expr;
} }
......
...@@ -10945,7 +10945,8 @@ maybe_use_access_method (int is_super_init, tree *mdecl, tree *this_arg) ...@@ -10945,7 +10945,8 @@ maybe_use_access_method (int is_super_init, tree *mdecl, tree *this_arg)
invoking a static method. Note that if MD's type is unrelated to invoking a static method. Note that if MD's type is unrelated to
CURRENT_CLASS, then the current this can be used. */ CURRENT_CLASS, then the current this can be used. */
if (non_static_context && DECL_CONTEXT (md) != object_type_node) if (non_static_context
&& !inherits_from_p (current_class, DECL_CONTEXT (md)))
{ {
ctx = TREE_TYPE (DECL_CONTEXT (TYPE_NAME (current_class))); ctx = TREE_TYPE (DECL_CONTEXT (TYPE_NAME (current_class)));
if (inherits_from_p (ctx, DECL_CONTEXT (md))) if (inherits_from_p (ctx, DECL_CONTEXT (md)))
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment