arkcompiler_ets_runtime/ecmascript/compiler/precompile_checker.cpp
yycc bc481d15ba Fix bug that crash when circuit has no return
Issue: https://gitee.com/openharmony/arkcompiler_ets_runtime/issues/I9HVQ1
Description: Fix bug that crash when circuit has no return

Signed-off-by: yycc <yuyicen1@huawei.com>
Change-Id: Ief7e81e2359c8b6e69c58bb821555de86e882d77
2024-04-18 20:40:34 +08:00

53 lines
1.5 KiB
C++

/*
* Copyright (c) 2024 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include "ecmascript/compiler/pass.h"
#include "ecmascript/compiler/precompile_checker.h"
namespace panda::ecmascript::kungfu {
bool PreCompileChecker::Run()
{
if (!HasReturnCheck()) {
PrintAbortInfo("HasReturnCheck");
return false;
}
if (HasDebuggerStmt()) {
PrintAbortInfo("HasDebuggerStmt");
return false;
}
return true;
}
bool PreCompileChecker::HasReturnCheck() const
{
std::vector<GateRef> returnList;
acc_.GetReturnOuts(returnList);
return returnList.size() != 0;
}
bool PreCompileChecker::HasDebuggerStmt() const
{
return data_->GetMethodLiteral()->HasDebuggerStmt();
}
void PreCompileChecker::PrintAbortInfo(const std::string& checkName) const
{
if (enableLog_) {
LOG_COMPILER(INFO) << checkName << " check failed! Abort compiling method "
<< methodName_;
}
}
} // namespace panda::ecmascript::kungfu