Index: src/CodeGen/CodeGenerator.cc
===================================================================
--- src/CodeGen/CodeGenerator.cc	(revision 5339a87ca7689b734a2eb1d355830ea9713784a1)
+++ src/CodeGen/CodeGenerator.cc	(revision c8e37e0743847d35712c58ff12491fdd4544849a)
@@ -120,5 +120,5 @@
 		// GCC builtins should always be printed unmangled
 		if ( options.pretty || decl->linkage.is_gcc_builtin ) return decl->name;
-		if ( decl->mangleName != "" ) {
+		if ( LinkageSpec::isMangled(decl->linkage) && decl->mangleName != "" ) {
 			// need to incorporate scope level in order to differentiate names for destructors
 			return decl->get_scopedMangleName();
Index: src/CodeGen/FixMain.cc
===================================================================
--- src/CodeGen/FixMain.cc	(revision 5339a87ca7689b734a2eb1d355830ea9713784a1)
+++ src/CodeGen/FixMain.cc	(revision c8e37e0743847d35712c58ff12491fdd4544849a)
@@ -26,4 +26,5 @@
 #include "SynTree/Declaration.h"   // for FunctionDecl, operator<<
 #include "SynTree/Type.h"          // for FunctionType
+#include "SymTab/Mangler.h"
 
 namespace CodeGen {
@@ -47,4 +48,5 @@
 		if( main_signature ) {
 			os << "static inline int invoke_main(int argc, char* argv[], char* envp[]) { (void)argc; (void)argv; (void)envp; return ";
+			main_signature->mangleName = SymTab::Mangler::mangle(main_signature.get());
 
 			os << main_signature->get_scopedMangleName() << "(";
Index: src/CodeGen/FixNames.cc
===================================================================
--- src/CodeGen/FixNames.cc	(revision 5339a87ca7689b734a2eb1d355830ea9713784a1)
+++ src/CodeGen/FixNames.cc	(revision c8e37e0743847d35712c58ff12491fdd4544849a)
@@ -31,4 +31,5 @@
 #include "SynTree/Type.h"          // for Type, BasicType, Type::Qualifiers
 #include "SynTree/Visitor.h"       // for Visitor, acceptAll
+#include "CompilationState.h"
 
 namespace CodeGen {
@@ -102,5 +103,7 @@
 		if ( dwt->get_name() != "" ) {
 			if ( LinkageSpec::isMangled( dwt->get_linkage() ) ) {
-				dwt->set_mangleName( SymTab::Mangler::mangle( dwt ) );
+				if (!useNewAST) {
+					dwt->set_mangleName( SymTab::Mangler::mangle( dwt ) );
+				}
 				dwt->set_scopeLevel( scopeLevel );
 			} // if
