Index: src/SymTab/Autogen.cc
===================================================================
--- src/SymTab/Autogen.cc	(revision 307a732f5fa4b97b19f405fc215fcd76f473e3a1)
+++ src/SymTab/Autogen.cc	(revision 208e5be0ae49214c1fec10d2af38286ebc837ee8)
@@ -176,5 +176,6 @@
 			FunctionType * ftype = funcDecl->get_functionType();
 			assert( ! ftype->get_parameters().empty() );
-			Type * t = safe_dynamic_cast< PointerType * >( ftype->get_parameters().front()->get_type() )->get_base();
+			Type * t = InitTweak::getPointerBase( ftype->get_parameters().front()->get_type() );
+			assert( t );
 			map.insert( Mangler::mangleType( t ), true );
 		}
Index: src/SymTab/Indexer.cc
===================================================================
--- src/SymTab/Indexer.cc	(revision 307a732f5fa4b97b19f405fc215fcd76f473e3a1)
+++ src/SymTab/Indexer.cc	(revision 208e5be0ae49214c1fec10d2af38286ebc837ee8)
@@ -158,5 +158,6 @@
 				assert( ! params.empty() );
 				// use base type of pointer, so that qualifiers on the pointer type aren't considered.
-				Type * base = safe_dynamic_cast< PointerType * >( params.front()->get_type() )->get_base();
+				Type * base = InitTweak::getPointerBase( params.front()->get_type() );
+				assert( base );
 				funcMap[ Mangler::mangle( base ) ] += function;
 			} else {
Index: src/SymTab/Validate.cc
===================================================================
--- src/SymTab/Validate.cc	(revision 307a732f5fa4b97b19f405fc215fcd76f473e3a1)
+++ src/SymTab/Validate.cc	(revision 208e5be0ae49214c1fec10d2af38286ebc837ee8)
@@ -824,5 +824,6 @@
 			}
 			PointerType * ptrType = dynamic_cast< PointerType * >( params.front()->get_type() );
-			if ( ! ptrType || ptrType->is_array() ) {
+			ReferenceType * refType = dynamic_cast< ReferenceType * >( params.front()->get_type() );
+			if ( ( ! ptrType && ! refType ) || ( ptrType && ptrType->is_array() ) ) {
 				throw SemanticError( "First parameter of a constructor, destructor, or assignment function must be a pointer ", funcDecl );
 			}
