Skip to content

Mac ビルドエラー(unreachable) #21

Description

@zbdk

Mac環境にてビルドエラーが発生しています。
詳しくは下記文章をご確認ください。
別途お送りしているプルリクの影響で行数は変動している可能性があります。
ローカル環境ではBuild.csに CppCompileWarningSettings.UnreachableCodeWarningLevel = WarningLevel.Warning; を記述することでエラー回避できることを確認しています。
また、下記文章ではUE5.7以前では問題にならなかったと書かれていますが、UE5.7.4でも同等の現象が発生していることを確認しています。

UE5.8 Mac ビルドエラー報告: unreachable code (-Werror,-Wunreachable-code)

■ 概要
UE 5.8 の Mac ビルドで使用される Clang 21.x (Xcode 26) では、
-Wunreachable-code 系の警告が -Werror によりエラーに昇格されるようになった。
以下の3ファイルでビルドエラーが発生する。

■ 環境

  • Unreal Engine 5.8
  • Xcode 26.6 (Apple clang version 21.0.0, clang-2100.1.1.101)
  • macOS 26.5, arm64

================================================================================

【1】SsEffectElement.cpp
パス: Source/SpriteStudio6/Private/Data/SsEffectElement.cpp

エラー: -Werror,-Wunreachable-code-return / -Werror,-Wunreachable-code
該当箇所: L8-L27, L55-L59

原因:
__EnumToString_ 関数内で引数 n と比較すべきところを、enum定数を直接
if文の条件に使用している。enum定数が非ゼロの場合、最初のifで即returnし
後続コードが到達不能になる。

現在のコード:
    if(SsEffectFunctionType::Base) return "Base";
    if(SsEffectFunctionType::Basic) return "Basic";
    ...

修正案:
    if(n == SsEffectFunctionType::Base) return "Base";
    if(n == SsEffectFunctionType::Basic) return "Basic";
    ...

同様に SsVarianceValueRangeType の __EnumToString_ (L55-L59) も同じ問題。

================================================================================

【2】SsAttribute.cpp
パス: Source/SpriteStudio6/Private/Data/SsAttribute.cpp

エラー: -Werror,-Wunreachable-code-return
該当箇所: L431

原因:
StringToTriangle 関数で if/else の両方で return しているため、
関数末尾の return true; に到達しない。

現在のコード (L416-L432):
    bool StringToTriangle(const FString& str, FSsTriangle& tri)
    {
        ...
        if (str_list.Num() < 3)
        {
            return false;
        }
        else {
            tri.IdxPo1 = FCString::Atoi(*str_list[0]);
            tri.IdxPo2 = FCString::Atoi(*str_list[1]);
            tri.IdxPo3 = FCString::Atoi(*str_list[2]);

            return true;
        }
        return true;  // ← ここに到達しない
    }

修正案:
    関数末尾の return true; を削除する。

================================================================================

【3】SsPlayerComponent.cpp
パス: Source/SpriteStudio6/Private/Component/SsPlayerComponent.cpp

エラー: -Werror,-Wunreachable-code-break
該当箇所: L249, L254, L258, L330, L335, L339, L759, L766, L798

原因:
switch文の case 内で return の直後に break がある。
return で関数を抜けるため break に到達しない。

現在のコード例 (L249付近):
    case ERelativeTransformSpace::RTS_World:
        {
            return Trans * GetComponentTransform();
        } break;  // ← return後のbreakは到達不能

修正案:
    return の後の break を削除する。

    case ERelativeTransformSpace::RTS_World:
        {
            return Trans * GetComponentTransform();
        }

該当箇所一覧:
    - L249: RTS_World (GetSocketTransform 1箇所目)
    - L254: RTS_Actor
    - L258: RTS_Component
    - L330: RTS_World (GetSocketTransform 2箇所目)
    - L335: RTS_Actor
    - L339: RTS_Component
    - L759: ESsPlayerComponentRenderMode switch (CreateSceneProxy)
    - L766: ESsPlayerComponentRenderMode switch (CreateSceneProxy)
    - L798: ESsPlayerComponentRenderMode switch (CalcBounds)

================================================================================

■ 備考

  • Windows ビルド (MSVC) ではこれらは警告にならないため問題なくビルドできる。
  • UE 5.7 以前の Mac ビルドでも -Wunreachable-code が -Werror に含まれて
    いなかったため問題にならなかった。
  • UE 5.8 で Clang の警告設定が厳格化されたことによる影響。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions