File tree Expand file tree Collapse file tree 2 files changed +27
-0
lines changed Expand file tree Collapse file tree 2 files changed +27
-0
lines changed Original file line number Diff line number Diff line change @@ -8468,6 +8468,11 @@ Solution::convertBooleanTypeToBuiltinI1(Expr *expr,
8468
8468
8469
8469
auto type = cs.getType (expr);
8470
8470
8471
+ // We allow UnresolvedType <c $T for all $T, so we might end up here
8472
+ // in diagnostics. Just bail out.
8473
+ if (type->is <UnresolvedType>())
8474
+ return expr;
8475
+
8471
8476
// Look for the builtin name. If we don't have it, we need to call the
8472
8477
// general name via the witness table.
8473
8478
NameLookupOptions lookupOptions = defaultMemberLookupOptions;
Original file line number Diff line number Diff line change @@ -63,3 +63,25 @@ let ib: Bool! = false
63
63
let eb : Bool ? = . some( false )
64
64
let conditional = ib ? " Broken " : " Heart " // should infer Bool!
65
65
let conditional = eb ? " Broken " : " Heart " // expected-error {{value of optional type 'Bool?' not unwrapped; did you mean to use '!' or '?'?}}
66
+
67
+ // <rdar://problem/39586166> - crash when IfExpr has UnresolvedType in condition
68
+ struct Delegate {
69
+ var shellTasks : [ ShellTask ]
70
+ }
71
+
72
+ extension Array {
73
+ subscript( safe safe: Int ) -> Element ? { // expected-note {{found this candidate}}
74
+ get { }
75
+ set { }
76
+ }
77
+ }
78
+
79
+ struct ShellTask {
80
+ var commandLine : [ String ]
81
+ }
82
+
83
+ let delegate = Delegate ( shellTasks: [ ] )
84
+ _ = delegate. shellTasks [ safe: 0 ] ? . commandLine. compactMap ( { $0. asString. hasPrefix ( " " ) ? $0 : nil } ) . count ?? 0
85
+ // expected-error@-1 {{ambiguous reference to member 'subscript'}}
86
+
87
+ // FIXME: Horrible diagnostic, but at least we no longer crash
You can’t perform that action at this time.
0 commit comments