Index: libcfa/src/concurrency/coroutine.cfa
===================================================================
--- libcfa/src/concurrency/coroutine.cfa	(revision 3318dff9124a356ddd12a7df7cd197d06e1f9722)
+++ libcfa/src/concurrency/coroutine.cfa	(revision 23edb610217d4c402e15ba1bbed250849c7da9f1)
@@ -78,4 +78,12 @@
 	free( desc->cancellation );
 	desc->cancellation = 0p;
+}
+
+// helper for popping from coroutine's ehm buffer
+inline nonlocal_exception * pop_ehm_head( coroutine$ * this ) {
+    lock( this->ehm_state.buffer_lock __cfaabi_dbg_ctx2 );
+    nonlocal_exception * nl_ex = pop_head( this->ehm_state.ehm_buffer );
+    unlock( this->ehm_state.buffer_lock );
+    return nl_ex;
 }
 
@@ -128,4 +136,21 @@
 
 void ^?{}(coroutine$& this) libcfa_public {
+    // handle any leftover pending non-local exceptions
+    nonlocal_exception * nl_ex = pop_ehm_head( &this );
+    unsigned unhandled_ex = 0;
+    
+    // if any leftover exceptions handle 
+    while ( nl_ex != 0p ){
+        unhandled_ex++;
+        free( nl_ex->the_exception );
+        free( nl_ex );
+        nl_ex = pop_ehm_head( &this );
+    }
+
+    #ifdef __CFA_DEBUG__
+    if ( unhandled_ex > 0 )
+        printf( "Warning: Coroutine %p exited with %u pending nonlocal exceptions.\n", &this, unhandled_ex );
+    #endif
+
 	if(this.state != Halted && this.state != Start && this.state != Primed) {
 		coroutine$ * src = active_coroutine();
@@ -291,12 +316,4 @@
 // non local ehm routines
 
-// helper for popping from coroutine's ehm buffer
-inline nonlocal_exception * pop_ehm_head( coroutine$ * this ) {
-    lock( this->ehm_state.buffer_lock __cfaabi_dbg_ctx2 );
-    nonlocal_exception * nl_ex = pop_head( this->ehm_state.ehm_buffer );
-    unlock( this->ehm_state.buffer_lock );
-    return nl_ex;
-}
-
 void defaultResumeAtHandler( exception_t * except ) {
     __cfaehm_allocate_exception( except );
