From c952ac905442a08b51af1f336f803fa221bd23d2 Mon Sep 17 00:00:00 2001 From: Andreas Gampe Date: Thu, 16 Jul 2015 17:41:25 -0700 Subject: ART: Fix System.arraycopy We cannot use the same code for float+int and long+double. In debug mode, this will fail. Change-Id: Icf263626896a7b53e59685c474e77b4c3128ecd5 --- runtime/native/java_lang_System.cc | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) (limited to 'runtime/native/java_lang_System.cc') diff --git a/runtime/native/java_lang_System.cc b/runtime/native/java_lang_System.cc index 736b42b739..97aae67178 100644 --- a/runtime/native/java_lang_System.cc +++ b/runtime/native/java_lang_System.cc @@ -105,15 +105,21 @@ static void System_arraycopy(JNIEnv* env, jclass, jobject javaSrc, jint srcPos, dstArray->AsShortSizedArray()->Memmove(dstPos, srcArray->AsShortSizedArray(), srcPos, count); return; case Primitive::kPrimInt: - case Primitive::kPrimFloat: DCHECK_EQ(Primitive::ComponentSize(dstComponentPrimitiveType), 4U); dstArray->AsIntArray()->Memmove(dstPos, srcArray->AsIntArray(), srcPos, count); return; + case Primitive::kPrimFloat: + DCHECK_EQ(Primitive::ComponentSize(dstComponentPrimitiveType), 4U); + dstArray->AsFloatArray()->Memmove(dstPos, srcArray->AsFloatArray(), srcPos, count); + return; case Primitive::kPrimLong: - case Primitive::kPrimDouble: DCHECK_EQ(Primitive::ComponentSize(dstComponentPrimitiveType), 8U); dstArray->AsLongArray()->Memmove(dstPos, srcArray->AsLongArray(), srcPos, count); return; + case Primitive::kPrimDouble: + DCHECK_EQ(Primitive::ComponentSize(dstComponentPrimitiveType), 8U); + dstArray->AsDoubleArray()->Memmove(dstPos, srcArray->AsDoubleArray(), srcPos, count); + return; case Primitive::kPrimNot: { mirror::ObjectArray* dstObjArray = dstArray->AsObjectArray(); mirror::ObjectArray* srcObjArray = srcArray->AsObjectArray(); -- cgit v1.2.3-59-g8ed1b