block-nested-copied-var.c   [plain text]


/* APPLE LOCAL file radar 5988451 - nested blocks */
/* This test is to make sure that the inner block uses the value of the
   copied-in variable at its point of declaration and not when block is envoked.
*/
/* { dg-do run { target *-*-darwin[1-2][0-9]* } } */
/* { dg-options "-mmacosx-version-min=10.6 -fblocks" { target *-*-darwin* } } */
/* { dg-skip-if "" { powerpc*-*-darwin* } { "-m64" } { "" } } */

extern void abort(void);

void * _NSConcreteStackBlock;


void callVoidVoid(void (^closure)(void)) {
    closure();
}

int main(int argc, char *argv[]) {
    int local_i_var = 1;

    void (^vv)(void) = ^{
        if (local_i_var != 1)
	  abort();
        if (argc > 0) {
            callVoidVoid(^{ if (local_i_var != 1) abort();  });
        }
    };

    local_i_var = 2;
    vv();
    return 0;
}