block-global-byref.c   [plain text]


/* APPLE LOCAL file radar 5803600 */
/* Test that all global variables referenced in blocks are treated as 'byref' as default. */
/* { dg-do run { target *-*-darwin[1-2][0-9]* } } */
/* { dg-options "-mmacosx-version-min=10.5 -fblocks" { target *-*-darwin* } } */
/* { dg-skip-if "" { powerpc*-*-darwin* } { "-m64" } { "" } } */

#include <stdio.h>
void * _NSConcreteStackBlock;

void CallBlock (void (^voidvoidBlock)(void)) {
   voidvoidBlock();
}

int glob = 10;
static int stat = 10;

int foo() {
    static int local = 10;
    CallBlock( ^ {++glob; ++stat; ++local; 
		  CallBlock(^ { ++glob; ++stat; ++local; }); 
		  ++glob; ++stat; ++local; });

    if (glob != 13 || stat != 13 || local != 13)
      return 1;
    return 0;
}

int main()
{
  return foo ();
}