Skip to content

Commit f39372b

Browse files
committed
RequirementMachine: Turn off redundant requirement warnings by default and add -warn-redundant-requirements frontend flag
1 parent 92a78c4 commit f39372b

File tree

69 files changed

+90
-76
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

69 files changed

+90
-76
lines changed

include/swift/Basic/LangOptions.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -572,6 +572,9 @@ namespace swift {
572572
/// rewrite system.
573573
bool EnableRequirementMachineOpaqueArchetypes = false;
574574

575+
/// Enable warnings for redundant requirements in generic signatures.
576+
bool WarnRedundantRequirements = false;
577+
575578
/// Enables dumping type witness systems from associated type inference.
576579
bool DumpTypeWitnessSystems = false;
577580

include/swift/Option/FrontendOptions.td

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -378,6 +378,9 @@ def disable_requirement_machine_reuse : Flag<["-"], "disable-requirement-machine
378378
def enable_requirement_machine_opaque_archetypes : Flag<["-"], "enable-requirement-machine-opaque-archetypes">,
379379
HelpText<"Enable more correct opaque archetype support, which is off by default because it might fail to produce a convergent rewrite system">;
380380

381+
def warn_redundant_requirements : Flag<["-"], "warn-redundant-requirements">,
382+
HelpText<"Emit warnings for redundant requirements in generic signatures">;
383+
381384
def dump_type_witness_systems : Flag<["-"], "dump-type-witness-systems">,
382385
HelpText<"Enables dumping type witness systems from associated type inference">;
383386

lib/AST/RequirementMachine/Diagnostics.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,11 @@ bool swift::rewriting::diagnoseRequirementErrors(
138138
}
139139

140140
case RequirementError::Kind::RedundantRequirement: {
141+
// We only emit redundant requirement warnings if the user passed
142+
// the -warn-redundant-requirements frontend flag.
143+
if (!ctx.LangOpts.WarnRedundantRequirements)
144+
break;
145+
141146
auto requirement = error.requirement;
142147
if (requirement.hasError())
143148
break;

lib/Frontend/CompilerInvocation.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1057,6 +1057,9 @@ static bool ParseLangArgs(LangOptions &Opts, ArgList &Args,
10571057
if (Args.hasArg(OPT_enable_requirement_machine_opaque_archetypes))
10581058
Opts.EnableRequirementMachineOpaqueArchetypes = true;
10591059

1060+
if (Args.hasArg(OPT_warn_redundant_requirements))
1061+
Opts.WarnRedundantRequirements = true;
1062+
10601063
Opts.DumpTypeWitnessSystems = Args.hasArg(OPT_dump_type_witness_systems);
10611064

10621065
return HadError || UnsupportedOS || UnsupportedArch;

test/AutoDiff/SILGen/differentiability_witness_generic_signature.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
// RUN: %target-swift-emit-silgen -verify -module-name main %s -requirement-machine-inferred-signatures=on | %FileCheck %s
2-
// RUN: %target-swift-emit-sil -verify -module-name main %s -requirement-machine-inferred-signatures=on
1+
// RUN: %target-swift-emit-silgen -verify -module-name main %s -requirement-machine-inferred-signatures=on -warn-redundant-requirements | %FileCheck %s
2+
// RUN: %target-swift-emit-sil -verify -module-name main %s -requirement-machine-inferred-signatures=on -warn-redundant-requirements
33

44
// NOTE(SR-11950): SILParser crashes for SILGen round-trip.
55

test/AutoDiff/SILOptimizer/generics.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// RUN: %target-swift-emit-sil -verify %s -requirement-machine-inferred-signatures=on | %FileCheck %s -check-prefix=CHECK-SIL
1+
// RUN: %target-swift-emit-sil -verify %s -requirement-machine-inferred-signatures=on -warn-redundant-requirements | %FileCheck %s -check-prefix=CHECK-SIL
22

33
import _Differentiation
44

test/Compatibility/anyobject_class.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// RUN: %target-typecheck-verify-swift -swift-version 4 -requirement-machine-protocol-signatures=on
1+
// RUN: %target-typecheck-verify-swift -swift-version 4 -requirement-machine-protocol-signatures=on -warn-redundant-requirements
22
// RUN: not %target-swift-frontend -typecheck -swift-version 5 -requirement-machine-protocol-signatures=on
33

44
protocol P : class, AnyObject { } // expected-warning{{redundant inheritance from 'AnyObject' and Swift 3 'class' keyword}}{{14-21=}}

test/Constraints/generic_super_constraint.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// RUN: %target-typecheck-verify-swift %s -requirement-machine-inferred-signatures=on
1+
// RUN: %target-typecheck-verify-swift %s -requirement-machine-inferred-signatures=on -warn-redundant-requirements
22

33
class Base<T> { }
44
class Derived: Base<Int> { }

test/Constraints/same_types.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// RUN: %target-typecheck-verify-swift -requirement-machine-inferred-signatures=on
1+
// RUN: %target-typecheck-verify-swift -requirement-machine-inferred-signatures=on -warn-redundant-requirements
22
// RUN: not %target-swift-frontend -typecheck %s -debug-generic-signatures -requirement-machine-inferred-signatures=on 2>&1 | %FileCheck %s
33

44
protocol Fooable {

test/Generics/associated_type_typo.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// RUN: %target-typecheck-verify-swift -requirement-machine-protocol-signatures=on -requirement-machine-inferred-signatures=on
1+
// RUN: %target-typecheck-verify-swift -requirement-machine-protocol-signatures=on -requirement-machine-inferred-signatures=on -warn-redundant-requirements
22

33
// RUN: not %target-swift-frontend -typecheck -debug-generic-signatures %s -requirement-machine-protocol-signatures=on -requirement-machine-inferred-signatures=on > %t.dump 2>&1
44
// RUN: %FileCheck -check-prefix CHECK-GENERIC %s < %t.dump

0 commit comments

Comments
 (0)