File tree Expand file tree Collapse file tree 2 files changed +24
-0
lines changed Expand file tree Collapse file tree 2 files changed +24
-0
lines changed Original file line number Diff line number Diff line change @@ -3564,6 +3564,14 @@ SubstitutionMap TypeBase::getMemberSubstitutionMap(
3564
3564
3565
3565
Type TypeBase::getTypeOfMember (ModuleDecl *module , const ValueDecl *member,
3566
3566
Type memberType) {
3567
+ if (is<ErrorType>())
3568
+ return ErrorType::get (getASTContext ());
3569
+
3570
+ if (auto *lvalue = getAs<LValueType>()) {
3571
+ auto objectTy = lvalue->getObjectType ();
3572
+ return objectTy->getTypeOfMember (module , member, memberType);
3573
+ }
3574
+
3567
3575
// If no member type was provided, use the member's type.
3568
3576
if (!memberType)
3569
3577
memberType = member->getInterfaceType ();
Original file line number Diff line number Diff line change @@ -1164,3 +1164,19 @@ struct SR_11381_W<T> {
1164
1164
struct SR_11381_S {
1165
1165
@SR_11381_W var foo : Int = nil // expected-error {{'nil' requires a contextual type}}
1166
1166
}
1167
+
1168
+ // rdar://problem/54184846 - crash while trying to retrieve wrapper info on l-value base type
1169
+ func test_missing_method_with_lvalue_base( ) {
1170
+ @propertyWrapper
1171
+ struct Ref < T> {
1172
+ var wrappedValue : T
1173
+ }
1174
+
1175
+ struct S < T> where T: RandomAccessCollection , T. Element: Equatable {
1176
+ @Ref var v : T . Element
1177
+
1178
+ init ( items: T , v: Ref < T . Element > ) {
1179
+ self . v. binding = v // expected-error {{value of type 'T.Element' has no member 'binding'}}
1180
+ }
1181
+ }
1182
+ }
You can’t perform that action at this time.
0 commit comments