[midend]修复82样例生成IR的错误(未正确初始化全局数组常量和数组常量的Type计算)
This commit is contained in:
@@ -94,7 +94,11 @@ std::any SysYIRGenerator::visitGlobalConstDecl(SysYParser::GlobalConstDeclContex
|
||||
Utils::tree2Array(type, root, dims, dims.size(), values, &builder);
|
||||
delete root;
|
||||
// 创建全局常量变量,并更新符号表
|
||||
module->createConstVar(name, Type::getPointerType(type), values, dims);
|
||||
Type* variableType = type;
|
||||
if (!dims.empty()) { // 如果有维度,说明是数组
|
||||
variableType = buildArrayType(type, dims); // 构建完整的 ArrayType
|
||||
}
|
||||
module->createConstVar(name, Type::getPointerType(variableType), values, dims);
|
||||
}
|
||||
return std::any();
|
||||
}
|
||||
@@ -145,7 +149,12 @@ std::any SysYIRGenerator::visitConstDecl(SysYParser::ConstDeclContext *ctx){
|
||||
Utils::tree2Array(type, root, dims, dims.size(), values, &builder);
|
||||
delete root;
|
||||
|
||||
module->createConstVar(name, Type::getPointerType(type), values, dims);
|
||||
// 创建局部常量,并更新符号表
|
||||
Type* variableType = type;
|
||||
if (!dims.empty()) {
|
||||
variableType = buildArrayType(type, dims); // 构建完整的 ArrayType
|
||||
}
|
||||
module->createConstVar(name, Type::getPointerType(variableType), values, dims);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user