Index: tests/exceptions/virtual-cast.cfa
===================================================================
--- tests/exceptions/virtual-cast.cfa	(revision e262b5e7ae4607ee657657e844dbceec3e42e659)
+++ tests/exceptions/virtual-cast.cfa	(revision e262b5e7ae4607ee657657e844dbceec3e42e659)
@@ -0,0 +1,76 @@
+// Testing the virtual cast, as part of strict inheritance.
+
+/* IMPORTANT: This test does not repersent the final feature set.
+ * We are missing a number of important aspects such as:
+ * + vtable type generation.
+ * + vtable instance generation, that might use different resolution rules.
+ * + Virtual syntax to force said generation on structures and traits.
+ * + Trait references/pointers that do the virtual_table lookup.
+ */
+
+#include <stdlib.hfa>
+#include <assert.h>
+
+struct alpha_vtable {
+	alpha_vtable const * const parent;
+	char (*code)(void);
+};
+
+struct alpha {
+	alpha_vtable const * virtual_table;
+};
+
+char ret_a(void) {
+	return 'a';
+}
+
+
+
+struct beta_vtable {
+	alpha_vtable const * const parent;
+	char (*code)(void);
+};
+
+struct beta {
+	beta_vtable const * virtual_table;
+};
+
+char ret_b(void) {
+	return 'b';
+}
+
+
+
+struct gamma_vtable {
+	beta_vtable const * const parent;
+	char (*code)(void);
+};
+
+struct gamma {
+	gamma_vtable const * virtual_table;
+};
+
+char ret_g(void) {
+	return 'g';
+}
+
+
+extern "C" {
+	alpha_vtable _alpha_vtable_instance = { 0, ret_a };
+	beta_vtable _beta_vtable_instance = { &_alpha_vtable_instance, ret_b };
+	gamma_vtable _gamma_vtable_instance = { &_beta_vtable_instance, ret_g };
+}
+
+int main (int argc, char * argv[]) {
+
+	gamma * tri = malloc(); tri->virtual_table = &_gamma_vtable_instance;
+	beta * mid = (virtual beta *)tri;
+	assert( 'g' == mid->virtual_table->code() );
+
+	alpha * top = malloc(); top->virtual_table = &_alpha_vtable_instance;
+	mid = (virtual beta *)top;
+	assert( ! mid );
+
+	free(tri);
+	free(top);
+}
Index: tests/exceptions/virtual-poly.cfa
===================================================================
--- tests/exceptions/virtual-poly.cfa	(revision e262b5e7ae4607ee657657e844dbceec3e42e659)
+++ tests/exceptions/virtual-poly.cfa	(revision e262b5e7ae4607ee657657e844dbceec3e42e659)
@@ -0,0 +1,79 @@
+// Test virtual casts with polymorphic types.
+
+/* IMPORTANT: The virtual system has not been finalized. However the
+ * exception system does depend on the work-in-progress version currently
+ * supported. That is also why the tests under the exception directory.
+ */
+
+#include <assert.h>
+
+struct mono_base_vtable {
+	mono_base_vtable const * const parent;
+};
+
+struct mono_base {
+	mono_base_vtable const * virtual_table;
+};
+
+forall(otype T)
+struct mono_child_vtable {
+	mono_base_vtable const * const parent;
+};
+
+forall(otype T)
+struct mono_child {
+	mono_child_vtable(T) const * virtual_table;
+};
+
+mono_base_vtable _mono_base_vtable_instance @= { 0 };
+mono_child_vtable(int) _mono_child_vtable_instance @= {
+	&_mono_base_vtable_instance
+};
+
+void mono_poly_test(void) {
+	mono_child(int) child = { &_mono_child_vtable_instance };
+	mono_base * base = (virtual mono_base *)&child;
+	assert(base);
+}
+
+forall(otype U)
+struct poly_base_vtable {
+	poly_base_vtable(U) const * const parent;
+};
+
+forall(otype U)
+struct poly_base {
+	poly_base_vtable(U) const * virtual_table;
+};
+
+forall(otype V)
+struct poly_child_vtable {
+	poly_base_vtable(V) const * const parent;
+};
+
+forall(otype V)
+struct poly_child {
+	poly_child_vtable(V) const * virtual_table;
+};
+
+poly_base_vtable(int) _poly_base_vtable_instance @= { 0 };
+poly_child_vtable(int) _poly_child_vtable_instance @= {
+	&_poly_base_vtable_instance
+};
+/* Resolver bug keeps me from adding these.
+poly_base_vtable(char) _poly_base_vtable_instance @= { 0 };
+poly_child_vtable(char) _poly_child_vtable_instance @= {
+	&_poly_base_vtable_instance
+};
+*/
+
+void poly_poly_test() {
+	poly_child(int) child = { &_poly_child_vtable_instance };
+	poly_base(int) * base = (virtual poly_base(int) *)&child;
+	assert(base);
+}
+
+int main(void) {
+	mono_poly_test();
+	poly_poly_test();
+}
