There's currently an issue with the emission of lifetime markers for struct-returning Obj-C msgSend calls. The following code triggers an ASan use-after-scope report:
MyClass *myNil = nil; // intentionally nil [myNil methodWhichReturnsARect];
The reason is that when the result of a struct-returning call is ignore, the temporary storage is only marked with lifetime markers in one of the two branches of the nil-receiver-check. The check is, however, not required when the result is unused. If we still need to emit the check (due to consumer arguments), let's not emit the memset to zero out the result if it's unused. This fixes the use-after-scope problem.