@@ -1108,31 +1108,49 @@ TEST_F(HIRCloneTest, CanCloneBorrwedRefFields) {
11081108
11091109TEST_F (HIRCloneTest, CanCloneVariadicOpInstr) {
11101110 Environment env;
1111+ auto out = env.AllocateRegister ();
11111112 auto v0 = env.AllocateRegister ();
1112- FrameState raise_fs{BCOffset{10 }};
1113- std::unique_ptr<Instr> raise_exc (Raise::create (1 , raise_fs, v0));
1114- std::unique_ptr<Instr> new_raise_exc (raise_exc->clone ());
1115- ASSERT_NE (raise_exc.get (), new_raise_exc.get ());
1116- ASSERT_TRUE (new_raise_exc->IsRaise ());
1117-
1118- Raise* orig_raise = static_cast <Raise*>(raise_exc.get ());
1119- Raise* dup_raise = static_cast <Raise*>(new_raise_exc.get ());
1120- EXPECT_EQ (orig_raise->kind (), dup_raise->kind ());
1121- EXPECT_EQ (orig_raise->GetOperand (0 ), dup_raise->GetOperand (0 ));
1122- FrameState* orig_raise_fs = orig_raise->frameState ();
1123- EXPECT_EQ (orig_raise_fs->cur_instr_offs , 10 );
1124- EXPECT_NE (orig_raise_fs, dup_raise->frameState ());
1125-
1126- std::unique_ptr<Instr> raise_exc_cause (Raise::create (2 , raise_fs, v0, v0));
1127- std::unique_ptr<Instr> new_raise_exc_cause (raise_exc_cause->clone ());
1128- ASSERT_NE (raise_exc_cause.get (), new_raise_exc_cause.get ());
1129- ASSERT_TRUE (new_raise_exc_cause->IsRaise ());
1130-
1131- orig_raise = static_cast <Raise*>(raise_exc_cause.get ());
1132- dup_raise = static_cast <Raise*>(new_raise_exc_cause.get ());
1133- EXPECT_EQ (orig_raise->kind (), dup_raise->kind ());
1134- EXPECT_EQ (orig_raise->GetOperand (0 ), dup_raise->GetOperand (0 ));
1135- EXPECT_EQ (orig_raise->GetOperand (1 ), dup_raise->GetOperand (1 ));
1113+
1114+ // Create a CallStatic with no arguments
1115+ std::unique_ptr<Instr> call_static_no_args (
1116+ CallStatic::create (0 , out, nullptr , Type::fromObject (Py_None)));
1117+ std::unique_ptr<Instr> new_call_static_no_args (call_static_no_args->clone ());
1118+ ASSERT_NE (call_static_no_args.get (), new_call_static_no_args.get ());
1119+ ASSERT_TRUE (new_call_static_no_args->IsCallStatic ());
1120+
1121+ CallStatic* orig_call = static_cast <CallStatic*>(call_static_no_args.get ());
1122+ CallStatic* dup_call =
1123+ static_cast <CallStatic*>(new_call_static_no_args.get ());
1124+ EXPECT_EQ (orig_call->addr (), dup_call->addr ());
1125+ EXPECT_EQ (orig_call->ret_type (), dup_call->ret_type ());
1126+
1127+ // Create a CallStatic with one argument
1128+ std::unique_ptr<Instr> call_static_one_arg (
1129+ CallStatic::create (1 , out, nullptr , Type::fromObject (Py_None), v0));
1130+ std::unique_ptr<Instr> new_call_static_one_arg (call_static_one_arg->clone ());
1131+ ASSERT_NE (call_static_one_arg.get (), new_call_static_one_arg.get ());
1132+ ASSERT_TRUE (new_call_static_one_arg->IsCallStatic ());
1133+
1134+ orig_call = static_cast <CallStatic*>(call_static_one_arg.get ());
1135+ dup_call = static_cast <CallStatic*>(new_call_static_one_arg.get ());
1136+ EXPECT_EQ (orig_call->addr (), dup_call->addr ());
1137+ EXPECT_EQ (orig_call->ret_type (), dup_call->ret_type ());
1138+ EXPECT_EQ (orig_call->GetOperand (0 ), dup_call->GetOperand (0 ));
1139+
1140+ // Create a CallStatic with two arguments
1141+ std::unique_ptr<Instr> call_static_two_args (
1142+ CallStatic::create (2 , out, nullptr , Type::fromObject (Py_None), v0, v0));
1143+ std::unique_ptr<Instr> new_call_static_two_args (
1144+ call_static_two_args->clone ());
1145+ ASSERT_NE (call_static_two_args.get (), new_call_static_two_args.get ());
1146+ ASSERT_TRUE (new_call_static_two_args->IsCallStatic ());
1147+
1148+ orig_call = static_cast <CallStatic*>(call_static_two_args.get ());
1149+ dup_call = static_cast <CallStatic*>(new_call_static_two_args.get ());
1150+ EXPECT_EQ (orig_call->addr (), dup_call->addr ());
1151+ EXPECT_EQ (orig_call->ret_type (), dup_call->ret_type ());
1152+ EXPECT_EQ (orig_call->GetOperand (0 ), dup_call->GetOperand (0 ));
1153+ EXPECT_EQ (orig_call->GetOperand (1 ), dup_call->GetOperand (1 ));
11361154}
11371155
11381156TEST_F (HIRCloneTest, CanCloneDeoptBase) {
0 commit comments