Index: src/Concurrency/Keywords.cc
===================================================================
--- src/Concurrency/Keywords.cc	(revision 4744074cedf4399dd21f7ed0921b4f07f5f7064d)
+++ src/Concurrency/Keywords.cc	(revision b5831132d4fbaaf40970357ae0e068daa9ad3e5e)
@@ -414,7 +414,5 @@
 		if ( type_decl && isDestructorFor( decl, type_decl ) )
 			dtor_decl = decl;
-		else if ( vtable_name.empty() )
-			;
-		else if( !decl->has_body() )
+		else if ( vtable_name.empty() || !decl->has_body() )
 			;
 		else if ( auto param = isMainFor( decl, cast_target ) ) {
@@ -428,6 +426,17 @@
 			std::list< Expression * > poly_args = { new TypeExpr( struct_type->clone() ) };
 			ObjectDecl * vtable_object = Virtual::makeVtableInstance(
+				"_default_vtable_object_declaration",
 				vtable_decl->makeInst( poly_args ), struct_type, nullptr );
 			declsToAddAfter.push_back( vtable_object );
+			declsToAddAfter.push_back(
+				new ObjectDecl(
+					Virtual::concurrentDefaultVTableName(),
+					Type::Const,
+					LinkageSpec::Cforall,
+					/* bitfieldWidth */ nullptr,
+					new ReferenceType( Type::Const, vtable_object->type->clone() ),
+					new SingleInit( new VariableExpr( vtable_object ) )
+				)
+			);
 			declsToAddAfter.push_back( Virtual::makeGetExceptionFunction(
 				vtable_object, except_decl->makeInst( std::move( poly_args ) )
@@ -488,6 +497,18 @@
 			except_decl->makeInst( poly_args )
 		) );
-		declsToAddBefore.push_back( Virtual::makeVtableForward(
-			vtable_decl->makeInst( move( poly_args ) ) ) );
+		ObjectDecl * vtable_object = Virtual::makeVtableForward(
+			"_default_vtable_object_declaration",
+			vtable_decl->makeInst( move( poly_args ) ) );
+		declsToAddBefore.push_back( vtable_object );
+		declsToAddAfter.push_back(
+			new ObjectDecl(
+				Virtual::concurrentDefaultVTableName(),
+				Type::Const,
+				LinkageSpec::Cforall,
+				/* bitfieldWidth */ nullptr,
+				new ReferenceType( Type::Const, vtable_object->type->clone() ),
+				/* init */ nullptr
+			)
+		);
 	}
 
Index: src/Virtual/Tables.cc
===================================================================
--- src/Virtual/Tables.cc	(revision 4744074cedf4399dd21f7ed0921b4f07f5f7064d)
+++ src/Virtual/Tables.cc	(revision b5831132d4fbaaf40970357ae0e068daa9ad3e5e)
@@ -10,6 +10,6 @@
 // Created On       : Mon Aug 31 11:11:00 2020
 // Last Modified By : Andrew Beach
-// Last Modified On : Thr Apr  8 15:51:00 2021
-// Update Count     : 1
+// Last Modified On : Wed Apr 21 15:36:00 2021
+// Update Count     : 2
 //
 
@@ -50,4 +50,8 @@
 }
 
+std::string concurrentDefaultVTableName() {
+	return "_default_vtable";
+}
+
 bool isVTableInstanceName( std::string const & name ) {
 	// There are some delicate length calculations here.
@@ -57,6 +61,6 @@
 
 static ObjectDecl * makeVtableDeclaration(
+		std::string const & name,
 		StructInstType * type, Initializer * init ) {
-	std::string const & name = instanceName( type->name );
 	Type::StorageClasses storage = noStorageClasses;
 	if ( nullptr == init ) {
@@ -73,11 +77,12 @@
 }
 
-ObjectDecl * makeVtableForward( StructInstType * type ) {
+ObjectDecl * makeVtableForward( std::string const & name, StructInstType * type ) {
 	assert( type );
-	return makeVtableDeclaration( type, nullptr );
+	return makeVtableDeclaration( name, type, nullptr );
 }
 
 ObjectDecl * makeVtableInstance(
-		StructInstType * vtableType, Type * objectType, Initializer * init ) {
+		std::string const & name, StructInstType * vtableType,
+		Type * objectType, Initializer * init ) {
 	assert( vtableType );
 	assert( objectType );
@@ -115,5 +120,5 @@
 		assert(false);
 	}
-	return makeVtableDeclaration( vtableType, init );
+	return makeVtableDeclaration( name, vtableType, init );
 }
 
@@ -167,8 +172,4 @@
 }
 
-ObjectDecl * makeTypeIdForward() {
-	return nullptr;
-}
-
 Attribute * linkonce( const std::string & subsection ) {
 	const std::string section = ".gnu.linkonce." + subsection;
Index: src/Virtual/Tables.h
===================================================================
--- src/Virtual/Tables.h	(revision 4744074cedf4399dd21f7ed0921b4f07f5f7064d)
+++ src/Virtual/Tables.h	(revision b5831132d4fbaaf40970357ae0e068daa9ad3e5e)
@@ -10,6 +10,6 @@
 // Created On       : Mon Aug 31 11:07:00 2020
 // Last Modified By : Andrew Beach
-// Last Modified On : Thr Apr  8 15:55:00 2021
-// Update Count     : 1
+// Last Modified On : Wed Apr 21 10:30:00 2021
+// Update Count     : 2
 //
 
@@ -27,12 +27,16 @@
 std::string instanceName( std::string const & vtable_name );
 std::string vtableInstanceName( std::string const & type_name );
+std::string concurrentDefaultVTableName();
 bool isVTableInstanceName( std::string const & name );
 
-ObjectDecl * makeVtableForward( StructInstType * vtableType );
+ObjectDecl * makeVtableForward(
+	std::string const & name, StructInstType * vtableType );
 /* Create a forward declaration of a vtable of the given type.
  * vtableType node is consumed.
  */
 
-ObjectDecl * makeVtableInstance( StructInstType * vtableType, Type * objectType,
+ObjectDecl * makeVtableInstance(
+	std::string const & name,
+	StructInstType * vtableType, Type * objectType,
 	Initializer * init = nullptr );
 /* Create an initialized definition of a vtable.
