diff --git a/src/SysYIRGenerator.cpp b/src/SysYIRGenerator.cpp index 2fa2be8..b1430ff 100644 --- a/src/SysYIRGenerator.cpp +++ b/src/SysYIRGenerator.cpp @@ -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; }