[4.6.1] Call to parent function in blueprint causes crash in standalone

I have been trying to upgrade from 4.5.1 to 4.6.1 and am blocked by a crash in running standalone. I have a base blueprint that has several Events that are intended to be overridden by child blueprints. These child blueprints are then supposed to call up to their parent (aka virtual functions). These functions are working fine in PIE, but when I play in a standalone instance, I crash on load. Call stack below. Basically, in UK2Node_CallFunction::CreateSelfPin, it tries to call FunctionClass->GetAuthoritativeClass. Inside UBlueprintGeneratedClass::GetAuthoritativeClass, it tries to access ClassGeneratedBy, which is NULL, and so it crashes. I noticed that FunctionClass is pointing to a decorated version of my class. It’s pointing to something called “TRASHCLASS_MCore2Interactive”. I’m assuming the TRASHCLASS is the issue and that it was the old class object that is pending delete in the process of calling FBlueprintEditorUtils::RegenerateBlueprintClass.

I’ve been trying to figure out why it’s failing and where TRASHCLASS is coming from, but it’s not going to well.

Everything worked fine in 4.5.1. Everything works fine in 4.6.1 PIE. Everything is terrible in 4.6.1 Standalone.

Additional data: this is with engine source, but I don’t have any changes that should affect this. I noticed this does not repro with a simple example like SwingNinja.

UE4Editor-Core-Win64-Debug.dll!StaticFailDebug(const wchar_t * Error, const char * File, int Line, const wchar_t * Description, bool bIsEnsure) Line 190	C++
UE4Editor-Core-Win64-Debug.dll!FMsg::Logf__VA(const char * File, int Line, const FName & Category, ELogVerbosity::Type Verbosity, const wchar_t * Fmt, ...) Line 523	C++
UE4Editor-CoreUObject-Win64-Debug.dll!CastLogError(const wchar_t * FromType, const wchar_t * ToType) Line 12	C++
UE4Editor-Engine-Win64-Debug.dll!CastChecked<UBlueprint,UObject>(UObject * Src, ECastCheckedType::Type CheckType) Line 160	C++
UE4Editor-Engine-Win64-Debug.dll!UBlueprintGeneratedClass::GetAuthoritativeClass() Line 73	C++
UE4Editor-BlueprintGraph-Win64-Debug.dll!UK2Node_CallFunction::CreateSelfPin(const UFunction * Function) Line 623	C++
UE4Editor-BlueprintGraph-Win64-Debug.dll!UK2Node_CallFunction::CreatePinsForFunctionCall(const UFunction * Function) Line 771	C++
UE4Editor-BlueprintGraph-Win64-Debug.dll!UK2Node_CallFunction::AllocateDefaultPins() Line 563	C++
UE4Editor-BlueprintGraph-Win64-Debug.dll!UK2Node_CallParentFunction::AllocateDefaultPins() Line 37	C++
UE4Editor-BlueprintGraph-Win64-Debug.dll!UK2Node::ReallocatePinsDuringReconstruction(TArray<UEdGraphPin *,FDefaultAllocator> & __formal) Line 272	C++
UE4Editor-BlueprintGraph-Win64-Debug.dll!UK2Node_CallFunction::ReallocatePinsDuringReconstruction(TArray<UEdGraphPin *,FDefaultAllocator> & OldPins) Line 603	C++
UE4Editor-BlueprintGraph-Win64-Debug.dll!UK2Node::ReconstructNode() Line 355	C++
UE4Editor-Engine-Win64-Debug.dll!UEdGraphSchema::ReconstructNode(UEdGraphNode & TargetNode, bool bIsBatchRequest) Line 528	C++
UE4Editor-BlueprintGraph-Win64-Debug.dll!UEdGraphSchema_K2::ReconstructNode(UEdGraphNode & TargetNode, bool bIsBatchRequest) Line 3424	C++
UE4Editor-UnrealEd-Win64-Debug.dll!FBlueprintEditorUtils::RefreshAllNodes(UBlueprint * Blueprint) Line 303	C++

