Index: src/examples/gc_no_raii/.gitignore
===================================================================
--- src/examples/gc_no_raii/.gitignore	(revision 29ad0aca9f324870dae03dc08594b28747857c11)
+++ src/examples/gc_no_raii/.gitignore	(revision 29ad0aca9f324870dae03dc08594b28747857c11)
@@ -0,0 +1,3 @@
+.tags
+cfa
+build/
Index: src/examples/gc_no_raii/bug-repro/void_pointer.c
===================================================================
--- src/examples/gc_no_raii/bug-repro/void_pointer.c	(revision 29ad0aca9f324870dae03dc08594b28747857c11)
+++ src/examples/gc_no_raii/bug-repro/void_pointer.c	(revision 29ad0aca9f324870dae03dc08594b28747857c11)
@@ -0,0 +1,18 @@
+#include <stddef.h>
+#include <stdint.h>
+
+//inline intptr_t test(void* address)
+//{
+//	return (intptr_t)address;
+//}
+
+//inline void* test2(void* address)
+//{
+//	return address & 0xFF;
+//}
+
+inline int test()
+{
+	void* d = 0;
+	return (int)d;
+}
Index: src/examples/gc_no_raii/src/gcpointers.c
===================================================================
--- src/examples/gc_no_raii/src/gcpointers.c	(revision 0f9e4403ea9f501a7993ba07c5badb03d4c58742)
+++ src/examples/gc_no_raii/src/gcpointers.c	(revision 29ad0aca9f324870dae03dc08594b28747857c11)
@@ -4,5 +4,5 @@
 #include "internal/collector.h"
 #include "internal/object_header.h"
-// #include "internal/state.h"
+#include "internal/state.h"
 
 // void register_ptr(gcpointer_t* this)
@@ -12,7 +12,10 @@
 // 	_Bool managed = gc_is_managed(this);
 //
+//
+// 	gc_state* state = gc_get_state();
+// 	gc_object_header* obj = 0;
 // 	if(managed)
 // 	{
-// 		gc_object_header* obj = gc_get_object_for_ref(gc_get_state(), (void*)this);
+// 		obj = gc_get_object_for_ref(state, (void*)this);
 // 		check(obj);
 // 		check(gc_obj_is_valide(obj));
@@ -24,5 +27,5 @@
 // 	else
 // 	{
-// 		gc_object_header* obj = gc_get_object_ptr((void*)this->ptr);
+// 		obj = gc_get_object_ptr(state, (void*)this->ptr);
 // 		check(obj);
 // 		check(gc_obj_is_valide(obj));
Index: src/examples/gc_no_raii/src/gctest.c
===================================================================
--- src/examples/gc_no_raii/src/gctest.c	(revision 0f9e4403ea9f501a7993ba07c5badb03d4c58742)
+++ src/examples/gc_no_raii/src/gctest.c	(revision 29ad0aca9f324870dae03dc08594b28747857c11)
@@ -4,6 +4,4 @@
 
 int main() {
-	ofstream *sout = ofstream_stdout();
-	ifstream *sin = ifstream_stdin();
 	sout | "Bonjour au monde!\n";
 }
Index: src/examples/gc_no_raii/src/internal/collector.c
===================================================================
--- src/examples/gc_no_raii/src/internal/collector.c	(revision 0f9e4403ea9f501a7993ba07c5badb03d4c58742)
+++ src/examples/gc_no_raii/src/internal/collector.c	(revision 29ad0aca9f324870dae03dc08594b28747857c11)
@@ -8,135 +8,137 @@
 #include <fstream>
 
-#include "memory_pool.h"
+// #include "state.h"
+// #include "gcpointers.h"
+// #include "memory_pool.h"
 
-void* gc_finish_alloc_block(void* block, size_t actual_size, size_t target_size);
-void gc_assign_reference(void** ref, gc_object_header* ptr);
+// void* gc_finish_alloc_block(void* block, size_t actual_size, size_t target_size);
+// void gc_assign_reference(void** ref, gc_object_header* ptr);
 
