Skip to content

Commit a96e494

Browse files
committed
ManualOwnership: reword diagnostics
The term 'demand' didn't pass the hallway test.
1 parent e943c91 commit a96e494

File tree

3 files changed

+52
-52
lines changed

3 files changed

+52
-52
lines changed

include/swift/AST/DiagnosticsSIL.def

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -434,13 +434,13 @@ ERROR(wrong_linkage_for_serialized_function,none,
434434
NOTE(performance_called_from,none,
435435
"called from here", ())
436436
ERROR(manualownership_copy,none,
437-
"explicit 'copy' required here", ())
437+
"explicit 'copy' required here; please report this vague diagnostic as a bug", ())
438438
ERROR(manualownership_copy_happened,none,
439-
"accessing %0 produces a copy of it; write 'copy' to acknowledge", (Identifier))
439+
"accessing %0 may produce a copy; write 'copy' to acknowledge or 'consume' to elide", (Identifier))
440440
ERROR(manualownership_copy_demanded,none,
441-
"ownership of %0 is demanded and cannot not be consumed; write 'copy' to satisfy", (Identifier))
441+
"independent copy of %0 is required here; write 'copy' to acknowledge or 'consume' to elide", (Identifier))
442442
ERROR(manualownership_copy_captured,none,
443-
"ownership of %0 is demanded by a closure; write 'copy' in its capture list to satisfy", (Identifier))
443+
"closure capture of '%0' requires independent copy of it; write [%0 = copy %0] in the closure's capture list to acknowledge", (StringRef))
444444