UE4Editor-UnrealEd-Win64-Debug.dll!FBlueprintEditorUtils::RegenerateBlueprintClass(UBlueprint * Blueprint, UClass * ClassToRegenerate, UObject * PreviousCDO, TArray<UObject *,FDefaultAllocator> & ObjLoaded) Line 1132 C++
UE4Editor-Engine-Win64-Debug.dll!UBlueprint::RegenerateClass(UClass * ClassToRegenerate, UObject * PreviousCDO, TArray<UObject *,FDefaultAllocator> & ObjLoaded) Line 426 C++
UE4Editor-CoreUObject-Win64-Debug.dll!ULinkerLoad::RegenerateBlueprintClass(UClass * LoadClass, UObject * ExportObject) Line 123 C++
UE4Editor-CoreUObject-Win64-Debug.dll!ULinkerLoad::CreateExport(int Index) Line 3239 C++
UE4Editor-CoreUObject-Win64-Debug.dll!ULinkerLoad::IndexToObject(FPackageIndex Index) Line 3425 C++
UE4Editor-CoreUObject-Win64-Debug.dll!ULinkerLoad::operator<<(UObject * & Object) Line 3605 C++
UE4Editor-CoreUObject-Win64-Debug.dll!UClass::Serialize(FArchive & Ar) Line 3038 C++
UE4Editor-CoreUObject-Win64-Debug.dll!ULinkerLoad::Preload(UObject * Object) Line 2769 C++
UE4Editor-CoreUObject-Win64-Debug.dll!ULinkerLoad::CreateExport(int Index) Line 3283 C++
UE4Editor-CoreUObject-Win64-Debug.dll!ULinkerLoad::IndexToObject(FPackageIndex Index) Line 3425 C++
UE4Editor-CoreUObject-Win64-Debug.dll!ULinkerLoad::CreateExport(int Index) Line 3059 C++
UE4Editor-CoreUObject-Win64-Debug.dll!ULinkerLoad::CreateExportAndPreload(int ExportIndex, bool bForcePreload) Line 2441 C++
UE4Editor-CoreUObject-Win64-Debug.dll!ULinkerLoad::LoadAllObjects(bool bForcePreload) Line 2523 C++
UE4Editor-CoreUObject-Win64-Debug.dll!LoadPackageInternal(UPackage * InOuter, const wchar_t * InLongPackageName, unsigned int LoadFlags, ULinkerLoad * ImportLinker) Line 875 C++
UE4Editor-CoreUObject-Win64-Debug.dll!ULinkerLoad::VerifyImportInner(const int ImportIndex, FString & WarningSuffix) Line 2134 C++
UE4Editor-CoreUObject-Win64-Debug.dll!ULinkerLoad::VerifyImport(int ImportIndex) Line 1915 C++
UE4Editor-CoreUObject-Win64-Debug.dll!ULinkerLoad::VerifyImportInner(const int ImportIndex, FString & WarningSuffix) Line 2182 C++
UE4Editor-CoreUObject-Win64-Debug.dll!ULinkerLoad::VerifyImport(int ImportIndex) Line 1915 C++
UE4Editor-CoreUObject-Win64-Debug.dll!ULinkerLoad::CreateExport(int Index) Line 2924 C++
UE4Editor-CoreUObject-Win64-Debug.dll!ULinkerLoad::IndexToObject(FPackageIndex Index) Line 3425 C++
UE4Editor-CoreUObject-Win64-Debug.dll!ULinkerLoad::CreateExport(int Index) Line 3059 C++
UE4Editor-CoreUObject-Win64-Debug.dll!ULinkerLoad::CreateExportAndPreload(int ExportIndex, bool bForcePreload) Line 2441 C++
UE4Editor-CoreUObject-Win64-Debug.dll!ULinkerLoad::LoadAllObjects(bool bForcePreload) Line 2523 C++
UE4Editor-CoreUObject-Win64-Debug.dll!LoadPackageInternal(UPackage * InOuter, const wchar_t * InLongPackageName, unsigned int LoadFlags, ULinkerLoad * ImportLinker) Line 875 C++
UE4Editor-CoreUObject-Win64-Debug.dll!LoadPackage(UPackage * InOuter, const wchar_t * InLongPackageName, unsigned int LoadFlags) Line 956 C++
UE4Editor-Engine-Win64-Debug.dll!UEngine::LoadMap(FWorldContext & WorldContext, FURL URL, UPendingNetGame * Pending, FString & Error) Line 8810 C++
UE4Editor-Engine-Win64-Debug.dll!UEngine::Browse(FWorldContext & WorldContext, FURL URL, FString & Error) Line 8100 C++
UE4Editor-Engine-Win64-Debug.dll!UGameInstance::StartGameInstance() Line 296 C++
UE4Editor-Engine-Win64-Debug.dll!UGameEngine::Init(IEngineLoop * InEngineLoop) Line 480 C++
UE4Editor-Win64-Debug.exe!FEngineLoop::Init() Line 1919 C++
UE4Editor-Win64-Debug.exe!EngineInit() Line 41 C++
UE4Editor-Win64-Debug.exe!GuardedMain(const wchar_t * CmdLine, HINSTANCE__ * hInInstance, HINSTANCE__ * hPrevInstance, int nCmdShow) Line 126 C++
UE4Editor-Win64-Debug.exe!WinMain(HINSTANCE__ * hInInstance, HINSTANCE__ * hPrevInstance, char * __formal, int nCmdShow) Line 191 C++

After getting nowhere trying to debug this thing, I started looking into the changes between 4.5.1 and 4.6.1 (I skipped 4.6.0 due to a different bug breaking my project). I found that this following change is the cause of the crashing: d82aa27dba3abfe4474fdc03db62a034961732ad. I rolled back just this change and now I can run standalone.

Would someone at Epic be able to look at this change and does it make sense that it would cause overridden blueprint functions that call up to their parents to crash?

I’m hoping it’s going to be safe for me to run without this change. I’m not crashing, but am I causing something else to not function and just don’t know it yet? I can’t really deploy 4.6.1 to my team since if it causes some horrible issue that I find out later, it’s not possible to revert back to 4.5.1. Just someone from Epic letting me know it’s safe to run without this change for now would be a big help.

Hi CombatJack!

I’m investigating an issue that may be related to your crash - you don’t happen to have an example project that you could upload to Epic, do you?

I had tried to see if SwingNinja would show the issue, but it doesn’t. So, unfortunately, I don’t have a simple example to share.

Hey, just wanted to say I have this issue as well.
Tried to reproduce it in a new simple project as well, but so far no success…