xref: /aosp_15_r20/external/clang/test/CodeGenObjC/2009-01-26-WriteBarrier-2.m (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li// RUN: %clang_cc1 -fblocks -emit-llvm %s -fobjc-gc -o - | FileCheck %s
2*67e74705SXin Li
3*67e74705SXin Li// CHECK: objc_assign_strongCast
4*67e74705SXin Li// rdar://5541393
5*67e74705SXin Li
6*67e74705SXin Litypedef __SIZE_TYPE__ size_t;
7*67e74705SXin Livoid * malloc(size_t size);
8*67e74705SXin Li
9*67e74705SXin Litypedef struct {
10*67e74705SXin Li    void (^ivarBlock)(void);
11*67e74705SXin Li} StructWithBlock_t;
12*67e74705SXin Li
13*67e74705SXin Liint main(int argc, char *argv[]) {
14*67e74705SXin Li   StructWithBlock_t *swbp = (StructWithBlock_t *)malloc(sizeof(StructWithBlock_t*));
15*67e74705SXin Li   __block   int i = 10;
16*67e74705SXin Li   // assigning a Block into an struct slot should elicit a write-barrier under GC
17*67e74705SXin Li   swbp->ivarBlock = ^ { ++i; };
18*67e74705SXin Li   return 0;
19*67e74705SXin Li}
20