Index: src/Parser/DeclarationNode.cc
===================================================================
--- src/Parser/DeclarationNode.cc	(revision 794c15b7c4c1d00b2743be51d70ef36bb336b3ee)
+++ src/Parser/DeclarationNode.cc	(revision fa4805fa298698201db6b7292ed9cb1cc00af9ef)
@@ -9,7 +9,7 @@
 // Author           : Rodolfo G. Esteves
 // Created On       : Sat May 16 12:34:05 2015
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Fri Mar 17 15:46:33 2017
-// Update Count     : 1018
+// Last Modified By : Andrew Beach
+// Last Modified On : Wed Jun 28 15:27:00 2017
+// Update Count     : 1019
 //
 
@@ -1063,5 +1063,5 @@
 	  case TypeData::Enum:
 	  case TypeData::Aggregate: {
-		  ReferenceToType * ret = buildComAggInst( type, attributes );
+		  ReferenceToType * ret = buildComAggInst( type, attributes, linkage );
 		  buildList( type->aggregate.actuals, ret->get_parameters() );
 		  return ret;
Index: src/Parser/LinkageSpec.cc
===================================================================
--- src/Parser/LinkageSpec.cc	(revision 794c15b7c4c1d00b2743be51d70ef36bb336b3ee)
+++ src/Parser/LinkageSpec.cc	(revision fa4805fa298698201db6b7292ed9cb1cc00af9ef)
@@ -9,7 +9,7 @@
 // Author           : Rodolfo G. Esteves
 // Created On       : Sat May 16 13:22:09 2015
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Sun Oct  2 23:16:21 2016
-// Update Count     : 23
+// Last Modified By : Andrew Beach
+// Last Modified On : Wed Jun 28 11:51:00 2017
+// Update Count     : 24
 //
 
@@ -28,4 +28,6 @@
 	} else if ( *spec == "\"C\"" ) {
 		return C;
+	} else if ( *spec == "\"BuiltinC\"" ) {
+		return BuiltinC;
 	} else {
 		throw SemanticError( "Invalid linkage specifier " + *spec );
@@ -36,14 +38,16 @@
 	assert( 0 <= linkage && linkage < LinkageSpec::NoOfSpecs );
 	static const char *linkageKinds[LinkageSpec::NoOfSpecs] = {
-		"intrinsic", "Cforall", "C", "automatically generated", "compiler built-in",
+		"intrinsic", "Cforall", "C", "automatically generated", "compiler built-in", "cfa built-in", "c built-in",
 	};
 	return linkageKinds[linkage];
 }
 
-bool LinkageSpec::isDecoratable( Spec spec ) {
+bool LinkageSpec::isMangled( Spec spec ) {
 	assert( 0 <= spec && spec < LinkageSpec::NoOfSpecs );
 	static bool decoratable[LinkageSpec::NoOfSpecs] = {
-		//	Intrinsic,	Cforall,	C,		AutoGen,	Compiler
+		//	Intrinsic,	Cforall,	C,		AutoGen,	Compiler,
 			true,		true,		false,	true,		false,
+		//	Builtin,	BuiltinC,
+			true,		false,
 	};
 	return decoratable[spec];
@@ -53,6 +57,8 @@
 	assert( 0 <= spec && spec < LinkageSpec::NoOfSpecs );
 	static bool generatable[LinkageSpec::NoOfSpecs] = {
-		//	Intrinsic,	Cforall,	C,		AutoGen,	Compiler
+		//	Intrinsic,	Cforall,	C,		AutoGen,	Compiler,
 			true,		true,		true,	true,		false,
+		//	Builtin,	BuiltinC,
+			true,		true,
 	};
 	return generatable[spec];
@@ -62,6 +68,8 @@
 	assert( spec >= 0 && spec < LinkageSpec::NoOfSpecs );
 	static bool overridable[LinkageSpec::NoOfSpecs] = {
-		//	Intrinsic,	Cforall,	C,		AutoGen,	Compiler
+		//	Intrinsic,	Cforall,	C,		AutoGen,	Compiler,
 			true,		false,		false,	true,		false,
+		//	Builtin,	BuiltinC,
+			false,		false,
 	};
 	return overridable[spec];
@@ -71,6 +79,8 @@
 	assert( spec >= 0 && spec < LinkageSpec::NoOfSpecs );
 	static bool builtin[LinkageSpec::NoOfSpecs] = {
-		//	Intrinsic,	Cforall,	C,		AutoGen,	Compiler
+		//	Intrinsic,	Cforall,	C,		AutoGen,	Compiler,
 			true,		false,		false,	false,		true,
+		//	Builtin,	BuiltinC,
+			true,		true,
 	};
 	return builtin[spec];
Index: src/Parser/LinkageSpec.h
===================================================================
--- src/Parser/LinkageSpec.h	(revision 794c15b7c4c1d00b2743be51d70ef36bb336b3ee)
+++ src/Parser/LinkageSpec.h	(revision fa4805fa298698201db6b7292ed9cb1cc00af9ef)
@@ -9,7 +9,7 @@
 // Author           : Rodolfo G. Esteves
 // Created On       : Sat May 16 13:24:28 2015
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Sat Oct  1 23:03:17 2016
-// Update Count     : 11
+// Last Modified By : Andrew Beach
+// Last Modified On : Wed Jun 28 11:50:00 2017
+// Update Count     : 12
 //
 
@@ -26,4 +26,6 @@
 		AutoGen,										// built by translator (struct assignment)
 		Compiler,										// gcc internal
+		Builtin,										// mangled builtins
+		BuiltinC,										// non-mangled builtins
 		NoOfSpecs
 	};
@@ -32,5 +34,5 @@
 	static std::string linkageName( Spec );
   
-	static bool isDecoratable( Spec );
+	static bool isMangled( Spec );
 	static bool isGeneratable( Spec );
 	static bool isOverridable( Spec );
Index: src/Parser/TypeData.cc
===================================================================
--- src/Parser/TypeData.cc	(revision 794c15b7c4c1d00b2743be51d70ef36bb336b3ee)
+++ src/Parser/TypeData.cc	(revision fa4805fa298698201db6b7292ed9cb1cc00af9ef)
@@ -9,7 +9,7 @@
 // Author           : Rodolfo G. Esteves
 // Created On       : Sat May 16 15:12:51 2015
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Fri Mar 17 15:52:43 2017
-// Update Count     : 563
+// Last Modified By : Andrew Beach
+// Last Modified On : Wed Jun 28 15:28:00 2017
+// Update Count     : 564
 //
 
@@ -614,5 +614,5 @@
 } // buildPointer
 
