mirror of
https://github.com/apple/swift.git
synced 2025-12-21 12:14:44 +01:00
Previously, bridging conversions were handled as a form of "explicit conversion" that was treated along the same path as normal conversions in matchTypes(). Historically, this made some sense---bridging was just another form of conversion---however, Swift now separates out bridging into a different kind of conversion that is available only via an explicit "as". This change accomplishes a few things: * Improves type inference around "as" coercions. We were incorrectly inferring type variables of the "x" in "x as T" in cases where a bridging conversion was expected, which cause some type inference failures (e.g., the SR-3319 regression). * Detangles checking for bridging conversions from other conversions, so it's easier to isolate when we're applying a bridging conversion. * Explicitly handle optionals when dealing with bridging conversions, addressing a number of problems with incorrect diagnostics, e.g., complains about "unrelated type" cast failures that would succeed at runtime. Addresses rdar://problem/29496775 / SR-3319 / SR-2365.
761 B
761 B