fix(irgen): starttime/stoptime 函数名恢复为 _sysy_starttime/_sysy_stoptime

平台运行时库期望 _sysy_starttime(int) 和 _sysy_stoptime(int) 签名,
之前错误地生成 starttime(void) / stoptime(void),
导致所有程序链接到错误函数而崩溃返回 1。
恢复队友原版:下划线前缀 + 行号参数。
lzk
lzkk 3 days ago
parent 56b37ac060
commit feab5508a8

@ -656,9 +656,16 @@ std::any IRGenImpl::visitUnaryExp(SysYParser::UnaryExpContext* ctx) {
}
}
if (callee_name == "starttime" || callee_name == "stoptime") {
int lineno = ctx->getStart()->getLine();
args.push_back(static_cast<ir::Value*>(builder_.CreateConstInt(lineno)));
}
if (args.size() != func_it->second->GetParams().size()) {
throw std::runtime_error(
FormatError("irgen", "函数参数个数不匹配: " + callee_name));
if (callee_name != "starttime" && callee_name != "stoptime") {
throw std::runtime_error(
FormatError("irgen", "函数参数个数不匹配: " + callee_name));
}
}
for (size_t i = 0; i < args.size(); ++i) {
args[i] = CastValueTo(args[i], func_it->second->GetParams()[i]->GetType());

@ -119,9 +119,11 @@ std::any IRGenImpl::visitCompUnit(SysYParser::CompUnitContext* ctx) {
auto* putch = module_.CreateFunction("putch", ir::Type::GetVoidType(), true);
putch->AddParam("%arg.x", ir::Type::GetInt32Type());
function_map_["putch"] = putch;
auto* sysy_starttime = module_.CreateFunction("starttime", ir::Type::GetVoidType(), true);
auto* sysy_starttime = module_.CreateFunction("_sysy_starttime", ir::Type::GetVoidType(), true);
sysy_starttime->AddParam("%arg.lineno", ir::Type::GetInt32Type());
function_map_["starttime"] = sysy_starttime;
auto* sysy_stoptime = module_.CreateFunction("stoptime", ir::Type::GetVoidType(), true);
auto* sysy_stoptime = module_.CreateFunction("_sysy_stoptime", ir::Type::GetVoidType(), true);
sysy_stoptime->AddParam("%arg.lineno", ir::Type::GetInt32Type());
function_map_["stoptime"] = sysy_stoptime;
SysYParser::FuncDefContext* main_func = nullptr;

Loading…
Cancel
Save