diff options
Diffstat (limited to 'test/CodeGenObjC/objc2-write-barrier-3.m')
-rw-r--r-- | test/CodeGenObjC/objc2-write-barrier-3.m | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/test/CodeGenObjC/objc2-write-barrier-3.m b/test/CodeGenObjC/objc2-write-barrier-3.m new file mode 100644 index 000000000000..2fb416b79b2f --- /dev/null +++ b/test/CodeGenObjC/objc2-write-barrier-3.m @@ -0,0 +1,47 @@ +// RUN: clang-cc -triple x86_64-apple-darwin10 -fobjc-gc -emit-llvm -o %t %s && +// RUN: grep objc_assign_ivar %t | count 3 && +// RUN: grep objc_assign_strongCast %t | count 6 && +// RUN: true + +struct Slice { + void *__strong * items; +}; + +typedef struct Slice Slice; + +@interface ISlice { +@public + void *__strong * IvarItem; +} +@end + +typedef void (^observer_block_t)(id object); +@interface Observer { +@public + observer_block_t block; +} +@end + + +void foo (int i) { + // storing into an array of strong pointer types. + void *__strong* items; + items[i] = 0; + + // storing indirectly into an array of strong pointer types. + void *__strong* *vitems; + *vitems[i] = 0; + + Slice *slice; + slice->items = 0; + // storing into a struct element of an array of strong pointer types. + slice->items[i] = 0; + + ISlice *islice; + islice->IvarItem = 0; + // Storing into an ivar of an array of strong pointer types. + islice->IvarItem[i] = (void*)0; + + Observer *observer; + observer->block = 0; +} |