Skip to content

Commit e8d2406

Browse files
committed
RequirementMachine: Add fourth 'check' option to 'on'/'off'/'verify' flags
This compares the results like 'verify' and prints output if there is a mismatch, but does not assert.
1 parent 19d87b3 commit e8d2406

File tree

4 files changed

+25
-10
lines changed

4 files changed

+25
-10
lines changed

include/swift/Basic/LangOptions.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,10 @@ namespace swift {
8888
Enabled = 1,
8989

9090
/// Use both and assert if the results do not match.
91-
Verify = 2
91+
Verify = 2,
92+
93+
/// Use both, print a message only but do not assert on mismatch.
94+
Check = 3,
9295
};
9396

9497
/// A collection of options that affect the language dialect and

include/swift/Option/Options.td

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -626,15 +626,15 @@ def no_emit_module_separately:
626626

627627
def requirement_machine_protocol_signatures_EQ : Joined<["-"], "requirement-machine-protocol-signatures=">,
628628
Flags<[FrontendOption]>,
629-
HelpText<"Control usage of experimental protocol requirement signature minimization: 'on', 'off', or 'verify'">;
629+
HelpText<"Control usage of experimental protocol requirement signature minimization: 'on', 'off', 'verify' or 'check'">;
630630

631631
def requirement_machine_abstract_signatures_EQ : Joined<["-"], "requirement-machine-abstract-signatures=">,
632632
Flags<[FrontendOption]>,
633-
HelpText<"Control usage of experimental generic signature minimization: 'on', 'off', or 'verify'">;
633+
HelpText<"Control usage of experimental generic signature minimization: 'on', 'off', 'verify' or 'check'">;
634634

635635
def requirement_machine_inferred_signatures_EQ : Joined<["-"], "requirement-machine-inferred-signatures=">,
636636
Flags<[FrontendOption]>,
637-
HelpText<"Control usage of experimental generic signature minimization: 'on', 'off', or 'verify'">;
637+
HelpText<"Control usage of experimental generic signature minimization: 'on', 'off', 'verify' or 'check'">;
638638

639639
def experimental_hermetic_seal_at_link:
640640
Flag<["-"], "experimental-hermetic-seal-at-link">,

lib/AST/GenericSignatureBuilder.cpp

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8382,7 +8382,8 @@ AbstractGenericSignatureRequest::evaluate(
83828382
case RequirementMachineMode::Enabled:
83838383
return buildViaRQM();
83848384

8385-
case RequirementMachineMode::Verify: {
8385+
case RequirementMachineMode::Verify:
8386+
case RequirementMachineMode::Check: {
83868387
auto rqmResult = buildViaRQM();
83878388
auto gsbResult = buildViaGSB();
83888389

@@ -8401,7 +8402,9 @@ AbstractGenericSignatureRequest::evaluate(
84018402
gsbResult.getPointer()->print(llvm::errs(), opts);
84028403
llvm::errs() << "\n";
84038404

8404-
abort();
8405+
if (ctx.LangOpts.RequirementMachineAbstractSignatures
8406+
== RequirementMachineMode::Verify)
8407+
abort();
84058408
}
84068409

84078410
return rqmResult;
@@ -8559,7 +8562,8 @@ InferredGenericSignatureRequest::evaluate(
85598562
case RequirementMachineMode::Enabled:
85608563
return buildViaRQM();
85618564

8562-
case RequirementMachineMode::Verify: {
8565+
case RequirementMachineMode::Verify:
8566+
case RequirementMachineMode::Check: {
85638567
auto rqmResult = buildViaRQM();
85648568
auto gsbResult = buildViaGSB();
85658569

@@ -8578,7 +8582,9 @@ InferredGenericSignatureRequest::evaluate(
85788582
gsbResult.getPointer()->print(llvm::errs(), opts);
85798583
llvm::errs() << "\n";
85808584

8581-
abort();
8585+
if (ctx.LangOpts.RequirementMachineInferredSignatures
8586+
== RequirementMachineMode::Verify)
8587+
abort();
85828588
}
85838589

85848590
return rqmResult;
@@ -8672,7 +8678,8 @@ RequirementSignatureRequest::evaluate(Evaluator &evaluator,
86728678
case RequirementMachineMode::Enabled:
86738679
return buildViaRQM();
86748680

8675-
case RequirementMachineMode::Verify: {
8681+
case RequirementMachineMode::Verify:
8682+
case RequirementMachineMode::Check: {
86768683
auto rqmResult = buildViaRQM();
86778684
auto gsbResult = buildViaGSB();
86788685

@@ -8697,7 +8704,9 @@ RequirementSignatureRequest::evaluate(Evaluator &evaluator,
86978704
gsbSig.print(llvm::errs(), opts);
86988705
llvm::errs() << "\n";
86998706

8700-
abort();
8707+
if (ctx.LangOpts.RequirementMachineProtocolSignatures
8708+
== RequirementMachineMode::Verify)
8709+
abort();
87018710
}
87028711

87038712
return rqmResult;

lib/Frontend/CompilerInvocation.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -886,6 +886,7 @@ static bool ParseLangArgs(LangOptions &Opts, ArgList &Args,
886886
.Case("off", RequirementMachineMode::Disabled)
887887
.Case("on", RequirementMachineMode::Enabled)
888888
.Case("verify", RequirementMachineMode::Verify)
889+
.Case("check", RequirementMachineMode::Check)
889890
.Default(None);
890891

891892
if (value)
@@ -900,6 +901,7 @@ static bool ParseLangArgs(LangOptions &Opts, ArgList &Args,
900901
.Case("off", RequirementMachineMode::Disabled)
901902
.Case("on", RequirementMachineMode::Enabled)
902903
.Case("verify", RequirementMachineMode::Verify)
904+
.Case("check", RequirementMachineMode::Check)
903905
.Default(None);
904906

905907
if (value)
@@ -914,6 +916,7 @@ static bool ParseLangArgs(LangOptions &Opts, ArgList &Args,
914916
.Case("off", RequirementMachineMode::Disabled)
915917
.Case("on", RequirementMachineMode::Enabled)
916918
.Case("verify", RequirementMachineMode::Verify)
919+
.Case("check", RequirementMachineMode::Check)
917920
.Default(None);
918921

919922
if (value)

0 commit comments

Comments
 (0)