From 1f0d1b4d9b7d71ad8db4b1304d06132027f8ddc0 Mon Sep 17 00:00:00 2001 From: "@evian_hill" Date: Tue, 27 Apr 2021 16:21:55 +0800 Subject: [PATCH] create same addrofOst for fields of union --- src/mapleall/maple_me/src/ssa_tab.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/mapleall/maple_me/src/ssa_tab.cpp b/src/mapleall/maple_me/src/ssa_tab.cpp index 7405f2dc0b..64be6c37af 100644 --- a/src/mapleall/maple_me/src/ssa_tab.cpp +++ b/src/mapleall/maple_me/src/ssa_tab.cpp @@ -33,7 +33,11 @@ BaseNode *SSATab::CreateSSAExpr(BaseNode &expr) { auto &addrofNode = static_cast(expr); AddrofSSANode *ssaNode = mirModule.CurFunction()->GetCodeMemPool()->New(addrofNode); MIRSymbol *st = mirModule.CurFunction()->GetLocalOrGlobalSymbol(ssaNode->GetStIdx()); - OriginalSt *ost = FindOrCreateSymbolOriginalSt(*st, mirModule.CurFunction()->GetPuidx(), ssaNode->GetFieldID()); + FieldID fieldId = ssaNode->GetFieldID(); + if (expr.GetOpCode() == OP_addrof && st->GetType()->GetKind() == kTypeUnion) { + fieldId = 0; + } + OriginalSt *ost = FindOrCreateSymbolOriginalSt(*st, mirModule.CurFunction()->GetPuidx(), fieldId); versionStTable.CreateZeroVersionSt(ost); ssaNode->SetSSAVar(*versionStTable.GetZeroVersionSt(ost)); return ssaNode; -- Gitee