-gcpointer_t** gc_find_previous_ref(gcpointer_t* target)
-{
-	if(!(target)) return NULL;
+// gcpointer_t** gc_find_previous_ref(gcpointer_t* target)
+// {
+// 	if(!(target)) return NULL;
+//
+// 	bool managed = gc_is_managed(target);
+// 	gc_object_header* obj = gc_get_object_ptr((void*)target->ptr);
+//
+// 	check(gc_is_valide(obj));
+//
+// 	gcpointer_t** prev_next_ptr = managed ? &obj->type_chain : &obj->root_chain;
+// 	while((*prev_next_ptr) && (*prev_next_ptr) != target)
+// 	{
+// 		prev_next_ptr = &(*prev_next_ptr)->next;
+// 	}
+//
+// 	return prev_next_ptr;
+// }
 
-	bool managed = gc_is_managed(target);
-	gc_object_header* obj = gc_get_object_ptr((void*)target->ptr);
-
-	check(gc_is_valide(obj));
-
-	gcpointer_t** prev_next_ptr = managed ? &obj->type_chain : &obj->root_chain;
-	while((*prev_next_ptr) && (*prev_next_ptr) != target)
-	{
-		prev_next_ptr = &(*prev_next_ptr)->next;
-	}
-
-	return prev_next_ptr;
-}
-
-void* gc_allocate(size_t target_size)
-{
-	size_t size = gc_compute_size(target_size + sizeof(gc_object_header));
-
-	check(size < POOL_SIZE_BYTES);
-
-	void* block = NULL;
-	gc_state* gc = gc_get_state();
-
-	if((intptr_t)(block = gc_try_allocate(gc, size))) return gc_finish_alloc_block(block, size, target_size);
-
-	gc_collect(gc);
-
-	if((intptr_t)(block = gc_try_allocate(gc, size))) return gc_finish_alloc_block(block, size, target_size);
-
-	gc_allocate_pool(gc);
-
-	if((intptr_t)(block = gc_try_allocate(gc, size))) return gc_finish_alloc_block(block, size, target_size);
-
-	ofstream_stderr() | "ERROR: allocation in new pool failed" | endl;
-	abort();
-
-	return NULL;
-}
-
-void* gc_finish_alloc_block(void* block, size_t actual_size, size_t target_size)
-{
-	void* data = (void*)(((intptr_t)block) + sizeof(gc_object_header));
-	void* header = block;
-
-	check(((intptr_t)data) > ((intptr_t)block));
-	check(((intptr_t)data) >= ((intptr_t)header));
-	check(is_aligned(data));
-	check(((intptr_t)data) + target_size <= ((intptr_t)block) + actual_size);
-
-	gc_object_header* obj = gc_object_header_placement_ctor(header, actual_size);
-
-	// (void)obj; //remove unsused warning since this is for debug
-	check(obj == get_object_ptr(data));
-
-	gc_register_allocation(gc_get_state(), actual_size);
-
-	return data;
-}
-
-void gc_process_reference(void** ref, worklist_t* worklist)
-{
-	check(!gc_is_in_heap(gc_get_state(), ref));
-
-	gc_object_header* ptr = gc_get_object_ptr(*ref);
-	if(ptr)
-	{
-		if(!ptr->is_forwarded)
-		{
-			gc_copy_object(ptr);
-
-			gc_scan_object(ptr->forward, worklist);
-
-			gc_assign_reference(ref, ptr->forward);
-		}
-		else
-		{
-			//duplication to help debug
-			gc_assign_reference(ref, ptr->forward);
-		}
-	}
-}
-
-void gc_assign_reference(void** ref, gc_object_header* ptr)
-{
-	void* address = (void*)(((intptr_t)ptr) + sizeof(gc_object_header));
-
-	gc_write_aligned_ptr(ref, address);
-}
-
-gc_object_header* gc_copy_object(gc_object_header* ptr)
-{
-	check(!ptr->forward);
-	check(!ptr->is_forwarded);
-	check(gc_is_from_space(gc_pool_of(ptr)));
-
-	gc_memory_pool* pool = gc_pool_of(ptr)->mirror;
-
-	void* new_block = gc_pool_allocate(pool, ptr->size, true);
-
-	memcpy(new_block, ptr, ptr->size);
-
-	gc_object_header* fwd_ptr = gc_object_header_placement_copy_ctor(new_block, ptr);
-
-	ptr->forward = fwd_ptr;
-	ptr->is_forwarded = true;
-
-	return fwd_ptr;
-}
-
-void gc_scan_object(gc_object_header* object, worklist_t* worklist)
-{
-	gcpointer_t* field = object->type_chain;
-	while(field)
-	{
-		check(((intptr_t)field) > ((intptr_t)object));
-		check(((intptr_t)field) < ((intptr_t)((intptr_t)object) + object->size));
-
-		check(gc_is_in_to_space(gc_get_state(), &type->ptr));
-
-		push_back(worklist, &field->ptr);
-
-		field = field->next;
-	}
-}
+// void* gc_allocate(size_t target_size)
+// {
+// 	size_t size = gc_compute_size(target_size + sizeof(gc_object_header));
+//
+// 	check(size < POOL_SIZE_BYTES);
+//
+// 	void* block = NULL;
+// 	gc_state* gc = gc_get_state();
+//
+// 	if((intptr_t)(block = gc_try_allocate(gc, size))) return gc_finish_alloc_block(block, size, target_size);
+//
+// 	gc_collect(gc);
+//
+// 	if((intptr_t)(block = gc_try_allocate(gc, size))) return gc_finish_alloc_block(block, size, target_size);
+//
+// 	gc_allocate_pool(gc);
+//
+// 	if((intptr_t)(block = gc_try_allocate(gc, size))) return gc_finish_alloc_block(block, size, target_size);
+//
+// 	ofstream_stderr() | "ERROR: allocation in new pool failed" | endl;
+// 	abort();
+//
+// 	return NULL;
+// }
+//
+// void* gc_finish_alloc_block(void* block, size_t actual_size, size_t target_size)
+// {
+// 	void* data = (void*)(((intptr_t)block) + sizeof(gc_object_header));
+// 	void* header = block;
+//
+// 	check(((intptr_t)data) > ((intptr_t)block));
+// 	check(((intptr_t)data) >= ((intptr_t)header));
+// 	check(is_aligned(data));
+// 	check(((intptr_t)data) + target_size <= ((intptr_t)block) + actual_size);
+//
+// 	gc_object_header* obj = gc_object_header_placement_ctor(header, actual_size);
+//
+// 	// (void)obj; //remove unsused warning since this is for debug
+// 	check(obj == get_object_ptr(data));
+//
+// 	gc_register_allocation(gc_get_state(), actual_size);
+//
+// 	return data;
+// }
+//
+// void gc_process_reference(void** ref, worklist_t* worklist)
+// {
+// 	check(!gc_is_in_heap(gc_get_state(), ref));
+//
+// 	gc_object_header* ptr = gc_get_object_ptr(*ref);
+// 	if(ptr)
+// 	{
+// 		if(!ptr->is_forwarded)
+// 		{
+// 			gc_copy_object(ptr);
+//
+// 			gc_scan_object(ptr->forward, worklist);
+//
+// 			gc_assign_reference(ref, ptr->forward);
+// 		}
+// 		else
+// 		{
+// 			//duplication to help debug
+// 			gc_assign_reference(ref, ptr->forward);
+// 		}
+// 	}
+// }
+//
+// void gc_assign_reference(void** ref, gc_object_header* ptr)
+// {
+// 	void* address = (void*)(((intptr_t)ptr) + sizeof(gc_object_header));
+//
+// 	gc_write_aligned_ptr(ref, address);
+// }
+//
+// gc_object_header* gc_copy_object(gc_object_header* ptr)
+// {
+// 	check(!ptr->forward);
+// 	check(!ptr->is_forwarded);
+// 	check(gc_is_from_space(gc_pool_of(ptr)));
+//
+// 	gc_memory_pool* pool = gc_pool_of(ptr)->mirror;
+//
+// 	void* new_block = gc_pool_allocate(pool, ptr->size, true);
+//
+// 	memcpy(new_block, ptr, ptr->size);
+//
+// 	gc_object_header* fwd_ptr = gc_object_header_placement_copy_ctor(new_block, ptr);
+//
+// 	ptr->forward = fwd_ptr;
+// 	ptr->is_forwarded = true;
+//
+// 	return fwd_ptr;
+// }
+//
+// void gc_scan_object(gc_object_header* object, worklist_t* worklist)
+// {
+// 	gcpointer_t* field = object->type_chain;
+// 	while(field)
+// 	{
+// 		check(((intptr_t)field) > ((intptr_t)object));
+// 		check(((intptr_t)field) < ((intptr_t)((intptr_t)object) + object->size));
+//
+// 		check(gc_is_in_to_space(gc_get_state(), &type->ptr));
+//
+// 		push_back(worklist, &field->ptr);
+//
+// 		field = field->next;
+// 	}
+// }
Index: src/examples/gc_no_raii/src/internal/collector.h
===================================================================
--- src/examples/gc_no_raii/src/internal/collector.h	(revision 0f9e4403ea9f501a7993ba07c5badb03d4c58742)
+++ src/examples/gc_no_raii/src/internal/collector.h	(revision 29ad0aca9f324870dae03dc08594b28747857c11)
@@ -7,5 +7,6 @@
 //
 // #include "gcpointers.h"
