/* APPLE LOCAL file radar 6083129 byref escapes */
/* { dg-do run { target *-*-darwin[1-2][0-9]* } } */
/* { dg-options "-fblocks" } */
/* { dg-skip-if "" { powerpc*-*-darwin* } { "-m64" } { "" } } */

#include <stdio.h>

extern "C" void abort(void);
extern "C" void _Block_object_assign(void *a, void *b, int flag){};

static int count;
extern "C" void _Block_object_dispose(void * arg, int flag) {
  printf ("%p\n", arg);
  ++count;
}

void *_NSConcreteStackBlock;

void FOO(int arg) {
  __block int X = 1234;
  if (arg) {
    __block int local_BYREF = 100;
    X += 100 + local_BYREF;
    return;
  }
  ^{ X++; };
  X = 1000;
}

int main() {
  FOO(1);
  if (count != 2)
    abort();

  count = 0;
  FOO(0);
  if (count != 1)
    abort();
  return 0;
}
