Skip to content

Conversation

@hamishknight
Copy link
Contributor

We ought to consider outright banning these conversions if the destination is a generic parameter type, but for now let's penalize them such that we don't end up with ambiguities if you're doing an implicit pointer conversion through an identity generic function.

rdar://161205293

@hamishknight hamishknight marked this pull request as ready for review October 15, 2025 22:32
We ought to consider outright banning these conversions if the
destination is a generic parameter type, but for now let's penalize
them such that we don't end up with ambiguities if you're doing an
implicit pointer conversion through an identity generic function.

rdar://161205293
@hamishknight
Copy link
Contributor Author

@swift-ci please test

@hamishknight
Copy link
Contributor Author

@swift-ci please test source compatibility

@hamishknight
Copy link
Contributor Author

@swift-ci please smoke test

@hamishknight hamishknight merged commit 8397a7a into swiftlang:main Oct 24, 2025
7 checks passed
@hamishknight hamishknight deleted the fixed-point branch October 24, 2025 14:56
grynspan added a commit to swiftlang/swift-testing that referenced this pull request Oct 29, 2025
grynspan added a commit to swiftlang/swift-testing that referenced this pull request Nov 3, 2025
This works around rdar://122011759 which appears to have been exacerbated by
swiftlang/swift#84907.
grynspan added a commit to swiftlang/swift-testing that referenced this pull request Nov 3, 2025
…#1389)

This works around rdar://122011759 which appears to have been
exacerbated by swiftlang/swift#84907.

For example:

```swift
let file = try #require(fmemopen(nil, 1, "wb+"))
```

The third parameter of `fmemopen()` is of type `const char *` (AKA
`UnsafePointer<CChar>`) and we're passing the string literal `"wb+"`
which is implicitly cast to a C string by the compiler. However,
overload resolution of the expansion function used by `#require()` is
now preferring an overload that uses variadic generics, and that
overload is impacted by a compiler issue (rdar://122011759) that causes
it to pass a garbage pointer as the temporary C string. Previously, the
type checker would pick an overload with a concrete, finite set of
generic arguments (`<T, Arg0, Arg1, Arg2, R>` instead of `<T, each U,
R>`.)

### Checklist:

- [x] Code and documentation should follow the style of the [Style
Guide](https://github.com/apple/swift-testing/blob/main/Documentation/StyleGuide.md).
- [x] If public symbols are renamed or modified, DocC references should
be updated.
grynspan added a commit to swiftlang/swift-testing that referenced this pull request Nov 7, 2025
…#1389)

This works around rdar://122011759 which appears to have been
exacerbated by swiftlang/swift#84907.

For example:

```swift
let file = try #require(fmemopen(nil, 1, "wb+"))
```

The third parameter of `fmemopen()` is of type `const char *` (AKA
`UnsafePointer<CChar>`) and we're passing the string literal `"wb+"`
which is implicitly cast to a C string by the compiler. However,
overload resolution of the expansion function used by `#require()` is
now preferring an overload that uses variadic generics, and that
overload is impacted by a compiler issue (rdar://122011759) that causes
it to pass a garbage pointer as the temporary C string. Previously, the
type checker would pick an overload with a concrete, finite set of
generic arguments (`<T, Arg0, Arg1, Arg2, R>` instead of `<T, each U,
R>`.)

### Checklist:

- [x] Code and documentation should follow the style of the [Style
Guide](https://github.com/apple/swift-testing/blob/main/Documentation/StyleGuide.md).
- [x] If public symbols are renamed or modified, DocC references should
be updated.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants