Skip to content

Commit f809406

Browse files
authored
Merge pull request #71727 from hborla/double-preconcurrency
[Concurrency] Don't add redundant implicit `@preconcurrency` attributes.
2 parents a5df356 + b609d80 commit f809406

File tree

2 files changed

+6
-1
lines changed

2 files changed

+6
-1
lines changed

lib/Sema/TypeCheckConcurrency.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5009,7 +5009,8 @@ ActorIsolation ActorIsolationRequest::evaluate(
50095009
CustomAttr::create(ctx, SourceLoc(), typeExpr, /*implicit=*/true);
50105010
value->getAttrs().add(attr);
50115011

5012-
if (inferred.preconcurrency()) {
5012+
if (inferred.preconcurrency() &&
5013+
!value->getAttrs().hasAttribute<PreconcurrencyAttr>()) {
50135014
auto preconcurrency =
50145015
new (ctx) PreconcurrencyAttr(/*isImplicit*/true);
50155016
value->getAttrs().add(preconcurrency);

test/ModuleInterface/concurrency.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ public protocol UnsafeMainProtocol {
3232

3333
public struct InferredUnsafeMainActor: UnsafeMainProtocol {
3434
public func requirement() {}
35+
@preconcurrency public func explicitPreconcurrency() {}
3536
}
3637

3738
@preconcurrency @MainActor
@@ -41,6 +42,7 @@ public protocol PreconcurrencyMainProtocol {
4142

4243
public struct InferredPreconcurrencyMainActor: PreconcurrencyMainProtocol {
4344
public func requirement() {}
45+
@preconcurrency public func explicitPreconcurrency() {}
4446
}
4547

4648
// rdar://122965951
@@ -71,6 +73,7 @@ func callFn() async {
7173

7274
// CHECK: @_Concurrency.MainActor @preconcurrency public struct InferredUnsafeMainActor :
7375
// CHECK-NEXT: @_Concurrency.MainActor @preconcurrency public func requirement()
76+
// CHECK-NEXT: @preconcurrency @_Concurrency.MainActor public func explicitPreconcurrency()
7477
// CHECK-NEXT: }
7578

7679
// CHECK: @preconcurrency @_Concurrency.MainActor public protocol PreconcurrencyMainProtocol {
@@ -79,6 +82,7 @@ func callFn() async {
7982

8083
// CHECK: @_Concurrency.MainActor @preconcurrency public struct InferredPreconcurrencyMainActor :
8184
// CHECK-NEXT: @_Concurrency.MainActor @preconcurrency public func requirement()
85+
// CHECK-NEXT: @preconcurrency @_Concurrency.MainActor public func explicitPreconcurrency()
8286
// CHECK-NEXT: }
8387

8488
// CHECK-TYPECHECKED: public struct UncheckedSendable : @unchecked Swift.Sendable

0 commit comments

Comments
 (0)