Yes, withExtendedLifetime is a generic API that guarantees the lifetime of any non-trivial value. i.e. if the tuple contains a reference, the lifetime of that reference will be extended.
That said, there is a theoretical bug in the optimizer that you will be much more likely to hit in practice if you pass a tuple to this API. I still think it’s extremely unlikely that the code will be miscompiled though, and I’m sure it will be fixed shortly ;) https://bugs.swift.org/browse/SR-6608: DeadCodeElimination removes fix_lifetime -Andy > On Dec 13, 2017, at 10:05 AM, Jordan Rose <jordan_r...@apple.com> wrote: > > Good question and good thought! I believe the answer is yes, this will work > as intended, but I'd like to get someone more versed in SIL than me to verify > that. Andy? > > Jordan > > >> On Dec 13, 2017, at 01:28, Jens Persson via swift-users >> <swift-users@swift.org> wrote: >> >> There are no restrictions on the type of the first argument to >> withExtendedLiftetime, even though it makes sense only for reference types. >> >> So both the below variants will compile, and my question is if the first one >> will work as expected (extending the lifetime of both a and b) or if the >> second variant must be used instead. >> >> 1: >> withExtendedLifetime((a, b)) { >> ... >> } >> >> 2: >> withExtendedLifetime(a) { >> withExtendedLifetime(b) { >> ... >> } >> } >> >> /Jens >> >> _______________________________________________ >> swift-users mailing list >> swift-users@swift.org >> https://lists.swift.org/mailman/listinfo/swift-users > _______________________________________________ swift-users mailing list swift-users@swift.org https://lists.swift.org/mailman/listinfo/swift-users