• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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)37 void callVoidVoid(voidVoid closure) {
38     closure();
39 }
40 
41 
testRoutine(const char * whoami)42 voidVoid 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[])56 int 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