186d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst// 286d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst// The LLVM Compiler Infrastructure 386d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst// 486d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst// This file is distributed under the University of Illinois Open Source 586d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst// License. See LICENSE.TXT for details. 686d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst 786d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst// 886d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst// nullblockisa.m 986d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst// testObjects 1086d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst// 1186d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst// Created by Blaine Garst on 9/24/08. 1286d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst// 1386d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst// CONFIG rdar://6244520 1486d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst 1586d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst 1686d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst 1786d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst#include <stdio.h> 1886d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst#include <stdlib.h> 1986d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst#include <Block_private.h> 2086d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst 2186d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst 2286d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garstvoid check(void (^b)(void)) { 2386d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst struct _custom { 2486d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst struct Block_layout layout; 2586d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst struct Block_byref *innerp; 2686d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst } *custom = (struct _custom *)(void *)(b); 2786d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst //printf("block is at %p, size is %lx, inner is %p\n", (void *)b, Block_size(b), innerp); 2886d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst if (custom->innerp->isa != (void *)NULL) { 2986d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst printf("not a NULL __block isa\n"); 3086d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst exit(1); 3186d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst } 3286d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst return; 3386d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst} 3486d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst 3586d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garstint main(int argc, char *argv[]) { 3686d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst 3786d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst __block int i; 3886d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst 3986d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst check(^{ printf("%d\n", ++i); }); 4086d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst printf("%s: success\n", argv[0]); 4186d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst return 0; 4286d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst} 4386d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst 44