Skip to content

Commit 163293e

Browse files
committed
RequirementMachine: Split up -requirement-machine-generic-signatures flag into -requirement-machine-{abstract,inferred}-signatures
1 parent af9ea67 commit 163293e

File tree

4 files changed

+30
-6
lines changed

4 files changed

+30
-6
lines changed

include/swift/Basic/LangOptions.h

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -489,8 +489,14 @@ namespace swift {
489489
RequirementMachineMode RequirementMachineProtocolSignatures =
490490
RequirementMachineMode::Disabled;
491491

492-
/// Enable the new experimental generic signature minimization algorithm.
493-
RequirementMachineMode RequirementMachineGenericSignatures =
492+
/// Enable the new experimental generic signature minimization algorithm
493+
/// for abstract generic signatures.
494+
RequirementMachineMode RequirementMachineAbstractSignatures =
495+
RequirementMachineMode::Disabled;
496+
497+
/// Enable the new experimental generic signature minimization algorithm
498+
/// for user-written generic signatures.
499+
RequirementMachineMode RequirementMachineInferredSignatures =
494500
RequirementMachineMode::Disabled;
495501

496502
/// Sets the target we are building for and updates platform conditions

include/swift/Option/Options.td

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -624,7 +624,11 @@ def requirement_machine_protocol_signatures_EQ : Joined<["-"], "requirement-mach
624624
Flags<[FrontendOption]>,
625625
HelpText<"Control usage of experimental protocol requirement signature minimization: 'on', 'off', or 'verify'">;
626626

627-
def requirement_machine_generic_signatures_EQ : Joined<["-"], "requirement-machine-generic-signatures=">,
627+
def requirement_machine_abstract_signatures_EQ : Joined<["-"], "requirement-machine-abstract-signatures=">,
628+
Flags<[FrontendOption]>,
629+
HelpText<"Control usage of experimental generic signature minimization: 'on', 'off', or 'verify'">;
630+
631+
def requirement_machine_inferred_signatures_EQ : Joined<["-"], "requirement-machine-inferred-signatures=">,
628632
Flags<[FrontendOption]>,
629633
HelpText<"Control usage of experimental generic signature minimization: 'on', 'off', or 'verify'">;
630634

lib/AST/GenericSignatureBuilder.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8612,7 +8612,7 @@ AbstractGenericSignatureRequest::evaluate(
86128612
GenericSignatureWithError());
86138613
};
86148614

8615-
switch (ctx.LangOpts.RequirementMachineGenericSignatures) {
8615+
switch (ctx.LangOpts.RequirementMachineAbstractSignatures) {
86168616
case RequirementMachineMode::Disabled:
86178617
return buildViaGSB();
86188618

lib/Frontend/CompilerInvocation.cpp

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -864,15 +864,29 @@ static bool ParseLangArgs(LangOptions &Opts, ArgList &Args,
864864
A->getAsString(Args), A->getValue());
865865
}
866866

867-
if (auto A = Args.getLastArg(OPT_requirement_machine_generic_signatures_EQ)) {
867+
if (auto A = Args.getLastArg(OPT_requirement_machine_abstract_signatures_EQ)) {
868868
auto value = llvm::StringSwitch<Optional<RequirementMachineMode>>(A->getValue())
869869
.Case("off", RequirementMachineMode::Disabled)
870870
.Case("on", RequirementMachineMode::Enabled)
871871
.Case("verify", RequirementMachineMode::Verify)
872872
.Default(None);
873873

874874
if (value)
875-
Opts.RequirementMachineGenericSignatures = *value;
875+
Opts.RequirementMachineAbstractSignatures = *value;
876+
else
877+
Diags.diagnose(SourceLoc(), diag::error_invalid_arg_value,
878+
A->getAsString(Args), A->getValue());
879+
}
880+
881+
if (auto A = Args.getLastArg(OPT_requirement_machine_inferred_signatures_EQ)) {
882+
auto value = llvm::StringSwitch<Optional<RequirementMachineMode>>(A->getValue())
883+
.Case("off", RequirementMachineMode::Disabled)
884+
.Case("on", RequirementMachineMode::Enabled)
885+
.Case("verify", RequirementMachineMode::Verify)
886+
.Default(None);
887+
888+
if (value)
889+
Opts.RequirementMachineInferredSignatures = *value;
876890
else
877891
Diags.diagnose(SourceLoc(), diag::error_invalid_arg_value,
878892
A->getAsString(Args), A->getValue());

0 commit comments

Comments
 (0)