diff --git a/SwiftCompilerSources/Sources/Optimizer/FunctionPasses/LifetimeDependenceDiagnostics.swift b/SwiftCompilerSources/Sources/Optimizer/FunctionPasses/LifetimeDependenceDiagnostics.swift index 9983ee125e933..6e78e373aa250 100644 --- a/SwiftCompilerSources/Sources/Optimizer/FunctionPasses/LifetimeDependenceDiagnostics.swift +++ b/SwiftCompilerSources/Sources/Optimizer/FunctionPasses/LifetimeDependenceDiagnostics.swift @@ -110,6 +110,20 @@ private func analyze(dependence: LifetimeDependence, _ context: FunctionPassCont } } + // Check for immortal dependence. + switch dependence.scope { + case .global: + log("Immortal global dependence.") + return true + case let .unknown(value): + if value.type.isVoid { + log("Immortal void dependence.") + return true + } + default: + break + } + // Compute this dependence scope. var range = dependence.computeRange(context) defer { range?.deinitialize() } @@ -200,6 +214,9 @@ private struct DiagnoseDependence { return .continueWalk } // Check for immortal lifetime. + // + // FIXME: remove this immortal check. It should be redundant with the earlier check that bypasses dependence + // diagnostics. switch dependence.scope { case .global: return .continueWalk diff --git a/test/SILOptimizer/lifetime_dependence/verify_diagnostics.swift b/test/SILOptimizer/lifetime_dependence/verify_diagnostics.swift index 659e7f4d66d3b..6976d33dc80fc 100644 --- a/test/SILOptimizer/lifetime_dependence/verify_diagnostics.swift +++ b/test/SILOptimizer/lifetime_dependence/verify_diagnostics.swift @@ -287,3 +287,13 @@ func testSpanMayThrow(buffer: inout [Int]) { let bufferSpan = buffer.mutableSpan try! mutableSpanMayThrow(bufferSpan) } + +// ============================================================================= +// inout +// ============================================================================= + +@available(Span 0.1, *) +func inoutToImmortal(_ s: inout RawSpan) { + let tmp = RawSpan(_unsafeBytes: UnsafeRawBufferPointer(start: nil, count: 0)) + s = _overrideLifetime(tmp, borrowing: ()) +}