Index: src/SymTab/Autogen.cc
===================================================================
--- src/SymTab/Autogen.cc	(revision ed8a0d2378d457af8e5826c9d961a9d400fcc6c1)
+++ src/SymTab/Autogen.cc	(revision ce8c12fdff03df2cb8b704ff8bcc77c923e2b6e1)
@@ -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 ed8a0d2378d457af8e5826c9d961a9d400fcc6c1)
+++ src/SymTab/Indexer.cc	(revision ce8c12fdff03df2cb8b704ff8bcc77c923e2b6e1)
@@ -156,5 +156,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 ed8a0d2378d457af8e5826c9d961a9d400fcc6c1)
+++ src/SymTab/Validate.cc	(revision ce8c12fdff03df2cb8b704ff8bcc77c923e2b6e1)
@@ -818,5 +818,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 );
 			}
