The ObjCGenerics checker warns on a cast when there is no subtyping relationship
between the tracked type of the value and the destination type of the cast. It
does this even if the cast was explicitly written. This means the user can't
write an explicit cast to silence the diagnostic.
This patch treats explicit casts involving generic types as an indication from the programmer
that the Objective-C type system is not rich enough to express the needed invariant. On
explicit casts, the checker now removes any existing information inferred about the type
arguments. Further, it no longer assumes the casted-to specialized type because the
invariant the programmer specifies in the cast may only hold at a particular program point
and not later ones. This prevents a suppressing cast from requiring a cascade of casts down the
line.
rdar://problem/33603303
Should it check that we are actually casting to the right type? Also it's a bit strange that isa<> check on line 569 did not catch this case, maybe that if- branch should be generalized instead?