8155258: VarHandle implementation improvements
Summary: Relax return type check for call to linked method handle invocation
Reviewed-by: shade, vlivanov
--- a/hotspot/src/share/vm/opto/doCall.cpp Tue May 03 09:09:20 2016 +0100
+++ b/hotspot/src/share/vm/opto/doCall.cpp Thu May 05 11:39:23 2016 -0700
@@ -415,8 +415,12 @@
if (symbolic_info->arg_size() != (resolved_method->arg_size() + has_appendix)) {
return false; // Total size of arguments on stack mismatch.
}
- if (!check_type(symbolic_info->return_type(), resolved_method->return_type())) {
- return false; // Return value size or type mismatch encountered.
+ if (!symbolic_info->return_type()->is_void()) {
+ // Only check the return type if the symbolic method is not void
+ // i.e. the return value of the resolved method can be dropped
+ if (!check_type(symbolic_info->return_type(), resolved_method->return_type())) {
+ return false; // Return value size or type mismatch encountered.
+ }
}
switch (symbolic_info->intrinsic_id()) {