This happens when the 32-bit LatentUUID signed integer that we generate for the delay node starts with "-1" when converted to an FString (e.g. "-1824950080").

During compilation, we pack latent function call info into a single literal term, one of these fields is the "Linkage" and that is fixed up by the C++ back end by replacing "-1" with the target "address" to jump to upon completion. However it's currently doing a blanket "replace all occurrences of -1 with this value" in the fixup code and that can corrupt the UUID field.

The fixup code can be found in FBlueprintCompilerCppBackend::LatentFunctionInfoTermToText() in BlueprintCompilerCppBackend.cpp. The licensee has suggested a fix that should work.

Steps to Reproduce
  1. Create a new, blank BP-only project.
  2. Add a new Actor-based Blueprint class.
  3. In the event graph, wire a delay node to the BeginPlay event.
  4. Wire a PrintString node to the "Completed" output.
  5. Drag a new instance of the Blueprint into the current level and save (NewMap).
  6. PIE, and notice that the string prints out.
  7. In Project Settings, Maps & Modes, change the gameplay map to 'NewMap'.
  8. In Project Settings, Packaging, change the Blueprint Nativization Method to "Inclusive."
  9. Choose File->Package Project->Windows->Win64, choose a location and wait for packaging to finish.
  10. Run the nativized, packaged build. If the string prints out, delete and replace the Delay node in the event graph, re-wire it as in the steps above, save, and repeat steps to package a cooked build.
  11. Repeat until an occurrence of a cooked build in which the string does not print out. (May take several attempts.)

Have Comments or More Details?

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

Login to Vote

ComponentUE - Gameplay - Blueprint
Affects Versions4.
Target Fix4.24
Fix Commit10118520
Main Commit10118521
Release Commit10118520
CreatedJun 13, 2018
ResolvedNov 12, 2019
UpdatedJan 25, 2021