Skip to content

Commit 86100fe

Browse files
Created separated warning group for warnings about unnecessary mutable weak variables
1 parent 89f8f8b commit 86100fe

File tree

5 files changed

+23
-6
lines changed

5 files changed

+23
-6
lines changed

include/swift/AST/DiagnosticGroups.def

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ GROUP(TemporaryPointers, "temporary-pointers")
7272
GROUP(TrailingClosureMatching, "trailing-closure-matching")
7373
GROUP(UnknownWarningGroup, "unknown-warning-group")
7474
GROUP(CompilationCaching, "compilation-caching")
75+
GROUP(WeakMutability, "weak-mutability")
7576

7677
#define UNDEFINE_DIAGNOSTIC_GROUPS_MACROS
7778
#include "swift/AST/DefineDiagnosticGroupsMacros.h"

include/swift/AST/DiagnosticsSema.def

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7414,6 +7414,14 @@ WARNING(variable_tuple_elt_never_mutated, none,
74147414
"variable %0 was never mutated; "
74157415
"consider changing the pattern to 'case (..., let %1, ...)'",
74167416
(Identifier, StringRef))
7417+
GROUPED_WARNING(weak_variable_never_mutated, WeakMutability, none,
7418+
"weak variable %0 was never mutated; "
7419+
"consider %select{removing 'var' to make it|changing to 'let'}1 constant",
7420+
(Identifier, bool))
7421+
GROUPED_WARNING(weak_variable_tuple_elt_never_mutated, WeakMutability, none,
7422+
"weak variable %0 was never mutated; "
7423+
"consider changing the pattern to 'case (..., let %1, ...)'",
7424+
(Identifier, StringRef))
74177425
WARNING(variable_never_read, none,
74187426
"variable %0 was written to, but never read",
74197427
(Identifier))

lib/Sema/MiscDiagnostics.cpp

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4283,6 +4283,8 @@ VarDeclUsageChecker::~VarDeclUsageChecker() {
42834283
if (isUsedInInactive(var))
42844284
continue;
42854285

4286+
bool isWeak = var->getInterfaceType()->is<WeakStorageType>();
4287+
42864288
// If this is a parameter explicitly marked 'var', remove it.
42874289
if (FixItLoc.isInvalid()) {
42884290
bool suggestCaseLet = false;
@@ -4293,10 +4295,14 @@ VarDeclUsageChecker::~VarDeclUsageChecker() {
42934295
suggestCaseLet = isa<ForEachStmt>(stmt);
42944296
}
42954297
if (suggestCaseLet)
4296-
Diags.diagnose(var->getLoc(), diag::variable_tuple_elt_never_mutated,
4298+
Diags.diagnose(var->getLoc(),
4299+
isWeak ? diag::weak_variable_tuple_elt_never_mutated
4300+
: diag::variable_tuple_elt_never_mutated,
42974301
var->getName(), var->getNameStr());
42984302
else
4299-
Diags.diagnose(var->getLoc(), diag::variable_never_mutated,
4303+
Diags.diagnose(var->getLoc(),
4304+
isWeak ? diag::weak_variable_never_mutated
4305+
: diag::variable_never_mutated,
43004306
var->getName(), true);
43014307

43024308
}
@@ -4309,7 +4315,9 @@ VarDeclUsageChecker::~VarDeclUsageChecker() {
43094315
suggestLet = !isa<ForEachStmt>(stmt);
43104316
}
43114317

4312-
auto diag = Diags.diagnose(var->getLoc(), diag::variable_never_mutated,
4318+
auto diag = Diags.diagnose(var->getLoc(),
4319+
isWeak ? diag::weak_variable_never_mutated
4320+
: diag::variable_never_mutated,
43134321
var->getName(), suggestLet);
43144322

43154323
if (suggestLet)

test/Concurrency/weak_ref_sendability.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ final class CheckSendability12: Sendable {
9898

9999

100100
func checkWeakCapture1(_ strongRef: S) -> @Sendable () -> Void {
101-
// expected-warning@+1 {{variable 'weakRef' was never mutated; consider changing to 'let' constant}}
101+
// expected-warning@+1 {{weak variable 'weakRef' was never mutated; consider changing to 'let' constant}}
102102
weak var weakRef: S? = strongRef
103103
return {
104104
// expected-error@+1 {{reference to captured var 'weakRef' in concurrently-executing code}}
@@ -124,7 +124,7 @@ func checkWeakCapture3(_ strongRef: S) -> @Sendable () -> Void {
124124
}
125125

126126
func checkWeakCapture4(_ strongRef: NS) -> @Sendable () -> Void {
127-
// expected-warning@+1 {{variable 'weakRef' was never mutated; consider changing to 'let' constant}}
127+
// expected-warning@+1 {{weak variable 'weakRef' was never mutated; consider changing to 'let' constant}}
128128
weak var weakRef: NS? = strongRef
129129
return {
130130
// expected-error@+2 {{capture of 'weakRef' with non-Sendable type 'NS?' in a '@Sendable' closure}}

test/SILOptimizer/definite_init_diagnostics.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ func test2() {
103103

104104

105105
// Weak
106-
// expected-warning@+1 {{variable 'w1' was never mutated; consider changing to 'let' constant}} {{8-11=let}}
106+
// expected-warning@+1 {{weak variable 'w1' was never mutated; consider changing to 'let' constant}} {{8-11=let}}
107107
weak var w1 : SomeClass?
108108
_ = w1 // ok: default-initialized
109109

0 commit comments

Comments
 (0)