1/*
2 * Copyright (c) 2009 Apple Inc. All rights reserved.
3 *
4 * @APPLE_APACHE_LICENSE_HEADER_START@
5 *
6 * Licensed under the Apache License, Version 2.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
9 *
10 *     http://www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
17 *
18 * @APPLE_APACHE_LICENSE_HEADER_END@
19 */
20//
21//  weakstack.m
22//  gctests
23//
24//  Created by Blaine Garst on 11/3/08.
25//  Copyright 2008 __MyCompanyName__. All rights reserved.
26//
27
28
29// CONFIG GC -C99
30
31#import <Foundation/Foundation.h>
32#import <objc/objc-auto.h>
33
34enum {
35    magic = 10
36};
37
38void doCollect() {
39    int array[magic];
40    for (int i = 0; i < magic; ++i)
41        array[i] = -1;
42    NSGarbageCollector *collector = [NSGarbageCollector defaultCollector];
43    [collector collectIfNeeded];
44    [collector collectExhaustively];
45    for (int i = 0; i < magic; ++i) {
46        if (array[i] != -1) {
47            printf("stack was cleared!!!\n");
48            exit(1);
49        }
50    }
51}
52
53void registerStackLocation(int i) {
54    int array[i];
55    id x = nil;
56    //printf("address of x is %p\n", x);
57    objc_assign_weak([NSObject new], &x);   // allowed, but broken
58}
59
60void testFunction() {
61    for (int i = 0; i < magic; ++i) {
62        registerStackLocation(i);
63    }
64    doCollect();
65}
66
67int main(int argc, char *argv[]) {
68    testFunction();
69    printf("%s: success\n", argv[0]);
70    return 0;
71}
72
73
74
75