Skip to content

Commit e399aea

Browse files
committed
---
yaml --- r: 347322 b: refs/heads/master c: e7e14f5 h: refs/heads/master
1 parent 5f6999f commit e399aea

File tree

3 files changed

+37
-3
lines changed

3 files changed

+37
-3
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
---
2-
refs/heads/master: 90a401dee8ca5f5230938436548116da024b9a4a
2+
refs/heads/master: e7e14f55df9b6b952514a905cd523294fe6a70a4
33
refs/heads/master-next: 203b3026584ecad859eb328b2e12490099409cd5
44
refs/tags/osx-passed: b6b74147ef8a386f532cf9357a1bde006e552c54
55
refs/tags/swift-2.2-SNAPSHOT-2015-12-01-a: 6bb18e013c2284f2b45f5f84f2df2887dc0f7dea

trunk/lib/Sema/CSSimplify.cpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -132,8 +132,11 @@ bool constraints::areConservativelyCompatibleArgumentLabels(
132132
hasCurriedSelf = false;
133133
} else if (baseType->is<AnyMetatypeType>() && decl->isInstanceMember()) {
134134
hasCurriedSelf = false;
135-
} else if (isa<EnumElementDecl>(decl)) {
136-
hasCurriedSelf = false;
135+
} else if (auto *EED = dyn_cast<EnumElementDecl>(decl)) {
136+
// enum elements have either `(Self.Type) -> (Arg...) -> Self`, or
137+
// `(Self.Type) -> Self`, in the former case self type has to be
138+
// stripped off.
139+
hasCurriedSelf = bool(EED->getParameterList());
137140
} else {
138141
hasCurriedSelf = true;
139142
}

trunk/test/Constraints/enum_cases.swift

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,3 +124,34 @@ func rdar34583132() {
124124
}
125125
}
126126
}
127+
128+
func rdar_49159472() {
129+
struct A {}
130+
struct B {}
131+
struct C {}
132+
133+
enum E {
134+
case foo(a: A, b: B?)
135+
136+
var foo: C? {
137+
return nil
138+
}
139+
}
140+
141+
class Test {
142+
var e: E
143+
144+
init(_ e: E) {
145+
self.e = e
146+
}
147+
148+
func bar() {
149+
e = .foo(a: A(), b: nil) // Ok
150+
e = E.foo(a: A(), b: nil) // Ok
151+
baz(e: .foo(a: A(), b: nil)) // Ok
152+
baz(e: E.foo(a: A(), b: nil)) // Ok
153+
}
154+
155+
func baz(e: E) {}
156+
}
157+
}

0 commit comments

Comments
 (0)