Description

A crash will result if a Blueprint class that's based on a native C++ class containing two or more nested, explicitly-instanced subobjects referenced by a fixed-size object array property are serialized during compile-on-load after having saved the Blueprint asset in a previous editor session.

Example from attached project:

UMyObject

+-- UMyDSO (instanced subobject)

+-- UMyNestedSubobject[2] (fixed-size array of nested instanced subobjects)

Note: This does not occur if the fixed-size subobject array exists just below the root-level object, i.e. at the 'UMyDSO' level above.

Steps to Reproduce
  1. Load the attached project (4.25).
  2. Attempt to load the "NewBlueprint" asset.
  3. A crash will result:
Assertion failed: !HasAnyFlags(RF_NeedLoad|RF_NeedPostLoad)
Detaching from existing linker for ../../../../../local/Projects/MyDSOTest/Content/NewBlueprint.uasset while object MyNestedSOClass /Game/NewBlueprint.Default__NewBlueprint_C:MyDSO.MyNestedSOClass_0 needs loaded
Callstack

> UE4Editor-CoreUObject-Win64-Debug.dll!UObject::SetLinker(FLinkerLoad * LinkerLoad, int LinkerIndex, bool bShouldDetachExisting) Line 111 C++
UE4Editor-CoreUObject-Win64-Debug.dll!FLinkerLoad::PRIVATE_PatchNewObjectIntoExport(UObject * OldObject, UObject * NewObject) Line 562 C++
UE4Editor-UnrealEd-Win64-Debug.dll!`FBlueprintEditorUtils::PatchCDOSubobjectsIntoExport'::`5'::PatchCDOSubobjectsIntoExport_Impl::PatchSubObjects(UObject * OldObj, UObject * NewObj) Line 1699 C++
UE4Editor-UnrealEd-Win64-Debug.dll!FBlueprintEditorUtils::PatchCDOSubobjectsIntoExport(UObject * PreviousCDO, UObject * NewCDO) Line 1709 C++
UE4Editor-UnrealEd-Win64-Debug.dll!FBlueprintEditorUtils::PatchNewCDOIntoLinker(UObject * CDO, FLinkerLoad * Linker, int ExportIndex, FUObjectSerializeContext * InLoadContext) Line 764 C++
UE4Editor-Kismet-Win64-Debug.dll!FBlueprintCompilationManagerImpl::ReinstanceBatch(TArray<FReinstancingJob,TSizedDefaultAllocator<32>> & Reinstancers, TMap<UClass *,UClass *,FDefaultSetAllocator,TDefaultMapHashableKeyFuncs<UClass *,UClass *,0>> & InOutOldToNewClassMap, FUObjectSerializeContext * InLoadContext) Line 2045 C++
UE4Editor-Kismet-Win64-Debug.dll!FBlueprintCompilationManagerImpl::FlushCompilationQueueImpl(bool bSuppressBroadcastCompiled, TArray<UBlueprint *,TSizedDefaultAllocator<32>> * BlueprintsCompiled, TArray<UBlueprint *,TSizedDefaultAllocator<32>> * BlueprintsCompiledOrSkeletonCompiled, FUObjectSerializeContext * InLoadContext) Line 1362 C++
UE4Editor-Kismet-Win64-Debug.dll!FBlueprintCompilationManager::FlushCompilationQueue(FUObjectSerializeContext * InLoadContext) Line 3020 C++
UE4Editor-Engine-Win64-Debug.dll!UBlueprintGeneratedClass::ConditionalRecompileClass(FUObjectSerializeContext * InLoadContext) Line 263 C++
UE4Editor-CoreUObject-Win64-Debug.dll!FScopedClassDependencyGather::~FScopedClassDependencyGather() Line 442 C++
UE4Editor-CoreUObject-Win64-Debug.dll!FLinkerLoad::CreateExport(int Index) Line 4578 C++
UE4Editor-CoreUObject-Win64-Debug.dll!FLinkerLoad::IndexToObject(FPackageIndex Index) Line 4811 C++
UE4Editor-CoreUObject-Win64-Debug.dll!FLinkerLoad::CreateExport(int Index) Line 4185 C++
UE4Editor-CoreUObject-Win64-Debug.dll!FLinkerLoad::CreateExportAndPreload(int ExportIndex, bool bForcePreload) Line 3233 C++
UE4Editor-CoreUObject-Win64-Debug.dll!FLinkerLoad::LoadAllObjects(bool bForcePreload) Line 3397 C++
UE4Editor-CoreUObject-Win64-Debug.dll!LoadPackageInternal(UPackage * InOuter, const wchar_t * InLongPackageNameOrFilename, unsigned int LoadFlags, FLinkerLoad * ImportLinker, FArchive * InReaderOverride, FUObjectSerializeContext * InLoadContext) Line 1312 C++
UE4Editor-CoreUObject-Win64-Debug.dll!LoadPackage(UPackage * InOuter, const wchar_t * InLongPackageName, unsigned int LoadFlags, FArchive * InReaderOverride, FUObjectSerializeContext * InLoadContext) Line 1427 C++
UE4Editor-CoreUObject-Win64-Debug.dll!ResolveName(UObject * & InPackage, FString & InOutName, bool Create, bool Throw, unsigned int LoadFlags, FUObjectSerializeContext * InLoadContext) Line 767 C++
UE4Editor-CoreUObject-Win64-Debug.dll!StaticLoadObjectInternal(UClass * ObjectClass, UObject * InOuter, const wchar_t * InName, const wchar_t * Filename, unsigned int LoadFlags, UPackageMap * Sandbox, bool bAllowObjectReconciliation, FUObjectSerializeContext * InSerializeContext) Line 829 C++
UE4Editor-CoreUObject-Win64-Debug.dll!StaticLoadObject(UClass * ObjectClass, UObject * InOuter, const wchar_t * InName, const wchar_t * Filename, unsigned int LoadFlags, UPackageMap * Sandbox, bool bAllowObjectReconciliation, FUObjectSerializeContext * InSerializeContext) Line 904 C++
UE4Editor-ContentBrowser-Win64-Debug.dll!FAssetData::GetAsset() Line 323 C++
UE4Editor-ContentBrowser-Win64-Debug.dll!SContentBrowser::OnAssetsActivated(const TArray<FAssetData,TSizedDefaultAllocator<32>> & ActivatedAssets, EAssetTypeActivationMethod::Type ActivationMethod) Line 2280 C++
UE4Editor-ContentBrowser-Win64-Debug.dll!TBaseSPMethodDelegateInstance<0,SContentBrowser,0,TTypeWrapper<void> __cdecl(TArray<FAssetData,TSizedDefaultAllocator<32>> const &,enum EAssetTypeActivationMethod::Type)>::Execute(const TArray<FAssetData,TSizedDefaultAllocator<32>> & <Params_0>, EAssetTypeActivationMethod::Type <Params_1>) Line 298 C++
UE4Editor-ContentBrowser-Win64-Debug.dll!TBaseSPMethodDelegateInstance<0,SContentBrowser,0,void __cdecl(TArray<FAssetData,TSizedDefaultAllocator<32>> const &,enum EAssetTypeActivationMethod::Type)>::ExecuteIfSafe(const TArray<FAssetData,TSizedDefaultAllocator<32>> & <Params_0>, EAssetTypeActivationMethod::Type <Params_1>) Line 376 C++
UE4Editor-ContentBrowser-Win64-Debug.dll!TBaseDelegate<void,TArray<FAssetData,TSizedDefaultAllocator<32>> const &,enum EAssetTypeActivationMethod::Type>::ExecuteIfBound(const TArray<FAssetData,TSizedDefaultAllocator<32>> & <Params_0>, EAssetTypeActivationMethod::Type <Params_1>) Line 673 C++
UE4Editor-ContentBrowser-Win64-Debug.dll!SAssetView::OnListMouseButtonDoubleClick(TSharedPtr<FAssetViewItem,0> AssetItem) Line 4409 C++
UE4Editor-ContentBrowser-Win64-Debug.dll!TMemberFunctionCaller<SAssetView,void (__cdecl SAssetView::*)(TSharedPtr<FAssetViewItem,0>)>::operator()<TSharedPtr<FAssetViewItem,0> &>(TSharedPtr<FAssetViewItem,0> & <Args_0>) Line 157 C++
UE4Editor-ContentBrowser-Win64-Debug.dll!TBaseSPMethodDelegateInstance<0,SAssetView,0,TTypeWrapper<void> __cdecl(TSharedPtr<FAssetViewItem,0>)>::Execute(TSharedPtr<FAssetViewItem,0> <Params_0>) Line 298 C++
UE4Editor-ContentBrowser-Win64-Debug.dll!TBaseSPMethodDelegateInstance<0,SAssetView,0,void __cdecl(TSharedPtr<FAssetViewItem,0>)>::ExecuteIfSafe(TSharedPtr<FAssetViewItem,0> <Params_0>) Line 376 C++
UE4Editor-ContentBrowser-Win64-Debug.dll!TBaseDelegate<void,TSharedPtr<FAssetViewItem,0>>::ExecuteIfBound(TSharedPtr<FAssetViewItem,0> <Params_0>) Line 673 C++
UE4Editor-ContentBrowser-Win64-Debug.dll!SListView<TSharedPtr<FAssetViewItem,0>>::Private_OnItemDoubleClicked(TSharedPtr<FAssetViewItem,0> TheItem) Line 932 C++
UE4Editor-ContentBrowser-Win64-Debug.dll!STableRow<TSharedPtr<FAssetViewItem,0>>::OnMouseButtonDoubleClick(const FGeometry & InMyGeometry, const FPointerEvent & InMouseEvent) Line 336 C++
UE4Editor-Slate-Win64-Debug.dll!FSlateApplication::RoutePointerDoubleClickEvent::__l2::<lambda>(const FArrangedWidget & TargetWidget, const FPointerEvent & Event) Line 5128 C++
UE4Editor-Slate-Win64-Debug.dll!FEventRouter::Route<FReply,FEventRouter::FBubblePolicy,FPointerEvent,FReply <lambda>(const FArrangedWidget &, const FPointerEvent &)>(FSlateApplication * ThisApplication, FEventRouter::FBubblePolicy RoutingPolicy, FPointerEvent EventCopy, const FSlateApplication::RoutePointerDoubleClickEvent::__l2::FReply <lambda>(const FArrangedWidget &, const FPointerEvent &) & Lambda) Line 372 C++
UE4Editor-Slate-Win64-Debug.dll!FSlateApplication::RoutePointerDoubleClickEvent(const FWidgetPath & WidgetsUnderPointer, const FPointerEvent & PointerEvent) Line 5126 C++
UE4Editor-Slate-Win64-Debug.dll!FSlateApplication::ProcessMouseButtonDoubleClickEvent(const TSharedPtr<FGenericWindow,0> & PlatformWindow, const FPointerEvent & InMouseEvent) Line 5113 C++
UE4Editor-Slate-Win64-Debug.dll!FSlateApplication::OnMouseDoubleClick(const TSharedPtr<FGenericWindow,0> & PlatformWindow, const EMouseButtons::Type Button, const FVector2D CursorPos) Line 5079 C++
UE4Editor-ApplicationCore-Win64-Debug.dll!FWindowsApplication::ProcessDeferredMessage(const FDeferredWindowsMessage & DeferredMessage) Line 2137 C++
UE4Editor-ApplicationCore-Win64-Debug.dll!FWindowsApplication::DeferMessage(TSharedPtr<FWindowsWindow,0> & NativeWindow, HWND__ * InHWnd, unsigned int InMessage, unsigned __int64 InWParam, __int64 InLParam, int MouseX, int MouseY, unsigned int RawInputFlags) Line 2585 C++
UE4Editor-ApplicationCore-Win64-Debug.dll!FWindowsApplication::ProcessMessage(HWND__ * hwnd, unsigned int msg, unsigned __int64 wParam, __int64 lParam) Line 1022 C++
UE4Editor-ApplicationCore-Win64-Debug.dll!FWindowsApplication::AppWndProc(HWND__ * hwnd, unsigned int msg, unsigned __int64 wParam, __int64 lParam) Line 851 C++
[External Code]
UE4Editor-ApplicationCore-Win64-Debug.dll!WinPumpMessages() Line 109 C++
UE4Editor-ApplicationCore-Win64-Debug.dll!FWindowsPlatformApplicationMisc::PumpMessages(bool bFromMainLoop) Line 133 C++
UE4Editor-Win64-Debug.exe!FEngineLoop::Tick() Line 4762 C++
UE4Editor-Win64-Debug.exe!EngineTick() Line 63 C++
UE4Editor-Win64-Debug.exe!GuardedMain(const wchar_t * CmdLine) Line 172 C++
UE4Editor-Win64-Debug.exe!WinMain(HINSTANCE__ * hInInstance, HINSTANCE__ * hPrevInstance, char * __formal, int nCmdShow) Line 257 C++
[External Code]

Have Comments or More Details?

There's no existing public thread on this issue, so head over to Questions & Answers just mention UE-106792 in the post.

0
Login to Vote

Fixed
Affects Versions4.254.26
Target Fix4.26.1
Fix Commit15145909
Release Commit15145909
CreatedJan 20, 2021
ResolvedJan 20, 2021
UpdatedSep 6, 2021