Skip to content

Commit aaecce9

Browse files
author
Harlan Haskins
committed
Disable accessor generation for nameless vars
1 parent 00d8908 commit aaecce9

File tree

3 files changed

+40
-6
lines changed

3 files changed

+40
-6
lines changed

lib/Sema/CodeSynthesis.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -994,6 +994,11 @@ static void addOpaqueAccessorToStorage(TypeChecker &TC,
994994

995995
static void addExpectedOpaqueAccessorsToStorage(TypeChecker &TC,
996996
AbstractStorageDecl *storage) {
997+
// Nameless vars from interface files should not have any accessors.
998+
// TODO: Replace this check with a broader check that all storage decls
999+
// from interface files have all their accessors up front.
1000+
if (storage->getBaseName().empty())
1001+
return;
9971002
storage->visitExpectedOpaqueAccessors([&](AccessorKind kind) {
9981003
// If the accessor is already present, there's nothing to do.
9991004
if (storage->getAccessor(kind))

lib/Sema/TypeCheckDecl.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -945,6 +945,8 @@ static void checkRedeclaration(TypeChecker &tc, ValueDecl *current) {
945945

946946
/// Does the context allow pattern bindings that don't bind any variables?
947947
static bool contextAllowsPatternBindingWithoutVariables(DeclContext *dc) {
948+
949+
// Property decls in type context must bind variables.
948950
if (dc->isTypeContext())
949951
return false;
950952

Lines changed: 33 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,69 +1,96 @@
11
// RUN: %empty-directory(%t)
2-
// RUN: %target-swift-frontend -emit-module -o %t/Test~partial.swiftmodule -module-name Test -primary-file %s
3-
// RUN: %target-swift-frontend -merge-modules -emit-module -o %t/Test.swiftmodule %t/Test~partial.swiftmodule
4-
// RUN: %target-swift-ide-test -print-module -module-to-print=Test -source-filename=x -I %t | %FileCheck %s
52

6-
// RUN: %target-swift-frontend -emit-interface-path %t.swiftinterface -enable-resilience -emit-module -o /dev/null %s
3+
// RUN: %target-swift-frontend -emit-interface-path %t.swiftinterface -emit-module -o /dev/null %s
74
// RUN: %FileCheck %s < %t.swiftinterface
85

6+
// RUN: %target-swift-frontend -emit-interface-path %t-resilient.swiftinterface -enable-resilience -emit-module -o /dev/null %s
7+
// RUN: %FileCheck %s --check-prefix RESILIENT < %t-resilient.swiftinterface
8+
9+
// RUN: %target-swift-frontend -emit-module -o %t/Test.swiftmodule %t.swiftinterface -disable-objc-attr-requires-foundation-module
10+
// FIXME(rdar44144435): %target-swift-frontend -emit-module -o /dev/null -merge-modules %t/Test.swiftmodule -emit-interface-path - | %FileCheck %s
11+
12+
// RUN: %target-swift-frontend -emit-module -o %t/TestResilient.swiftmodule -enable-resilience %t.swiftinterface -disable-objc-attr-requires-foundation-module
13+
// FIXME(rdar44144435): %target-swift-frontend -emit-module -o /dev/null -merge-modules %t/Test.swiftmodule -enable-resilience -emit-interface-path - | %FileCheck %s
14+
15+
916
// CHECK: struct MyStruct {{{$}}
17+
// RESILIENT: struct MyStruct {{{$}}
1018
public struct MyStruct {
1119
// CHECK-NEXT: var publicVar: Int{{$}}
20+
// RESILIENT-NEXT: var publicVar: Int{{$}}
1221
public var publicVar: Int
1322

1423
// CHECK-NEXT: let publicLet: Bool{{$}}
24+
// RESILIENT-NEXT: let publicLet: Bool{{$}}
1525
public let publicLet: Bool
1626

1727
// CHECK-NEXT: internal var _: String{{$}}
28+
// RESILIENT-NOT: internal var _: String{{$}}
1829
var internalVar: String
1930

2031
// CHECK-NEXT: internal let _: Bool{{$}}
32+
// RESILIENT-NOT: internal let _: Bool{{$}}
2133
let internalLet: Bool
2234

2335
// CHECK-NEXT: private var _: String{{$}}
36+
// RESILIENT-NOT: private var _: String{{$}}
2437
private var privateVar: String
2538

2639
// CHECK-NEXT: private let _: Bool{{$}}
40+
// RESILIENT-NOT: private let _: Bool{{$}}
2741
private let privateLet: Bool
2842

2943
// CHECK-NOT: private var
44+
// RESILIENT-NOT: private var
3045
private var computedPrivateVar: String {
3146
return "computedPrivateVar"
3247
}
3348

3449
// CHECK-NOT: private static var
50+
// RESILIENT-NOT: private static var
3551
private static var staticPrivateVar: String = ""
3652

3753
// CHECK: }{{$}}
54+
// RESILIENT: }{{$}}
3855
}
3956

4057
// CHECK: class MyClass {{{$}}
58+
// RESILIENT: class MyClass {{{$}}
4159
public class MyClass {
42-
// CHECK-NEXT: public var publicVar: Int{{$}}
60+
// CHECK-NEXT: var publicVar: Int{{$}}
61+
// RESILIENT-NEXT: var publicVar: Int{{$}}
4362
public var publicVar: Int = 0
4463

45-
// CHECK-NEXT: public let publicLet: Bool{{$}}
64+
// CHECK-NEXT: let publicLet: Bool{{$}}
65+
// RESILIENT-NEXT: let publicLet: Bool{{$}}
4666
public let publicLet: Bool = true
4767

4868
// CHECK-NEXT: internal var _: String{{$}}
69+
// RESILIENT-NOT: internal var _: String{{$}}
4970
var internalVar: String = ""
5071

5172
// CHECK-NEXT: internal let _: Bool{{$}}
73+
// RESILIENT-NOT: internal let _: Bool{{$}}
5274
let internalLet: Bool = true
5375

5476
// CHECK-NEXT: private var _: String{{$}}
77+
// RESILIENT-NOT: private var _: String{{$}}
5578
private var privateVar: String = ""
5679

5780
// CHECK-NEXT: private let _: Bool{{$}}
81+
// RESILIENT-NOT: private let _: Bool{{$}}
5882
private let privateLet: Bool = true
5983

6084
// CHECK-NOT: private var
85+
// RESILIENT-NOT: private var
6186
private var computedPrivateVar: String {
6287
return "computedPrivateVar"
6388
}
6489

6590
// CHECK-NOT: private static var
91+
// RESILIENT-NOT: private static var
6692
private static var staticPrivateVar: String = ""
6793

6894
// CHECK: }{{$}}
95+
// RESILIENT: }{{$}}
6996
}

0 commit comments

Comments
 (0)