block-escape-return1.c   [plain text]


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

#include <stdio.h>

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

static int count;
static 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;
}