1/* 2 * Copyright (c) 2010 Apple Inc. All rights reserved. 3 * 4 * @APPLE_LLVM_LICENSE_HEADER@ 5 */ 6 7// TEST_CONFIG 8 9#include <stdio.h> 10#include <Block.h> 11#include <Block_private.h> 12#include <stdlib.h> 13#include "test.h" 14 15int cumulation = 0; 16 17int doSomething(int i) { 18 cumulation += i; 19 return cumulation; 20} 21 22void dirtyStack() { 23 int i = (int)random(); 24 int j = doSomething(i); 25 int k = doSomething(j); 26 doSomething(i + j + k); 27} 28 29typedef void (^voidVoid)(void); 30 31voidVoid testFunction() { 32 int i = (int)random(); 33 __block voidVoid inner = ^{ doSomething(i); }; 34 //printf("inner, on stack, is %p\n", (void*)inner); 35 /*__block*/ voidVoid outer = ^{ 36 //printf("will call inner block %p\n", (void *)inner); 37 inner(); 38 }; 39 //printf("outer looks like: %s\n", _Block_dump(outer)); 40 voidVoid result = Block_copy(outer); 41 //Block_release(inner); 42 return result; 43} 44 45 46int main() { 47 voidVoid block = testFunction(); 48 dirtyStack(); 49 block(); 50 Block_release(block); 51 52 succeed(__FILE__); 53} 54