From 17d8902992569275d5bc8e4856c1f2f0e5fa1231 Mon Sep 17 00:00:00 2001 From: Alfred Huang Date: Fri, 14 May 2021 09:34:48 -0700 Subject: [PATCH] Fixed LowerStructReturn() found with PR586 --- src/mapleall/maple_be/src/be/lower.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/mapleall/maple_be/src/be/lower.cpp b/src/mapleall/maple_be/src/be/lower.cpp index f0b30ee7d0..d457a8bc16 100644 --- a/src/mapleall/maple_be/src/be/lower.cpp +++ b/src/mapleall/maple_be/src/be/lower.cpp @@ -1304,9 +1304,16 @@ bool CGLowerer::LowerStructReturn(BlockNode &newBlk, StmtNode *stmt, StmtNode *n regassign u64 %1 (regread u64 %%retval0) regassign ptr %2 (addrof ptr $s) iassign <* u64> 0 (regread ptr %2, regread u64 %1) */ + if (CGOptions::GetInstance().GetOptimizeLevel() == CGOptions::kLevel0) { + return false; + } MIRSymbol *symbol = mirModule.CurFunction()->GetLocalOrGlobalSymbol(dnode_stmt->GetStIdx()); MIRStructType *structType = static_cast(symbol->GetType()); int32 size = structType->GetSize(); + for (size_t i = 0; i < callnode->GetNopndSize(); ++i) { + BaseNode *newOpnd = LowerExpr(*callnode, *callnode->GetNopndAt(i), newBlk); + callnode->SetOpnd(newOpnd, i); + } CallNode *callStmt = mirModule.GetMIRBuilder()->CreateStmtCall( callnode->GetPUIdx(), callnode->GetNopnd()); newBlk.AddStatement(callStmt); -- Gitee