Zhang via llvm-dev
2018-Nov-05 10:14 UTC
[llvm-dev] ObjCARC Passes not expanding callsites
Hi:
One of my users suggested that my transform passes yields unlinkable object
files. I ran llvm-nm on the input Bitcode and noticed there is one remaining
clang.arc.use callsite like the following:
```
.....
call void (...) @clang.arc.use(i8* bitcast (%struct.__NSConstantString_tag*
@_unnamed_cfstring_.4 to i8*)) #5, !dbg !74
.....
!llvm.dbg.cu = !{!0}
!clang.arc.retainAutoreleasedReturnValueMarker = !{!18}
!llvm.module.flags = !{!19, !20, !21, !22, !23, !24, !25, !26, !27}
!llvm.linker.options = !{!28, !29, !30, !31}
!llvm.ident = !{!32}
```
I then tried to skip the transform pass entirely and manually Expand ARC markers
using the following command:
```
λ : >>> bin/opt -objc-arc-expand ~/Downloads/OBDemo.bc -objc-arc -o
OBDemoNoARC.bc
λ : >>> bin/llvm-nm OBDemoNoARC.bc
---------------- t +[OBDemo P1]
---------------- t +[OBDemo myName]
U _NSLog
U _OBJC_CLASS_$_NSArray
U _OBJC_CLASS_$_NSObject
U _OBJC_CLASS_$_NSString
---------------- D _OBJC_CLASS_$_OBDemo
U _OBJC_METACLASS_$_NSObject
---------------- D _OBJC_METACLASS_$_OBDemo
U ___CFConstantStringClassReference
U __objc_empty_cache
U _clang.arc.use
U _objc_msgSend
U _objc_release
U _objc_retainAutoreleasedReturnValue
```
Which you can see the function is still referenced.
I don't have a reproducible ObjC Code for this issue since the users said,
which I quote here "I changed another computer and the issue no longer
appears, magic".
So, my question is, are those passes supposed to ignore such callsites or am I
doing something really wrong here?
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://lists.llvm.org/pipermail/llvm-dev/attachments/20181105/ebb21ebe/attachment.html>