mirror of
https://github.com/apple/swift.git
synced 2025-12-21 12:14:44 +01:00
Problem: We continue to uncover code that assumes either precise local variable lifetimes (to the end of the lexical scope) or extended temporary lifetimes (to the end of the statement). These bugs require heroic debugging to find the root cause. Because they only show up in Release builds, they often manifest just before the affected project “ships” under an impending deadline. We now have enough information from projects that have been tested with copy propagation that we can both understand common patterns and identify some specific APIs that may cause trouble. We know what API annotations the compiler will need for helpful warnings and can begin adding those annotations. Disabling copy propagation now is only a temporary deferral, we will still need to bring it back by default. However, by then we should have: - LLDB and runtime support for debugging deinitialized objects - A variant of lifetime sortening that can run in Debug builds to catch problems before code ships - Static compiler warnings for likely invalid lifetime assumptions - Source annotations that allow those warnings to protect programmers against existing dangerous APIs In the meantime... Projects can experiment with the behavior and gradually migrate. Copy propagation will automatically be enabled in -enable-ossa-modules mode. It is important to work toward a single performance target. Supporting full OSSA and improving ARC performance without copy propagation would be prohibitively complicated. rdar://76438920 (Temporarily disable -O copy propagation by default)
21 KiB
21 KiB