mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
[AutoDiff upstream] Add flag-gated AdditiveArithmetic derivation. (#30628)
Add `AdditiveArithmetic` derived conformances for structs, gated by the
`-enable-experimential-additive-arithmetic-derivation` flag.
Structs whose stored properties all conform to `AdditiveArithmetic` can derive
`AdditiveArithmetic`:
- `static var zero: Self`
- `static func +(lhs: Self, rhs: Self) -> Self`
- `static func -(lhs: Self, rhs: Self) -> Self`
- An "effective memberwise initializer":
- Either a synthesized memberwise initializer or a user-defined initializer
with the same type.
Effective memberwise initializers are used only by derived conformances for
`Self`-returning protocol requirements like `AdditiveArithmetic.+`, which
require memberwise initialization.
Resolves TF-844.
Unblocks TF-845: upstream `Differentiable` derived conformances.
This commit is contained in:
@@ -442,8 +442,15 @@ static bool ParseLangArgs(LangOptions &Opts, ArgList &Args,
|
||||
if (Args.hasArg(OPT_fine_grained_dependency_include_intrafile))
|
||||
Opts.FineGrainedDependenciesIncludeIntrafileOnes = true;
|
||||
|
||||
if (Args.hasArg(OPT_enable_experimental_differentiable_programming))
|
||||
if (Args.hasArg(OPT_enable_experimental_additive_arithmetic_derivation))
|
||||
Opts.EnableExperimentalAdditiveArithmeticDerivedConformances = true;
|
||||
|
||||
if (Args.hasArg(OPT_enable_experimental_differentiable_programming)) {
|
||||
Opts.EnableExperimentalDifferentiableProgramming = true;
|
||||
// Differentiable programming implies `AdditiveArithmetic` derived
|
||||
// conformances.
|
||||
Opts.EnableExperimentalAdditiveArithmeticDerivedConformances = true;
|
||||
}
|
||||
|
||||
Opts.DebuggerSupport |= Args.hasArg(OPT_debugger_support);
|
||||
if (Opts.DebuggerSupport)
|
||||
|
||||
Reference in New Issue
Block a user