swift
58d41914 - [ownership] Try harder to make sure we do not propagate ownership info when ownership is disabled.

Commit
5 years ago
[ownership] Try harder to make sure we do not propagate ownership info when ownership is disabled. Specifically, I made it so that assuming our instruction is inserted into a block already that we: 1. Return a constraint of {OwnershipKind::Any, UseLifetimeConstraint::NonLifetimeEnding}. 2. Return OwnershipKind::None for all values. Noticed above I said that if the instruction is already inserted into a block then we do this. The reason why is that if this is called before an instruction is inserted into a block, we can't get access to the SILFunction that has the information on whether or not we are in OSSA form. The only time this can happen is if one is using these APIs from within SILBuilder since SILBuilder is the only place where we allow this to happen. In SILBuilder, we already know whether or not our function is in ossa or not and already does different things as appropriate (namely in non-ossa does not call getOwnershipKind()). So we know that if these APIs are called in such a situation, we will only be calling it if we are in OSSA already. Given that, we just assume we are in OSSA if we do not have a function. To make sure that no mistakes are made as a result of that assumption, I put in a verifier check that all values when ownership is disabled return a OwnershipKind::None from getOwnershipKind(). The main upside to this is this means that we can write code for both OSSA/non-OSSA and write code for non-None ownership without needing to check if ownership is enabled.
Author
Committer
Parents
Loading