[all-commits] [llvm/llvm-project] c6f171: [ObjC][ARC] Don't remove autoreleaseRV/retainRV pa...

Akira Hatanaka via All-commits all-commits at lists.llvm.org
Fri Mar 13 13:52:29 PDT 2020


  Branch: refs/heads/master
  Home:   https://github.com/llvm/llvm-project
  Commit: c6f1713c46e61bbb8ece9ac5ac329d02e7f93228
      https://github.com/llvm/llvm-project/commit/c6f1713c46e61bbb8ece9ac5ac329d02e7f93228
  Author: Akira Hatanaka <ahatanaka at apple.com>
  Date:   2020-03-13 (Fri, 13 Mar 2020)

  Changed paths:
    M llvm/lib/Transforms/ObjCARC/ObjCARCOpts.cpp
    M llvm/test/Transforms/ObjCARC/rv.ll

  Log Message:
  -----------
  [ObjC][ARC] Don't remove autoreleaseRV/retainRV pairs if the call isn't
a tail call

This reapplies the patch in https://reviews.llvm.org/rG1f5b471b8bf4,
which was reverted because it was causing crashes.

https://bugs.chromium.org/p/chromium/issues/detail?id=1061289#c2

Check that HasSafePathToCall is true before checking the call is a tail
call.

Original commit message:

Previosly ARC optimizer removed the autoreleaseRV/retainRV pair in the
following code, which caused the object returned by @something to be
placed in the autorelease pool because the call to @something isn't a
tail call:

```
  %call = call i8* @something(...)
  %2 = call i8* @objc_retainAutoreleasedReturnValue(i8* %call)
  %3 = call i8* @objc_autoreleaseReturnValue(i8* %2)
  ret i8* %3
```

Fix the bug by checking whether @something is a tail call.

rdar://problem/59275894




More information about the All-commits mailing list