1/* 2 * Copyright (c) 2010 Apple Inc. All rights reserved. 3 * 4 * @APPLE_LLVM_LICENSE_HEADER@ 5 */ 6 7// 8// byrefgc.m 9// testObjects 10// 11// Created by Blaine Garst on 5/16/08. 12// Copyright 2008 __MyCompanyName__. All rights reserved. 13// 14 15// TEST_CONFIG SDK=macosx 16// TEST_CFLAGS -framework Foundation 17 18 19#import <objc/objc-auto.h> 20#import <Foundation/Foundation.h> 21#import <stdio.h> 22#import <Block.h> 23#import "test.h" 24 25int DidFinalize = 0; 26int GotHi = 0; 27 28int VersionCounter = 0; 29 30@interface TestObject : NSObject { 31 int version; 32} 33- (void) hi; 34@end 35 36@implementation TestObject 37 38 39- (id)init { 40 version = VersionCounter++; 41 return self; 42} 43 44- (void)finalize { 45 DidFinalize++; 46 [super finalize]; 47} 48- (void) hi { 49 GotHi++; 50} 51 52@end 53 54 55void (^get_block(void))(void) { 56 __block TestObject * to = [[TestObject alloc] init]; 57 return [^{ [to hi]; to = [[TestObject alloc] init]; } copy]; 58} 59 60int main() { 61 62 void (^voidvoid)(void) = get_block(); 63 voidvoid(); 64 voidvoid(); 65 voidvoid(); 66 voidvoid(); 67 voidvoid(); 68 voidvoid(); 69 voidvoid = nil; 70 for (int i = 0; i < 8000; ++i) { 71 [NSObject new]; 72 } 73 if (objc_collectingEnabled()) { 74 objc_collect(OBJC_EXHAUSTIVE_COLLECTION|OBJC_WAIT_UNTIL_DONE); 75 if ((DidFinalize + 2) < VersionCounter) { 76 fail("didn't recover all objects %d/%d", DidFinalize, VersionCounter); 77 } 78 } 79 80 succeed(__FILE__); 81} 82