[Bug] [UE4.22.3] FVector::Normalize() compiles incorrectly?

Hi!

I have the following code:



    FVector TestVector(
            0.f,
            100.f - FMath::RandRange(-10.f, 10.f),
            0.f
        );

        UE_LOG(Log, Error, L"TestVector: %.2f, %.2f, %.2f", TestVector.X, TestVector.Y, TestVector.Z);

        TestVector.Normalize();

        UE_LOG(Log, Error, L"TestVector: %.2f, %.2f, %.2f", TestVector.X, TestVector.Y, TestVector.Z);

        TestVector *= 10.f;

        UE_LOG(Log, Error, L"TestVector: %.2f, %.2f, %.2f", TestVector.X, TestVector.Y, TestVector.Z);


In DEBUG mode this outputs the following to the log:



    TestVector: 0.00, 109.68, 0.00
    TestVector: 0.00, 1.00, 0.00
    TestVector: 0.00, 10.00, 0.00


The last line TestVector: 0.00, 10.00, 0.00 is the expected result.
However, when I compile the exact same code in DEVELOPMENT mode the output to the log is:



    TestVector: 0.00, 104.32, 0.00
    TestVector: 0.00, 0.00, 0.00
    TestVector: 0.00, 0.00, 0.00


The result is incorrect, the normalization failed. If I replace TestVector.Normalize(); with *TestVector = TestVector.GetSafeNormal(); *the result become correct again, both in DEBUG and DEVELOPMENT mode.

I don’t really understand why this is happening, blaming the compiler is normally a mistake but this looks indeed very strange? Especially since the methods should be marked with FORCEINLINE.

Specs: Windows 10, Visual studio 16.3.5, UE 4.22.3 no plugins.

Any ideas what might cause this? my workaround for now is to ban usage of Normalize() and stick to only using GetSafeNormal(). Any help would be appreciated!

Also posted at Answer hub for those interested in following: https://answers.unrealengine.com/que…correctly.html

EDIT: I have the same problem with UE 4.23.1

Big thanks to Firefly74 that help me resolve the problem at answer hub!

Omg… I suffered from this problem almost 3hours… Now I’m free. Thank you for the post

The issue should now be resolved in version 16.4 according to Microsoft. Visual Studio Feedback