Developer Notes

This issue has been closed as 'Won't Fix' due to an extended period of time without updates. If this issue is important to you please let us know by posting on the AnswerHub or UDN, and Epic will re-open the ticket for further review.

Description

When the return value of a C++ function is changed without preforming a hot reload, instances of the function node used inside a blueprint function will have their Return Value pin updated to the correct type however the pin connection will remain even if it no longer matches what it is being wired into.

Licensee mentioned a crash after this issue occurred. Internal tests did not receive the same crash.

Steps to Reproduce
  1. Open UE4 Editor
  2. Add code to project based on Actor (MyActor)
  3. Add the following to MyActor.h
    UFUNCTION(BlueprintCallable, Category = Test)
    	float GetANum() const { return 3; };
    
  4. Compile
  5. In the editor, create a blueprint based on MyActor (MyActorBP)
  6. Add function to MyActorBP
  7. Add call to GetANum() node and promote return value to variable
  8. Close the editor
  9. In Visual Studio, change float to int32 (from step 3 above)
  10. Compile
  11. Reopen the editor / blueprint

Result:
GetANum is still wired to the set variable node, however the types no longer match.

Expected:
Nodes warn when the types no longer match or blueprint is unable to compile due to mismatch.

Callstack
UE4Editor-Engine.dll!UKismetSystemLibrary::IsValid(const UObject * Object) Line 36	C++
  	UE4Editor-Engine.dll!UKismetSystemLibrary::execIsValid(FFrame & Stack, void * const Z_Param__Result) Line 62	C++
 >	UE4Editor-CoreUObject.dll!UFunction::Invoke(UObject * Obj, FFrame & Stack, void * const Z_Param__Result) Line 4387	C++
  	UE4Editor-CoreUObject.dll!UObject::CallFunction(FFrame & Stack, void * const Z_Param__Result, UFunction * Function) Line 697	C++
  	UE4Editor-CoreUObject.dll!UObject::ProcessContextOpcode(FFrame & Stack, void * const Z_Param__Result, bool bCanFailSilently) Line 2129	C++
  	UE4Editor-CoreUObject.dll!UObject::execLetBool(FFrame & Stack, void * const Z_Param__Result) Line 2044	C++
  	UE4Editor-CoreUObject.dll!UObject::ProcessInternal(FFrame & Stack, void * const Z_Param__Result) Line 922	C++
  	UE4Editor-CoreUObject.dll!UObject::CallFunction(FFrame & Stack, void * const Z_Param__Result, UFunction * Function) Line 821	C++
  	UE4Editor-CoreUObject.dll!UObject::ProcessInternal(FFrame & Stack, void * const Z_Param__Result) Line 922	C++
  	UE4Editor-CoreUObject.dll!UObject::CallFunction(FFrame & Stack, void * const Z_Param__Result, UFunction * Function) Line 821	C++
  	UE4Editor-CoreUObject.dll!UObject::ProcessInternal(FFrame & Stack, void * const Z_Param__Result) Line 922	C++
  	UE4Editor-CoreUObject.dll!UObject::CallFunction(FFrame & Stack, void * const Z_Param__Result, UFunction * Function) Line 821	C++
  	UE4Editor-CoreUObject.dll!UObject::ProcessInternal(FFrame & Stack, void * const Z_Param__Result) Line 922	C++
  	UE4Editor-CoreUObject.dll!UObject::CallFunction(FFrame & Stack, void * const Z_Param__Result, UFunction * Function) Line 821	C++
  	UE4Editor-CoreUObject.dll!UObject::ProcessInternal(FFrame & Stack, void * const Z_Param__Result) Line 922	C++
  	UE4Editor-CoreUObject.dll!UObject::CallFunction(FFrame & Stack, void * const Z_Param__Result, UFunction * Function) Line 821	C++
  	UE4Editor-CoreUObject.dll!UObject::ProcessInternal(FFrame & Stack, void * const Z_Param__Result) Line 922	C++
  	UE4Editor-CoreUObject.dll!UObject::CallFunction(FFrame & Stack, void * const Z_Param__Result, UFunction * Function) Line 821	C++
  	UE4Editor-CoreUObject.dll!UObject::ProcessContextOpcode(FFrame & Stack, void * const Z_Param__Result, bool bCanFailSilently) Line 2129	C++
  	UE4Editor-CoreUObject.dll!UObject::ProcessInternal(FFrame & Stack, void * const Z_Param__Result) Line 922	C++
  	UE4Editor-CoreUObject.dll!UObject::CallFunction(FFrame & Stack, void * const Z_Param__Result, UFunction * Function) Line 821	C++
  	UE4Editor-CoreUObject.dll!UObject::ProcessInternal(FFrame & Stack, void * const Z_Param__Result) Line 922	C++
  	UE4Editor-CoreUObject.dll!UObject::CallFunction(FFrame & Stack, void * const Z_Param__Result, UFunction * Function) Line 821	C++
  	UE4Editor-CoreUObject.dll!UObject::ProcessInternal(FFrame & Stack, void * const Z_Param__Result) Line 922	C++
  	UE4Editor-CoreUObject.dll!UFunction::Invoke(UObject * Obj, FFrame & Stack, void * const Z_Param__Result) Line 4387	C++
  	UE4Editor-CoreUObject.dll!UObject::ProcessEvent(UFunction * Function, void * Parms) Line 1305	C++
  	UE4Editor-Engine.dll!AActor::ProcessEvent(UFunction * Function, void * Parameters) Line 652	C++
  	UE4Editor-Engine.dll!AActor::ReceiveActorEndOverlap(AActor * OtherActor) Line 2713	C++
  	UE4Editor-Engine.dll!UPrimitiveComponent::EndComponentOverlap(const FOverlapInfo & OtherOverlap, bool bDoNotifies, bool bSkipNotifySelf) Line 2200	C++
  	UE4Editor-Engine.dll!UPrimitiveComponent::UpdateOverlaps(const TArray<FOverlapInfo,FDefaultAllocator> * NewPendingOverlaps, bool bDoNotifies, const TArray<FOverlapInfo,FDefaultAllocator> * OverlapsAtEndLocation) Line 2553	C++
  	UE4Editor-Engine.dll!USceneComponent::EndScopedMovementUpdate(FScopedMovementUpdate & CompletedScope) Line 601	C++
  	UE4Editor-Engine.dll!FScopedMovementUpdate::~FScopedMovementUpdate() Line 2930	C++
  	UE4Editor-Engine.dll!UCharacterMovementComponent::PerformMovement(float DeltaSeconds) Line 2050	C++

Have Comments or More Details?

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

0
Login to Vote

Won't Fix
ComponentUE - Gameplay - Blueprint
Affects Versions4.13.24.14
CreatedOct 31, 2016
ResolvedMar 26, 2018
UpdatedMar 26, 2018
View Jira Issue