diff --git a/runtime/builtins/builtins_global.cpp b/runtime/builtins/builtins_global.cpp index 920ffcc80e6036a33bfb5d1299598aed5b4d8778..417c9626a71ba4851dbd4ad0693a7349a4f1df90 100644 --- a/runtime/builtins/builtins_global.cpp +++ b/runtime/builtins/builtins_global.cpp @@ -886,12 +886,12 @@ JSTaggedValue global::StartGC(EcmaRuntimeCallInfo *argv) GCTaskCause reason = GCCauseFromString(thread, builtins_common::GetCallArg(argv, 0)); JSHandle callback_fn = builtins_common::GetCallArg(argv, 1); - if (reason == GCTaskCause::INVALID_CAUSE) { + mem::GC *gc = thread->GetEcmaVM()->GetGC(); + if (!gc->CheckGCCause(reason)) { JSHandle err = - thread->GetEcmaVM()->GetFactory()->GetJSError(ErrorType::TYPE_ERROR, "Invalid GC cause"); + thread->GetEcmaVM()->GetFactory()->GetJSError(ErrorType::TYPE_ERROR, "Invalid GC cause for this GC type"); THROW_NEW_ERROR_AND_RETURN_VALUE(thread, err.GetTaggedValue(), JSTaggedValue::Exception()); } - mem::GC *gc = thread->GetEcmaVM()->GetGC(); G_GCTASK_TRACKER.InitIfNeeded(gc); auto task = MakePandaUnique(reason); if (!callback_fn->IsUndefined()) {