diff --git a/src/bin/jbc2mpl b/src/bin/jbc2mpl index 9399d7392a1a3a9f26499ecff533f4e66bbcd8b6..d1750313c14a552a7f8e9554ccbc6ef09432bb94 100755 Binary files a/src/bin/jbc2mpl and b/src/bin/jbc2mpl differ diff --git a/src/bin/maple b/src/bin/maple index 6e14c98e8a5454d124f1c4d58c83d97a5a5226ae..39659c8c4fb2ab06f27e952351a685cb3572e682 100755 Binary files a/src/bin/maple and b/src/bin/maple differ diff --git a/src/bin/mplcg b/src/bin/mplcg index 4fa1184fd79b1c758d564d9af8ab18873f41da5f..9b7f24e283415deb38d021e4488782f45da32207 100755 Binary files a/src/bin/mplcg and b/src/bin/mplcg differ diff --git a/src/deplibs/libmaple_driverutil.a b/src/deplibs/libmaple_driverutil.a index e7ed9ada8cbf8d944897469537d96fdd75205d58..8e684356366a2b0813203fe9c3d9f71bd9949b99 100644 Binary files a/src/deplibs/libmaple_driverutil.a and b/src/deplibs/libmaple_driverutil.a differ diff --git a/src/deplibs/libmempool.a b/src/deplibs/libmempool.a index 13285b2155ba67f1dddf8898f84ea59f4ac864d6..7e5e19554d39f95f8e02746e608052a4aa0fdc2d 100644 Binary files a/src/deplibs/libmempool.a and b/src/deplibs/libmempool.a differ diff --git a/src/deplibs/libmplutil.a b/src/deplibs/libmplutil.a index f2539a47899715949c506f88a6ddbe893fd7a074..11427a42529fc3bd04c2df8766f6bbe50750a3aa 100644 Binary files a/src/deplibs/libmplutil.a and b/src/deplibs/libmplutil.a differ diff --git a/src/maple_ir/include/mir_nodes.h b/src/maple_ir/include/mir_nodes.h index ed3c9fe283d15a81828be907577270979bbc93ad..a21839c907159d8bd21a6a5f343f3d7dfebf34d5 100644 --- a/src/maple_ir/include/mir_nodes.h +++ b/src/maple_ir/include/mir_nodes.h @@ -1365,10 +1365,10 @@ class SrcPosition { union { struct { uint16 fileNum; - uint16 column; - bool stmtBegin; - bool bbBegin; - uint16 unused; + uint16 column : 12; + uint16 stmtBegin : 1; + uint16 bbBegin : 1; + uint16 unused : 2; } fileColumn; uint32 word0; @@ -2011,8 +2011,6 @@ class RegassignNode : public UnaryStmtNode { public: RegassignNode() : UnaryStmtNode(OP_regassign) {} - explicit RegassignNode(const RegassignNode &node) : UnaryStmtNode(node), regIdx(node.regIdx) {} - RegassignNode(PrimType primType, PregIdx idx, BaseNode *opnd) : UnaryStmtNode(OP_regassign, primType, opnd), regIdx(idx) {} diff --git a/src/maple_ir/include/types_def.h b/src/maple_ir/include/types_def.h index 90116797b2bee593ab24e7da6bfc30e829e68d4b..9c3f4ff939a8dd453c3d414352896cb268fc7cdb 100644 --- a/src/maple_ir/include/types_def.h +++ b/src/maple_ir/include/types_def.h @@ -35,7 +35,7 @@ class StIdx { // scope nesting level + symbol table index public: union un { struct { - uint32 idx; + uint32 idx : 24; uint8 scope; // scope level, with the global scope is at level 1 } scopeIdx; diff --git a/src/maple_me/src/irmap.cpp b/src/maple_me/src/irmap.cpp index 93f698196dbb4ef6101c67c309d2ae91d631c9a3..26c0eb8a075b8037442ea10c3cc1b422dc554d8f 100644 --- a/src/maple_me/src/irmap.cpp +++ b/src/maple_me/src/irmap.cpp @@ -753,18 +753,18 @@ MeVarPhiNode *IRMap::CreateMeVarPhi(VarMeExpr &meVar) { return phiMeVar; } -DassignMeStmt *IRMap::CreateDassignMeStmt(MeExpr &lhs, MeExpr &rhs, BB &curBB) { +DassignMeStmt *IRMap::CreateDassignMeStmt(MeExpr &lhs, MeExpr &rhs, BB &currBB) { auto *meStmt = NewInPool(); meStmt->SetRHS(&rhs); auto &var = static_cast(lhs); meStmt->SetLHS(&var); var.SetDefBy(kDefByStmt); var.SetDefStmt(meStmt); - meStmt->SetBB(&curBB); + meStmt->SetBB(&currBB); return meStmt; } -RegassignMeStmt *IRMap::CreateRegassignMeStmt(MeExpr &lhs, MeExpr &rhs, BB &curBB) { +RegassignMeStmt *IRMap::CreateRegassignMeStmt(MeExpr &lhs, MeExpr &rhs, BB &currBB) { auto *meStmt = New(); ASSERT(lhs.GetMeOp() == kMeOpReg, "Create regassign without lhs == regread"); meStmt->SetRHS(&rhs); @@ -772,7 +772,7 @@ RegassignMeStmt *IRMap::CreateRegassignMeStmt(MeExpr &lhs, MeExpr &rhs, BB &curB meStmt->SetLHS(®); reg.SetDefBy(kDefByStmt); reg.SetDefStmt(meStmt); - meStmt->SetBB(&curBB); + meStmt->SetBB(&currBB); return meStmt; } diff --git a/src/maple_me/src/me_ir.cpp b/src/maple_me/src/me_ir.cpp index 05f1bf7f27f79fec4e43f2cf177dd6e2e82fcc2a..9fba48afb021149bf4ddb2e4826321acbc4cec76 100644 --- a/src/maple_me/src/me_ir.cpp +++ b/src/maple_me/src/me_ir.cpp @@ -828,18 +828,18 @@ void NaryMeExpr::Dump(IRMap *irMap, int32 indent) const { } MeExpr *DassignMeStmt::GetLHSRef(SSATab &ssaTab, bool excludeLocalRefVar) { - VarMeExpr *lhs = GetVarLHS(); - if (lhs->GetPrimType() != PTY_ref) { + VarMeExpr *lhsOpnd = GetVarLHS(); + if (lhsOpnd->GetPrimType() != PTY_ref) { return nullptr; } - const OriginalSt *ost = ssaTab.GetOriginalStFromID(lhs->GetOStIdx()); + const OriginalSt *ost = ssaTab.GetOriginalStFromID(lhsOpnd->GetOStIdx()); if (ost->IsIgnoreRC()) { return nullptr; } if (excludeLocalRefVar && ost->IsLocal()) { return nullptr; } - return lhs; + return lhsOpnd; } MeExpr *MaydassignMeStmt::GetLHSRef(SSATab &ssaTab, bool excludeLocalRefVar) { diff --git a/src/mempool/include/maple_string.h b/src/mempool/include/maple_string.h index bf95cb54c56bbd3bc3d2f66dbb5d4d6fcd24875c..7a1613b8001b67547f496819a5658cce08528bb8 100644 --- a/src/mempool/include/maple_string.h +++ b/src/mempool/include/maple_string.h @@ -240,7 +240,7 @@ class MapleString { char *data = nullptr; MemPool *memPool = nullptr; - unsigned int dataLength = 0; + size_t dataLength = 0; }; // global operators diff --git a/src/mpl2mpl/src/muid_replacement.cpp b/src/mpl2mpl/src/muid_replacement.cpp index 18302b3d399f997b958ef1b9055cebb028067618..d3b7ef1ed7cedc46358c0733d6be66b67e746671 100644 --- a/src/mpl2mpl/src/muid_replacement.cpp +++ b/src/mpl2mpl/src/muid_replacement.cpp @@ -481,7 +481,12 @@ void MUIDReplacement::ReplaceFieldMetaStaticAddr(MIRSymbol &mirSymbol, int64 ind std::string symbolName = mirSymbol.GetName(); MIRSymbol *fieldOffsetDataSt = GlobalTables::GetGsymTable().GetSymbolFromStrIdx( GlobalTables::GetStrTable().GetStrIdxFromName(NameMangler::kFieldOffsetDataPrefixStr + symbolName)); - CHECK_FATAL(fieldOffsetDataSt != nullptr, "fieldOffsetDataSt symbol is null."); + if (fieldOffsetDataSt == nullptr) { + if (trace) { + LogInfo::MapleLogger() << "fieldOffsetDataSt is nullptr, symbolName=" << symbolName << "\n"; + } + return; + } MIRAggConst *aggConst = static_cast(fieldOffsetDataSt->GetKonst()); MIRAggConst *agg = static_cast(aggConst->GetConstVecItem(0)); MIRConst *elem = agg->GetConstVecItem(0); diff --git a/src/mpl2mpl/src/reflection_analysis.cpp b/src/mpl2mpl/src/reflection_analysis.cpp index 12dc644cc3cf152c69ac2b3e573c7f98fa58a38e..742a75eee338b208a390053625dff09941f63329 100644 --- a/src/mpl2mpl/src/reflection_analysis.cpp +++ b/src/mpl2mpl/src/reflection_analysis.cpp @@ -593,13 +593,7 @@ uint32 ReflectionAnalysis::GetMethodInVtabIndex(const Klass &klass, const MIRFun if (node->GetKind() == kConstAddrofFunc) { const auto *addr = static_cast(node); MIRFunction *vtableFunc = GlobalTables::GetFunctionTable().GetFunctionFromPuidx(addr->GetValue()); - // NOTE: In VtableAnalysis::AddMethodToTable, a abstract method will not - // be added to the vtable if there is already an abstract method of the - // same name and descriptor (but from a superclass or implemented - // interface) in the vtable. Therefore, we cannot compare methods by - // their GetNameStrIdx() (which includes package+class+method+descriptor), - // because otherwise we may not find the exact method. - if (func.GetBaseFuncNameWithTypeStrIdx() == vtableFunc->GetBaseFuncNameWithTypeStrIdx()) { + if (func.GetNameStrIdx() == vtableFunc->GetNameStrIdx()) { findMethod = true; break; } diff --git a/src/mpl2mpl/src/vtable_analysis.cpp b/src/mpl2mpl/src/vtable_analysis.cpp index 9d25d3af947d54608a19ee059c62c43c30b7ca04..83797706891f0672beccdbf4f50dda18206c0756 100644 --- a/src/mpl2mpl/src/vtable_analysis.cpp +++ b/src/mpl2mpl/src/vtable_analysis.cpp @@ -82,10 +82,7 @@ void VtableAnalysis::AddMethodToTable(MethodPtrVector &methodTable, MethodPair & GStrIdx currStrIdx = currFunc->GetBaseFuncNameWithTypeStrIdx(); if (strIdx == currStrIdx) { if (CheckOverrideForCrossPackage(*currFunc, *method)) { - // only update when it's not an abstract method - if (!method->IsAbstract()) { - methodTable[i] = &methodPair; - } + methodTable[i] = &methodPair; return; } }