Skip to content

Commit b609d80

Browse files
committed
[Concurrency] Don't add redundant implicit @preconcurrency attributes to
declarations with an explicit annotation.
1 parent 26621b8 commit b609d80

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
// RUN: %target-typecheck-verify-swift -enable-experimental-concurrency -I %t
@@ -67,6 +69,7 @@ func callFn() async {
6769

6870
// CHECK: @_Concurrency.MainActor @preconcurrency public struct InferredUnsafeMainActor :
6971
// CHECK-NEXT: @_Concurrency.MainActor @preconcurrency public func requirement()
72+
// CHECK-NEXT: @preconcurrency @_Concurrency.MainActor public func explicitPreconcurrency()
7073
// CHECK-NEXT: }
7174

7275
// CHECK: @preconcurrency @_Concurrency.MainActor public protocol PreconcurrencyMainProtocol {
@@ -75,6 +78,7 @@ func callFn() async {
7578

7679
// CHECK: @_Concurrency.MainActor @preconcurrency public struct InferredPreconcurrencyMainActor :
7780
// CHECK-NEXT: @_Concurrency.MainActor @preconcurrency public func requirement()
81+
// CHECK-NEXT: @preconcurrency @_Concurrency.MainActor public func explicitPreconcurrency()
7882
// CHECK-NEXT: }
7983

8084

0 commit comments

Comments
 (0)