Index: src/GenPoly/Specialize.cc
===================================================================
--- src/GenPoly/Specialize.cc	(revision 72e9222a9026d1f801ca6ee36c7a5b77604f5304)
+++ src/GenPoly/Specialize.cc	(revision aedfd91633ca1585181a0ce220879ca2041ede7c)
@@ -31,4 +31,5 @@
 #include "Common/UniqueName.h"
 #include "Common/utility.h"
+#include "InitTweak/InitTweak.h"
 
 namespace GenPoly {
@@ -184,10 +185,13 @@
 		mutateAll( appExpr->get_args(), *this );
 
-		// create thunks for the inferred parameters
-		for ( InferredParams::iterator inferParam = appExpr->get_inferParams().begin(); inferParam != appExpr->get_inferParams().end(); ++inferParam ) {
-			inferParam->second.expr = doSpecialization( inferParam->second.formalType, inferParam->second.expr, &appExpr->get_inferParams() );
-		}
-
-		handleExplicitParams( appExpr );
+		if ( ! InitTweak::isIntrinsicCallExpr( appExpr ) ) {
+			// create thunks for the inferred parameters
+			// don't need to do this for intrinsic calls, because they aren't actually passed
+			for ( InferredParams::iterator inferParam = appExpr->get_inferParams().begin(); inferParam != appExpr->get_inferParams().end(); ++inferParam ) {
+				inferParam->second.expr = doSpecialization( inferParam->second.formalType, inferParam->second.expr, &appExpr->get_inferParams() );
+			}
+
+			handleExplicitParams( appExpr );
+		}
 
 		return appExpr;
Index: src/InitTweak/InitTweak.cc
===================================================================
--- src/InitTweak/InitTweak.cc	(revision 72e9222a9026d1f801ca6ee36c7a5b77604f5304)
+++ src/InitTweak/InitTweak.cc	(revision aedfd91633ca1585181a0ce220879ca2041ede7c)
@@ -85,17 +85,31 @@
 		}
 	}
+	namespace {
+		VariableExpr * getCalledFunction( ApplicationExpr * appExpr ) {
+			assert( appExpr );
+			return dynamic_cast< VariableExpr * >( appExpr->get_function() );
+		}
+	}
+
+	ApplicationExpr * isIntrinsicCallExpr( Expression * expr ) {
+		ApplicationExpr * appExpr = dynamic_cast< ApplicationExpr * >( expr );
+		if ( ! appExpr ) return NULL;
+		VariableExpr * function = getCalledFunction( appExpr );
+		assert( function );
+		// check for Intrinsic only - don't want to remove all overridable ctor/dtors because autogenerated ctor/dtor
+		// will call all member dtors, and some members may have a user defined dtor.
+		return function->get_var()->get_linkage() == LinkageSpec::Intrinsic ? appExpr : NULL;
+	}
 
 	bool isInstrinsicSingleArgCallStmt( Statement * stmt ) {
 		Expression * callExpr = getCtorDtorCall( stmt );
 		if ( ! callExpr ) return false;
-		ApplicationExpr * appExpr = dynamic_cast< ApplicationExpr * >( callExpr );
-		assert( appExpr );
-		VariableExpr * function = dynamic_cast< VariableExpr * >( appExpr->get_function() );
-		assert( function );
-		// check for Intrinsic only - don't want to remove all overridable ctor/dtors because autogenerated ctor/dtor
-		// will call all member dtors, and some members may have a user defined dtor.
-		FunctionType * funcType = GenPoly::getFunctionType( function->get_var()->get_type() );
-		assert( funcType );
-		return function->get_var()->get_linkage() == LinkageSpec::Intrinsic && funcType->get_parameters().size() == 1;
+		if ( ApplicationExpr * appExpr = isIntrinsicCallExpr( callExpr ) ) {
+			assert( ! appExpr->get_function()->get_results().empty() );
+			FunctionType *funcType = GenPoly::getFunctionType( appExpr->get_function()->get_results().front() );
+			assert( funcType );
+			return funcType->get_parameters().size() == 1;
+		}
+		return false;
 	}
 
Index: src/InitTweak/InitTweak.h
===================================================================
--- src/InitTweak/InitTweak.h	(revision 72e9222a9026d1f801ca6ee36c7a5b77604f5304)
+++ src/InitTweak/InitTweak.h	(revision aedfd91633ca1585181a0ce220879ca2041ede7c)
@@ -35,4 +35,7 @@
 	bool isDesignated( Initializer * init );
 
+  /// Non-Null if expr is a call expression whose target function is intrinsic
+  ApplicationExpr * isIntrinsicCallExpr( Expression * expr );
+
 	/// True if stmt is a call statement where the function called is intrinsic and takes one parameter.
 	/// Intended to be used for default ctor/dtor calls, but might have use elsewhere.
