block-as-object.c   [plain text]


/* APPLE LOCAL file radar 5809099 */
/* compile-only test to test that we can cast back and forth a block pointer
   type to an 'id' type and sending a message to an object of block pointer type.
*/
/* { dg-do compile } */
/* { dg-options "-mmacosx-version-min=10.5 -ObjC" { target *-*-darwin* } } */
#import <Foundation/Foundation.h>

void bar() { }

void foo() {
   id object = [[NSObject new] init];
   void (^x)(void) = ^{ bar(); };
   void *y = (void *)x;
   x = (void (^)(void))y;
   /* Test for type-cast of an 'id' type to a block pointer. */
   x = (void (^)(void))[object result];

   /* Test for cat of a block pointer to an 'id'. */
   object = (id)x;

  /* Test for sending a message to a block pointer. */
  [x result];
}