186d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst// 286d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst// The LLVM Compiler Infrastructure 386d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst// 486d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst// This file is distributed under the University of Illinois Open Source 586d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst// License. See LICENSE.TXT for details. 686d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst 786d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst/* 886d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst * byrefcopyint.c 986d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst * testObjects 1086d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst * 1186d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst * Created by Blaine Garst on 12/1/08. 1286d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst * 1386d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst */ 1486d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst 1586d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst// 1686d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst// byrefcopyid.m 1786d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst// testObjects 1886d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst// 1986d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst// Created by Blaine Garst on 5/13/08. 2086d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst// 2186d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst 2286d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst// Tests copying of blocks with byref ints 2386d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst// CONFIG rdar://6414583 -C99 2486d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst 2586d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst#include <stdio.h> 2686d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst#include <string.h> 2786d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst#include <Block.h> 2886d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst#include <Block_private.h> 2986d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst 3086d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst 3186d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst 3286d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst 3386d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garsttypedef void (^voidVoid)(void); 3486d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst 3586d0ba4286ec42dcd055bd22434c7f40009834bdBlaine GarstvoidVoid dummy; 3686d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst 3786d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garstvoid callVoidVoid(voidVoid closure) { 3886d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst closure(); 3986d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst} 4086d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst 4186d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst 4286d0ba4286ec42dcd055bd22434c7f40009834bdBlaine GarstvoidVoid testRoutine(const char *whoami) { 4386d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst __block int dumbo = strlen(whoami); 4486d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst dummy = ^{ 4586d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst //printf("incring dumbo from %d\n", dumbo); 4686d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst ++dumbo; 4786d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst }; 4886d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst 4986d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst 5086d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst voidVoid copy = Block_copy(dummy); 5186d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst 5286d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst 5386d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst return copy; 5486d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst} 5586d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst 5686d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garstint main(int argc, char *argv[]) { 5786d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst voidVoid array[100]; 5886d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst for (int i = 0; i < 100; ++i) { 5986d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst array[i] = testRoutine(argv[0]); 6086d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst array[i](); 6186d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst } 6286d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst for (int i = 0; i < 100; ++i) { 6386d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst Block_release(array[i]); 6486d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst } 6586d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst 6686d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst 6786d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst printf("%s: success\n", argv[0]); 6886d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst return 0; 6986d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst} 70