[PATCH] D56238: [TSan] Support Objective-C @synchronized with tagged pointers
Dmitry Vyukov via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Fri Jan 4 01:24:53 PST 2019
dvyukov added inline comments.
================
Comment at: lib/tsan/rtl/tsan_interceptors_mac.cc:302
+// have an associated memory allocation. The Obj-C runtime uses tagged pointers
+// to transparently optimize small objects.
+static bool IsTaggedObjCPointer(id obj) {
----------------
I still wonder what does synchronized itself do to lock them?
Since the optimization is transparent, it suggest that these things still have reference identity rather than values identity. But I fail to see how we respect this reference identity. Consider, we have two different objects that are small and converted to a tagger pointer with the same value (say, integer 1). Now we will use the same address for these 2 objects because they have the same value, so we think they are the same. Since we merge them we can get false deadlock reports and all kinds of bad stuff. But then I am confused how synchronized distinguish them.
================
Comment at: lib/tsan/rtl/tsan_interceptors_mac.cc:319
+ if (h.created()) {
+ *h = (uptr) InternalAlloc(/*size=*/1);
+ }
----------------
It's safer/better to use a user allocation. Internal allocations may not be covered by shadow in future (not sure it has not in all configurations). And mutexes have limited functionality in non-app mem.
Repository:
rCRT Compiler Runtime
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D56238/new/
https://reviews.llvm.org/D56238
More information about the llvm-commits
mailing list