From 49050eee7b21eae61cf64814a78d2646c9b7692d Mon Sep 17 00:00:00 2001 From: "@evian_hill" Date: Wed, 21 Apr 2021 17:24:27 +0800 Subject: [PATCH] refresh MIRStructType created by name or incompletely with new complete MIRStructType --- src/mapleall/maple_ir/src/parser.cpp | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/mapleall/maple_ir/src/parser.cpp b/src/mapleall/maple_ir/src/parser.cpp index 0781540088..6b5deb5867 100644 --- a/src/mapleall/maple_ir/src/parser.cpp +++ b/src/mapleall/maple_ir/src/parser.cpp @@ -826,7 +826,19 @@ bool MIRParser::ParseStructType(TyIdx &styIdx, const GStrIdx &strIdx) { GlobalTables::GetTypeTable().SetTypeWithTyIdx(styIdx, *structType.CopyMIRTypeNode()); } } else { - styIdx = GlobalTables::GetTypeTable().GetOrCreateMIRType(&structType); + TyIdx prevTypeIdx = mod.GetTypeNameTab()->GetTyIdxFromGStrIdx(strIdx); + if (prevTypeIdx != 0) { + // if the MIRStructType has been created by name or incompletely, refresh the prev created type + MIRType *prevType = GlobalTables::GetTypeTable().GetTypeFromTyIdx(prevTypeIdx); + if (prevType->GetKind() == kTypeByName || + (prevType->GetKind() == kTypeStructIncomplete && tkind == kTypeStruct)) { + structType.SetTypeIndex(prevTypeIdx); + GlobalTables::GetTypeTable().SetTypeWithTyIdx(prevTypeIdx, *structType.CopyMIRTypeNode()); + } + styIdx = prevTypeIdx; + } else { + styIdx = GlobalTables::GetTypeTable().GetOrCreateMIRType(&structType); + } } lexer.NextToken(); return true; -- Gitee