Skip to content

Commit 3369dff

Browse files
rmacnak-googleCommit Queue
authored andcommitted
[vm, compiler] Also accept record types in IA32's assert assignable.
TEST=lib/isolate/throws_in_microtask_test Bug: #62968 Change-Id: Ib2b661c8867e697b93d3d00a18e688b699fac503 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/490680 Reviewed-by: Alexander Markov <alexmarkov@google.com> Commit-Queue: Ryan Macnak <rmacnak@google.com>
1 parent 9f5baa1 commit 3369dff

1 file changed

Lines changed: 9 additions & 8 deletions

File tree

runtime/vm/compiler/stub_code_compiler.cc

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -748,9 +748,9 @@ void StubCodeCompiler::GenerateInstanceOfStub() {
748748

749749
// For use in GenerateTypeIsTopTypeForSubtyping and
750750
// GenerateNullIsAssignableToType.
751-
static void EnsureIsTypeOrFunctionTypeOrTypeParameter(Assembler* assembler,
752-
Register type_reg,
753-
Register scratch_reg) {
751+
static void EnsureIsSomeKindOfType(Assembler* assembler,
752+
Register type_reg,
753+
Register scratch_reg) {
754754
#if defined(DEBUG)
755755
compiler::Label is_type_param_or_type_or_function_type;
756756
__ LoadClassIdMayBeSmi(scratch_reg, type_reg);
@@ -763,7 +763,10 @@ static void EnsureIsTypeOrFunctionTypeOrTypeParameter(Assembler* assembler,
763763
__ CompareImmediate(scratch_reg, kFunctionTypeCid);
764764
__ BranchIf(EQUAL, &is_type_param_or_type_or_function_type,
765765
compiler::Assembler::kNearJump);
766-
__ Stop("not a type or function type or type parameter");
766+
__ CompareImmediate(scratch_reg, kRecordTypeCid);
767+
__ BranchIf(EQUAL, &is_type_param_or_type_or_function_type,
768+
compiler::Assembler::kNearJump);
769+
__ Stop("not a type, function type, record type or type parameter");
767770
__ Bind(&is_type_param_or_type_or_function_type);
768771
#endif
769772
}
@@ -812,8 +815,7 @@ void StubCodeCompiler::GenerateTypeIsTopTypeForSubtypingStub() {
812815
__ MoveRegister(scratch1_reg, TypeTestABI::kDstTypeReg);
813816
__ Bind(&check_top_type);
814817
// scratch1_reg: Current type to check.
815-
EnsureIsTypeOrFunctionTypeOrTypeParameter(assembler, scratch1_reg,
816-
scratch2_reg);
818+
EnsureIsSomeKindOfType(assembler, scratch1_reg, scratch2_reg);
817819
compiler::Label is_type_ref;
818820
__ CompareClassId(scratch1_reg, kTypeCid, scratch2_reg);
819821
// Type parameters can't be top types themselves, though a particular
@@ -912,8 +914,7 @@ void StubCodeCompiler::GenerateNullIsAssignableToTypeStub() {
912914
__ BranchIf(NOT_EQUAL, &done);
913915
__ Bind(&check_null_assignable);
914916
// scratch1_reg: Current type to check.
915-
EnsureIsTypeOrFunctionTypeOrTypeParameter(assembler, kCurrentTypeReg,
916-
kScratchReg);
917+
EnsureIsSomeKindOfType(assembler, kCurrentTypeReg, kScratchReg);
917918
compiler::Label is_not_type;
918919
__ CompareClassId(kCurrentTypeReg, kTypeCid, kScratchReg);
919920
__ BranchIf(NOT_EQUAL, &is_not_type, compiler::Assembler::kNearJump);

0 commit comments

Comments
 (0)