Skip to content

Conversation

@AnthonyLatsis
Copy link

Cherry-picks llvm#163117 so that we can address the deprecations that followed (e.g. llvm#164276) in the swift code base in advance.

Prior to this patch, `.Cases` and `.CasesLower` were **not** variadic
functions and accepted a fixed number of arguments: up to 10 for the
former and up to 5 for the latter.
This is close to unfixable with variadic templates because of the
following constraints:
* There would be a variadic number of cases and the single value would
be at the very end. For a parameter pack approach to work, we would want
the value to be the head and the cases strings to follow, but rotating a
parameter pack is quite awkward and requires heavy template
metaprogramming.
* Even if we did rotate the parameter pack, the existing function
signature forces conversion of cases to `StringLiteral` and the value to
`T`. This is hard to achieve with variadic templates because we can't
specify that all cases must be of type `StringLiteral`, and doing the
conversion later won't work because of the attribute enable_if in
`StringLiteral`'s constructor that doesn't work on non-literal character
arrays.
* Refactoring all the existing code to put the value first is very
intrusive and bugprone when the value parameter is also a string
literal.

Instead, generalize `.Cases` and `.CasesLower` and make the code
manageable by taking an initializer list. The added benefit is that this
clearly delineates where case strings end and where the value begins,
which can be hard to tell when the value parameter is also a string
literal.

I plan to eventually deprecate the manually-enumerated overloads of
`.Cases.` and `.CasesLower`.

(cherry picked from commit 8642762)
@JDevlieghere
Copy link

@swift-ci test

@JDevlieghere JDevlieghere merged commit 6af3568 into swift/release/6.3 Dec 3, 2025
3 checks passed
@JDevlieghere JDevlieghere deleted the jepa-release branch December 3, 2025 21:24
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.

4 participants