/* APPLE LOCAL file radar 5882266 */
/* { dg-do run { target *-*-darwin[1-2][0-9]* } } */
/* { dg-options "-mmacosx-version-min=10.5 -ObjC++ -fobjc-gc -framework Foundation" { target *-*-darwin* } } */
/* { dg-skip-if "" { powerpc*-*-darwin* } { "-m64" } { "" } } */

#import <Foundation/Foundation.h>
void * _NSConcreteStackBlock[32];
void _Block_byref_assign_copy(void * dst, void *src){}
void _Block_byref_release(void*src){}


int GlobalInt = 0;
int GlobalInt2 = 0;

id objc_assign_weak(id value, id *location) {
    GlobalInt = 1;
    *location = value;
    return value;
}

id objc_read_weak(id *location) {
    GlobalInt2 = 1;
    return *location;
}

@interface Foo : NSObject {
@public
    void (^__weak ivar)(void);
}
@end
@implementation Foo
@end


int main(char *argc, char *argv[]) {
  // an object should not be retained within a stack Block
  __block int i = 0;
  void (^local)(void);
  Foo *foo = [[Foo alloc] init];
  foo->ivar = ^ { ++i; };
  local = foo->ivar;
  if (GlobalInt2 == 1) {
    printf("%s: success\n", argv[0]);
    exit(0);
  } else {
    printf("%s: problem with weak read of ivar\n", argv[0]);
  }
  exit(1);
}
