/* Extracted from boehm-gc/os_dep.c on Darwin. It caused an ICE when trying to merge alias information from two pointers that had different type memory tags. */ typedef int thread_state_flavor_t; typedef int exception_behavior_t; typedef unsigned int exception_mask_t; typedef unsigned int exception_handler_t; typedef unsigned int mach_msg_type_number_t; static struct { mach_msg_type_number_t count; exception_mask_t masks[16]; exception_handler_t ports[16]; thread_state_flavor_t flavors[16]; } GC_old_exc_ports; typedef exception_handler_t *exception_handler_array_t; typedef thread_state_flavor_t *exception_flavor_array_t; int task_get_exception_ports ( mach_msg_type_number_t *masksCnt, exception_handler_array_t old_handlers, exception_flavor_array_t old_flavors ); void GC_dirty_init() { task_get_exception_ports(GC_old_exc_ports.masks, GC_old_exc_ports.ports, GC_old_exc_ports.flavors); }