From 3da2f3ec8061dcd98ee98fe89851b0e80ef6820e Mon Sep 17 00:00:00 2001 From: rain2133 <1370973498@qq.com> Date: Sun, 22 Jun 2025 18:40:33 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=87=BD=E6=95=B0=E7=B1=BB?= =?UTF-8?q?=E5=9E=8B=E5=88=A4=E6=96=AD=EF=BC=8C=E7=BB=88=E7=AB=AF=E8=B7=91?= =?UTF-8?q?=E9=80=9A=E6=89=80=E6=9C=89=E6=B5=8B=E8=AF=95=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E3=80=82Printer=E6=A0=BC=E5=BC=8F=E9=9C=80=E8=A6=81=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/SysYIRGenerator.cpp | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/SysYIRGenerator.cpp b/src/SysYIRGenerator.cpp index 1718aba..912930e 100644 --- a/src/SysYIRGenerator.cpp +++ b/src/SysYIRGenerator.cpp @@ -73,10 +73,12 @@ std::any SysYIRGenerator::visitGlobalVarDecl(SysYParser::GlobalVarDeclContext *c } } - ArrayValueTree* root = std::any_cast(varDef->initVal()->accept(this)); - ValueCounter values; - Utils::tree2Array(type, root, dims, dims.size(), values, &builder); - delete root; + ValueCounter values = {}; + if (varDef->initVal() != nullptr) { + ArrayValueTree* root = std::any_cast(varDef->initVal()->accept(this)); + Utils::tree2Array(type, root, dims, dims.size(), values, &builder); + delete root; + } // 创建全局变量,并更新符号表 module->createGlobalValue(name, Type::getPointerType(type), dims, values); } @@ -456,7 +458,7 @@ std::any SysYIRGenerator::visitReturnStmt(SysYParser::ReturnStmtContext *ctx) { returnValue = std::any_cast(visitExp(ctx->exp())); } - Type* funcType = builder.getBasicBlock()->getParent()->getType(); + Type* funcType = builder.getBasicBlock()->getParent()->getReturnType(); if (funcType!= returnValue->getType() && returnValue != nullptr) { ConstantValue * constValue = dynamic_cast(returnValue); if (constValue != nullptr) {