Index: src/SymTab/Validate.cc
===================================================================
--- src/SymTab/Validate.cc	(revision 8abca0660e7023ad48db341fe98ce11969bb2e8a)
+++ src/SymTab/Validate.cc	(revision eeaa3e2b4b50ff73386830c663367b7ad89482e1)
@@ -311,4 +311,5 @@
 			Stats::Heap::newPass("validate-A");
 			Stats::Time::BlockGuard guard("validate-A");
+			VerifyCtorDtorAssign::verify( translationUnit );  // must happen before autogen, because autogen examines existing ctor/dtors
 			acceptAll( translationUnit, hoistDecls );
 			ReplaceTypedef::replaceTypedef( translationUnit );
@@ -336,5 +337,4 @@
 			Stats::Time::BlockGuard guard("validate-C");
 			acceptAll( translationUnit, genericParams );  // check as early as possible - can't happen before LinkReferenceToTypes_old
-			VerifyCtorDtorAssign::verify( translationUnit );  // must happen before autogen, because autogen examines existing ctor/dtors
 			ReturnChecker::checkFunctionReturns( translationUnit );
 			InitTweak::fixReturnStatements( translationUnit ); // must happen before autogen
@@ -1182,12 +1182,14 @@
 		if ( CodeGen::isCtorDtorAssign( funcDecl->get_name() ) ) { // TODO: also check /=, etc.
 			if ( params.size() == 0 ) {
-				SemanticError( funcDecl, "Constructors, destructors, and assignment functions require at least one parameter " );
+				SemanticError( funcDecl->location, "Constructors, destructors, and assignment functions require at least one parameter." );
 			}
 			ReferenceType * refType = dynamic_cast< ReferenceType * >( params.front()->get_type() );
 			if ( ! refType ) {
-				SemanticError( funcDecl, "First parameter of a constructor, destructor, or assignment function must be a reference " );
+				SemanticError( funcDecl->location, "First parameter of a constructor, destructor, or assignment function must be a reference." );
 			}
 			if ( CodeGen::isCtorDtor( funcDecl->get_name() ) && returnVals.size() != 0 ) {
-				SemanticError( funcDecl, "Constructors and destructors cannot have explicit return values " );
+				if(!returnVals.front()->get_type()->isVoid()) {
+					SemanticError( funcDecl->location, "Constructors and destructors cannot have explicit return values." );
+				}
 			}
 		}