-AggregateDecl * buildAggregate( const TypeData * td, std::list< Attribute * > attributes ) {
+AggregateDecl * buildAggregate( const TypeData * td, std::list< Attribute * > attributes, LinkageSpec::Spec linkage ) {
 	assert( td->kind == TypeData::Aggregate );
 	AggregateDecl * at;
@@ -622,5 +622,5 @@
 	  case DeclarationNode::Monitor:
 	  case DeclarationNode::Thread:
-		at = new StructDecl( *td->aggregate.name, td->aggregate.kind, attributes );
+		at = new StructDecl( *td->aggregate.name, td->aggregate.kind, attributes, linkage );
 		buildForall( td->aggregate.params, at->get_parameters() );
 		break;
@@ -643,5 +643,5 @@
 } // buildAggregate
 
-ReferenceToType * buildComAggInst( const TypeData * type, std::list< Attribute * > attributes ) {
+ReferenceToType * buildComAggInst( const TypeData * type, std::list< Attribute * > attributes, LinkageSpec::Spec linkage ) {
 	switch ( type->kind ) {
 	  case TypeData::Enum: {
@@ -656,5 +656,5 @@
 		  ReferenceToType * ret;
 		  if ( type->aggregate.body ) {
-			  AggregateDecl * typedecl = buildAggregate( type, attributes );
+			  AggregateDecl * typedecl = buildAggregate( type, attributes, linkage );
 			  switch ( type->aggregate.kind ) {
 				case DeclarationNode::Struct:
@@ -802,5 +802,5 @@
 		return decl->set_asmName( asmName );
 	} else if ( td->kind == TypeData::Aggregate ) {
-		return buildAggregate( td, attributes );
+		return buildAggregate( td, attributes, linkage );
 	} else if ( td->kind == TypeData::Enum ) {
 		return buildEnum( td, attributes );
Index: src/Parser/TypeData.h
===================================================================
--- src/Parser/TypeData.h	(revision 794c15b7c4c1d00b2743be51d70ef36bb336b3ee)
+++ src/Parser/TypeData.h	(revision fa4805fa298698201db6b7292ed9cb1cc00af9ef)
@@ -9,7 +9,7 @@
 // Author           : Rodolfo G. Esteves
 // Created On       : Sat May 16 15:18:36 2015
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Mar 16 08:32:39 2017
-// Update Count     : 185
+// Last Modified By : Andrew Beach
+// Last Modified On : Wed Jun 28 15:29:00 2017
+// Update Count     : 186
 //
 
@@ -102,5 +102,5 @@
 ArrayType * buildArray( const TypeData * );
 AggregateDecl * buildAggregate( const TypeData *, std::list< Attribute * > );
-ReferenceToType * buildComAggInst( const TypeData *, std::list< Attribute * > attributes );
+ReferenceToType * buildComAggInst( const TypeData *, std::list< Attribute * > attributes, LinkageSpec::Spec linkage );
 ReferenceToType * buildAggInst( const TypeData * );
 TypeDecl * buildVariable( const TypeData * );
