From 1ed4087a678ae0eb95361cb1211a85e8ae5e1f93 Mon Sep 17 00:00:00 2001 From: Daniel Kofanov Date: Wed, 16 Jul 2025 19:39:27 +0300 Subject: [PATCH] Properly fix fuzzer-related fix Issue: https://gitee.com/openharmony/arkcompiler_ets_frontend/issues/ICMTW7?from=project-issue Signed-off-by: Daniel Kofanov Change-Id: Ide9da6447f7fee0edb67ad8f89bba8badaa70f7e --- ets2panda/checker/ets/object.cpp | 6 +----- ets2panda/checker/ets/typeCreation.cpp | 12 +++++++----- ets2panda/checker/types/ets/etsResizableArrayType.h | 3 +++ 3 files changed, 11 insertions(+), 10 deletions(-) diff --git a/ets2panda/checker/ets/object.cpp b/ets2panda/checker/ets/object.cpp index 82f486c79e..88a29aac6f 100644 --- a/ets2panda/checker/ets/object.cpp +++ b/ets2panda/checker/ets/object.cpp @@ -1277,11 +1277,7 @@ void ETSChecker::CheckClassDefinition(ir::ClassDefinition *classDef) classType->SuperType()->GetDeclNode()->Check(this); } - if (classType->GetDeclNode() != classDef) { - ES2PANDA_ASSERT(IsAnyError()); - classDef->SetTsType(GlobalTypeError()); - return; - } + ES2PANDA_ASSERT(classType->GetDeclNode() == classDef); auto newStatus = checker::CheckerStatus::IN_CLASS; if (Context().ContainingClass() != classType) { diff --git a/ets2panda/checker/ets/typeCreation.cpp b/ets2panda/checker/ets/typeCreation.cpp index 959fcad773..7fa9f971b4 100644 --- a/ets2panda/checker/ets/typeCreation.cpp +++ b/ets2panda/checker/ets/typeCreation.cpp @@ -287,10 +287,12 @@ static ETSObjectType *InitializeGlobalBuiltinObjectType(ETSChecker *checker, Glo auto const setType = [checker](GlobalTypeId slotId, Type *type) { auto &slot = checker->GetGlobalTypesHolder()->GlobalTypes()[helpers::ToUnderlying(slotId)]; - if (slot == nullptr) { - slot = type; + if (UNLIKELY(slot != nullptr)) { + ES2PANDA_ASSERT(checker->IsAnyError()); + return type; } - return slot; + slot = type; + return type; }; auto *const programAllocator = checker->ProgramAllocator(); @@ -374,8 +376,8 @@ ETSObjectType *ETSChecker::CreateETSObjectType(ir::AstNode *declNode, ETSObjectF Relation()); } } else if (internalName == compiler::Signatures::BUILTIN_ARRAY) { - objectType = ProgramAllocator()->New(ProgramAllocator(), name, - std::make_tuple(declNode, flags, Relation())); + objectType = ProgramAllocator()->New( + ProgramAllocator(), name, std::make_tuple(declNode, flags | ETSObjectFlags::BUILTIN_ARRAY, Relation())); } else { objectType = ProgramAllocator()->New(ProgramAllocator(), name, internalName, std::make_tuple(declNode, flags, Relation())); diff --git a/ets2panda/checker/types/ets/etsResizableArrayType.h b/ets2panda/checker/types/ets/etsResizableArrayType.h index 90936ceadf..c9b10498a8 100644 --- a/ets2panda/checker/types/ets/etsResizableArrayType.h +++ b/ets2panda/checker/types/ets/etsResizableArrayType.h @@ -28,6 +28,7 @@ public: ETSObjectFlags::CLASS | ETSObjectFlags::BUILTIN_ARRAY | ETSObjectFlags::RESOLVED_SUPER), element_(nullptr) { + ES2PANDA_ASSERT(IsETSResizableArrayType()); SetSuperType(super); } @@ -35,6 +36,7 @@ public: std::tuple info) : ETSObjectType(allocator, name, compiler::Signatures::BUILTIN_ARRAY, info), element_(nullptr) { + ES2PANDA_ASSERT(IsETSResizableArrayType()); } explicit ETSResizableArrayType(ThreadSafeArenaAllocator *allocator, ETSObjectType *super, TypeRelation *relation, @@ -46,6 +48,7 @@ public: relation)), element_(element) { + ES2PANDA_ASSERT(IsETSResizableArrayType()); SetSuperType(super); variable_ = super->Variable(); } -- Gitee