445445
// 'transparent' diagnostics
446446
ERROR(circular_transparent,none,

lib/SILOptimizer/Mandatory/PerformanceDiagnostics.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -460,7 +460,7 @@ bool PerformanceDiagnostics::visitInst(SILInstruction *inst,
460460
for (auto user : copied->getUsers()) {
461461
if (isa<PartialApplyInst>(user)) {
462462
LLVM_DEBUG(llvm::dbgs() << "captured by "<< *user);
463-
diagnose(loc, diag::manualownership_copy_captured, *name);
463+
diagnose(loc, diag::manualownership_copy_captured, name->get());
464464
return false;
465465
}
466466
}

test/SIL/manual_ownership.swift

Lines changed: 47 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ public func basic_return1() -> Triangle {
5151

5252
@_manualOwnership
5353
public func basic_return2(t: Triangle) -> Triangle {
54-
return t // expected-error {{ownership of 't' is demanded}}
54+
return t // expected-error {{independent copy of 't' is required here; write 'copy' to acknowledge or 'consume' to elide}}
5555
}
5656
@_manualOwnership
5757
public func basic_return2_fixed(t: Triangle) -> Triangle {
@@ -65,7 +65,7 @@ public func basic_return3() -> Triangle {
6565

6666
@_manualOwnership
6767
func return_borrowed(_ t: borrowing Triangle) -> Triangle {
68-
return t // expected-error {{ownership of 't' is demanded and cannot not be consumed}}
68+
return t // expected-error {{independent copy of 't' is required here; write 'copy' to acknowledge or 'consume' to elide}}
6969
}
7070
@_manualOwnership
7171
func return_borrowed_fixed(_ t: borrowing Triangle) -> Triangle {
@@ -75,7 +75,7 @@ func return_borrowed_fixed(_ t: borrowing Triangle) -> Triangle {
7575
// FIXME: there's no workaround to this; it acts like a var so it's the same class of problem (rdar://161359163)
7676
@_manualOwnership
7777
func return_consumingParam(_ t: consuming Triangle) -> Triangle {
78-
return t // expected-error {{ownership of 't' is demanded and cannot not be consumed}}
78+
return t // expected-error {{independent copy of 't' is required here; write 'copy' to acknowledge or 'consume' to elide}}
7979
}
8080
@_manualOwnership
8181
func return_consumingParam_no_workaround(_ t: consuming Triangle) -> Triangle {
@@ -100,8 +100,8 @@ func renamed_return(_ cond: Bool, _ a: Triangle) -> Triangle {
100100
let b = a
101101
let c = b
102102
// FIXME: we say 'c' instead of 'b', because of the propagation. (rdar://161360537)
103-
if cond { return b } // expected-error {{ownership of 'c' is demanded}}
104-
return c // expected-error {{ownership of 'c' is demanded}}
103+
if cond { return b } // expected-error {{independent copy of 'c' is required}}
104+
return c // expected-error {{independent copy of 'c' is required}}
105105
}
106106

107107
@_manualOwnership
@@ -133,7 +133,7 @@ func basic_methods_borrowing(_ t1: Triangle) {
133133
@_manualOwnership
134134
func basic_methods_consuming(_ t1: Triangle) {
135135
let t2 = Triangle()
136-
t1.consuming() // expected-error {{ownership of 't1' is demanded}}
136+
t1.consuming() // expected-error {{independent copy of 't1' is required}}
137137
t2.consuming()
138138
}
139139
@_manualOwnership
@@ -153,7 +153,7 @@ func plainFunc(_ t0: Triangle) {}
153153

154154
@_manualOwnership
155155
func basic_function_call(_ t1: Triangle) {
156-
consumingFunc(t1) // expected-error {{ownership of 't1' is demanded}}
156+
consumingFunc(t1) // expected-error {{independent copy of 't1' is required}}
157157
consumingFunc(copy t1)
158158
plainFunc(t1)
159159
}
@@ -163,8 +163,8 @@ func basic_function_call(_ t1: Triangle) {
163163
@_manualOwnership
164164
func check_vars(_ t: Triangle, _ b: Bool) -> Triangle {
165165
var x = Triangle()
166-
if b { x = t } // expected-error {{ownership of 't' is demanded and cannot not be consumed}}
167-
return x // expected-error {{ownership of 'x' is demanded and cannot not be consumed}}
166+
if b { x = t } // expected-error {{independent copy of 't' is required}}
167+
return x // expected-error {{independent copy of 'x' is required}}
168168
}
169169
@_manualOwnership
170170
func check_vars_fixed(_ t: Triangle, _ b: Bool) -> Triangle {
@@ -180,7 +180,7 @@ func check_vars_fixed(_ t: Triangle, _ b: Bool) -> Triangle {
180180
func reassignments_0() -> Triangle {
181181
var t3 = Triangle()
182182
t3 = Triangle()
183-
return t3 // expected-error {{ownership of 't3' is demanded}}
183+
return t3 // expected-error {{independent copy of 't3' is required}}
184184
}
185185
@_manualOwnership
186186
func reassignments_0_fixed_1() -> Triangle {
@@ -199,7 +199,7 @@ func reassignments_0_fixed_2() -> Triangle {
199199
func reassignments_1() {
200200
var t3 = Triangle()
201201
t3 = Triangle()
202-
t3.borrowing() // expected-error {{accessing 't3' produces a copy of it}}
202+
t3.borrowing() // expected-error {{accessing 't3' may produce a copy; write 'copy' to acknowledge or 'consume' to elide}}
203203
}
204204
@_manualOwnership
205205
func reassignments_1_fixed_1() {
@@ -217,7 +217,7 @@ func reassignments_1_fixed_2() {
217217
@_manualOwnership
218218
public func basic_loop_trivial_values(_ t: Triangle, _ xs: [Triangle]) {
219219
var p: Pair = t.a
220-
for x in xs { // expected-error {{ownership of 'xs' is demanded}}
220+
for x in xs { // expected-error {{independent copy of 'xs' is required}}
221221
p = p.midpoint(x.a)
222222
}
223223
t.a = p
@@ -239,11 +239,11 @@ public func basic_loop_trivial_values_fixed(_ t: Triangle, _ xs: [Triangle]) {
239239

240240
@_manualOwnership
241241
public func basic_loop_nontrivial_values(_ t: Triangle, _ xs: [Triangle]) {
242-
var p: Pair = t.nontrivial.a // expected-error {{accessing 't.nontrivial' produces a copy of it}}
243-
for x in xs { // expected-error {{ownership of 'xs' is demanded}}
244-
p = p.midpoint(x.nontrivial.a) // expected-error {{accessing 'x.nontrivial' produces a copy of it}}
242+
var p: Pair = t.nontrivial.a // expected-error {{accessing 't.nontrivial' may produce a copy}}
243+
for x in xs { // expected-error {{independent copy of 'xs' is required}}
244+
p = p.midpoint(x.nontrivial.a) // expected-error {{accessing 'x.nontrivial' may produce a copy}}
245245
}
246-
t.nontrivial.a = p // expected-error {{accessing 't.nontrivial' produces a copy of it}}
246+
t.nontrivial.a = p // expected-error {{accessing 't.nontrivial' may produce a copy}}
247247
}
248248

249249
@_manualOwnership
@@ -258,10 +258,10 @@ public func basic_loop_nontrivial_values_fixed(_ t: Triangle, _ xs: [Triangle])
258258
@_manualOwnership
259259
public func basic_loop_nontrivial_values_reduced_copies(_ t: Triangle, _ xs: [Triangle]) {
260260
// FIXME: confusing variable names are chosen (rdar://161360537)
261-
let nt = t.nontrivial // expected-error {{accessing 'nt' produces a copy of it}}
261+
let nt = t.nontrivial // expected-error {{accessing 'nt' may produce a copy}}
262262
var p: Pair = nt.a
263263
for x in copy xs {
264-
let xnt = x.nontrivial // expected-error {{accessing 'xnt' produces a copy of it}}
264+
let xnt = x.nontrivial // expected-error {{accessing 'xnt' may produce a copy}}
265265
p = p.midpoint(xnt.a)
266266
}
267267
nt.a = p
@@ -285,7 +285,7 @@ let ref_result = [5, 13, 29]
285285
// are present to avoid exclusivity issues. We'd need to start generating read coroutines.
286286
@_manualOwnership
287287
func access_global_1() -> Int {
288-
return ref_result[2] // expected-error {{accessing 'ref_result' produces a copy of it}}
288+
return ref_result[2] // expected-error {{accessing 'ref_result' may produce a copy}}
289289
}
290290
@_manualOwnership
291291
func access_global_1_fixed() -> Int {
@@ -296,23 +296,23 @@ return (copy ref_result)[2]
296296

297297
@_manualOwnership
298298
func closure_basic(_ t: Triangle) -> () -> Triangle {
299-
return { // expected-error {{ownership of 't' is demanded by a closure}}
300-
return t // expected-error {{ownership of 't' is demanded and cannot not be consumed}}
299+
return { // expected-error {{closure capture of 't' requires independent copy of it; write [t = copy t]}}
300+
return t // expected-error {{independent copy of 't' is required}}
301301
}
302302
}
303303
@_manualOwnership
304304
func closure_basic_almost_fixed_1(_ t: Triangle) -> () -> Triangle {
305305
// FIXME: Closure capture lists need to support the short-hand [copy t] that makes the
306306
// closure capture parameter @owned, rather than @guaranteed. Only can work for Copyable types!
307307
return { [x = copy t] in
308-
return x // expected-error {{ownership of 'x' is demanded and cannot not be consumed}}
308+
return x // expected-error {{independent copy of 'x' is required}}
309309
}
310310
}
311311

312312
@_manualOwnership
313-
func closure_basic_almost_fixed_2(_ t: Triangle) -> () -> Triangle {
314-
return { // expected-error {{ownership of 't' is demanded by a closure}}
315-
return copy t
313+
func closure_basic_almost_fixed_2(_ x: Triangle) -> () -> Triangle {
314+
return { // expected-error {{closure capture of 'x' requires independent copy of it; write [x = copy x]}}
315+
return copy x
316316
}
317317
}
318318

@@ -326,20 +326,20 @@ func closure_basic_fixed(_ t: Triangle) -> () -> Triangle {
326326
@_manualOwnership
327327
func closure_copies_in_body(_ t: Triangle) -> () -> Triangle {
328328
return { [x = copy t] in
329-
eat(x) // expected-error {{ownership of 'x' is demanded and cannot not be consumed}}
329+
eat(x) // expected-error {{independent copy of 'x' is required}}
330330
use(x)
331-
eat(x) // expected-error {{ownership of 'x' is demanded and cannot not be consumed}}
332-
return x // expected-error {{ownership of 'x' is demanded and cannot not be consumed}}
331+
eat(x) // expected-error {{independent copy of 'x' is required}}
332+
return x // expected-error {{independent copy of 'x' is required}}
333333
}
334334
}
335335

336336
@_manualOwnership
337337
func closure_copies_in_body_noescape(_ t: Triangle) -> Triangle {
338338
let f = { [x = copy t] in
339-
eat(x) // expected-error {{ownership of 'x' is demanded and cannot not be consumed}}
339+
eat(x) // expected-error {{independent copy of 'x' is required}}
340340
use(x)
341-
eat(x) // expected-error {{ownership of 'x' is demanded and cannot not be consumed}}
342-
return x // expected-error {{ownership of 'x' is demanded and cannot not be consumed}}
341+
eat(x) // expected-error {{independent copy of 'x' is required}}
342+
return x // expected-error {{independent copy of 'x' is required}}
343343
}
344344
return f()
345345
}
@@ -355,7 +355,7 @@ func try_to_assert(_ n: Int, _ names: [String]) {
355355

356356
@_manualOwnership
357357
func copy_in_autoclosure(_ t: Triangle) {
358-
simple_assert(consumingFunc(t)) // expected-error {{ownership of 't' is demanded and cannot not be consumed}}
358+
simple_assert(consumingFunc(t)) // expected-error {{independent copy of 't' is required}}
359359
}
360360
@_manualOwnership
361361
func copy_in_autoclosure_fixed(_ t: Triangle) {
@@ -364,11 +364,11 @@ func copy_in_autoclosure_fixed(_ t: Triangle) {
364364

365365
@_manualOwnership
366366
func nested_closures(_ t: Triangle) -> () -> (() -> Triangle) {
367-
return { // expected-error {{ownership of 't' is demanded by a closure}}
368-
{ eat(t) }() // expected-error {{ownership of 't' is demanded and cannot not be consumed}}
369-
return { // expected-error {{ownership of 't' is demanded by a closure}}
370-
simple_assert(consumingFunc(t)) // expected-error {{ownership of 't' is demanded and cannot not be consumed}}
371-
return t // expected-error {{ownership of 't' is demanded and cannot not be consumed}}
367+
return { // expected-error {{closure capture of 't' requires independent copy of it; write [t = copy t]}}
368+
{ eat(t) }() // expected-error {{independent copy of 't' is required}}
369+
return { // expected-error {{closure capture of 't' requires independent copy of it; write [t = copy t]}}
370+
simple_assert(consumingFunc(t)) // expected-error {{independent copy of 't' is required}}
371+
return t // expected-error {{independent copy of 't' is required}}
372372
}
373373
}
374374
}
@@ -387,7 +387,7 @@ func nested_closures_fixed(_ t: Triangle) -> () -> (() -> Triangle) {
387387

388388
@_manualOwnership
389389
func return_generic<T>(_ t: T) -> T {
390-
return t // expected-error {{accessing 't' produces a copy}}
390+
return t // expected-error {{accessing 't' may produce a copy}}
391391
}
392392
@_manualOwnership
393393
func return_generic_fixed<T>(_ t: T) -> T {
@@ -396,9 +396,9 @@ func return_generic_fixed<T>(_ t: T) -> T {
396396

397397
@_manualOwnership
398398
func reassign_with_lets<T>(_ t: T) -> T {
399-
let x = t // expected-error {{accessing 't' produces a copy}}
400-
let y = x // expected-error {{accessing 'x' produces a copy}}
401-
let z = y // expected-error {{accessing 'y' produces a copy}}
399+
let x = t // expected-error {{accessing 't' may produce a copy}}
400+
let y = x // expected-error {{accessing 'x' may produce a copy}}
401+
let z = y // expected-error {{accessing 'y' may produce a copy}}
402402
return copy z
403403
}
404404

@@ -413,9 +413,9 @@ func reassign_with_lets_fixed<T>(_ t: T) -> T {
413413

414414
@_manualOwnership
415415
func copy_generic<T>(_ t: T) {
416-
consume_generic(t) // expected-error {{accessing 't' produces a copy}}
416+
consume_generic(t) // expected-error {{accessing 't' may produce a copy}}
417417
borrow_generic(t)
418-
consume_generic(t) // expected-error {{accessing 't' produces a copy}}
418+
consume_generic(t) // expected-error {{accessing 't' may produce a copy}}
419419
}
420420

421421
@_manualOwnership
@@ -429,10 +429,10 @@ func copy_generic_fixed<T>(_ t: T) {
429429
func benchCaptureProp<S : Sequence>(
430430
_ s: S, _ f: (S.Element, S.Element) -> S.Element) -> S.Element {
431431

432-
var it = s.makeIterator() // expected-error {{accessing 's' produces a copy}}
432+
var it = s.makeIterator() // expected-error {{accessing 's' may produce a copy}}
433433
let initial = it.next()!
434434
return
435-
IteratorSequence(it) // expected-error {{accessing 'it' produces a copy}}
435+
IteratorSequence(it) // expected-error {{accessing 'it' may produce a copy}}
436436
.reduce(initial, f)
437437
}
438438
@_manualOwnership
@@ -464,8 +464,8 @@ struct CollectionOf32BitLittleEndianIntegers<BaseCollection: Collection> where B
464464
@_manualOwnership
465465
init(_ baseCollection: BaseCollection) {
466466
precondition(baseCollection.count % 4 == 0)
467-
self.baseCollection = baseCollection // expected-error {{accessing 'baseCollection' produces a copy}}
468-
} // expected-error {{accessing 'self' produces a copy of it}}
467+
self.baseCollection = baseCollection // expected-error {{accessing 'baseCollection' may produce a copy}}
468+
} // expected-error {{accessing 'self' may produce a copy}}
469469

470470
// FIXME: the above initializer shouldn't have any diagnostics
471471
}

0 commit comments

Comments
 (0)