Skip to content

Commit 1a7f4a3

Browse files
authored
---
yaml --- r: 344055 b: refs/heads/master-rebranch c: 334d892 h: refs/heads/master i: 344053: b72a1d7 344051: 7f6eb4a 344047: 50e2673
1 parent 5429ffa commit 1a7f4a3

File tree

205 files changed

+2921
-1299
lines changed

Some content is hidden

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

205 files changed

+2921
-1299
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1455,7 +1455,7 @@ refs/tags/swift-DEVELOPMENT-SNAPSHOT-2019-08-02-a: ddd2b2976aa9bfde5f20fe37f6bd2
14551455
refs/tags/swift-DEVELOPMENT-SNAPSHOT-2019-08-03-a: 171cc166f2abeb5ca2a4003700a8a78a108bd300
14561456
refs/heads/benlangmuir-patch-1: baaebaf39d52f3bf36710d4fe40cf212e996b212
14571457
refs/heads/i-do-redeclare: 8c4e6d5de5c1e3f0a2cedccf319df713ea22c48e
1458-
refs/heads/master-rebranch: 761b02949a8c1f462bc3dcb3939d0062f53bfcf6
1458+
refs/heads/master-rebranch: 334d8928c8705f6b9b46704e66c7e576605a7926
14591459
refs/heads/rdar-53901732: 9bd06af3284e18a109cdbf9aa59d833b24eeca7b
14601460
refs/heads/revert-26776-subst-always-returns-a-type: 1b8e18fdd391903a348970a4c848995d4cdd789c
14611461
refs/heads/tensorflow-merge: 8b854f62f80d4476cb383d43c4aac2001dde3cec

branches/master-rebranch/CHANGELOG.md

Lines changed: 59 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,63 @@ CHANGELOG
2626
Swift Next
2727
----------
2828

29+
* [SR-11298][]:
30+
31+
A class-constrained protocol extension, where the extended protocol does
32+
not impose a class constraint, will now infer the constraint implicitly.
33+
34+
```swift
35+
protocol Foo {}
36+
class Bar: Foo {
37+
var someProperty: Int = 0
38+
}
39+
40+
// Even though 'Foo' does not impose a class constraint, it is automatically
41+
// inferred due to the Self: Bar constraint.
42+
extension Foo where Self: Bar {
43+
var anotherProperty: Int {
44+
get { return someProperty }
45+
// As a result, the setter is now implicitly nonmutating, just like it would
46+
// be if 'Foo' had a class constraint.
47+
set { someProperty = newValue }
48+
}
49+
}
50+
```
51+
52+
As a result, this could lead to code that currently compiles today to throw an error.
53+
54+
```swift
55+
protocol Foo {
56+
var someProperty: Int { get set }
57+
}
58+
59+
class Bar: Foo {
60+
var someProperty = 0
61+
}
62+
63+
extension Foo where Self: Bar {
64+
var anotherProperty1: Int {
65+
get { return someProperty }
66+
// This will now error, because the protocol requirement
67+
// is implicitly mutating and the setter is implicitly
68+
// nonmutating.
69+
set { someProperty = newValue } // Error
70+
}
71+
}
72+
```
73+
74+
**Workaround**: Define a new mutable variable inside the setter that has a reference to `self`:
75+
76+
```swift
77+
var anotherProperty1: Int {
78+
get { return someProperty }
79+
set {
80+
var mutableSelf = self
81+
mutableSelf.someProperty = newValue // Okay
82+
}
83+
}
84+
```
85+
2986
* [SE-0253][]:
3087

3188
Values of types that declare `func callAsFunction` methods can be called
@@ -51,7 +108,7 @@ Swift Next
51108

52109
* [SR-4206][]:
53110

54-
A method override is no longer allowed to have a generic signature with
111+
A method override is no longer allowed to have a generic signature with
55112
requirements not imposed by the base method. For example:
56113

