Index: src/InitTweak/InitTweak.cc
===================================================================
--- src/InitTweak/InitTweak.cc	(revision d1aa5c09c6dcf1c81d738dc512d621a9a818b58d)
+++ src/InitTweak/InitTweak.cc	(revision f4bc57cc55219e678530219d7e9ac15c64b3fe5a)
@@ -115,11 +115,11 @@
 
 	namespace {
-		template<typename CallExpr>
-		std::string funcName( CallExpr * expr ) {
-			Expression * func = expr->get_function();
+		std::string funcName( Expression * func ) {
 			if ( NameExpr * nameExpr = dynamic_cast< NameExpr * >( func ) ) {
 				return nameExpr->get_name();
 			} else if ( VariableExpr * varExpr = dynamic_cast< VariableExpr * >( func ) ) {
 				return varExpr->get_var()->get_name();
+			}	else if ( CastExpr * castExpr = dynamic_cast< CastExpr * >( func ) ) {
+				return funcName( castExpr->get_arg() );
 			} else {
 				assert( false && "Unexpected expression type being called as a function in call expression" );
@@ -130,8 +130,9 @@
 	std::string getFunctionName( Expression * expr ) {
 		if ( ApplicationExpr * appExpr = dynamic_cast< ApplicationExpr * >( expr ) ) {
-			return funcName( appExpr );
+			return funcName( appExpr->get_function() );
 		} else if ( UntypedExpr * untypedExpr = dynamic_cast< UntypedExpr * > ( expr ) ) {
-			return funcName( untypedExpr );
+			return funcName( untypedExpr->get_function() );
 		} else {
+			std::cerr << expr << std::endl;
 			assert( false && "Unexpected expression type passed to getFunctionName" );
 		}
Index: src/SymTab/Autogen.cc
===================================================================
--- src/SymTab/Autogen.cc	(revision d1aa5c09c6dcf1c81d738dc512d621a9a818b58d)
+++ src/SymTab/Autogen.cc	(revision f4bc57cc55219e678530219d7e9ac15c64b3fe5a)
@@ -482,4 +482,6 @@
 		ObjectDecl *dst = new ObjectDecl( "_dst", DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, new PointerType( Type::Qualifiers(), typeInst->clone() ), 0 );
 		if ( typeDecl->get_base() ) {
+			// xxx - generate ctor/dtors for typedecls, e.g.
+			// otype T = int *;
 			stmts = new CompoundStmt( std::list< Label >() );
 			UntypedExpr *assign = new UntypedExpr( new NameExpr( "?=?" ) );
