1/* 2 * Copyright (c) 2010 Apple Inc. All rights reserved. 3 * 4 * @APPLE_LLVM_LICENSE_HEADER@ 5 */ 6 7// TEST_CONFIG rdar://6416474 8// was rdar://5847976 9// was rdar://6348320 10 11#include <stdio.h> 12#include <Block.h> 13#include "test.h" 14 15int main() { 16 __block void (^recursive_local_block)(int); 17 18 testprintf("recursive_local_block is a local recursive block\n"); 19 recursive_local_block = ^(int i) { 20 testprintf("%d\n", i); 21 if (i > 0) { 22 recursive_local_block(i - 1); 23 } 24 }; 25 26 testprintf("recursive_local_block's address is %p, running it:\n", (void*)recursive_local_block); 27 recursive_local_block(5); 28 29 testprintf("Creating other_local_block: a local block that calls recursive_local_block\n"); 30 31 void (^other_local_block)(int) = ^(int i) { 32 testprintf("other_local_block running\n"); 33 recursive_local_block(i); 34 }; 35 36 testprintf("other_local_block's address is %p, running it:\n", (void*)other_local_block); 37 38 other_local_block(5); 39 40 testprintf("Creating other_copied_block: a Block_copy of a block that will call recursive_local_block\n"); 41 42 void (^other_copied_block)(int) = Block_copy(^(int i) { 43 testprintf("other_copied_block running\n"); 44 recursive_local_block(i); 45 }); 46 47 testprintf("other_copied_block's address is %p, running it:\n", (void*)other_copied_block); 48 49 other_copied_block(5); 50 51 __block void (^recursive_copy_block)(int); 52 53 testprintf("Creating recursive_copy_block: a Block_copy of a block that will call recursive_copy_block recursively\n"); 54 55 recursive_copy_block = Block_copy(^(int i) { 56 testprintf("%d\n", i); 57 if (i > 0) { 58 recursive_copy_block(i - 1); 59 } 60 }); 61 62 testprintf("recursive_copy_block's address is %p, running it:\n", (void*)recursive_copy_block); 63 64 recursive_copy_block(5); 65 66 succeed(__FILE__); 67} 68