Index: src/SymTab/Validate.cc
===================================================================
--- src/SymTab/Validate.cc	(revision 095b99a642c9068d6d432af63ad1a7e1b7fb9ec2)
+++ src/SymTab/Validate.cc	(revision 9853828849ae6cfc8816c786dd035e3969334bcb)
@@ -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." );
+				}
 			}
 		}
