[PATCH][JAVA] Build a correct tree for rewritten method invocations
Peter Collingbourne
peter@pcc.me.uk
Tue Aug 2 19:56:00 GMT 2011
The Java frontend currently produces an incorrectly typed tree if
a method call is rewritten. Specifically, the callee operand is a
NOP_EXPR casting the address of the target method to the original
method type. This patch causes the NOP_EXPR cast to use the type of
the target method instead.
The bug is exposed by dragonegg which requires the callee type to be
correct.
libjava tested, x86_64-unknown-linux-gnu.
2011-08-02 Peter Collingbourne <peter@pcc.me.uk>
* expr.c (expand_invoke) Use the type of the method rewrite target.
---
gcc/java/expr.c | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/gcc/java/expr.c b/gcc/java/expr.c
index 4686f30..ec2d9b6 100644
--- a/gcc/java/expr.c
+++ b/gcc/java/expr.c
@@ -2544,12 +2544,12 @@ expand_invoke (int opcode, int method_ref_index, int nargs ATTRIBUTE_UNUSED)
return;
}
- method_type = TREE_TYPE (method);
- arg_list = pop_arguments (method_type);
+ arg_list = pop_arguments (TREE_TYPE (method));
flush_quick_stack ();
maybe_rewrite_invocation (&method, &arg_list, &method_signature,
&special);
+ method_type = TREE_TYPE (method);
func = NULL_TREE;
if (opcode == OPCODE_invokestatic)
--
1.7.5.3
More information about the Gcc-patches
mailing list