[backend]修复了较小全零全局数组未显示初始化导致未定义行为的问题
This commit is contained in:
@@ -139,7 +139,29 @@ std::string RISCv64CodeGen::module_gen() {
|
|||||||
ss << ".type " << global->getName() << ", @object\n";
|
ss << ".type " << global->getName() << ", @object\n";
|
||||||
ss << ".size " << global->getName() << ", " << total_size << "\n";
|
ss << ".size " << global->getName() << ", " << total_size << "\n";
|
||||||
ss << global->getName() << ":\n";
|
ss << global->getName() << ":\n";
|
||||||
printInitializer(ss, global->getInitValues());
|
bool is_all_zeros = true;
|
||||||
|
const auto& init_values = global->getInitValues();
|
||||||
|
if (init_values.getValues().empty()) {
|
||||||
|
is_all_zeros = true;
|
||||||
|
} else {
|
||||||
|
for (auto val : init_values.getValues()) {
|
||||||
|
if (auto const_val = dynamic_cast<ConstantValue*>(val)) {
|
||||||
|
if (!const_val->isZero()) {
|
||||||
|
is_all_zeros = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
is_all_zeros = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (is_all_zeros) {
|
||||||
|
ss << " .zero " << total_size << "\n";
|
||||||
|
} else {
|
||||||
|
// 对于有非零初始值的变量,保持原有的打印逻辑。
|
||||||
|
printInitializer(ss, global->getInitValues());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// b. 处理全局常量 (ConstantVariable)
|
// b. 处理全局常量 (ConstantVariable)
|
||||||
|
|||||||
Reference in New Issue
Block a user