Index: src/Validate/LinkReferenceToTypes.cpp
===================================================================
--- src/Validate/LinkReferenceToTypes.cpp	(revision b7c53a9de3b2c69e7ae86f96b2157dd3de16e3b9)
+++ src/Validate/LinkReferenceToTypes.cpp	(revision 66ac41611c6fecfda74f03f3afbceabd6af0a53f)
@@ -71,7 +71,7 @@
 	/// The "leaveNamespace" is handled by guard.
 	void enterNamespace();
-	/// Puts the decl on the back of declsToAddBefore once traversal is
+	/// Puts the decl on the back of declsToAddAfter once traversal is
 	/// outside of any namespaces.
-	void addDeclBeforeOutside( ast::Decl const * );
+	void addDeclAfterOutside( ast::Decl const * );
 };
 
@@ -81,13 +81,13 @@
 	GuardAction( [this](){
 		inNamespace = false;
-		declsToAddBefore.splice( declsToAddBefore.begin(), declsToAddOutside );
+		declsToAddAfter.splice( declsToAddAfter.begin(), declsToAddOutside );
 	} );
 }
 
-void LinkTypesCore::addDeclBeforeOutside( ast::Decl const * decl ) {
+void LinkTypesCore::addDeclAfterOutside( ast::Decl const * decl ) {
 	if ( inNamespace ) {
 		declsToAddOutside.emplace_back( decl );
 	} else {
-		declsToAddBefore.emplace_back( decl );
+		declsToAddAfter.emplace_back( decl );
 	}
 }
@@ -113,7 +113,9 @@
 	if ( !decl || decl->location.isUnset() ) {
 		assert( location );
-		decl = new ast::EnumDecl( *location, type->name );
+		ast::EnumDecl * mut = new ast::EnumDecl( *location, type->name );
+		mut->linkage = ast::Linkage::Compiler;
+		decl = mut;
 		symtab.addEnum( decl );
-		addDeclBeforeOutside( decl );
+		addDeclAfterOutside( decl );
 	}
 
@@ -135,7 +137,9 @@
 	if ( !decl || decl->location.isUnset() ) {
 		assert( location );
-		decl = new ast::StructDecl( *location, type->name );
+		ast::StructDecl * mut = new ast::StructDecl( *location, type->name );
+		mut->linkage = ast::Linkage::Compiler;
+		decl = mut;
 		symtab.addStruct( decl );
-		addDeclBeforeOutside( decl );
+		addDeclAfterOutside( decl );
 	}
 
@@ -157,7 +161,9 @@
 	if ( !decl || decl->location.isUnset() ) {
 		assert( location );
-		decl = new ast::UnionDecl( *location, type->name );
+		ast::UnionDecl * mut = new ast::UnionDecl( *location, type->name );
+		mut->linkage = ast::Linkage::Compiler;
+		decl = mut;
 		symtab.addUnion( decl );
-		addDeclBeforeOutside( decl );
+		addDeclAfterOutside( decl );
 	}
 
