Fix 044-proxy on portable.
Change-Id: I228f8407913ecf3751424a3a6d30fc419e6296fc
diff --git a/src/compiler_llvm/runtime_support_llvm.cc b/src/compiler_llvm/runtime_support_llvm.cc
index 5cb6e33..d2ea70f 100644
--- a/src/compiler_llvm/runtime_support_llvm.cc
+++ b/src/compiler_llvm/runtime_support_llvm.cc
@@ -779,7 +779,7 @@
break;
case Primitive::kPrimFloat:
// TODO: should this be jdouble? Floats aren't passed to var arg routines.
- val.f = va_arg(ap, jint);
+ val.i = va_arg(ap, jint);
break;
case Primitive::kPrimDouble:
val.d = (va_arg(ap, jdouble));
@@ -795,10 +795,16 @@
args.push_back(val);
}
self->EndAssertNoThreadSuspension(old_cause);
- JValue* result_unboxed = va_arg(ap, JValue*);
+ JValue* result_location = NULL;
+ const char* shorty = proxy_mh.GetShorty();
+ if (shorty[0] != 'V') {
+ result_location = va_arg(ap, JValue*);
+ }
va_end(ap);
- *result_unboxed = InvokeProxyInvocationHandler(soa, proxy_mh.GetShorty(),
- rcvr_jobj, interface_method_jobj, args);
+ JValue result = InvokeProxyInvocationHandler(soa, shorty, rcvr_jobj, interface_method_jobj, args);
+ if (result_location != NULL) {
+ *result_location = result;
+ }
}
void* art_find_runtime_support_func(void* context, const char* name) {