diff --git a/src/SysYIRGenerator.cpp b/src/SysYIRGenerator.cpp index 0f3871c..1fb7305 100644 --- a/src/SysYIRGenerator.cpp +++ b/src/SysYIRGenerator.cpp @@ -408,7 +408,7 @@ std::any SysYIRGenerator::visitFuncDef(SysYParser::FuncDefContext *ctx){ auto funcArgs = function->getArguments(); std::vector allocas; for (int i = 0; i < paramActualTypes.size(); ++i) { - AllocaInst *alloca = builder.createAllocaInst(paramActualTypes[i], {}, paramNames[i]); + AllocaInst *alloca = builder.createAllocaInst(Type::getPointerType(paramActualTypes[i]), {}, paramNames[i]); allocas.push_back(alloca); module->addVariable(paramNames[i], alloca); } diff --git a/src/SysYIRPrinter.cpp b/src/SysYIRPrinter.cpp index 668ed84..50c56cf 100644 --- a/src/SysYIRPrinter.cpp +++ b/src/SysYIRPrinter.cpp @@ -72,6 +72,8 @@ std::string SysYPrinter::getValueName(Value *value) { return std::to_string(constVal->getInt()); } else if (auto constVar = dynamic_cast(value)) { return constVar->getName(); // 假设ConstantVariable有自己的名字或通过getByIndices获取值 + } else if (auto argVar = dynamic_cast(value)) { + return "%" + argVar->getName(); // 假设ArgumentVariable有自己的名字 } assert(false && "Unknown value type or unable to get value name"); return "";