57114
```
@@ -7765,3 +7822,4 @@ Swift 1.0
77657822
[SR-8974]: <https://bugs.swift.org/browse/SR-8974>
77667823
[SR-9043]: <https://bugs.swift.org/browse/SR-9043>
77677824
[SR-9827]: <https://bugs.swift.org/browse/SR-9827>
7825+
[SR-11298]: <https://bugs.swift.org/browse/SR-11298>

branches/master-rebranch/docs/SIL.rst

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,10 @@ the Swift programming language. SIL accommodates the following use cases:
1717
such as definitive initialization of variables and constructors, code
1818
reachability, switch coverage.
1919
- High-level optimization passes, including retain/release optimization,
20-
dynamic method devirtualization, closure inlining, memory allocation promotion,
21-
and generic function instantiation.
20+
dynamic method devirtualization, closure inlining, promoting heap allocations
21+
to stack allocations, promoting stack allocations to SSA registers, scalar
22+
replacement of aggregates (splitting aggregate allocations into multiple
23+
smaller allocations), and generic function instantiation.
2224
- A stable distribution format that can be used to distribute "fragile"
2325
inlineable or generic code with Swift library modules, to be optimized into
2426
client binaries.

branches/master-rebranch/include/swift/AST/Builtins.def

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,8 @@ BUILTIN_BINARY_OPERATION(ExactUDiv, "udiv_exact", "n", IntegerOrVector)
7575
BUILTIN_BINARY_OPERATION(URem, "urem", "n", Integer)
7676
BUILTIN_BINARY_OPERATION(FRem, "frem", "n", FloatOrVector)
7777
BUILTIN_BINARY_OPERATION(Xor, "xor", "n", IntegerOrVector)
78+
// This builtin is an optimizer hint and always returns the first argument.
79+
BUILTIN_BINARY_OPERATION(Expect, "int_expect", "n", Integer)
7880
#undef BUILTIN_BINARY_OPERATION
7981

8082
/// These builtins are analogous the similarly named llvm intrinsics. The

branches/master-rebranch/include/swift/AST/DeclContext.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -261,7 +261,10 @@ class alignas(1 << DeclContextAlignInBits) DeclContext {
261261

262262
/// Returns the kind of context this is.
263263
DeclContextKind getContextKind() const;
264-
264+
265+
/// Returns whether this context has value semantics.
266+
bool hasValueSemantics() const;
267+
265268
/// Determines whether this context is itself a local scope in a
266269
/// code block. A context that appears in such a scope, like a
267270
/// local type declaration, does not itself become a local context.

branches/master-rebranch/include/swift/AST/DiagnosticsSIL.def

Lines changed: 33 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -360,61 +360,75 @@ ERROR(pound_assert_failure,none,
360360
NOTE(constexpr_unknown_reason_default,none,
361361
"cannot evaluate expression as constant here", ())
362362
NOTE(constexpr_unevaluable_operation,none,
363-
"cannot constant evaluate operation", ())
363+
"cannot constant evaluate operation%select{| used by this call}0", (bool))
364364

365365
NOTE(constexpr_too_many_instructions,none,
366366
"exceeded instruction limit: %0 when evaluating the expression "
367367
"at compile time", (unsigned))
368-
NOTE(constexpr_limit_exceeding_instruction,none, "limit exceeded here", ())
368+
NOTE(constexpr_limit_exceeding_instruction,none, "limit exceeded "
369+
"%select{here|during this call}0", (bool))
369370

370371
NOTE(constexpr_loop_found_note,none,
371372
"control-flow loop found during evaluation ", ())
372-
NOTE(constexpr_loop_instruction,none, "found loop here", ())
373+
NOTE(constexpr_loop_instruction,none, "found loop "
374+
"%select{here|inside this call}0", (bool))
373375

374376
NOTE(constexpr_overflow,none, "integer overflow detected", ())
375-
NOTE(constexpr_overflow_operation,none, "operation overflows", ())
377+
NOTE(constexpr_overflow_operation,none, "operation"
378+
"%select{| performed during this call}0 overflows", (bool))
376379

377380
NOTE(constexpr_trap,none, "trap detected", ())
378-
NOTE(constexpr_trap_operation,none, "operation traps", ())
381+
NOTE(constexpr_trap_operation,none, "operation"
382+
"%select{| performed during this call}0 traps", (bool))
383+
384+
NOTE(constexpr_assertion_failed, none, "assertion failed with message: %0",
385+
(StringRef))
386+
NOTE(constexpr_assertion_failed_here, none, "assertion failed"
387+
"%select{ here| during this call}0 ", (bool))
379388

380389
NOTE(constexpr_invalid_operand_seen, none,
381390
"operation with invalid operands encountered during evaluation",())
382391
NOTE(constexpr_operand_invalid_here, none,
383-
"operation with invalid operands encountered here",())
392+
"operation with invalid operands encountered "
393+
"%select{here|during this call}0", (bool))
384394

385395
NOTE(constexpr_value_unknown_at_top_level,none,
386396
"cannot evaluate top-level value as constant here",())
387397
NOTE(constexpr_multiple_writers_found_at_top_level,none,
388398
"top-level value has multiple assignments",())
389399

390400
NOTE(constexpr_unsupported_instruction_found, none,
391-
"encountered operation not supported by the evaluator", ())
392-
NOTE(constexpr_unsupported_instruction_found_here,none,
393-
"operation not supported by the evaluator", ())
401+
"encountered operation not supported by the evaluator: %0", (StringRef))
402+
NOTE(constexpr_unsupported_instruction_found_here,none, "operation"
403+
"%select{| used by this call is}0 not supported by the evaluator", (bool))
394404

395405
NOTE(constexpr_unknown_function_called, none,
396-
"encountered call to a function whose body is not available", ())
406+
"encountered call to '%0' whose body is not available", (StringRef))
397407
NOTE(constexpr_unknown_function_called_here, none,
398-
"call to a function whose body is not available", ())
408+
"%select{|calls a }0function whose body is not available", (bool))
399409

400410
NOTE(constexpr_untracked_sil_value_use_found, none,
401411
"encountered use of a variable not tracked by the evaluator", ())
402412
NOTE(constexpr_untracked_sil_value_used_here, none,
403-
"untracked variable used here", ())
404-
405-
NOTE(constexpr_witness_call_with_no_conformance_found, none,
406-
"cannot find concrete conformance for a witness method call", ())
407-
NOTE(constexpr_witness_call_with_no_target_found, none,
408-
"cannot resolve a witness method call to a concrete function", ())
409-
NOTE(constexpr_witness_call_found_here, none,
410-
"witness method call found here", ())
413+
"untracked variable used %select{here|by this call}0", (bool))
414+
415+
NOTE(constexpr_unresolvable_witness_call, none,
416+
"encountered unresolvable witness method call: '%0'", (StringRef))
417+
NOTE(constexpr_no_witness_table_entry, none, "cannot find witness table entry "
418+
"%select{for this call|for a witness-method invoked during this call}0",
419+
(bool))
420+
NOTE(constexpr_witness_call_with_no_conformance, none,
421+
"cannot find concrete conformance "
422+
"%select{for this call|for a witness-method invoked during this call}0",
423+
(bool))
411424

412425
NOTE(constexpr_unknown_control_flow_due_to_skip,none, "branch depends on "
413426
"non-constant value produced by an unevaluated instructions", ())
414427
NOTE(constexpr_returned_by_unevaluated_instruction,none,
415428
"return value of an unevaluated instruction is not a constant", ())
416429
NOTE(constexpr_mutated_by_unevaluated_instruction,none, "value mutable by an "
417430
"unevaluated instruction is not a constant", ())
431+
ERROR(not_constant_evaluable, none, "not constant evaluable", ())
418432

419433
ERROR(non_physical_addressof,none,
420434
"addressof only works with purely physical lvalues; "

branches/master-rebranch/include/swift/AST/DiagnosticsSema.def

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1665,10 +1665,19 @@ ERROR(cannot_use_nil_with_this_type,none,
16651665
ERROR(use_of_equal_instead_of_equality,none,
16661666
"use of '=' in a boolean context, did you mean '=='?", ())
16671667

1668+
ERROR(type_cannot_conform, none,
1669+
"%select{|value of protocol }0type %1 cannot conform to %2; "
1670+
"only struct/enum/class types can conform to protocols",
1671+
(bool, Type, Type))
1672+
NOTE(required_by_opaque_return,none,
1673+
"required by opaque return type of %0 %1", (DescriptiveDeclKind, DeclName))
1674+
NOTE(required_by_decl,none,
1675+
"required by %0 %1 where %2 = %3",
1676+
(DescriptiveDeclKind, DeclName, Type, Type))
1677+
NOTE(required_by_decl_ref,none,
1678+
"required by referencing %0 %1 on %2 where %3 = %4",
1679+
(DescriptiveDeclKind, DeclName, Type, Type, Type))
16681680

1669-
ERROR(protocol_does_not_conform_objc,none,
1670-
"protocol type %0 cannot conform to %1 because only concrete "
1671-
"types can conform to protocols", (Type, Type))
16721681
ERROR(protocol_does_not_conform_static,none,
16731682
"%0 cannot be used as a type conforming to protocol %1 because %1 "
16741683
"has static requirements",

0 commit comments

Comments
 (0)