-// #include "internal/gc_tools.h"
+#include "state.h"
+#include "internal/gc_tools.h"
 // #include "internal/globals.h"
 // #include "internal/object_header.h"
@@ -13,9 +14,9 @@
 #include "tools/worklist.h"
 
-// inline bool gc_is_managed(void* address)
-// {
-// 	return gc_is_in_heap(gc_get_state(), address);
-// }
-//
+inline bool gc_is_managed(void* address)
+{
+	return gc_is_in_heap(gc_get_state(), address);
+}
+
 // inline gc_object_header* gc_get_object_ptr(void* ptr)
 // {
@@ -23,5 +24,5 @@
 // 	return ((gc_object_header*)clean) - 1;
 // }
-//
+
 // inline gc_memory_pool* gc_pool_of(void* address)
 // {
Index: src/examples/gc_no_raii/src/internal/gc_tools.h
===================================================================
--- src/examples/gc_no_raii/src/internal/gc_tools.h	(revision 0f9e4403ea9f501a7993ba07c5badb03d4c58742)
+++ src/examples/gc_no_raii/src/internal/gc_tools.h	(revision 29ad0aca9f324870dae03dc08594b28747857c11)
@@ -12,29 +12,29 @@
 }
 
-inline void* gc_get_aligned_ptr(void* address)
-{
-	return (void*)(((intptr_t)address) & (OBJECT_PTR_MASK));
-}
-
-inline void* gc_write_aligned_ptr(void** reference, void* address)
-{
-	size_t ref_last_bits = ((intptr_t)*reference) & (~OBJECT_PTR_MASK);
-
-      size_t new_val = ((intptr_t)address) & OBJECT_PTR_MASK;
-
-      (*reference) = (void*)(new_val | ref_last_bits);
-
-	return *reference;
-}
-
-inline size_t gc_compute_size(size_t size)
-{
-	size_t word_size = ((size - 1) / OBJECT_ALLIGNMENT) + 1;
-	size_t ret = word_size * OBJECT_ALLIGNMENT;
-
-	check(ret >= size);
-	check((ret % OBJECT_ALLIGNMENT) == 0);
-	check( ((size % OBJECT_ALLIGNMENT) != 0) || (ret == size) );
-
-	return ret;
-}
+// inline void* gc_get_aligned_ptr(void* address)
+// {
+// 	return (void*)(((intptr_t)address) & (OBJECT_PTR_MASK));
+// }
+//
+// inline void* gc_write_aligned_ptr(void** reference, void* address)
+// {
+// 	size_t ref_last_bits = ((intptr_t)*reference) & (~OBJECT_PTR_MASK);
+//
+//       size_t new_val = ((intptr_t)address) & OBJECT_PTR_MASK;
+//
+//       (*reference) = (void*)(new_val | ref_last_bits);
+//
+// 	return *reference;
+// }
+//
+// inline size_t gc_compute_size(size_t size)
+// {
+// 	size_t word_size = ((size - 1) / OBJECT_ALLIGNMENT) + 1;
+// 	size_t ret = word_size * OBJECT_ALLIGNMENT;
+//
+// 	check(ret >= size);
+// 	check((ret % OBJECT_ALLIGNMENT) == 0);
+// 	check( ((size % OBJECT_ALLIGNMENT) != 0) || (ret == size) );
+//
+// 	return ret;
+// }
Index: src/examples/gc_no_raii/src/internal/object_header.h
===================================================================
--- src/examples/gc_no_raii/src/internal/object_header.h	(revision 0f9e4403ea9f501a7993ba07c5badb03d4c58742)
+++ src/examples/gc_no_raii/src/internal/object_header.h	(revision 29ad0aca9f324870dae03dc08594b28747857c11)
@@ -7,5 +7,5 @@
 
 #if DEBUG
-	static const void* CANARY_VALUE = (void*)0xCAFEBABACAFEBABA;
+	static const long unsigned int CANARY_VALUE = 0xCAFEBABACAFEBABA;
 #endif
 
