diff --git a/src/mapleall/maple_me/src/ssa_tab.cpp b/src/mapleall/maple_me/src/ssa_tab.cpp index 7405f2dc0b0b416a70be868970a542da787483f8..64be6c37af92864d75ecaa22859be96c059a2f37 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;