1// TEST_CONFIG 2 3#include "test.h" 4#include <mach/mach.h> 5#include <malloc/malloc.h> 6 7// Look for malloc zone "ObjC" iff OBJC_USE_INTERNAL_ZONE is set. 8// This fails if objc tries to allocate before checking its own 9// environment variables (rdar://6688423) 10 11int main() 12{ 13 if (is_guardmalloc()) { 14 // guard malloc confuses this test 15 succeed(__FILE__); 16 } 17 18 kern_return_t kr; 19 vm_address_t *zones; 20 unsigned int count, i; 21 BOOL has_objc = NO, want_objc = NO; 22 23 want_objc = (getenv("OBJC_USE_INTERNAL_ZONE") != NULL) ? YES : NO; 24 testprintf("want objc %s\n", want_objc ? "YES" : "NO"); 25 26 kr = malloc_get_all_zones(mach_task_self(), NULL, &zones, &count); 27 testassert(!kr); 28 for (i = 0; i < count; i++) { 29 const char *name = malloc_get_zone_name((malloc_zone_t *)zones[i]); 30 if (name) { 31 BOOL is_objc = (0 == strcmp(name, "ObjC_Internal")) ? YES : NO; 32 if (is_objc) has_objc = YES; 33 testprintf("zone %s\n", name); 34 } 35 } 36 37 testassert(want_objc == has_objc); 38 39 succeed(__FILE__); 40} 41