diff --git a/IDEHelper/Backend/BeIRCodeGen.cpp b/IDEHelper/Backend/BeIRCodeGen.cpp index 884244e5..fb0c03cf 100644 --- a/IDEHelper/Backend/BeIRCodeGen.cpp +++ b/IDEHelper/Backend/BeIRCodeGen.cpp @@ -865,18 +865,18 @@ void BeIRCodeGen::Read(BeValue*& beValue) } else if (valType != structType->mMembers[i].mType) { - if ((valType->IsSizedArray()) && (structType->mMembers[i].mType->IsSizedArray())) + if (valType->IsSizedArray()) { auto valSizedType = (BeSizedArrayType*)valType; - auto memberSizedType = (BeSizedArrayType*)structType->mMembers[i].mType; - if ((valSizedType->mSize == 0) && (valSizedType->mElementType == memberSizedType->mElementType)) - { - constant->mType = memberSizedType; + if (valSizedType->mSize == 0) + { + constant->mType = structType->mMembers[i].mType; constStruct->mMemberValues.Add(constant); continue; } } + Fail("ConstAgg struct member type mismatch"); } } diff --git a/IDEHelper/Compiler/BfIRCodeGen.cpp b/IDEHelper/Compiler/BfIRCodeGen.cpp index 79ea9430..986471cb 100644 --- a/IDEHelper/Compiler/BfIRCodeGen.cpp +++ b/IDEHelper/Compiler/BfIRCodeGen.cpp @@ -954,13 +954,12 @@ void BfIRCodeGen::Read(llvm::Value*& llvmValue, BfIRCodeGenEntry** codeGenEntry, { if (values[i]->getType() != structType->getElementType(i)) { - auto valArrayType = llvm::dyn_cast(values[i]->getType()); - auto structArrayType = llvm::dyn_cast(structType->getElementType(i)); - if ((valArrayType != NULL) && (structArrayType != NULL)) + auto valArrayType = llvm::dyn_cast(values[i]->getType()); + if (valArrayType != NULL) { - if ((valArrayType->getNumElements() == 0) && (valArrayType->getElementType() == structArrayType->getElementType())) + if (valArrayType->getNumElements() == 0) { - values[i] = llvm::ConstantAggregateZero::get(structArrayType); + values[i] = llvm::ConstantAggregateZero::get(structType->getElementType(i)); } } }