diff --git a/src/mapleall/maple_be/src/be/becommon.cpp b/src/mapleall/maple_be/src/be/becommon.cpp index 755114bf2157c16b6f94f08cedb59fe09e0a5069..ee8c32a021585a58b9ca34e46ef4cb520341db7b 100644 --- a/src/mapleall/maple_be/src/be/becommon.cpp +++ b/src/mapleall/maple_be/src/be/becommon.cpp @@ -584,14 +584,17 @@ std::pair BECommon::GetFieldOffset(MIRStructType &structType, Fiel } else { /* for unions, bitfields are treated as non-bitfields */ if (curFieldID == fieldID) { return std::pair(0, 0); - } else if (fieldType->GetKind() == kTypeStruct) { - /* union cannot be kTypeClass */ - if ((curFieldID + GetStructFieldCount(fieldTyIdx)) >= fieldID) { - return GetFieldOffset(static_cast(*fieldType), fieldID - curFieldID); - } - curFieldID += GetStructFieldCount(fieldTyIdx) + 1; } else { - ++curFieldID; + MIRStructType *subStructTy = fieldType->EmbeddedStructType(); + if (subStructTy == nullptr) { + curFieldID++; + } else { + if ((curFieldID + GetStructFieldCount(subStructTy->GetTypeIndex())) < fieldID) { + curFieldID += GetStructFieldCount(subStructTy->GetTypeIndex()) + 1; + } else { + return GetFieldOffset(*subStructTy, fieldID - curFieldID); + } + } } } } diff --git a/src/mapleall/maple_be/src/be/lower.cpp b/src/mapleall/maple_be/src/be/lower.cpp index 38b8f96344aeaef2f06747634867a5b33c299de8..ce781b55a4942eadd4f0ee315c6d6b3a2be2c819 100644 --- a/src/mapleall/maple_be/src/be/lower.cpp +++ b/src/mapleall/maple_be/src/be/lower.cpp @@ -2568,6 +2568,11 @@ BaseNode *CGLowerer::LowerIntrinsicop(const BaseNode &parent, IntrinsicopNode &i if (intrinNode.GetIntrinsic() == INTRN_MPL_READ_ARRAYCLASS_CACHE_ENTRY) { return &intrinNode; } + if (intrnID == INTRN_C_constant_p) { + BaseNode *opnd = intrinNode.Opnd(0); + return mirModule.GetMIRBuilder()->CreateIntConst(opnd->op == OP_constval || opnd->op == OP_sizeoftype || + opnd->op == OP_conststr || opnd->op == OP_conststr16, PTY_i32); + } CHECK_FATAL(false, "unexpected intrinsic type in CGLowerer::LowerIntrinsicop"); return &intrinNode; } diff --git a/src/mapleall/maple_be/src/cg/aarch64/aarch64_emitter.cpp b/src/mapleall/maple_be/src/cg/aarch64/aarch64_emitter.cpp index c48057a64f5c937f51ded329245327deaa5095b9..865856889e1d036f4dd9fda4fc8162d3b5ce0279 100644 --- a/src/mapleall/maple_be/src/cg/aarch64/aarch64_emitter.cpp +++ b/src/mapleall/maple_be/src/cg/aarch64/aarch64_emitter.cpp @@ -364,6 +364,8 @@ void AArch64AsmEmitter::Run(FuncEmitInfo &funcEmitInfo) { (void)emitter.Emit("\t.hidden\t" + funcStName + "\n"); } else if (funcSt->GetFunction()->GetAttr(FUNCATTR_local)) { (void)emitter.Emit("\t.local\t" + funcStName + "\n"); + } else if (funcSt->GetFunction() && (funcSt->GetFunction()->IsJava() == false) && funcSt->GetFunction()->IsStatic()) { + // nothing } else { bool isExternFunction = false; (void)emitter.Emit("\t.globl\t").Emit(funcSt->GetName()).Emit("\n");