Index: src/GenPoly/Box.cc
===================================================================
--- src/GenPoly/Box.cc	(revision d28524acb9d28e8dcfccd23c41645b70dbaf38c2)
+++ src/GenPoly/Box.cc	(revision 332218007391c23d4a807d5dd8fd971a15d3efb8)
@@ -1277,5 +1277,6 @@
 			FunctionType * ftype = functionDecl->type;
 			if ( ! ftype->returnVals.empty() && functionDecl->statements ) {
-				if ( ! isPrefix( functionDecl->name, "_thunk" ) && ! isPrefix( functionDecl->name, "_adapter" ) ) { // xxx - remove check for prefix once thunks properly use ctor/dtors
+				// intrinsic functions won't be using the _retval so no need to generate it.
+				if ( functionDecl->linkage != LinkageSpec::Intrinsic && !isPrefix( functionDecl->name, "_thunk" ) && ! isPrefix( functionDecl->name, "_adapter" ) ) { // xxx - remove check for prefix once thunks properly use ctor/dtors
 					assert( ftype->returnVals.size() == 1 );
 					DeclarationWithType * retval = ftype->returnVals.front();
Index: src/Validate/Autogen.cpp
===================================================================
--- src/Validate/Autogen.cpp	(revision d28524acb9d28e8dcfccd23c41645b70dbaf38c2)
+++ src/Validate/Autogen.cpp	(revision 332218007391c23d4a807d5dd8fd971a15d3efb8)
@@ -183,7 +183,9 @@
 	{
 		// TODO: These functions are somewhere between instrinsic and autogen,
-		// could possibly use a new linkage type. For now we just make them
-		// intrinsic to code-gen them as C assignments.
-		proto_linkage = ast::Linkage::Intrinsic;
+		// could possibly use a new linkage type. For now we just make the
+		// basic ones intrinsic to code-gen them as C assignments.
+		const auto & real_type = decl->base;
+		const auto & basic = real_type.as<ast::BasicType>();
+		if(!real_type || (basic && basic->isInteger())) proto_linkage = ast::Linkage::Intrinsic;
 	}
 
@@ -402,8 +404,4 @@
 	auto retval = srcParam();
 	retval->name = "_ret";
-	// xxx - Adding this unused attribute can slience unused variable warning
-	// However, some code might not be compiled as expected
-	// Temporarily disabled
-	// retval->attributes.push_back(new ast::Attribute("unused"));
 	return genProto( "?=?", { dstParam(), srcParam() }, { retval } );
 }
Index: tests/.expect/attributes.nast.arm64.txt
===================================================================
--- tests/.expect/attributes.nast.arm64.txt	(revision d28524acb9d28e8dcfccd23c41645b70dbaf38c2)
+++ tests/.expect/attributes.nast.arm64.txt	(revision 332218007391c23d4a807d5dd8fd971a15d3efb8)
@@ -1334,5 +1334,4 @@
     }
     inline enum __anonymous4 _X16_operator_assignFM12__anonymous4_M12__anonymous4M12__anonymous4_intrinsic___2(enum __anonymous4 *_X4_dstM12__anonymous4_2, enum __anonymous4 _X4_srcM12__anonymous4_2){
-        enum __anonymous4 _X4_retM12__anonymous4_2;
         {
             ((void)((*_X4_dstM12__anonymous4_2)=_X4_srcM12__anonymous4_2));
Index: tests/.expect/attributes.nast.x64.txt
===================================================================
--- tests/.expect/attributes.nast.x64.txt	(revision d28524acb9d28e8dcfccd23c41645b70dbaf38c2)
+++ tests/.expect/attributes.nast.x64.txt	(revision 332218007391c23d4a807d5dd8fd971a15d3efb8)
@@ -1334,5 +1334,4 @@
     }
     inline enum __anonymous4 _X16_operator_assignFM12__anonymous4_M12__anonymous4M12__anonymous4_intrinsic___2(enum __anonymous4 *_X4_dstM12__anonymous4_2, enum __anonymous4 _X4_srcM12__anonymous4_2){
-        enum __anonymous4 _X4_retM12__anonymous4_2;
         {
             ((void)((*_X4_dstM12__anonymous4_2)=_X4_srcM12__anonymous4_2));
Index: tests/.expect/attributes.nast.x86.txt
===================================================================
--- tests/.expect/attributes.nast.x86.txt	(revision d28524acb9d28e8dcfccd23c41645b70dbaf38c2)
+++ tests/.expect/attributes.nast.x86.txt	(revision 332218007391c23d4a807d5dd8fd971a15d3efb8)
@@ -1334,5 +1334,4 @@
     }
     inline enum __anonymous4 _X16_operator_assignFM12__anonymous4_M12__anonymous4M12__anonymous4_intrinsic___2(enum __anonymous4 *_X4_dstM12__anonymous4_2, enum __anonymous4 _X4_srcM12__anonymous4_2){
-        enum __anonymous4 _X4_retM12__anonymous4_2;
         {
             ((void)((*_X4_dstM12__anonymous4_2)=_X4_srcM12__anonymous4_2));
Index: tests/.expect/attributes.oast.x64.txt
===================================================================
--- tests/.expect/attributes.oast.x64.txt	(revision d28524acb9d28e8dcfccd23c41645b70dbaf38c2)
+++ tests/.expect/attributes.oast.x64.txt	(revision 332218007391c23d4a807d5dd8fd971a15d3efb8)
@@ -1334,5 +1334,4 @@
     }
     inline enum __anonymous4 _X16_operator_assignFM12__anonymous4_M12__anonymous4M12__anonymous4_intrinsic___2(enum __anonymous4 *_X4_dstM12__anonymous4_2, enum __anonymous4 _X4_srcM12__anonymous4_2){
-        enum __anonymous4 _X4_retM12__anonymous4_2;
         {
             ((void)((*_X4_dstM12__anonymous4_2)=_X4_srcM12__anonymous4_2));
