diff --git a/lib/SILOptimizer/Mandatory/MoveOnlyWrappedTypeEliminator.cpp b/lib/SILOptimizer/Mandatory/MoveOnlyWrappedTypeEliminator.cpp index 0782d4f8592a3..92b594f1bcf63 100644 --- a/lib/SILOptimizer/Mandatory/MoveOnlyWrappedTypeEliminator.cpp +++ b/lib/SILOptimizer/Mandatory/MoveOnlyWrappedTypeEliminator.cpp @@ -279,6 +279,18 @@ struct SILMoveOnlyWrappedTypeEliminator { } // namespace +/// Returns true if this is a moveonlywrapped type whose underlying type is a +/// trivial type /or/ if this is a boxed type of that sort. +static bool isMoveOnlyWrappedTrivial(SILValue value) { + auto *fn = value->getFunction(); + SILType type = value->getType(); + if (type.removingMoveOnlyWrapper().isTrivial(fn)) + return true; + if (type.isBoxedMoveOnlyWrappedType(fn)) + return type.getSILBoxFieldType(fn).removingMoveOnlyWrapper().isTrivial(fn); + return false; +} + bool SILMoveOnlyWrappedTypeEliminator::process() { bool madeChange = true; @@ -314,7 +326,7 @@ bool SILMoveOnlyWrappedTypeEliminator::process() { continue; if (trivialOnly && - !v->getType().removingMoveOnlyWrapper().isTrivial(*fn)) + !isMoveOnlyWrappedTrivial(v)) continue; v->unsafelyEliminateMoveOnlyWrapper(fn); diff --git a/test/SILOptimizer/noimplicitcopy_borrowing_parameters.swift b/test/SILOptimizer/noimplicitcopy_borrowing_parameters.swift index f283399593d59..712f620f162fb 100644 --- a/test/SILOptimizer/noimplicitcopy_borrowing_parameters.swift +++ b/test/SILOptimizer/noimplicitcopy_borrowing_parameters.swift @@ -1,4 +1,4 @@ -// RUN: %target-swift-frontend -emit-sil %s -verify +// RUN: %target-swift-frontend -emit-sil %s -verify -sil-verify-all //////////////////////// // MARK: Declarations // diff --git a/test/SILOptimizer/noimplicitcopy_consuming_parameters.swift b/test/SILOptimizer/noimplicitcopy_consuming_parameters.swift index 6668032bdae9c..e9a3f21e340db 100644 --- a/test/SILOptimizer/noimplicitcopy_consuming_parameters.swift +++ b/test/SILOptimizer/noimplicitcopy_consuming_parameters.swift @@ -1,4 +1,4 @@ -// RUN: %target-swift-frontend -emit-sil %s -verify +// RUN: %target-swift-frontend -emit-sil %s -verify -sil-verify-all //////////////////////// // MARK: Declarations //