diff --git a/IDEHelper/Backend/BeIRCodeGen.cpp b/IDEHelper/Backend/BeIRCodeGen.cpp index e1685d84..ad3cbcf1 100644 --- a/IDEHelper/Backend/BeIRCodeGen.cpp +++ b/IDEHelper/Backend/BeIRCodeGen.cpp @@ -2920,6 +2920,8 @@ void BeIRCodeGen::HandleNextCmd() CMD_PARAM(int, flags); CMD_PARAM(BeMDNode*, type); + BF_ASSERT(type != NULL); + auto dbgMember = mBeModule->mOwnedValues.Alloc(); dbgMember->mName = name; dbgMember->mType = (BeDbgType*)type; @@ -2939,6 +2941,8 @@ void BeIRCodeGen::HandleNextCmd() CMD_PARAM(int, flags); CMD_PARAM(BeConstant*, val); + BF_ASSERT(type != NULL); + auto dbgMember = mBeModule->mOwnedValues.Alloc(); dbgMember->mName = name; dbgMember->mType = (BeDbgType*)type; diff --git a/IDEHelper/Compiler/BfIRBuilder.cpp b/IDEHelper/Compiler/BfIRBuilder.cpp index 8f7edc62..869e733d 100644 --- a/IDEHelper/Compiler/BfIRBuilder.cpp +++ b/IDEHelper/Compiler/BfIRBuilder.cpp @@ -2068,7 +2068,7 @@ public: #endif void BfIRBuilder::CreateTypeDeclaration(BfType* type, bool forceDbgDefine) -{ +{ bool wantDIData = DbgHasInfo() && (!type->IsUnspecializedType()); // Types that don't have a proper 'defining module' need to be defined in every module they are used @@ -2547,7 +2547,7 @@ void BfIRBuilder::CreateDbgTypeDefinition(BfType* type) { auto payloadType = fieldInstance->mResolvedType; if (payloadType == NULL) - payloadType = mModule->CreateTupleType(BfTypeVector(), Array()); + payloadType = mModule->CreateTupleType(BfTypeVector(), Array()); String fieldName = StrFormat("_%d_%s", -fieldInstance->mDataIdx - 1, fieldDef->mName.c_str()); diff --git a/IDEHelper/Compiler/BfModule.cpp b/IDEHelper/Compiler/BfModule.cpp index 0d6cf96d..5ab0467f 100644 --- a/IDEHelper/Compiler/BfModule.cpp +++ b/IDEHelper/Compiler/BfModule.cpp @@ -5829,7 +5829,11 @@ BfIRValue BfModule::CreateTypeData(BfType* type, Dictionary& usedStrin { auto refVal = ReferenceStaticField(fieldInstance); if (refVal.IsAddr()) - constValue = mBfIRBuilder->CreatePtrToInt(refVal.mValue, BfTypeCode_Int64); + { + constValue = mBfIRBuilder->CreatePtrToInt(refVal.mValue, BfTypeCode_IntPtr); + if (mSystem->mPtrSize != 8) + constValue = mBfIRBuilder->CreateNumericCast(constValue, false, BfTypeCode_Int64); + } } if (!constValue) diff --git a/IDEHelper/Compiler/BfModuleTypeUtils.cpp b/IDEHelper/Compiler/BfModuleTypeUtils.cpp index 82a337d1..390dc4ab 100644 --- a/IDEHelper/Compiler/BfModuleTypeUtils.cpp +++ b/IDEHelper/Compiler/BfModuleTypeUtils.cpp @@ -452,6 +452,7 @@ bool BfModule::InitType(BfType* resolvedTypeRef, BfPopulateType populateType) mContext->mSavedTypeData[savedTypeData->mTypeId] = NULL; resolvedTypeRef->mTypeId = savedTypeData->mTypeId; + BfLogSysM("Using mSavedTypeData for %p %s\n", resolvedTypeRef, typeName.c_str()); if (typeInst != NULL) { @@ -5047,11 +5048,12 @@ BfTypeInstance* BfModule::CreateTupleType(const BfTypeVector& fieldTypes, const { auto baseType = (BfTypeInstance*)ResolveTypeDef(mContext->mCompiler->mValueTypeTypeDef); - BfTypeInstance* tupleType = NULL; + BfTupleType* tupleType = NULL; auto actualTupleType = mContext->mTupleTypePool.Get(); actualTupleType->Init(baseType->mTypeDef->mProject, baseType); + bool isUnspecialzied = false; for (int fieldIdx = 0; fieldIdx < (int)fieldTypes.size(); fieldIdx++) { String fieldName; @@ -5060,6 +5062,10 @@ BfTypeInstance* BfModule::CreateTupleType(const BfTypeVector& fieldTypes, const if (fieldName.empty()) fieldName = StrFormat("%d", fieldIdx); BfFieldDef* fieldDef = actualTupleType->AddField(fieldName); + + auto fieldType = fieldTypes[fieldIdx]; + if (fieldType->IsUnspecializedType()) + isUnspecialzied = true; } tupleType = actualTupleType; @@ -5072,6 +5078,14 @@ BfTypeInstance* BfModule::CreateTupleType(const BfTypeVector& fieldTypes, const fieldInstance->SetResolvedType(fieldTypes[fieldIdx]); fieldInstance->mOwner = tupleType; } + + tupleType->mIsUnspecializedType = false; + tupleType->mIsUnspecializedTypeVariation = false; + if (isUnspecialzied) + { + tupleType->mIsUnspecializedType = true; + tupleType->mIsUnspecializedTypeVariation = true; + } auto resolvedTupleType = ResolveType(tupleType); if (resolvedTupleType != tupleType) @@ -5859,12 +5873,6 @@ BfType* BfModule::ResolveGenericType(BfType* unspecializedType, BfTypeVector* ty actualTupleType->mGenericTypeInfo->mIsUnspecializedVariation = true; } - if (isUnspecialized) - { - actualTupleType->mGenericTypeInfo->mIsUnspecialized = true; - actualTupleType->mGenericTypeInfo->mIsUnspecializedVariation = true; - } - actualTupleType->mIsUnspecializedType = actualTupleType->mGenericTypeInfo->mIsUnspecialized; actualTupleType->mIsUnspecializedTypeVariation = actualTupleType->mGenericTypeInfo->mIsUnspecializedVariation; actualTupleType->Init(baseType->mTypeDef->mProject, baseType);