Index: src/ControlStruct/ExceptDecl.cc
===================================================================
--- src/ControlStruct/ExceptDecl.cc	(revision 42a02ce585b26d09b985423e9ebdd770ef5a7f07)
+++ src/ControlStruct/ExceptDecl.cc	(revision 5438e41a103bfafb23784bfa350297aa8b943faf)
@@ -10,6 +10,6 @@
 // Created On       : Tue Jul 20 04:10:50 2021
 // Last Modified By : Henry Xue
-// Last Modified On : Mon Jul 26 12:55:28 2021
-// Update Count     : 3
+// Last Modified On : Tue Aug 03 10:42:26 2021
+// Update Count     : 4
 //
 
@@ -278,4 +278,24 @@
 	cloneAll( forallClause, structDecl->parameters );
 	return structDecl;
+}
+
+ObjectDecl * ehmTypeIdExtern(
+	const std::string & exceptionName,
+	const std::list< Expression *> & parameters
+) {
+	StructInstType * typeIdType = new StructInstType(
+		Type::Const,
+		Virtual::typeIdType( exceptionName )
+	);
+	cloneAll( parameters, typeIdType->parameters );
+	return new ObjectDecl(
+		Virtual::typeIdName( exceptionName ),
+		Type::Extern,
+		LinkageSpec::Cforall,
+		nullptr,
+		typeIdType,
+		nullptr,
+		{ new Attribute( "cfa_linkonce" ) }
+	);
 }
 
@@ -421,4 +441,7 @@
 
 		if ( objectDecl->get_storageClasses().is_extern ) { // if extern
+			if ( !parameters.empty() ) { // forall variant
+				declsToAddBefore.push_back( ehmTypeIdExtern( exceptionName, parameters ) );
+			}
 			return ehmExternVtable( exceptionName, parameters, tableName );
 		}
