diff --git a/IDEHelper/Compiler/BfExprEvaluator.cpp b/IDEHelper/Compiler/BfExprEvaluator.cpp index 4a16ed5c..5a909dc1 100644 --- a/IDEHelper/Compiler/BfExprEvaluator.cpp +++ b/IDEHelper/Compiler/BfExprEvaluator.cpp @@ -16408,7 +16408,13 @@ void BfExprEvaluator::InitializedSizedArray(BfSizedArrayType* arrayType, BfToken members.push_back(defaultVal.mValue); } - return mModule->mBfIRBuilder->CreateConstArray(mModule->mBfIRBuilder->MapType(checkArrayType), members); + if (checkArrayType->mElementType->IsStruct()) + { + // This fixed cases where we have non-size-aligned initializers. Assume zero-initialized + return mModule->mBfIRBuilder->CreateConstStructZero(mModule->mBfIRBuilder->MapType(checkArrayType)); + } + else + return mModule->mBfIRBuilder->CreateConstArray(mModule->mBfIRBuilder->MapType(checkArrayType), members); }; _GetValues(arrayType, openToken, valueExprs, commas, closeToken, false); diff --git a/IDEHelper/Compiler/BfIRBuilder.cpp b/IDEHelper/Compiler/BfIRBuilder.cpp index bbfc2d8a..e9a4b78d 100644 --- a/IDEHelper/Compiler/BfIRBuilder.cpp +++ b/IDEHelper/Compiler/BfIRBuilder.cpp @@ -1288,6 +1288,25 @@ String BfIRBuilder::ToString(BfIRValue irValue) BfIRValue targetConst(BfIRValueFlags_Const, ptrToIntConst->mTarget); return ToString(targetConst) + StrFormat(" PtrToInt TypeCode:%d", ptrToIntConst->mToTypeCode); } + else if (constant->mConstType == BfConstType_Array) + { + auto constArray = (BfConstantArray*)constant; + String str = ToString(constArray->mType); + str += "("; + + for (int i = 0; i < (int)constArray->mValues.size(); i++) + { + if (i > 0) + str += ", "; + str += ToString(constArray->mValues[i]); + } + str += ");"; + return str; + } + else if (constant->mConstType == BfConstType_AggZero) + { + return ToString(constant->mIRType) + " zeroinitializer"; + } else { BF_FATAL("Unhandled");