1 // 2 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 3 // See https://llvm.org/LICENSE.txt for license information. 4 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 5 6 /* 7 * recursiveassign.c 8 * testObjects 9 * 10 * Created by Blaine Garst on 12/3/08. 11 * 12 */ 13 14 // CONFIG rdar://6639533 15 16 // The compiler is prefetching x->forwarding before evaluting code that recomputes forwarding and so the value goes to a place that is never seen again. 17 18 #include <stdio.h> 19 #include <stdlib.h> 20 #include <Block.h> 21 22 main(int argc,char * argv[])23int main(int argc, char* argv[]) { 24 25 __block void (^recursive_copy_block)(int) = ^(int arg) { printf("got wrong Block\n"); exit(1); }; 26 27 28 recursive_copy_block = Block_copy(^(int i) { 29 if (i > 0) { 30 recursive_copy_block(i - 1); 31 } 32 else { 33 printf("done!\n"); 34 } 35 }); 36 37 38 recursive_copy_block(5); 39 40 printf("%s: Success\n", argv[0]); 41 return 0; 42 } 43 44