Skip to content

Commit c133924

Browse files
committed
RequirementMachine: Add flags to enable and disable merged associated types
On by default, no change from current behavior. I'm going to try turning this off (and hopefully ripping it out entirely) once I fix a few bugs.
1 parent cfd8dbf commit c133924

File tree

4 files changed

+19
-1
lines changed

4 files changed

+19
-1
lines changed

include/swift/Basic/LangOptions.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -468,6 +468,9 @@ namespace swift {
468468
RequirementMachineMode EnableRequirementMachine =
469469
RequirementMachineMode::Enabled;
470470

471+
/// Enables merged associated type support, which might go away.
472+
bool RequirementMachineMergedAssociatedTypes = true;
473+
471474
/// Enables dumping rewrite systems from the requirement machine.
472475
bool DumpRequirementMachine = false;
473476

include/swift/Option/FrontendOptions.td

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -321,6 +321,14 @@ def requirement_machine_depth_limit : Separate<["-"], "requirement-machine-depth
321321
Flags<[FrontendOption, HelpHidden, DoesNotAffectIncrementalBuild]>,
322322
HelpText<"Set the maximum depth before we give up on confluent completion">;
323323

324+
def disable_requirement_machine_merged_associated_types : Flag<["-"], "disable-requirement-machine-merged-associated-types">,
325+
Flags<[FrontendOption, HelpHidden, DoesNotAffectIncrementalBuild]>,
326+
HelpText<"Disable merged associated types">;
327+
328+
def enable_requirement_machine_merged_associated_types : Flag<["-"], "enable-requirement-machine-merged-associated-types">,
329+
Flags<[FrontendOption, HelpHidden, DoesNotAffectIncrementalBuild]>,
330+
HelpText<"Enable merged associated types">;
331+
324332
def debug_generic_signatures : Flag<["-"], "debug-generic-signatures">,
325333
HelpText<"Debug generic signatures">;
326334

lib/AST/RequirementMachine/KnuthBendix.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -294,7 +294,8 @@ void RewriteSystem::processMergedAssociatedTypes() {
294294
/// types in RewriteSystem::processMergedAssociatedTypes().
295295
void RewriteSystem::checkMergedAssociatedType(Term lhs, Term rhs) {
296296
// FIXME: Figure out 3-cell representation for merged associated types
297-
if (RecordLoops)
297+
if (RecordLoops ||
298+
!Context.getASTContext().LangOpts.RequirementMachineMergedAssociatedTypes)
298299
return;
299300

300301
if (lhs.size() == rhs.size() &&

lib/Frontend/CompilerInvocation.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -891,6 +891,12 @@ static bool ParseLangArgs(LangOptions &Opts, ArgList &Args,
891891
A->getAsString(Args), A->getValue());
892892
}
893893

894+
if (auto A = Args.getLastArg(OPT_enable_requirement_machine_merged_associated_types,
895+
OPT_disable_requirement_machine_merged_associated_types)) {
896+
Opts.RequirementMachineMergedAssociatedTypes
897+
= A->getOption().matches(OPT_enable_requirement_machine_merged_associated_types);
898+
}
899+
894900
Opts.DumpRequirementMachine = Args.hasArg(
895901
OPT_dump_requirement_machine);
896902
Opts.AnalyzeRequirementMachine = Args.hasArg(

0 commit comments

Comments
 (0)