Index: tests/exceptions/.expect/defaults.txt
===================================================================
--- tests/exceptions/.expect/defaults.txt	(revision 7f9968adc291989fb495461dc2b178248a560216)
+++ tests/exceptions/.expect/defaults.txt	(revision 20ab637b8e80ddcd357d96ef68d5a48781f83372)
@@ -3,2 +3,8 @@
 jump default handler.
 Catch unhandled_exception.
+cross terminate throw
+cross terminate default
+cross terminate catch
+cross resume throw
+cross resume default
+cross resume catch
Index: tests/exceptions/defaults.cfa
===================================================================
--- tests/exceptions/defaults.cfa	(revision 7f9968adc291989fb495461dc2b178248a560216)
+++ tests/exceptions/defaults.cfa	(revision 20ab637b8e80ddcd357d96ef68d5a48781f83372)
@@ -30,5 +30,5 @@
 		throwResume (log_message){(char *)"Should be printed.\n"};
 	} catchResume (log_message * this) {
-		printf(this->virtual_table->msg(this));
+		printf("%s", this->virtual_table->msg(this));
 	}
 	// But we don't have to:
@@ -69,7 +69,33 @@
 }
 
+TRIVIAL_EXCEPTION(second);
+
+void cross_test(void) {
+	void defaultTerminationHandler(first &) {
+		printf("cross terminate default\n");
+		throw (second){};
+	}
+	void defaultResumptionHandler(first &) {
+		printf("cross resume default\n");
+		throwResume (second){};
+	}
+	try {
+		printf("cross terminate throw\n");
+		throw (first){};
+	} catch (second *) {
+		printf("cross terminate catch\n");
+	}
+	try {
+		printf("cross resume throw\n");
+		throwResume (first){};
+	} catchResume (second *) {
+		printf("cross resume catch\n");
+	}
+}
+
 int main(int argc, char * argv[]) {
 	log_test();
 	jump_test();
 	unhandled_test();
+	cross_test();
 }
