1 // 2 // The LLVM Compiler Infrastructure 3 // 4 // This file is distributed under the University of Illinois Open Source 5 // License. See LICENSE.TXT for details. 6 7 /* 8 * byrefcopyint.c 9 * testObjects 10 * 11 * Created by Blaine Garst on 12/1/08. 12 * 13 */ 14 15 // 16 // byrefcopyid.m 17 // testObjects 18 // 19 // Created by Blaine Garst on 5/13/08. 20 // 21 22 // Tests copying of blocks with byref ints 23 // CONFIG rdar://6414583 -C99 24 25 #include <stdio.h> 26 #include <string.h> 27 #include <Block.h> 28 #include <Block_private.h> 29 30 31 32 33 typedef void (^voidVoid)(void); 34 35 voidVoid dummy; 36 callVoidVoid(voidVoid closure)37void callVoidVoid(voidVoid closure) { 38 closure(); 39 } 40 41 testRoutine(const char * whoami)42voidVoid testRoutine(const char *whoami) { 43 __block int dumbo = strlen(whoami); 44 dummy = ^{ 45 //printf("incring dumbo from %d\n", dumbo); 46 ++dumbo; 47 }; 48 49 50 voidVoid copy = Block_copy(dummy); 51 52 53 return copy; 54 } 55 main(int argc,char * argv[])56int main(int argc, char *argv[]) { 57 voidVoid array[100]; 58 for (int i = 0; i < 100; ++i) { 59 array[i] = testRoutine(argv[0]); 60 array[i](); 61 } 62 for (int i = 0; i < 100; ++i) { 63 Block_release(array[i]); 64 } 65 66 67 printf("%s: success\n", argv[0]); 68 return 0; 69 } 70