Unreal Engine 5.5以降でAndroid向けビルドで発生するClangの不具合について

Unreal Engine 5.5以降でAndroid向けにビルドを実行した際、例えば、次のようなエラーが出ました。（一部抜粋）
```
Program arguments: /Users/UserF/Library/Android/sdk/ndk/25.1.8937393/toolchains/llvm/prebuilt/darwin-x86_64/bin/clang++ "@/Users/UserF/Documents/Unreal Projects/MyProject/Plugins/MyPlugIn/Intermediate/Build/Android/a/UnrealGame/Development/MyPlugIn/FooSubsys.cpp.o.rsp"
[1900.01.01-00.00.00:000][741]UATHelper: Packaging (Android (ASTC)): 1.	/Users/UserF/Documents/Unreal Projects/MyProject/Plugins/MyPlugIn/Source/MyPlugIn/Private/FooSubsys.cpp:13:53: current parser token ';'
[1900.01.01-00.00.00:000][741]UATHelper: Packaging (Android (ASTC)): 2.	/Users/UserF/Documents/Unreal Projects/MyProject/Plugins/MyPlugIn/Source/MyPlugIn/Private/FooSubsys.cpp:9:79: parsing function body 'UFooSubsys::Initialize'
[1900.01.01-00.00.00:000][741]UATHelper: Packaging (Android (ASTC)): 3.	/Users/UserF/Documents/Unreal Projects/MyProject/Plugins/MyPlugIn/Source/MyPlugIn/Private/FooSubsys.cpp:11:79: in compound statement ('{}')
```

ソースコードは、次のようなものです。
```C++
#pragma once

#include "CoreMinimal.h"
#include "Subsystems/WorldSubsystem.h"
#include “BarData.h”
#include "MyWorldSettings.h"
#include "FooSubsys.generated.h"

/**
 * 
 */
UCLASS()
class FOOPIN_API UFooSubsys : public UWorldSubsystem
{
    GENERATED_BODY()

    public:
    UFooSubsys();
    ~ UFooSubsys();

    virtual void Initialize(FSubsystemCollectionBase& Collection);
    virtual void Deinitialize();
    UPROPERTY(EditAnywhere,BlueprintReadWrite)TObjectPtr<UBarData> BarData;
};
```
```C++
#include "FooSubsys.h"
UFooSubsys:: UFooSubsys(){
}
UFooSubsys::~ UFooSubsys(){
}
void UFooSubsys::Initialize(FSubsystemCollectionBase& Collection){
    if(UWorld* WorldOuter = Cast<UWorld>(GetOuter())){
        if (AMyWorldSettings* MyWorldSettings = Cast<AMyWorldSettings>(WorldOuter->GetWorldSettings()))
        {
            TSoftObjectPtr tmpRR = MyWorldSettings->BarData;
            BarData = tmpRR.Get();
            if(BarData == nullptr){
                BarData = tmpRR.LoadSynchronous();
            }
        }
    }
}
void UFooSubsys::Deinitialize(){
    
}
```
Unreal Engine 5.4までは、このようなエラーは出ませんでした。
また、開発PC向けのコンパイルやAndroid以外の他のプラットフォーム向けのビルドは正常に行われます。

エラーメッセージにはクラッシュレポートを送ってください（意訳）という文言が含まれており、この現象はおそらくClangのバグによるものと思われます。

このエラーは、関数内にTSoftObjectPtr型のローカル変数が宣言されると発生することがあるようです。
この現象は型をちゃんと指定することで回避できます。

```C++
#pragma once

#include "CoreMinimal.h"
#include "Subsystems/WorldSubsystem.h"
#include “BarData.h”
#include "MyWorldSettings.h"
#include "FooSubsys.generated.h"

/**
 * 
 */
UCLASS()
class FOOPIN_API UFooSubsys : public UWorldSubsystem
{
    GENERATED_BODY()

    public:
    UFooSubsys();
    ~ UFooSubsys();
    virtual void Initialize(FSubsystemCollectionBase& Collection);
    virtual void Deinitialize();
    UPROPERTY(EditAnywhere,BlueprintReadWrite)TObjectPtr<UBarData> BarData;
};
```
```C++
#include "FooSubsys.h"
UFooSubsys:: UFooSubsys(){
    
}
UFooSubsys::~ UFooSubsys(){
    
}
void UFooSubsys::Initialize(FSubsystemCollectionBase& Collection){
    if(UWorld* WorldOuter = Cast<UWorld>(GetOuter())){
        if (AMyWorldSettings* MyWorldSettings = Cast<AMyWorldSettings>(WorldOuter->GetWorldSettings()))
        {
            TSoftObjectPtr<UBarData> tmpRR = MyWorldSettings->BarData;
            BarData = tmpRR.Get();
            if(BarData == nullptr){
                BarData = tmpRR.LoadSynchronous();
            }
        }
    }
}
void UFooSubsys::Deinitialize(){
    
}
```

参考
https://github.com/llvm/llvm-project/issues/53598
　こちらのリンクの記事に、同じような現象を再現できるコードがあります。もしかすると、テンプレートを使用する際は注意する必要があるかもしれません。