Index: src/AST/LinkageSpec.cpp
===================================================================
--- src/AST/LinkageSpec.cpp	(revision 4c2fe47e178e4074ffe9d1387cbe05d69e4c0db3)
+++ src/AST/LinkageSpec.cpp	(revision c7ebbec0b2465582b53d918f1a2b2c24f69f7ef1)
@@ -27,16 +27,15 @@
 namespace Linkage {
 
-Spec update( CodeLocation loc, Spec spec, const std::string * cmd ) {
+Spec update( const CodeLocation & loc, Spec spec, const std::string * cmd ) {
 	assert( cmd );
 	std::unique_ptr<const std::string> guard( cmd ); // allocated by lexer
 	if ( *cmd == "\"Cforall\"" ) {
-		spec.is_mangled = true;
-		return spec;
+		spec.is_mangled = spec.is_overloadable = true;
 	} else if ( *cmd == "\"C\"" ) {
-		spec.is_mangled = false;
-		return spec;
+		spec.is_mangled = spec.is_overloadable = false;
 	} else {
 		SemanticError( loc, "Invalid linkage specifier %s", cmd->c_str() );
 	}
+	return spec;
 }
 
Index: src/AST/LinkageSpec.hpp
===================================================================
--- src/AST/LinkageSpec.hpp	(revision 4c2fe47e178e4074ffe9d1387cbe05d69e4c0db3)
+++ src/AST/LinkageSpec.hpp	(revision c7ebbec0b2465582b53d918f1a2b2c24f69f7ef1)
@@ -31,5 +31,5 @@
 	Overrideable = 1 << 2,
 	Builtin      = 1 << 3,
-	GccBuiltin   = 1 << 4
+	Overloadable = 1 << 4,
 };
 
@@ -43,5 +43,5 @@
 			bool is_overrideable : 1;
 			bool is_builtin      : 1;
-			bool is_gcc_builtin  : 1;
+			bool is_overloadable : 1;
 		};
 	};
@@ -52,7 +52,6 @@
 using Spec = bitfield<spec_flags>;
 
-/// If `cmd` = "C" returns `spec` with `is_mangled = false`.
-/// If `cmd` = "Cforall" returns `spec` with `is_mangled = true`.
-Spec update( CodeLocation loc, Spec spec, const std::string * cmd );
+/// Updates `spec` based on `cmd` (should be "C" or "Cforall").
+Spec update( const CodeLocation & loc, Spec spec, const std::string * cmd );
 
 /// A human-readable name for this spec
@@ -62,15 +61,15 @@
 
 /// C built-in defined in prelude
-constexpr Spec Intrinsic  = { Mangle | Generate | Overrideable | Builtin };
+constexpr Spec Intrinsic  = { Mangle | Generate | Overrideable | Builtin | Overloadable };
 /// Ordinary Cforall
-constexpr Spec Cforall    = { Mangle | Generate };
+constexpr Spec Cforall    = { Mangle | Generate | Overloadable };
 /// C code: not overloadable, not mangled
 constexpr Spec C          = { Generate };
 /// Built by translator (e.g. struct assignment)
-constexpr Spec AutoGen    = { Mangle | Generate | Overrideable };
+constexpr Spec AutoGen    = { Mangle | Generate | Overrideable | Overloadable };
 /// GCC internal
-constexpr Spec Compiler   = { Mangle | Builtin | GccBuiltin };
+constexpr Spec Compiler   = { Builtin | Overloadable };
 /// Mangled builtins
-constexpr Spec BuiltinCFA = { Mangle | Generate | Builtin };
+constexpr Spec BuiltinCFA = { Mangle | Generate | Builtin | Overloadable };
 /// Non-mangled builtins
 constexpr Spec BuiltinC   = { Generate | Builtin };
Index: src/AST/SymbolTable.cpp
===================================================================
--- src/AST/SymbolTable.cpp	(revision 4c2fe47e178e4074ffe9d1387cbe05d69e4c0db3)
+++ src/AST/SymbolTable.cpp	(revision c7ebbec0b2465582b53d918f1a2b2c24f69f7ef1)
@@ -644,5 +644,5 @@
 		// new definition shadows the autogenerated one, even at the same scope
 		return false;
-	} else if ( existing.id->linkage.is_mangled
+	} else if ( existing.id->linkage.is_overloadable
 			|| ResolvExpr::typesCompatible(
 				added->get_type(), existing.id->get_type() ) ) {
@@ -719,5 +719,5 @@
 	// this ensures that no two declarations with the same unmangled name at the same scope
 	// both have C linkage
-	if ( decl->linkage.is_mangled ) {
+	if ( decl->linkage.is_overloadable ) {
 		// Check that a Cforall declaration doesn't override any C declaration
 		if ( hasCompatibleCDecl( name, mangleName ) ) {
@@ -812,5 +812,5 @@
 		if ( decl.second.scope != scope ) continue;
 		// check for C decl with compatible type (by mangleName)
-		if ( ! decl.second.id->linkage.is_mangled && decl.first == mangleName ) return true;
+		if ( !decl.second.id->linkage.is_overloadable && decl.first == mangleName ) return true;
 	}
 
@@ -829,5 +829,5 @@
 		if ( decl.second.scope != scope ) continue;
 		// check for C decl with incompatible type (by manglename)
-		if ( ! decl.second.id->linkage.is_mangled && decl.first != mangleName ) return true;
+		if ( !decl.second.id->linkage.is_overloadable && decl.first != mangleName ) return true;
 	}
 
