Index: libcfa/prelude/Makefile.am
===================================================================
--- libcfa/prelude/Makefile.am	(revision c64e979e5a72d932eb71ffb6dc8d5798b3ff3fac)
+++ libcfa/prelude/Makefile.am	(revision 60aaa51d44506578dbfd9b89b996a9ca2a971c8a)
@@ -55,5 +55,5 @@
 # create forward declarations for cfa builtins
 builtins.cf : builtins.c ${CC}
-	${AM_V_GEN}gcc ${AM_CFLAGS} -E -P ${<} -o ${@} -MD -MP -MF $(DEPDIR)/builtins.Po
+	${AM_V_GEN}gcc ${AM_CFLAGS} -E -P ${<} -o ${@} -MD -MP -MF $(DEPDIR)/builtins.Po -D__cforall
 	${AM_V_at}sed -i 's/builtins.o/builtins.cf/g' $(DEPDIR)/builtins.Po
 
Index: libcfa/prelude/Makefile.in
===================================================================
--- libcfa/prelude/Makefile.in	(revision c64e979e5a72d932eb71ffb6dc8d5798b3ff3fac)
+++ libcfa/prelude/Makefile.in	(revision 60aaa51d44506578dbfd9b89b996a9ca2a971c8a)
@@ -556,5 +556,5 @@
 # create forward declarations for cfa builtins
 builtins.cf : builtins.c ${CC}
-	${AM_V_GEN}gcc ${AM_CFLAGS} -E -P ${<} -o ${@} -MD -MP -MF $(DEPDIR)/builtins.Po
+	${AM_V_GEN}gcc ${AM_CFLAGS} -E -P ${<} -o ${@} -MD -MP -MF $(DEPDIR)/builtins.Po -D__cforall
 	${AM_V_at}sed -i 's/builtins.o/builtins.cf/g' $(DEPDIR)/builtins.Po
 
Index: libcfa/prelude/builtins.c
===================================================================
--- libcfa/prelude/builtins.c	(revision c64e979e5a72d932eb71ffb6dc8d5798b3ff3fac)
+++ libcfa/prelude/builtins.c	(revision 60aaa51d44506578dbfd9b89b996a9ca2a971c8a)
@@ -13,4 +13,28 @@
 // Update Count     : 95
 //
+
+// type that wraps a pointer and a destructor-like function - used in generating implicit destructor calls for struct members in user-defined functions
+// Note: needs to occur early, because it is used to generate destructor calls during code generation
+forall(dtype T)
+struct __Destructor {
+	T * object;
+	void (*dtor)(T *);
+};
+
+// defined destructor in the case that non-generated code wants to use __Destructor
+forall(dtype T)
+static inline void ^?{}(__Destructor(T) & x) {
+	if (x.object && x.dtor) {
+		x.dtor(x.object);
+	}
+}
+
+// easy interface into __Destructor's destructor for easy codegen purposes
+extern "C" {
+	forall(dtype T)
+	static inline void __destroy_Destructor(__Destructor(T) * dtor) {
+		^(*dtor){};
+	}
+}
 
 // exception implementation
