File tree Expand file tree Collapse file tree 2 files changed +23
-0
lines changed Expand file tree Collapse file tree 2 files changed +23
-0
lines changed Original file line number Diff line number Diff line change @@ -3583,6 +3583,14 @@ SubstitutionMap TypeBase::getMemberSubstitutionMap(
3583
3583
3584
3584
Type TypeBase::getTypeOfMember (ModuleDecl *module , const ValueDecl *member,
3585
3585
Type memberType) {
3586
+ if (is<ErrorType>())
3587
+ return ErrorType::get (getASTContext ());
3588
+
3589
+ if (auto *lvalue = getAs<LValueType>()) {
3590
+ auto objectTy = lvalue->getObjectType ();
3591
+ return objectTy->getTypeOfMember (module , member, memberType);
3592
+ }
3593
+
3586
3594
// If no member type was provided, use the member's type.
3587
3595
if (!memberType)
3588
3596
memberType = member->getInterfaceType ();
Original file line number Diff line number Diff line change @@ -1504,3 +1504,18 @@ struct AllCompositionsStruct {
1504
1504
}
1505
1505
}
1506
1506
1507
+ // rdar://problem/54184846 - crash while trying to retrieve wrapper info on l-value base type
1508
+ func test_missing_method_with_lvalue_base( ) {
1509
+ @propertyWrapper
1510
+ struct Ref < T> {
1511
+ var wrappedValue : T
1512
+ }
1513
+
1514
+ struct S < T> where T: RandomAccessCollection , T. Element: Equatable {
1515
+ @Ref var v : T . Element
1516
+
1517
+ init ( items: T , v: Ref < T . Element > ) {
1518
+ self . v. binding = v // expected-error {{value of type 'T.Element' has no member 'binding'}}
1519
+ }
1520
+ }
1521
+ }
You can’t perform that action at this time.
0 commit comments