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
33typedef void (^voidVoid)(void);
34
35voidVoid dummy;
36
37void callVoidVoid(voidVoid closure) {
38    closure();
39}
40
41
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
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