Index: src/InitTweak/InitTweak.cc
===================================================================
--- src/InitTweak/InitTweak.cc	(revision 627f58564ea1659614d187a7110f17db71c41c42)
+++ src/InitTweak/InitTweak.cc	(revision f3b0a07aaf0466e2dd02c4a242002b90d321b115)
@@ -327,4 +327,6 @@
 			} else if ( ApplicationExpr * appExpr = dynamic_cast< ApplicationExpr * > ( expr ) ) {
 				return handleDerefCalledFunction( appExpr );
+			} else if ( AddressExpr * addrExpr = dynamic_cast< AddressExpr * >( expr ) ) {
+				return getCalledFunction( addrExpr->get_arg() );
 			}
 			return nullptr;
@@ -336,5 +338,5 @@
 		if ( ! appExpr ) return NULL;
 		DeclarationWithType * function = getCalledFunction( appExpr->get_function() );
-		assert( function );
+		assertf( function, "getCalledFunction returned nullptr: %s", toString( appExpr->get_function() ).c_str() );
 		// 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.
@@ -386,6 +388,13 @@
 		} else if ( UntypedExpr * untypedExpr = dynamic_cast< UntypedExpr * >( callExpr ) ) {
 			return callArg( untypedExpr, pos );
+		} else if ( TupleAssignExpr * tupleExpr = dynamic_cast< TupleAssignExpr * > ( callExpr ) ) {
+			std::list< Statement * > & stmts = tupleExpr->get_stmtExpr()->get_statements()->get_kids();
+			assertf( ! stmts.empty(), "TupleAssignExpr somehow has no statements." );
+			ExprStmt * stmt = safe_dynamic_cast< ExprStmt * >( stmts.back() );
+			TupleExpr * tuple = safe_dynamic_cast< TupleExpr * >( stmt->get_expr() );
+			assertf( ! tuple->get_exprs().empty(), "TupleAssignExpr somehow has empty tuple expr." );
+			return getCallArg( tuple->get_exprs().front(), pos );
 		} else {
-			assertf( false, "Unexpected expression type passed to getCallArg" );
+			assertf( false, "Unexpected expression type passed to getCallArg: %s", toString( callExpr ).c_str() );
 		}
 	}
