This issue was created for this UDN post: https://udn.unrealengine.com/questions/306933/hotreload-crashbad-behavior-when-addingremoving-pa.html
This repro is based off his last repro, cutting it down as much as I could to simplify it.
Having PreInternalvar not set to a value, will NOT crash.
Having the PreInternalvar declaration inside a #if or not doesn't matter- it will crash.
// Copyright 1998-2016 Epic Games, Inc. All Rights Reserved.
#pragma once
#include "GameFramework/Character.h"
#include "HRChar.generated.h"
USTRUCT(BlueprintType)
struct FFTestCompileIssue
{
GENERATED_USTRUCT_BODY()
// After opening the blueprint editor, change this to 1 and recompile.
#if 0
// fire rate in shots per second for how fast the bullets come out
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HotFiring")
float PreInternalVar = 5;
#endif
// what is launched when weapon fires
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HotFiring")
TSubclassOf<class AActor> InternalClass;
};
UCLASS()
class HR_API AHRChar : public ACharacter
{
GENERATED_BODY()
public:
// Sets default values for this character's properties
AHRChar();
// Called when the game starts or when spawned
virtual void BeginPlay() override;
// Called every frame
virtual void Tick( float DeltaSeconds ) override;
// Called to bind functionality to input
virtual void SetupPlayerInputComponent(class UInputComponent* InputComponent) override;
/** Saved translation offset of mesh. */
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "CrashTestProperties")
TSubclassOf<class AActor> ActorClassBeforeBadProperty = nullptr;
// Leave this one alone - if it is "#if 0"-d out then the other change won't crash it.
#if 1
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "CrashTestProperties")
bool bNewFlag = true;
#endif
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "CrashTestProperties")
FFTestCompileIssue HotReloadStruct;
// ADD THESE FIRST
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "CrashTestProperties")
TSubclassOf<class AActor> ActorClassAfterBadProperty = nullptr;
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "CrashTestProperties")
int PrimaryIntegerValueOneFifty;
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "CrashTestProperties")
int PrimaryIntegerValueTwoFifty;
};
Result:
Crash:
Access violation - code c0000005 (first/second chance not available)
UE4Editor_HotReload!`FHotReloadClassReinstancer::SerializeCDOProperties'::`2'::FCDOWriter::operator<<() [d:\james.fox_t6726_main\engine\source\developer\hotreload\private\hotreloadclassreinstancer.cpp:119] UE4Editor_CoreUObject!UObjectProperty::SerializeItem() [d:\james.fox_t6726_main\engine\source\runtime\coreuobject\private\uobject\propertyobject.cpp:53] UE4Editor_CoreUObject!FPropertyTag::SerializeTaggedProperty() [d:\james.fox_t6726_main\engine\source\runtime\coreuobject\private\uobject\propertytag.cpp:147] UE4Editor_CoreUObject!UStruct::SerializeTaggedProperties() [d:\james.fox_t6726_main\engine\source\runtime\coreuobject\private\uobject\class.cpp:1153] UE4Editor_CoreUObject!UScriptStruct::SerializeItem() [d:\james.fox_t6726_main\engine\source\runtime\coreuobject\private\uobject\class.cpp:2031] UE4Editor_CoreUObject!UStructProperty::SerializeItem() [d:\james.fox_t6726_main\engine\source\runtime\coreuobject\private\uobject\propertystruct.cpp:113] UE4Editor_CoreUObject!FPropertyTag::SerializeTaggedProperty() [d:\james.fox_t6726_main\engine\source\runtime\coreuobject\private\uobject\propertytag.cpp:147] UE4Editor_CoreUObject!UStruct::SerializeTaggedProperties() [d:\james.fox_t6726_main\engine\source\runtime\coreuobject\private\uobject\class.cpp:1153] UE4Editor_CoreUObject!UObject::SerializeScriptProperties() [d:\james.fox_t6726_main\engine\source\runtime\coreuobject\private\uobject\obj.cpp:1079] UE4Editor_HotReload!FHotReloadClassReinstancer::SerializeCDOProperties() [d:\james.fox_t6726_main\engine\source\developer\hotreload\private\hotreloadclassreinstancer.cpp:189] UE4Editor_HotReload!FHotReloadClassReinstancer::RecreateCDOAndSetupOldClassReinstancing() [d:\james.fox_t6726_main\engine\source\developer\hotreload\private\hotreloadclassreinstancer.cpp:249] UE4Editor_HotReload!FHotReloadClassReinstancer::FHotReloadClassReinstancer() [d:\james.fox_t6726_main\engine\source\developer\hotreload\private\hotreloadclassreinstancer.cpp:316] UE4Editor_HotReload!FHotReloadClassReinstancer::Create() [d:\james.fox_t6726_main\engine\source\developer\hotreload\private\hotreloadclassreinstancer.h:114] UE4Editor_HotReload!FHotReloadModule::ReinstanceClass() [d:\james.fox_t6726_main\engine\source\developer\hotreload\private\hotreload.cpp:1228] UE4Editor_HotReload!FHotReloadModule::ReinstanceClasses() [d:\james.fox_t6726_main\engine\source\developer\hotreload\private\hotreload.cpp:1219] UE4Editor_HotReload!TBaseRawMethodDelegateInstance<0,FHotReloadModule,void __cdecl(void)>::ExecuteIfSafe() [d:\james.fox_t6726_main\engine\source\runtime\core\public\delegates\delegateinstancesimpl.h:638] UE4Editor_CoreUObject!UClassReplaceHotReloadClasses() [d:\james.fox_t6726_main\engine\source\runtime\coreuobject\private\uobject\uobjectbase.cpp:688] UE4Editor_CoreUObject!ProcessNewlyLoadedUObjects() [d:\james.fox_t6726_main\engine\source\runtime\coreuobject\private\uobject\uobjectbase.cpp:835] UE4Editor_CoreUObject!TBaseStaticDelegateInstance<void __cdecl(void)>::ExecuteIfSafe() [d:\james.fox_t6726_main\engine\source\runtime\core\public\delegates\delegateinstancesimpl.h:1017] UE4Editor_Core!TBaseMulticastDelegate<void>::Broadcast() [d:\james.fox_t6726_main\engine\source\runtime\core\public\delegates\delegatesignatureimpl.inl:921] UE4Editor_Core!FModuleManager::LoadModuleWithFailureReason() [d:\james.fox_t6726_main\engine\source\runtime\core\private\modules\modulemanager.cpp:461] UE4Editor_Core!FModuleManager::LoadModule() [d:\james.fox_t6726_main\engine\source\runtime\core\private\modules\modulemanager.cpp:322] UE4Editor_HotReload!FHotReloadModule::DoHotReloadInternal() [d:\james.fox_t6726_main\engine\source\developer\hotreload\private\hotreload.cpp:828] UE4Editor_HotReload!UE4Function_Private::TFunctionRefCaller<<lambda_845f9b2944b03bbc30be1e1f4a8d7f4b>,void __cdecl(TMap<FString,FString,FDefaultSetAllocator,TDefaultMapKeyFuncs<FString,FString,0> > const & __ptr64,bool,enum ECompilationResult::Type)>::Call() [d:\james.fox_t6726_main\engine\source\runtime\core\public\templates\function.h:246] UE4Editor_HotReload!FHotReloadModule::CheckForFinishedModuleDLLCompile() [d:\james.fox_t6726_main\engine\source\developer\hotreload\private\hotreload.cpp:1877] UE4Editor_HotReload!FHotReloadModule::Tick() [d:\james.fox_t6726_main\engine\source\developer\hotreload\private\hotreload.cpp:566] UE4Editor_UnrealEd!UEditorEngine::Tick() [d:\james.fox_t6726_main\engine\source\editor\unrealed\private\editorengine.cpp:1021] UE4Editor_UnrealEd!UUnrealEdEngine::Tick() [d:\james.fox_t6726_main\engine\source\editor\unrealed\private\unrealedengine.cpp:371] UE4Editor!FEngineLoop::Tick() [d:\james.fox_t6726_main\engine\source\runtime\launch\private\launchengineloop.cpp:2842] UE4Editor!GuardedMain() [d:\james.fox_t6726_main\engine\source\runtime\launch\private\launch.cpp:156] UE4Editor!GuardedMainWrapper() [d:\james.fox_t6726_main\engine\source\runtime\launch\private\windows\launchwindows.cpp:126] UE4Editor!WinMain() [d:\james.fox_t6726_main\engine\source\runtime\launch\private\windows\launchwindows.cpp:202] UE4Editor!__scrt_common_main_seh() [f:\dd\vctools\crt\vcstartup\src\startup\exe_common.inl:255] kernel32 ntdll
There's no existing public thread on this issue, so head over to Questions & Answers just mention UE-35474 in the post.
| 2 |
| Component | UE - Foundation - Cpp Tools - Hot Reload |
|---|---|
| Affects Versions | 4.13 |
| Created | Sep 1, 2016 |
|---|---|
| Resolved | Aug 18, 2021 |
| Updated | Aug 18, 2021 |