}
}
// now the type of lhs <= type of rhs
ValueCopy.Impl lhsImpl = CopyLhs.determineCopyImplementation(lhs, rhs, selectorExprs.length, !subset, ast); // will not be null, will be an upcast or a duplicate
if (!(lhsImpl instanceof ValueCopy.Duplicate) || lhs.isShared() || rhs.dependsOn(lhs)) {
try {
lhs = lhsImpl.copy(lhs);
} catch (SpecializationException e) {
assert (false) : "unreachable";
}