Index: src/SymTab/Validate.cc
===================================================================
--- src/SymTab/Validate.cc	(revision d0f8b1986e86ea6328fec1b91571f6b6f0757877)
+++ src/SymTab/Validate.cc	(revision 52e2e3f68c44c96cbeb1faec1ab3dd555dbad896)
@@ -483,8 +483,10 @@
 
 	void ReturnChecker::visit( ReturnStmt * returnStmt ) {
+		// Previously this also checked for the existence of an expr paired with no return values on
+		// the  function return type. This is incorrect, since you can have an expression attached to
+		// a return statement in a void-returning function in C. The expression is treated as if it
+		// were cast to void.
 		if ( returnStmt->get_expr() == NULL && returnVals.size() != 0 ) {
 			throw SemanticError( "Non-void function returns no values: " , returnStmt );
-		} else if ( returnStmt->get_expr() != NULL && returnVals.size() == 0 ) {
-			throw SemanticError( "void function returns values: " , returnStmt );
 		}
 	}
