diff --git a/lib/Backend/LowerMDShared.cpp b/lib/Backend/LowerMDShared.cpp index 34ec02507e9..6761b21b9e6 100644 --- a/lib/Backend/LowerMDShared.cpp +++ b/lib/Backend/LowerMDShared.cpp @@ -5700,7 +5700,16 @@ bool LowererMD::GenerateFastCharAt(Js::BuiltinFunction index, IR::Opnd *dst, IR: insertInstr->InsertBefore(instr); if (index == Js::BuiltinFunction::String_CharAt) { - this->m_lowerer->GenerateGetSingleCharString(charReg, dst, labelHelper, doneLabel, insertInstr, false); + IR::Opnd *resultOpnd; + if (dst->IsEqual(srcStr)) + { + resultOpnd = IR::RegOpnd::New(TyVar, this->m_func); + } + else + { + resultOpnd = dst; + } + this->m_lowerer->GenerateGetSingleCharString(charReg, resultOpnd, labelHelper, doneLabel, insertInstr, false); } else { diff --git a/lib/Backend/arm/LowerMD.cpp b/lib/Backend/arm/LowerMD.cpp index 313c4a0c1f2..97d0c2d8eb8 100644 --- a/lib/Backend/arm/LowerMD.cpp +++ b/lib/Backend/arm/LowerMD.cpp @@ -6852,7 +6852,16 @@ bool LowererMD::GenerateFastCharAt(Js::BuiltinFunction index, IR::Opnd *dst, IR: if (index == Js::BuiltinFunction::String_CharAt) { - this->m_lowerer->GenerateGetSingleCharString(charResult, dst, labelHelper, labelDone, insertInstr, false); + IR::Opnd *resultOpnd; + if (dst->IsEqual(srcStr)) + { + resultOpnd = IR::RegOpnd::New(TyVar, this->m_func); + } + else + { + resultOpnd = dst; + } + this->m_lowerer->GenerateGetSingleCharString(charResult, resultOpnd, labelHelper, labelDone, insertInstr, false); } else {